Структура проверки запроса MqlTradeCheckResult

Прежде чем отправить торговому серверу запрос на торговую операцию, рекомендуется проверить, что он заполнен без формальных ошибок. Проверка осуществляется функцией OrderCheck, которой передается сам проверяемый запрос в структуре MqlTradeRequest и приемная переменная типа структуры MqlTradeCheckResult, куда и будет записан результат проверки.

Помимо корректности запроса структура позволит оценить состояние счета после выполнения торговой операции, в частности, баланс, средства и маржу.

struct MqlTradeCheckResult 

   uint   retcode;      // Код ответа
   double balance;      // Баланс после совершения сделки
   double equity;       // Эквити после совершения сделки
   double profit;       // Плавающая прибыль
   double margin;       // Маржинальные требования
   double margin_free;  // Свободная маржа
   double margin_level// Уровень маржи
   string comment;      // Комментарий к коду ответа (описание ошибки)
};

В следующей таблице приводится описание полей.

Поле

Описание

retcode

Предполагаемый код возврата

balance

Значение баланса, которое будет после выполнения торговой операции

equity

Значение собственных средств, которое будет после выполнения торговой операции

profit

Значение плавающей прибыли, которое будет после выполнения торговой операции

margin

Общий размер заблокированной маржи после торговой операции

margin_free

Размер свободных собственных средств, которые останутся после выполнения торговой операции

margin_level

Уровень маржи, который установится после выполнения торговой операции

comment

Комментарий к коду ответа, описание ошибки

В структуре, заполненной вызовом OrderCheck, поле retcode будет содержать код результата из числа тех, что платформа поддерживает для обработки реальных торговых запросов и проставляет в аналогичное поле retcode структуры MqlTradeResult после вызова торговых функций OrderSend и OrderSendAsync.

Константы с кодами возврата представлены в документации MQL5. Для их более наглядного вывода в журнал при отладке экспертов было определено прикладное перечисление TRADE_RETCODE в файле TradeRetcode.mqh. В нем все элементы имеют идентификаторы, совпадающие со встроенными константами, но без общего префикса "TRADE_RETCODE_". Например,

enum TRADE_RETCODE
{
   OK_0           = 0,      // нет стандартной константы
   REQUOTE        = 10004,  // TRADE_RETCODE_REQUOTE
   REJECT         = 10006,  // TRADE_RETCODE_REJECT
   CANCEL         = 10007,  // TRADE_RETCODE_CANCEL
   PLACED         = 10008,  // TRADE_RETCODE_PLACED
   DONE           = 10009,  // TRADE_RETCODE_DONE
   DONE_PARTIAL   = 10010,  // TRADE_RETCODE_DONE_PARTIAL
   ERROR          = 10011,  // TRADE_RETCODE_ERROR
   TIMEOUT        = 10012,  // TRADE_RETCODE_TIMEOUT
   INVALID        = 10013,  // TRADE_RETCODE_INVALID
   INVALID_VOLUME = 10014,  // TRADE_RETCODE_INVALID_VOLUME
   INVALID_PRICE  = 10015,  // TRADE_RETCODE_INVALID_PRICE
   INVALID_STOPS  = 10016,  // TRADE_RETCODE_INVALID_STOPS
   TRADE_DISABLED = 10017,  // TRADE_RETCODE_TRADE_DISABLED
   MARKET_CLOSED  = 10018,  // TRADE_RETCODE_MARKET_CLOSED
   ...
};
   
#define TRCSTR(XEnumToString((TRADE_RETCODE)(X))

Таким образом, использование TRCSTR(r.retcode), где r — структура, предоставит минимальное описание числового кода.

Пример применения макроса и анализа структуры мы рассмотрим в следующем разделе про функцию OrderCheck.