MQL5Book/Include/TradeRetcode.mqh

147 lines
6.4 KiB
MQL5
Raw Permalink Normal View History

2025-05-30 16:09:41 +02:00
//+------------------------------------------------------------------+
//| 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];
};
//+------------------------------------------------------------------+