Как найти идентификатор запроса?

 

Добрый день!

Из справки (MQ):

Структура результата торгового запроса (MqlTradeResult)

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

Отсылая асинхронный ордер я получаю идентификатор запроса ( request_id ). 

 

if ( OrderSendAsync( request, result ) )
{
  if ( result.retcode == TRADE_RETCODE_PLACED ) 
  {
    order_id = result.request_id;
  }
}

 

Где искать request_id, если что-то случилось с OnTradeTransaction ( в истории этого идентификатора нет  )?

Может быть разработчики введут скоро функцию:

bool  HistoryOrderSelectById(
   uint  request_id      // Идентификатор запроса
   );
 
Mikalas:

Добрый день!

Из справки (MQ):

Структура результата торгового запроса (MqlTradeResult)

Отсылая асинхронный ордер я получаю идентификатор запроса ( request_id ). 

 

 

Где искать request_id, если что-то случилось с OnTradeTransaction ( в истории этого идентификатора нет  )?

Может быть разработчики введут скоро функцию:

А, собственно зачем request_id ? Берите тикет ордера и по нему штатно выбирайте ордер...

 
elugovoy:

А, собственно зачем request_id ? Берите тикет ордера и по нему штатно выбирайте ордер...

Он не знает тикет ордера. Он отправляет асинхронные запросы и желает знать как они обработаны, а событие OnTradeTransaction не гарантировано.

 
Можно организовать свой id используя magic.
 
Yurich:
Можно организовать свой id используя magic.

Хорошая идея, НО.

А если не один ордер, а несколько, то как различить?

 
Mikalas:

Хорошая идея, НО.

А если не один ордер, а несколько, то как различить?

Каждому ордеру свой magic, каждому эксперту свой диапазон magic, если эксперты работают на одном инструменте.
 

Yourich!

Прикольно!

У меня работает 50 экспертов, в день 2000 транзакций.

Советники не будут "вылезать" из истории :) 

Ведь нет функции HistoryOrderSelectByMagic()

А разработчикам создать новую функцию не очень сложно и даже очень нужно! 

bool  HistoryOrderSelectById(
   uint  request_id      // Идентификатор запроса
   );
 
Mikalas:

Ведь нет функции HistoryOrderSelectByMagic()

А разработчикам создать новую функцию не очень сложно и даже очень нужно! 

Mikalas, поддержу тут разрабов... Если брать возможности Стандартной библиотеки...

Стандартная библиотека на то и стандартная, чтобы включать общие классы и объекты... и это не куча всего и вся...

Имхо, для такой частной задачи нужно создавать свой класс-потомок (от CHistoryOrderInfo) с методом HistoryOrderSelectById().

То же касается и обычной функции HistoryOrderSelect()...

 

denkir!

Зачем тогда   OrderSendAsync, если потом его (ордер) нельзя найти стандартными средствами?  

 
Mikalas:

denkir!

Зачем тогда   OrderSendAsync, если потом его (ордер) нельзя найти?  

Это вопрос не ко мне :-)

Тут, насколько понял, коллеги пытаются подсказать, как можно выудить инфу о "своих" исторических ордерах, обитающих в истории ордеров и сделок... самый простой и надёжный метод - считывать комментарий ордера, куда можно зашить и id, и магик...

 

denkir!

Нельзя "зашить" ID в комментарий, потому что ID возвращает терминал(result), а комментарий в request! 

Причина обращения: