Скачать MetaTrader 5

ФОРТС OrderSendAsync

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

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

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

Vasiliy Sokolov
30832
Vasiliy Sokolov  
ranquild:

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

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

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

Добрый день!

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

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

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

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

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

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

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

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

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

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

 

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

12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий