forked from nique_372/TelegramByLeo
872 lines
29 KiB
MQL5
872 lines
29 KiB
MQL5
//+------------------------------------------------------------------+
| |
//| Common.mqh |
| |
//| Copyright 2014, MetaQuotes Software Corp. |
| |
//| http://www.mql5.com |
| |
//+------------------------------------------------------------------+
| |
#property copyright "Copyright 2014, MetaQuotes Software Corp."
| |
#property link "http://www.mql5.com"
| |
#property strict
| |
| |
//+------------------------------------------------------------------+
| |
//| Define |
| |
//+------------------------------------------------------------------+
| |
#define CUSTOM_ERROR_FIRST ERR_USER_ERROR_FIRST
| |
#define ERR_JSON_PARSING ERR_USER_ERROR_FIRST+1
| |
#define ERR_JSON_NOT_OK ERR_USER_ERROR_FIRST+2
| |
#define ERR_TOKEN_ISEMPTY ERR_USER_ERROR_FIRST+3
| |
#define ERR_RUN_LIMITATION ERR_USER_ERROR_FIRST+4
| |
//---
| |
#define ERR_NOT_ACTIVE ERR_USER_ERROR_FIRST+100
| |
#define ERR_NOT_CONNECTED ERR_USER_ERROR_FIRST+101
| |
#define ERR_ORDER_SELECT ERR_USER_ERROR_FIRST+102
| |
#define ERR_INVALID_ORDER_TYPE ERR_USER_ERROR_FIRST+103
| |
#define ERR_INVALID_SYMBOL_NAME ERR_USER_ERROR_FIRST+104
| |
#define ERR_INVALID_EXPIRATION_TIME ERR_USER_ERROR_FIRST+105
| |
#define ERR_HTTP_ERROR_FIRST ERR_USER_ERROR_FIRST+1000 //+511
| |
//+------------------------------------------------------------------+
| |
//| ENUM_LANGUAGES |
| |
//+------------------------------------------------------------------+
| |
enum ENUM_LANGUAGES
| |
{
| |
LANGUAGE_EN,// English
| |
LANGUAGE_RU // Russian
| |
};
| |
//+------------------------------------------------------------------+
| |
//| ENUM_UPDATE_MODE |
| |
//+------------------------------------------------------------------+
| |
enum ENUM_UPDATE_MODE
| |
{
| |
UPDATE_FAST, //Fast
| |
UPDATE_NORMAL, //Normal
| |
UPDATE_SLOW, //Slow
| |
};
| |
//+------------------------------------------------------------------+
| |
//| ENUM_RUN_MODE |
| |
//+------------------------------------------------------------------+
| |
enum ENUM_RUN_MODE
| |
{
| |
RUN_OPTIMIZATION,
| |
RUN_VISUAL,
| |
RUN_TESTER,
| |
RUN_LIVE
| |
};
| |
//+------------------------------------------------------------------+
| |
//| GetRunMode |
| |
//+------------------------------------------------------------------+
| |
ENUM_RUN_MODE GetRunMode(void)
| |
{
| |
if(MQLInfoInteger(MQL_OPTIMIZATION))
| |
| |
return(RUN_OPTIMIZATION);
| |
if(MQLInfoInteger(MQL_VISUAL_MODE))
| |
return(RUN_VISUAL);
| |
if(MQLInfoInteger(MQL_TESTER))
| |
return(RUN_TESTER);
| |
return(RUN_LIVE);
| |
}
| |
//+------------------------------------------------------------------+
| |
//| ENUM_ERROR_LEVEL |
| |
//+------------------------------------------------------------------+
| |
enum ENUM_ERROR_LEVEL
| |
{
| |
LEVEL_INFO,
| |
LEVEL_WARNING,
| |
LEVEL_ERROR,
| |
LEVEL_CRITICAL
| |
};
| |
//+------------------------------------------------------------------+
| |
//| CustomInfo |
| |
//+------------------------------------------------------------------+
| |
struct CustomInfo
| |
{
| |
string text1;
| |
string text2;
| |
color colour;
| |
ENUM_ERROR_LEVEL level;
| |
};
| |
//+------------------------------------------------------------------+
| |
//| ErrorInfo |
| |
//+------------------------------------------------------------------+
| |
struct ErrorInfo
| |
{
| |
int code;
| |
string desc;
| |
ENUM_ERROR_LEVEL level;
| |
ENUM_LANGUAGES lang;
| |
};
| |
//+------------------------------------------------------------------+
| |
//| GetErrorInfo |
| |
//+------------------------------------------------------------------+
| |
bool GetErrorInfo(ErrorInfo &info)
| |
{
| |
| |
info.level=LEVEL_INFO;
| |
| |
if(info.lang==LANGUAGE_EN)
| |
{
| |
| |
switch(info.code)
| |
{
| |
case ERR_NOT_CONNECTED:
| |
info.desc="No connection with server";
| |
info.level=LEVEL_ERROR;
| |
break;
| |
case ERR_JSON_PARSING:
| |
info.desc="JSON parsing error";
| |
info.level=LEVEL_ERROR;
| |
break;
| |
case ERR_JSON_NOT_OK:
| |
info.desc="JSON parsing not OK";
| |
info.level=LEVEL_ERROR;
| |
break;
| |
case ERR_TOKEN_ISEMPTY:
| |
info.desc="Token is empty";
| |
info.level=LEVEL_ERROR;
| |
break;
| |
case ERR_RUN_LIMITATION:
| |
info.desc="The bot does not run in tester mode";
| |
info.level=LEVEL_ERROR;
| |
break;
| |
| |
case ERR_WEBREQUEST_INVALID_ADDRESS:
| |
info.desc="Invalid URL";
| |
break;
| |
case ERR_WEBREQUEST_CONNECT_FAILED:
| |
info.desc="Failed to connect to specified URL";
| |
break;
| |
case ERR_WEBREQUEST_TIMEOUT:
| |
info.desc="Timeout exceeded";
| |
break;
| |
case ERR_WEBREQUEST_REQUEST_FAILED:
| |
info.desc="HTTP request failed";
| |
break;
| |
| |
#ifdef __MQL4__
| |
case ERR_FUNCTION_NOT_CONFIRMED:
| |
info.desc="URL does not allowed for WebRequest";
| |
break;
| |
#endif
| |
| |
#ifdef __MQL5__
| |
case ERR_FUNCTION_NOT_ALLOWED:
| |
info.desc="URL does not allowed for WebRequest";
| |
break;
| |
case ERR_FILE_NOT_EXIST:
| |
info.desc="File is not exists";
| |
break;
| |
case ERR_CHART_NOT_FOUND:
| |
info.desc="Chart not found";
| |
break;
| |
case ERR_SUCCESS:
| |
info.desc="The operation completed successfully";
| |
break;
| |
#endif
| |
//---
| |
case ERR_HTTP_ERROR_FIRST+100:
| |
info.desc="Continue";
| |
break;
| |
case ERR_HTTP_ERROR_FIRST+101:
| |
info.desc="Switching Protocols";
| |
break;
| |
case ERR_HTTP_ERROR_FIRST+103:
| |
info.desc="Checkpoint";
| |
break;
| |
case ERR_HTTP_ERROR_FIRST+200:
| |
info.desc="OK";
| |
break;
| |
case ERR_HTTP_ERROR_FIRST+201:
| |
info.desc="Created";
| |
break;
| |
case ERR_HTTP_ERROR_FIRST+202:
| |
info.desc="Accepted";
| |
break;
| |
case ERR_HTTP_ERROR_FIRST+203:
| |
info.desc="Non-Authoritative Information";
| |
break;
| |
case ERR_HTTP_ERROR_FIRST+204:
| |
info.desc="No Content";
| |
break;
| |
case ERR_HTTP_ERROR_FIRST+205:
| |
info.desc="Reset Content";
| |
break;
| |
case ERR_HTTP_ERROR_FIRST+206:
| |
info.desc="Partial Content";
| |
break;
| |
case ERR_HTTP_ERROR_FIRST+300:
| |
info.desc="Multiple Choices";
| |
break;
| |
case ERR_HTTP_ERROR_FIRST+301:
| |
info.desc="Moved Permanently";
| |
break;
| |
case ERR_HTTP_ERROR_FIRST+302:
| |
info.desc="Found";
| |
break;
| |
case ERR_HTTP_ERROR_FIRST+303:
| |
info.desc="See Other";
| |
break;
| |
case ERR_HTTP_ERROR_FIRST+304:
| |
info.desc="Not Modified";
| |
break;
| |
case ERR_HTTP_ERROR_FIRST+306:
| |
info.desc="Switch Proxy";
| |
break;
| |
case ERR_HTTP_ERROR_FIRST+307:
| |
info.desc="Temporary Redirect";
| |
break;
| |
case ERR_HTTP_ERROR_FIRST+308:
| |
info.desc="Resume Incomplete";
| |
break;
| |
case ERR_HTTP_ERROR_FIRST+400:
| |
info.desc="Bad Request";
| |
break;
| |
case ERR_HTTP_ERROR_FIRST+401:
| |
info.desc="Unauthorized";
| |
break;
| |
case ERR_HTTP_ERROR_FIRST+402:
| |
info.desc="Payment Required";
| |
break;
| |
case ERR_HTTP_ERROR_FIRST+403:
| |
info.desc="Forbidden";
| |
break;
| |
case ERR_HTTP_ERROR_FIRST+404:
| |
info.desc="Not Found";
| |
break;
| |
case ERR_HTTP_ERROR_FIRST+405:
| |
info.desc="Method Not Allowed";
| |
break;
| |
case ERR_HTTP_ERROR_FIRST+406:
| |
info.desc="Not Acceptable";
| |
break;
| |
case ERR_HTTP_ERROR_FIRST+407:
| |
info.desc="Proxy Authentication Required";
| |
break;
| |
case ERR_HTTP_ERROR_FIRST+408:
| |
info.desc="Request Timeout";
| |
break;
| |
case ERR_HTTP_ERROR_FIRST+409:
| |
info.desc="Conflict";
| |
break;
| |
case ERR_HTTP_ERROR_FIRST+410:
| |
info.desc="Gone";
| |
break;
| |
case ERR_HTTP_ERROR_FIRST+411:
| |
info.desc="Length Required";
| |
break;
| |
case ERR_HTTP_ERROR_FIRST+412:
| |
info.desc="Precondition Failed";
| |
break;
| |
case ERR_HTTP_ERROR_FIRST+413:
| |
info.desc="Request Entity Too Large";
| |
break;
| |
case ERR_HTTP_ERROR_FIRST+414:
| |
info.desc="Request-URI Too Long";
| |
break;
| |
case ERR_HTTP_ERROR_FIRST+415:
| |
info.desc="Unsupported Media Type";
| |
break;
| |
case ERR_HTTP_ERROR_FIRST+416:
| |
info.desc="Requested Range Not Satisfiable";
| |
break;
| |
case ERR_HTTP_ERROR_FIRST+417:
| |
info.desc="Expectation Failed";
| |
break;
| |
case ERR_HTTP_ERROR_FIRST+500:
| |
info.desc="Internal Server Error";
| |
break;
| |
case ERR_HTTP_ERROR_FIRST+501:
| |
info.desc="Not Implemented";
| |
break;
| |
case ERR_HTTP_ERROR_FIRST+502:
| |
info.desc="Bad Gateway";
| |
break;
| |
case ERR_HTTP_ERROR_FIRST+503:
| |
info.desc="Service Unavailable";
| |
break;
| |
case ERR_HTTP_ERROR_FIRST+504:
| |
info.desc="Gateway Timeout";
| |
break;
| |
case ERR_HTTP_ERROR_FIRST+505:
| |
info.desc="HTTP Version Not Supported";
| |
break;
| |
case ERR_HTTP_ERROR_FIRST+511:
| |
info.desc="Network Authentication Required";
| |
break;
| |
| |
//--- The error codes returned by trade server:
| |
#ifdef __MQL4__
| |
case ERR_NO_ERROR:
| |
info.desc="No error";
| |
break;
| |
case ERR_NO_RESULT:
| |
info.desc="No error returned, but the result is unknown";
| |
info.level=LEVEL_WARNING;
| |
break;
| |
case ERR_COMMON_ERROR:
| |
info.desc="Common error.";
| |
info.level=LEVEL_WARNING;
| |
break;
| |
case ERR_INVALID_TRADE_PARAMETERS:
| |
info.desc="Invalid trade parameters";
| |
info.level=LEVEL_WARNING;
| |
break;
| |
case ERR_SERVER_BUSY:
| |
info.desc="Trade server is busy";
| |
info.level=LEVEL_WARNING;
| |
break;
| |
case ERR_OLD_VERSION:
| |
info.desc="Old version of the client terminal";
| |
info.level=LEVEL_WARNING;
| |
break;
| |
case ERR_NO_CONNECTION:
| |
info.desc="No connection with trade server";
| |
info.level=LEVEL_WARNING;
| |
break;
| |
case ERR_NOT_ENOUGH_RIGHTS:
| |
info.desc="Not enough rights";
| |
info.level=LEVEL_WARNING;
| |
break;
| |
case ERR_TOO_FREQUENT_REQUESTS:
| |
info.desc="Too frequent requests";
| |
info.level=LEVEL_WARNING;
| |
break;
| |
case ERR_MALFUNCTIONAL_TRADE:
| |
info.desc="Malfunctional trade operation";
| |
info.level=LEVEL_WARNING;
| |
break;
| |
case ERR_ACCOUNT_DISABLED:
| |
info.desc="Account disabled";
| |
info.level= LEVEL_ERROR;
| |
break;
| |
case ERR_INVALID_ACCOUNT:
| |
info.desc="Invalid account";
| |
info.level= LEVEL_WARNING;
| |
break;
| |
case ERR_TRADE_TIMEOUT:
| |
info.desc="Trade timeout";
| |
info.level=LEVEL_WARNING;
| |
break;
| |
case ERR_INVALID_PRICE:
| |
info.desc="Invalid price";
| |
info.level= LEVEL_WARNING;
| |
break;
| |
case ERR_INVALID_STOPS:
| |
info.desc="Invalid stops";
| |
info.level= LEVEL_WARNING;
| |
break;
| |
case ERR_INVALID_TRADE_VOLUME:
| |
info.desc="Invalid trade volume";
| |
info.level=LEVEL_WARNING;
| |
break;
| |
case ERR_MARKET_CLOSED:
| |
info.desc="Market is closed";
| |
info.level=LEVEL_ERROR;
| |
break;
| |
case ERR_TRADE_DISABLED:
| |
info.desc="Trade is disabled";
| |
info.level=LEVEL_ERROR;
| |
break;
| |
case ERR_NOT_ENOUGH_MONEY:
| |
info.desc="Not enough money";
| |
info.level=LEVEL_ERROR;
| |
break;
| |
case ERR_PRICE_CHANGED:
| |
info.desc="Price changed";
| |
info.level=LEVEL_WARNING;
| |
break;
| |
case ERR_OFF_QUOTES:
| |
info.desc="Off quotes";
| |
info.level=LEVEL_WARNING;
| |
break;
| |
case ERR_BROKER_BUSY:
| |
info.desc="Broker is busy";
| |
info.level=LEVEL_WARNING;
| |
break;
| |
case ERR_REQUOTE:
| |
info.desc="Requote";
| |
info.level=LEVEL_WARNING;
| |
break;
| |
case ERR_ORDER_LOCKED:
| |
info.desc="Order is locked";
| |
info.level=LEVEL_WARNING;
| |
break;
| |
case ERR_LONG_POSITIONS_ONLY_ALLOWED:
| |
info.desc="Long positions only allowed";
| |
info.level=LEVEL_WARNING;
| |
break;
| |
case ERR_TOO_MANY_REQUESTS:
| |
info.desc="Too many requests";
| |
info.level=LEVEL_WARNING;
| |
break;
| |
case ERR_TRADE_MODIFY_DENIED:
| |
info.desc="Modification denied because order too close to market";
| |
info.level=LEVEL_WARNING;
| |
break;
| |
case ERR_TRADE_CONTEXT_BUSY:
| |
info.desc="Trade context is busy";
| |
info.level=LEVEL_WARNING;
| |
break;
| |
case ERR_TRADE_EXPIRATION_DENIED:
| |
info.desc="Expirations are denied by broker";
| |
info.level=LEVEL_WARNING;
| |
break;
| |
case ERR_TRADE_TOO_MANY_ORDERS:
| |
info.desc="The amount of open and pending orders has reached the limit set by the broker";
| |
info.level=LEVEL_ERROR;
| |
break;
| |
case ERR_TRADE_HEDGE_PROHIBITED:
| |
info.desc="An attempt to open a position opposite to the existing one when hedging is disabled";
| |
info.level=LEVEL_ERROR;
| |
break;
| |
case ERR_TRADE_PROHIBITED_BY_FIFO:
| |
info.desc="An attempt to close a position contravening the FIFO rule";
| |
info.level=LEVEL_WARNING;
| |
break;
| |
//--- MQL4 run time error codes
| |
case ERR_TRADE_NOT_ALLOWED:
| |
info.desc="Trade is not allowed. Enable checkbox (Allow live trading) in the expert properties";
| |
info.level=LEVEL_WARNING;
| |
break;
| |
case ERR_LONGS_NOT_ALLOWED:
| |
info.desc="Longs are not allowed. Check the expert properties";
| |
info.level=LEVEL_ERROR;
| |
break;
| |
case ERR_SHORTS_NOT_ALLOWED:
| |
info.desc="Shorts are not allowed. Check the expert properties";
| |
info.level=LEVEL_ERROR;
| |
break;
| |
#endif
| |
| |
//---
| |
case ERR_INVALID_ORDER_TYPE:
| |
info.desc="Invalid order type";
| |
info.level=LEVEL_ERROR;
| |
break;
| |
case ERR_INVALID_SYMBOL_NAME:
| |
info.desc="Invalid symbol name";
| |
info.level=LEVEL_ERROR;
| |
break;
| |
case ERR_INVALID_EXPIRATION_TIME:
| |
info.desc="Invalid expiration time";
| |
info.level=LEVEL_ERROR;
| |
break;
| |
case ERR_ORDER_SELECT:
| |
info.desc="Error function OrderSelect()";
| |
info.level=LEVEL_ERROR;
| |
break;
| |
//---
| |
| |
default:
| |
info.desc="Unknown error "+IntegerToString(info.code);
| |
return(false);
| |
| |
}
| |
}
| |
| |
//---
| |
if(info.lang==LANGUAGE_RU)
| |
{
| |
switch(info.code)
| |
{
| |
case ERR_NOT_ACTIVE:
| |
info.desc="Нет лицензии";
| |
break;
| |
case ERR_NOT_CONNECTED:
| |
info.desc="Нет соединения с торговым сервером";
| |
break;
| |
| |
case ERR_JSON_PARSING:
| |
info.desc="Ошибка JSON структуры ответа";
| |
info.level=LEVEL_ERROR;
| |
break;
| |
case ERR_JSON_NOT_OK:
| |
info.desc="Парсинг JSON завершен с ошибкой";
| |
info.level=LEVEL_ERROR;
| |
break;
| |
case ERR_TOKEN_ISEMPTY:
| |
info.desc="Токен-пустая строка";
| |
info.level=LEVEL_ERROR;
| |
break;
| |
case ERR_RUN_LIMITATION:
| |
info.desc="Бот не работает в тестере стратегий";
| |
info.level=LEVEL_ERROR;
| |
break;
| |
| |
//---
| |
case ERR_WEBREQUEST_INVALID_ADDRESS:
| |
info.desc="URL не прошел проверку";
| |
break;
| |
case ERR_WEBREQUEST_CONNECT_FAILED:
| |
info.desc="Не удалось подключиться к указанному URL";
| |
break;
| |
case ERR_WEBREQUEST_TIMEOUT:
| |
info.desc="Превышен таймаут получения данных";
| |
break;
| |
case ERR_WEBREQUEST_REQUEST_FAILED:
| |
info.desc="Ошибка в результате выполнения HTTP запроса";
| |
break;
| |
| |
#ifdef __MQL4__
| |
case ERR_FUNCTION_NOT_CONFIRMED:
| |
info.desc="URL нет в списке для WebRequest";
| |
break;
| |
#endif
| |
| |
#ifdef __MQL5__
| |
case ERR_FUNCTION_NOT_ALLOWED:
| |
info.desc="URL нет в списке для WebRequest";
| |
break;
| |
case ERR_FILE_NOT_EXIST:
| |
info.desc="Файла не существует";
| |
break;
| |
case ERR_CHART_NOT_FOUND:
| |
info.desc="График не найден";
| |
break;
| |
case ERR_SUCCESS:
| |
info.desc="Операция выполнена успешно";
| |
break;
| |
#endif
| |
//---
| |
case ERR_HTTP_ERROR_FIRST+100:
| |
info.desc="Continue";
| |
break;
| |
case ERR_HTTP_ERROR_FIRST+101:
| |
info.desc="Switching Protocols";
| |
break;
| |
case ERR_HTTP_ERROR_FIRST+103:
| |
info.desc="Checkpoint";
| |
break;
| |
case ERR_HTTP_ERROR_FIRST+200:
| |
info.desc="OK";
| |
break;
| |
case ERR_HTTP_ERROR_FIRST+201:
| |
info.desc="Created";
| |
break;
| |
case ERR_HTTP_ERROR_FIRST+202:
| |
info.desc="Accepted";
| |
break;
| |
case ERR_HTTP_ERROR_FIRST+203:
| |
info.desc="Non-Authoritative Information";
| |
break;
| |
case ERR_HTTP_ERROR_FIRST+204:
| |
info.desc="No Content";
| |
break;
| |
case ERR_HTTP_ERROR_FIRST+205:
| |
info.desc="Reset Content";
| |
break;
| |
case ERR_HTTP_ERROR_FIRST+206:
| |
info.desc="Partial Content";
| |
break;
| |
case ERR_HTTP_ERROR_FIRST+300:
| |
info.desc="Multiple Choices";
| |
break;
| |
case ERR_HTTP_ERROR_FIRST+301:
| |
info.desc="Moved Permanently";
| |
break;
| |
case ERR_HTTP_ERROR_FIRST+302:
| |
info.desc="Found";
| |
break;
| |
case ERR_HTTP_ERROR_FIRST+303:
| |
info.desc="See Other";
| |
break;
| |
case ERR_HTTP_ERROR_FIRST+304:
| |
info.desc="Not Modified";
| |
break;
| |
case ERR_HTTP_ERROR_FIRST+306:
| |
info.desc="Switch Proxy";
| |
break;
| |
case ERR_HTTP_ERROR_FIRST+307:
| |
info.desc="Temporary Redirect";
| |
break;
| |
case ERR_HTTP_ERROR_FIRST+308:
| |
info.desc="Resume Incomplete";
| |
break;
| |
case ERR_HTTP_ERROR_FIRST+400:
| |
info.desc="Bad Request";
| |
break;
| |
case ERR_HTTP_ERROR_FIRST+401:
| |
info.desc="Unauthorized";
| |
break;
| |
case ERR_HTTP_ERROR_FIRST+402:
| |
info.desc="Payment Required";
| |
break;
| |
case ERR_HTTP_ERROR_FIRST+403:
| |
info.desc="Forbidden";
| |
break;
| |
case ERR_HTTP_ERROR_FIRST+404:
| |
info.desc="Not Found";
| |
break;
| |
case ERR_HTTP_ERROR_FIRST+405:
| |
info.desc="Method Not Allowed";
| |
break;
| |
case ERR_HTTP_ERROR_FIRST+406:
| |
info.desc="Not Acceptable";
| |
break;
| |
case ERR_HTTP_ERROR_FIRST+407:
| |
info.desc="Proxy Authentication Required";
| |
break;
| |
case ERR_HTTP_ERROR_FIRST+408:
| |
info.desc="Request Timeout";
| |
break;
| |
case ERR_HTTP_ERROR_FIRST+409:
| |
info.desc="Conflict";
| |
break;
| |
case ERR_HTTP_ERROR_FIRST+410:
| |
info.desc="Gone";
| |
break;
| |
case ERR_HTTP_ERROR_FIRST+411:
| |
info.desc="Length Required";
| |
break;
| |
case ERR_HTTP_ERROR_FIRST+412:
| |
info.desc="Precondition Failed";
| |
break;
| |
case ERR_HTTP_ERROR_FIRST+413:
| |
info.desc="Request Entity Too Large";
| |
break;
| |
case ERR_HTTP_ERROR_FIRST+414:
| |
info.desc="Request-URI Too Long";
| |
break;
| |
case ERR_HTTP_ERROR_FIRST+415:
| |
info.desc="Unsupported Media Type";
| |
break;
| |
case ERR_HTTP_ERROR_FIRST+416:
| |
info.desc="Requested Range Not Satisfiable";
| |
break;
| |
case ERR_HTTP_ERROR_FIRST+417:
| |
info.desc="Expectation Failed";
| |
break;
| |
case ERR_HTTP_ERROR_FIRST+500:
| |
info.desc="Internal Server Error";
| |
break;
| |
case ERR_HTTP_ERROR_FIRST+501:
| |
info.desc="Not Implemented";
| |
break;
| |
case ERR_HTTP_ERROR_FIRST+502:
| |
info.desc="Bad Gateway";
| |
break;
| |
case ERR_HTTP_ERROR_FIRST+503:
| |
info.desc="Service Unavailable";
| |
break;
| |
case ERR_HTTP_ERROR_FIRST+504:
| |
info.desc="Gateway Timeout";
| |
break;
| |
case ERR_HTTP_ERROR_FIRST+505:
| |
info.desc="HTTP Version Not Supported";
| |
break;
| |
case ERR_HTTP_ERROR_FIRST+511:
| |
info.desc="Network Authentication Required";
| |
break;
| |
| |
//---
| |
#ifdef __MQL4__
| |
case ERR_NO_ERROR:
| |
info.desc="Нет ошибки";
| |
break;
| |
case ERR_NO_RESULT:
| |
info.desc="Нет ошибки, но результат неизвестен";
| |
info.level=LEVEL_WARNING;
| |
break;
| |
case ERR_COMMON_ERROR:
| |
info.desc="Общая ошибка";
| |
info.level=LEVEL_WARNING;
| |
break;
| |
case ERR_INVALID_TRADE_PARAMETERS:
| |
info.desc="Неправильные параметры";
| |
info.level=LEVEL_WARNING;
| |
break;
| |
case ERR_SERVER_BUSY:
| |
info.desc="Торговый сервер занят";
| |
info.level=LEVEL_WARNING;
| |
break;
| |
case ERR_OLD_VERSION:
| |
info.desc="Старая версия клиентского терминала";
| |
info.level=LEVEL_WARNING;
| |
break;
| |
case ERR_NO_CONNECTION:
| |
info.desc="Нет связи с торговым сервером";
| |
info.level=LEVEL_WARNING;
| |
break;
| |
case ERR_NOT_ENOUGH_RIGHTS:
| |
info.desc="Недостаточно прав";
| |
info.level=LEVEL_WARNING;
| |
break;
| |
case ERR_TOO_FREQUENT_REQUESTS:
| |
info.desc="Слишком частые запросы";
| |
info.level=LEVEL_WARNING;
| |
break;
| |
case ERR_MALFUNCTIONAL_TRADE:
| |
info.desc="Недопустимая операция нарушающая функционирование сервера";
| |
info.level=LEVEL_WARNING;
| |
break;
| |
case ERR_ACCOUNT_DISABLED:
| |
info.desc="Счет заблокирован";
| |
info.level= LEVEL_ERROR;
| |
break;
| |
case ERR_INVALID_ACCOUNT:
| |
info.desc="Неправильный номер счета";
| |
info.level= LEVEL_WARNING;
| |
break;
| |
case ERR_TRADE_TIMEOUT:
| |
info.desc="Истек срок ожидания совершения сделки";
| |
info.level=LEVEL_WARNING;
| |
break;
| |
case ERR_INVALID_PRICE:
| |
info.desc="Неправильная цена";
| |
info.level= LEVEL_WARNING;
| |
break;
| |
case ERR_INVALID_STOPS:
| |
info.desc="Неправильные стопы";
| |
info.level= LEVEL_WARNING;
| |
break;
| |
case ERR_INVALID_TRADE_VOLUME:
| |
info.desc="Неправильный объем";
| |
info.level=LEVEL_WARNING;
| |
break;
| |
case ERR_MARKET_CLOSED:
| |
info.desc="Рынок закрыт";
| |
info.level=LEVEL_ERROR;
| |
break;
| |
case ERR_TRADE_DISABLED:
| |
info.desc="Торговля запрещена";
| |
info.level=LEVEL_ERROR;
| |
break;
| |
case ERR_NOT_ENOUGH_MONEY:
| |
info.desc="Недостаточно денег для совершения операции";
| |
info.level=LEVEL_ERROR;
| |
break;
| |
case ERR_PRICE_CHANGED:
| |
info.desc="Цена изменилась";
| |
info.level=LEVEL_WARNING;
| |
break;
| |
case ERR_OFF_QUOTES:
| |
info.desc="Нет цен";
| |
info.level=LEVEL_WARNING;
| |
break;
| |
case ERR_BROKER_BUSY:
| |
info.desc="Брокер занят";
| |
info.level=LEVEL_WARNING;
| |
break;
| |
case ERR_REQUOTE:
| |
info.desc="Новые цены";
| |
info.level=LEVEL_WARNING;
| |
break;
| |
case ERR_ORDER_LOCKED:
| |
info.desc="Ордер заблокирован и уже обрабатывается";
| |
info.level=LEVEL_WARNING;
| |
break;
| |
case ERR_LONG_POSITIONS_ONLY_ALLOWED:
| |
info.desc="Разрешена только покупка";
| |
info.level=LEVEL_WARNING;
| |
break;
| |
case ERR_TOO_MANY_REQUESTS:
| |
info.desc="Слишком много запросов";
| |
info.level=LEVEL_WARNING;
| |
break;
| |
case ERR_TRADE_MODIFY_DENIED:
| |
info.desc="Модификация запрещена, так как ордер слишком близок к рынку";
| |
info.level=LEVEL_WARNING;
| |
break;
| |
case ERR_TRADE_CONTEXT_BUSY:
| |
info.desc="Подсистема торговли занята";
| |
info.level=LEVEL_WARNING;
| |
break;
| |
case ERR_TRADE_EXPIRATION_DENIED:
| |
info.desc="Использование даты истечения ордера запрещено брокером";
| |
info.level=LEVEL_WARNING;
| |
break;
| |
case ERR_TRADE_TOO_MANY_ORDERS:
| |
info.desc="Количество открытых и отложенных ордеров достигло предела, установленного брокером.";
| |
info.level=LEVEL_ERROR;
| |
break;
| |
case ERR_TRADE_HEDGE_PROHIBITED:
| |
info.desc="Попытка открыть противоположную позицию к уже существующей в случае, если хеджирование запрещено";
| |
info.level=LEVEL_ERROR;
| |
break;
| |
case ERR_TRADE_PROHIBITED_BY_FIFO:
| |
info.desc="Попытка закрыть позицию по инструменту в противоречии с правилом FIFO";
| |
info.level=LEVEL_WARNING;
| |
break;
| |
//--- MQL4 run time error codes
| |
case ERR_TRADE_NOT_ALLOWED:
| |
info.desc="Торговля не разрешена. Необходимо включить опцию `Разрешить советнику торговать` в свойствах эксперта";
| |
info.level=LEVEL_WARNING;
| |
break;
| |
case ERR_LONGS_NOT_ALLOWED:
| |
info.desc="Ордера на покупку не разрешены. Необходимо проверить свойства эксперта";
| |
info.level=LEVEL_ERROR;
| |
break;
| |
case ERR_SHORTS_NOT_ALLOWED:
| |
info.desc="Ордера на продажу не разрешены. Необходимо проверить свойства эксперта";
| |
info.level=LEVEL_ERROR;
| |
break;
| |
#endif
| |
//--- торговые
| |
case ERR_INVALID_ORDER_TYPE:
| |
info.desc="Неправильный тип ордера";
| |
info.level=LEVEL_ERROR;
| |
break;
| |
case ERR_INVALID_SYMBOL_NAME:
| |
info.desc="Неправильное имя инструмента";
| |
info.level=LEVEL_ERROR;
| |
break;
| |
case ERR_INVALID_EXPIRATION_TIME:
| |
info.desc="Неправильное время экспирации";
| |
info.level=LEVEL_ERROR;
| |
break;
| |
case ERR_ORDER_SELECT:
| |
info.desc="Ошибка функции OrderSelect()";
| |
info.level=LEVEL_ERROR;
| |
break;
| |
| |
//---
| |
default:
| |
info.desc="Неизвестная ошибка "+IntegerToString(info.code);
| |
return(false);
| |
}
| |
}
| |
return(true);
| |
}
| |
//+------------------------------------------------------------------+
| |
//| |
| |
//+------------------------------------------------------------------+
| |
string GetErrorDescription(const int _error_code,
| |
const ENUM_LANGUAGES _language=LANGUAGE_EN)
| |
{
| |
ErrorInfo info;
| |
info.code=_error_code;
| |
info.lang=_language;
| |
| |
GetErrorInfo(info);
| |
| |
return(info.desc);
| |
}
| |
//+------------------------------------------------------------------+
| |
//| |
| |
//+------------------------------------------------------------------+
| |
ENUM_ERROR_LEVEL GetErrorLevel(const int _error_code)
| |
{
| |
ErrorInfo info;
| |
info.code=_error_code;
| |
info.lang=LANGUAGE_EN;
| |
| |
GetErrorInfo(info);
| |
return(info.level);
| |
}
| |
//+------------------------------------------------------------------+
| |
//| PrintError |
| |
//+------------------------------------------------------------------+
| |
ENUM_ERROR_LEVEL PrintError(int _error_code,const ENUM_LANGUAGES _lang=LANGUAGE_EN)
| |
{
| |
ErrorInfo info;
| |
info.code=_error_code;
| |
info.lang=_lang;
| |
//---
| |
GetErrorInfo(info);
| |
//---
| |
if(_lang==LANGUAGE_RU)
| |
printf("Ошибка: %s",info.desc);
| |
else
| |
printf("Error: %s",info.desc);
| |
//---
| |
return(info.level);
| |
}
| |
//+------------------------------------------------------------------+
|