forké depuis airat77786/MQL5Book
146 lignes
6,4 Kio
MQL5
146 lignes
6,4 Kio
MQL5
//+------------------------------------------------------------------+
| |||
//| TradeRetcode.mqh |
| |||
//| Copyright 2022, MetaQuotes Ltd. |
| |||
//| https://www.mql5.com |
| |||
//+------------------------------------------------------------------+
| |||
| |||
//+------------------------------------------------------------------+
| |||
//| All TRADE_RETCODEs in MQL5. "TRADE_RETCODE_" prefixes are |
| |||
//| removed to eliminate name collisions with built-in constants. |
| |||
//+------------------------------------------------------------------+
| |||
enum TRADE_RETCODE
| |||
{
| |||
OK_0 = 0,
| |||
REQUOTE = 10004,
| |||
REJECT = 10006,
| |||
CANCEL = 10007,
| |||
PLACED = 10008,
| |||
DONE = 10009,
| |||
DONE_PARTIAL = 10010,
| |||
ERROR = 10011,
| |||
TIMEOUT = 10012,
| |||
INVALID = 10013,
| |||
INVALID_VOLUME = 10014,
| |||
INVALID_PRICE = 10015,
| |||
INVALID_STOPS = 10016,
| |||
TRADE_DISABLED = 10017,
| |||
MARKET_CLOSED = 10018,
| |||
NO_MONEY = 10019,
| |||
PRICE_CHANGED = 10020,
| |||
PRICE_OFF = 10021,
| |||
INVALID_EXPIRATION = 10022,
| |||
ORDER_CHANGED = 10023,
| |||
TOO_MANY_REQUESTS = 10024,
| |||
NO_CHANGES = 10025,
| |||
SERVER_DISABLES_AT = 10026,
| |||
CLIENT_DISABLES_AT = 10027,
| |||
LOCKED = 10028,
| |||
FROZEN = 10029,
| |||
INVALID_FILL = 10030,
| |||
CONNECTION = 10031,
| |||
ONLY_REAL = 10032,
| |||
LIMIT_ORDERS = 10033,
| |||
LIMIT_VOLUME = 10034,
| |||
INVALID_ORDER = 10035,
| |||
POSITION_CLOSED = 10036,
| |||
INVALID_CLOSE_VOLUME = 10038,
| |||
CLOSE_ORDER_EXIST = 10039,
| |||
LIMIT_POSITIONS = 10040,
| |||
REJECT_CANCEL = 10041,
| |||
LONG_ONLY = 10042,
| |||
SHORT_ONLY = 10043,
| |||
CLOSE_ONLY = 10044,
| |||
FIFO_CLOSE = 10045,
| |||
HEDGE_PROHIBITED = 10046,
| |||
};
| |||
| |||
#define TRCSTR(X) EnumToString((TRADE_RETCODE)(X))
| |||
//+------------------------------------------------------------------+
| |||
| |||
//+------------------------------------------------------------------+
| |||
//| Simplified classification of retcodes, |
| |||
//| for more finegrained classification see severity groups below |
| |||
//+------------------------------------------------------------------+
| |||
#define IS_SERVICABLE(T) ((T) < TRADE_RETCODE_ERROR)
| |||
#define IS_TANGIBLE(T) ((T) >= TRADE_RETCODE_ERROR)
| |||
| |||
//+------------------------------------------------------------------+
| |||
//| Groups of retcodes by severity (from low to high) |
| |||
//| SEVERITY_INVALID and above require an intervention (user/program)|
| |||
//+------------------------------------------------------------------+
| |||
enum TRADE_RETCODE_SEVERITY
| |||
{
| |||
SEVERITY_UNDEFINED, // skip, output to log
| |||
SEVERITY_NORMAL, // keep normal operation
| |||
SEVERITY_RETRY, // retry (probably several times) on updated environment
| |||
SEVERITY_TRY_LATER, // wait a bit more and retry
| |||
SEVERITY_REJECT, // request is not processed, probably keep trying
| |||
//
| |||
SEVERITY_INVALID, // change input data and retry
| |||
SEVERITY_LIMITS, // check limits and adjust request
| |||
SEVERITY_PERMISSIONS, // notify user or adapt algorithm to settings
| |||
SEVERITY_ERROR, // output info to user or log
| |||
};
| |||
| |||
//+------------------------------------------------------------------+
| |||
//| Detect severity of a given retcode |
| |||
//| to make a decision on further actions |
| |||
//+------------------------------------------------------------------+
| |||
TRADE_RETCODE_SEVERITY TradeCodeSeverity(const uint retcode)
| |||
{
| |||
static const TRADE_RETCODE_SEVERITY severities[] =
| |||
{
| |||
SEVERITY_UNDEFINED,
| |||
SEVERITY_UNDEFINED,
| |||
SEVERITY_UNDEFINED,
| |||
SEVERITY_UNDEFINED,
| |||
SEVERITY_RETRY, // REQUOTE (10004)
| |||
SEVERITY_UNDEFINED,
| |||
SEVERITY_REJECT, // REJECT (10006)
| |||
SEVERITY_NORMAL, // CANCEL (10007)
| |||
SEVERITY_NORMAL, // PLACED (10008)
| |||
SEVERITY_NORMAL, // DONE (10009)
| |||
SEVERITY_NORMAL, // DONE_PARTIAL (10010)
| |||
SEVERITY_ERROR, // ERROR (10011)
| |||
SEVERITY_RETRY, // TIMEOUT (10012)
| |||
SEVERITY_INVALID, // INVALID (10013)
| |||
SEVERITY_INVALID, // INVALID_VOLUME (10014)
| |||
SEVERITY_INVALID, // INVALID_PRICE (10015)
| |||
SEVERITY_INVALID, // INVALID_STOPS (10016)
| |||
SEVERITY_PERMISSIONS, // TRADE_DISABLED (10017)
| |||
SEVERITY_TRY_LATER, // MARKET_CLOSED (10018)
| |||
SEVERITY_LIMITS, // NO_MONEY (10019)
| |||
SEVERITY_RETRY, // PRICE_CHANGED (10020) ~ REQUOTE
| |||
SEVERITY_RETRY, // PRICE_OFF (10021) ~ REQUOTE
| |||
SEVERITY_INVALID, // INVALID_EXPIRATION (10022)
| |||
SEVERITY_INVALID, // ORDER_CHANGED (10023)
| |||
SEVERITY_LIMITS, // TOO_MANY_REQUESTS (10024)
| |||
SEVERITY_NORMAL, // NO_CHANGES (10025)
| |||
SEVERITY_PERMISSIONS, // SERVER_DISABLES_AT (10026)
| |||
SEVERITY_PERMISSIONS, // CLIENT_DISABLES_AT (10027)
| |||
SEVERITY_TRY_LATER, // LOCKED (10028)
| |||
SEVERITY_TRY_LATER, // FROZEN (10029)
| |||
SEVERITY_INVALID, // INVALID_FILL (10030)
| |||
SEVERITY_TRY_LATER, // CONNECTION (10031)
| |||
SEVERITY_PERMISSIONS, // ONLY_REAL (10032)
| |||
SEVERITY_LIMITS, // LIMIT_ORDERS (10033)
| |||
SEVERITY_LIMITS, // LIMIT_VOLUME (10034)
| |||
SEVERITY_INVALID, // INVALID_ORDER (10035)
| |||
SEVERITY_NORMAL, // POSITION_CLOSED (10036)
| |||
SEVERITY_UNDEFINED,
| |||
SEVERITY_INVALID, // INVALID_CLOSE_VOLUME (10038)
| |||
SEVERITY_NORMAL, // CLOSE_ORDER_EXIST (10039)
| |||
SEVERITY_LIMITS, // LIMIT_POSITIONS (10040)
| |||
SEVERITY_REJECT, // REJECT_CANCEL (10041)
| |||
SEVERITY_PERMISSIONS, // LONG_ONLY (10042)
| |||
SEVERITY_PERMISSIONS, // SHORT_ONLY (10043)
| |||
SEVERITY_PERMISSIONS, // CLOSE_ONLY (10044)
| |||
SEVERITY_PERMISSIONS, // FIFO_CLOSE (10045)
| |||
SEVERITY_PERMISSIONS, // HEDGE_PROHIBITED (10046)
| |||
};
| |||
| |||
if(retcode == 0) return SEVERITY_NORMAL;
| |||
if(retcode < 10000 || retcode > HEDGE_PROHIBITED) return SEVERITY_UNDEFINED;
| |||
return severities[retcode - 10000];
| |||
};
| |||
//+------------------------------------------------------------------+
|