Account_monitor/Telegram/Common.mqh
super.admin f952c36fd2 convert
2025-05-30 14:38:50 +02:00

872 lines
56 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);
}
//+------------------------------------------------------------------+