Account_monitor/Telegram/Common.mqh

873 lines
56 KiB
MQL5
Raw Permalink Normal View History

2025-05-30 14:38:50 +02:00
<EFBFBD><EFBFBD>//+------------------------------------------------------------------+
//| 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="5B ;8F5=788";
break;
case ERR_NOT_CONNECTED:
info.desc="5B A>548=5=8O A B>@3>2K< A5@25@><";
break;
case ERR_JSON_PARSING:
info.desc="H81:0 JSON AB@C:BC@K >B25B0";
info.level=LEVEL_ERROR;
break;
case ERR_JSON_NOT_OK:
info.desc="0@A8=3 JSON 7025@H5= A >H81:>9";
info.level=LEVEL_ERROR;
break;
case ERR_TOKEN_ISEMPTY:
info.desc="">:5=-?CAB0O AB@>:0";
info.level=LEVEL_ERROR;
break;
case ERR_RUN_LIMITATION:
info.desc=">B =5 @01>B05B 2 B5AB5@5 AB@0B5389";
info.level=LEVEL_ERROR;
break;
//---
case ERR_WEBREQUEST_INVALID_ADDRESS:
info.desc="URL =5 ?@>H5; ?@>25@:C";
break;
case ERR_WEBREQUEST_CONNECT_FAILED:
info.desc="5 C40;>AL ?>4:;NG8BLAO : C:070==><C URL";
break;
case ERR_WEBREQUEST_TIMEOUT:
info.desc="@52KH5= B09<0CB ?>;CG5=8O 40==KE";
break;
case ERR_WEBREQUEST_REQUEST_FAILED:
info.desc="H81:0 2 @57C;LB0B5 2K?>;=5=8O HTTP 70?@>A0";
break;
#ifdef __MQL4__
case ERR_FUNCTION_NOT_CONFIRMED:
info.desc="URL =5B 2 A?8A:5 4;O WebRequest";
break;
#endif
#ifdef __MQL5__
case ERR_FUNCTION_NOT_ALLOWED:
info.desc="URL =5B 2 A?8A:5 4;O WebRequest";
break;
case ERR_FILE_NOT_EXIST:
info.desc="$09;0 =5 ACI5AB2C5B";
break;
case ERR_CHART_NOT_FOUND:
info.desc="@0D8: =5 =0945=";
break;
case ERR_SUCCESS:
info.desc="?5@0F8O 2K?>;=5=0 CA?5H=>";
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="5B >H81:8";
break;
case ERR_NO_RESULT:
info.desc="5B >H81:8, => @57C;LB0B =58725AB5=";
info.level=LEVEL_WARNING;
break;
case ERR_COMMON_ERROR:
info.desc="1I0O >H81:0";
info.level=LEVEL_WARNING;
break;
case ERR_INVALID_TRADE_PARAMETERS:
info.desc="5?@028;L=K5 ?0@0<5B@K";
info.level=LEVEL_WARNING;
break;
case ERR_SERVER_BUSY:
info.desc="">@3>2K9 A5@25@ 70=OB";
info.level=LEVEL_WARNING;
break;
case ERR_OLD_VERSION:
info.desc="!B0@0O 25@A8O :;85=BA:>3> B5@<8=0;0";
info.level=LEVEL_WARNING;
break;
case ERR_NO_CONNECTION:
info.desc="5B A2O78 A B>@3>2K< A5@25@><";
info.level=LEVEL_WARNING;
break;
case ERR_NOT_ENOUGH_RIGHTS:
info.desc="54>AB0B>G=> ?@02";
info.level=LEVEL_WARNING;
break;
case ERR_TOO_FREQUENT_REQUESTS:
info.desc="!;8H:>< G0ABK5 70?@>AK";
info.level=LEVEL_WARNING;
break;
case ERR_MALFUNCTIONAL_TRADE:
info.desc="54>?CAB8<0O >?5@0F8O =0@CH0NI0O DC=:F8>=8@>20=85 A5@25@0";
info.level=LEVEL_WARNING;
break;
case ERR_ACCOUNT_DISABLED:
info.desc="!G5B 701;>:8@>20=";
info.level= LEVEL_ERROR;
break;
case ERR_INVALID_ACCOUNT:
info.desc="5?@028;L=K9 =><5@ AG5B0";
info.level= LEVEL_WARNING;
break;
case ERR_TRADE_TIMEOUT:
info.desc="AB5: A@>: >6840=8O A>25@H5=8O A45;:8";
info.level=LEVEL_WARNING;
break;
case ERR_INVALID_PRICE:
info.desc="5?@028;L=0O F5=0";
info.level= LEVEL_WARNING;
break;
case ERR_INVALID_STOPS:
info.desc="5?@028;L=K5 AB>?K";
info.level= LEVEL_WARNING;
break;
case ERR_INVALID_TRADE_VOLUME:
info.desc="5?@028;L=K9 >1J5<";
info.level=LEVEL_WARNING;
break;
case ERR_MARKET_CLOSED:
info.desc=" K=>: 70:@KB";
info.level=LEVEL_ERROR;
break;
case ERR_TRADE_DISABLED:
info.desc="">@3>2;O 70?@5I5=0";
info.level=LEVEL_ERROR;
break;
case ERR_NOT_ENOUGH_MONEY:
info.desc="54>AB0B>G=> 45=53 4;O A>25@H5=8O >?5@0F88";
info.level=LEVEL_ERROR;
break;
case ERR_PRICE_CHANGED:
info.desc="&5=0 87<5=8;0AL";
info.level=LEVEL_WARNING;
break;
case ERR_OFF_QUOTES:
info.desc="5B F5=";
info.level=LEVEL_WARNING;
break;
case ERR_BROKER_BUSY:
info.desc="@>:5@ 70=OB";
info.level=LEVEL_WARNING;
break;
case ERR_REQUOTE:
info.desc=">2K5 F5=K";
info.level=LEVEL_WARNING;
break;
case ERR_ORDER_LOCKED:
info.desc="@45@ 701;>:8@>20= 8 C65 >1@010BK205BAO";
info.level=LEVEL_WARNING;
break;
case ERR_LONG_POSITIONS_ONLY_ALLOWED:
info.desc=" 07@5H5=0 B>;L:> ?>:C?:0";
info.level=LEVEL_WARNING;
break;
case ERR_TOO_MANY_REQUESTS:
info.desc="!;8H:>< <=>3> 70?@>A>2";
info.level=LEVEL_WARNING;
break;
case ERR_TRADE_MODIFY_DENIED:
info.desc=">48D8:0F8O 70?@5I5=0, B0: :0: >@45@ A;8H:>< 1;87>: : @K=:C";
info.level=LEVEL_WARNING;
break;
case ERR_TRADE_CONTEXT_BUSY:
info.desc=">4A8AB5<0 B>@3>2;8 70=OB0";
info.level=LEVEL_WARNING;
break;
case ERR_TRADE_EXPIRATION_DENIED:
info.desc="A?>;L7>20=85 40BK 8AB5G5=8O >@45@0 70?@5I5=> 1@>:5@><";
info.level=LEVEL_WARNING;
break;
case ERR_TRADE_TOO_MANY_ORDERS:
info.desc=">;8G5AB2> >B:@KBKE 8 >B;>65==KE >@45@>2 4>AB83;> ?@545;0, CAB0=>2;5==>3> 1@>:5@><.";
info.level=LEVEL_ERROR;
break;
case ERR_TRADE_HEDGE_PROHIBITED:
info.desc=">?KB:0 >B:@KBL ?@>B82>?>;>6=CN ?>78F8N : C65 ACI5AB2CNI59 2 A;CG05, 5A;8 E5468@>20=85 70?@5I5=>";
info.level=LEVEL_ERROR;
break;
case ERR_TRADE_PROHIBITED_BY_FIFO:
info.desc=">?KB:0 70:@KBL ?>78F8N ?> 8=AB@C<5=BC 2 ?@>B82>@5G88 A ?@028;>< FIFO";
info.level=LEVEL_WARNING;
break;
//--- MQL4 run time error codes
case ERR_TRADE_NOT_ALLOWED:
info.desc="">@3>2;O =5 @07@5H5=0. 5>1E>48<> 2:;NG8BL >?F8N ` 07@5H8BL A>25B=8:C B>@3>20BL` 2 A2>9AB20E M:A?5@B0";
info.level=LEVEL_WARNING;
break;
case ERR_LONGS_NOT_ALLOWED:
info.desc="@45@0 =0 ?>:C?:C =5 @07@5H5=K. 5>1E>48<> ?@>25@8BL A2>9AB20 M:A?5@B0";
info.level=LEVEL_ERROR;
break;
case ERR_SHORTS_NOT_ALLOWED:
info.desc="@45@0 =0 ?@>406C =5 @07@5H5=K. 5>1E>48<> ?@>25@8BL A2>9AB20 M:A?5@B0";
info.level=LEVEL_ERROR;
break;
#endif
//--- B>@3>2K5
case ERR_INVALID_ORDER_TYPE:
info.desc="5?@028;L=K9 B8? >@45@0";
info.level=LEVEL_ERROR;
break;
case ERR_INVALID_SYMBOL_NAME:
info.desc="5?@028;L=>5 8<O 8=AB@C<5=B0";
info.level=LEVEL_ERROR;
break;
case ERR_INVALID_EXPIRATION_TIME:
info.desc="5?@028;L=>5 2@5<O M:A?8@0F88";
info.level=LEVEL_ERROR;
break;
case ERR_ORDER_SELECT:
info.desc="H81:0 DC=:F88 OrderSelect()";
info.level=LEVEL_ERROR;
break;
//---
default:
info.desc="58725AB=0O >H81:0 "+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("H81:0: %s",info.desc);
else
printf("Error: %s",info.desc);
//---
return(info.level);
}
//+------------------------------------------------------------------+