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

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

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

Vasiliy Sokolov
21646
Vasiliy Sokolov 2015.04.08 10:46  
ranquild:

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

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

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

Добрый день!

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

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

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

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

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

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

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

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

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

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

 

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

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