ФОРТС OrderSendAsync

 
Если отправить в OnTick заявки по нескольким инструментам через OrderSendAsync, то на следующий тик иногда отправленной заявки нет ни в списке заявок (OrdersTotal() и далее), ни в истории заявок, и объем позиции еще не изменился. Во всех случаях OrderSendAsync возвращает true. Через какое-то время заявка появляется. Методом тыка было установлено, что такое происходит при выставлении заявок по не главному инструменту (не тому, на график которого прикреплен советник). Кто-нибудь сталкивался с подобной проблемой? Могут разработчики прокомментировать ситуацию? И да, повторить ситуацию с OrderSend не удалось.
 
ranquild:
Если отправить в OnTick заявки по нескольким инструментам через OrderSendAsync, то на следующий тик иногда отправленной заявки нет ни в списке заявок (OrdersTotal() и далее), ни в истории заявок, и объем позиции еще не изменился. Во всех случаях OrderSendAsync возвращает true. Через какое-то время заявка появляется. Методом тыка было установлено, что такое происходит при выставлении заявок по не главному инструменту (не тому, на график которого прикреплен советник). Кто-нибудь сталкивался с подобной проблемой? Могут разработчики прокомментировать ситуацию? И да, повторить ситуацию с OrderSend не удалось.
Прежде чем баловаться с OrderSendSynch, Вам было бы не плохо изучить принципы отправки асинхронных операций. Прочитайте третью главу вот этой статьи: "Глава 3. Основы асинхронных торговых операций". Надеюсь поможет ответить на многие вопросы.
 

Думал, что после OrderSendAsync на следующем обработчике событий (OnTick, например) заявка должна быть в списке активных заявок с состоянием ORDER_STATE_REQUEST_ADD. Это так?

Если это неверно, в чем смысл состояний ORDER_STATE_REQUEST_*, если не для состояния асинхронно отправленной заявки?

 
ranquild:

Думал, что после OrderSendAsync на следующем обработчике событий (OnTick, например) заявка должна быть в списке активных заявок с состоянием ORDER_STATE_REQUEST_ADD. Это так?

Если это неверно, в чем смысл состояний ORDER_STATE_REQUEST_*, если не для состояния асинхронно отправленной заявки?

Она у вас действительно в списке, но в списке на сервере, а не в Вашем терминале. В асинхронном режиме Вы должны анализировать изменения своего торгового окружения (HistoryDealsTotal и т.п.). Получаемые события рассматривайте лишь как вспомогательные средства. 
 
Понял, спасибо.
 

Добрый день!

Думаю, что Вы не всё поняли.

Обработчиком OrderSendAsync() является OnTradeTransaction()

Когда Вы посылаете команду OrderSendAsync() Вы должны получить номер запроса,

по которому в  OnTradeTransaction() Вы получите билет ордера, а уж потом, по билету,

Вы узнаете, что произошло с ордером.

P/S Приход события TradeTransaction НЕ ГАРАНТИРОВАН! 

 
OrderSendAsync может и не вернуть id ордера. Я понимаю, что ситуация может быть решена через генерацию magic для каждого ордера. По-моему этот момент сильно переусложнен.
 
ranquild:
OrderSendAsync может и не вернуть id ордера. Я понимаю, что ситуация может быть решена через генерацию magic для каждого ордера. По-моему этот момент сильно переусложнен.
Не надо ничего усложнять и генерировать. Ответ был дан выше: анализируйте результаты OrderSendAsync через изменения торгового окружения. Событийную модель используйте как вспомогательное средство.
 
ranquild:
OrderSendAsync может и не вернуть id ордера. Я понимаю, что ситуация может быть решена через генерацию magic для каждого ордера. По-моему этот момент сильно переусложнен.
Такая реализация разработчиков....
 
C-4:
Не надо ничего усложнять и генерировать. Ответ был дан выше: анализируйте результаты OrderSendAsync через изменения торгового окружения. Событийную модель используйте как вспомогательное средство.
При отправке заявки через OrderSendAsync на руках нет id ордера, список активных заявок обновляется не сразу, позиция тем более. Конкретно на следующий тик после заявки (заметно при быстром движении цены на реальном счете) что из торгового окружения поможет узнать, что ранее была отправлена заявка? Не хочется делать свой механизм учета отправленных заявок.
 

У Вас ошибочное представление о механизме работы.

Всё вовремя обновляется и быстро...

Если Вам трудно сейчас реализовать OrderSendAsync(), то используйте OrderSend() 

 

P/S Плохая идея на ФОРТС использовать OnTick(), я бы рекомендовал OnBookEvent() 

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