Результат отправки запроса: структура MqlTradeResult

В ответ на торговый запрос, выполняемый функциями OrderSend или OrderSendAsync, которые мы рассмотрим в следующем разделе, сервер возвращает результаты обработки запроса. Для этой цели используется специальная предопределенная структура MqlTradeResult.

struct MqlTradeResult 

   uint     retcode;          // Код результата операции 
   ulong    deal;             // Тикет сделки, если она совершена 
   ulong    order;            // Тикет ордера, если он выставлен 
   double   volume;           // Объем сделки, подтверждённый брокером 
   double   price;            // Цена в сделке, подтверждённая брокером 
   double   bid;              // Текущая рыночная цена спроса 
   double   ask;              // Текущая рыночная цена предложения 
   string   comment;          // Комментарий брокера к операции 
   uint     request_id;       // Идентификатор запроса, устанавливается терминалом при отправке  
   uint     retcode_external// Код ответа внешней торговой системы 
};

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

Поле

Описание

retcode

Код возврата торгового сервера

deal

Тикет сделки, если она совершена (при торговой операции TRADE_ACTION_DEAL)

order

Тикет ордера, если он выставлен (при торговой операции TRADE_ACTION_PENDING)

volume

Объем сделки, подтверждённый брокером (зависит от режимов исполнения ордера)

price

Цена в сделке, подтверждённая брокером (зависит от поля deviation в торговом запросе, режима исполнения и торговой операции)

bid

Текущая рыночная цена спроса

ask

Текущая рыночная цена предложения

comment

Комментарий брокера к операции (по умолчанию заполняется расшифровкой кода возврата торгового сервера)

request_id

Идентификатор запроса, проставляемый терминалом при отсылке на торговый сервер

retcode_external

Код ошибки, которую вернула внешняя торговая система

Как мы увидим далее, при проведении торговых операций переменная типа MqlTradeResult передается вторым параметром по ссылке в функции OrderSend или OrderSendAsync, и в ней возвращается результат.

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

Наличие и виды ошибок в поле retcode_external зависят от брокера и внешней торговой системы, в которую выводятся торговые операции.

Анализировать результаты запросов требуется по-разному, в зависимости от сути торговых операций и способа их отправки. Мы займемся этим в последующих разделах, посвященных конкретным действиям: совершению покупок и продаж по рынку, установке и удалению отложенных ордеров, модификации и закрытию позиций.