ORDER_STATE в тестере и в реале

 

Доброе утро, при разработке робота столкнулся со следующей проблемой:

выставляю отложенный ордер через TradeRequest, тикет сохраняю в TicketForEvent1, в функции OnTrade проверяю 

if(TicketForEvent1 > 0 AND HistoryOrderGetInteger(TicketForEvent1, ORDER_STATE) == ORDER_STATE_FILLED) {
    //do something
    TicketForEvent1 = 0;
}

проблема в том, что в тестере стратегий всё работает как и задумано, то есть код из условия выполняется, когда по этому ордеру открывается сделка, а на реальной торговле сразу после выставления ордера ORDER_STATE == ORDER_STATE_FILLED и код выполняется, хотя не должен.

 

В OnTrade перед проверкой вызывайте HistoryOrderSelect(TicketEvent1).

Либо же используйте OnTradeTransaction. Там без обращения к истории можно получить инфу, но только при хорошей связи.

 
fxsaber:

В OnTrade перед проверкой вызывайте HistoryOrderSelect(TicketEvent1).

Либо же используйте OnTradeTransaction. Там без обращения к истории можно получить инфу, но только при хорошей связи.


Связь тут не причём, того кто сказал что события в  OnTradeTransaction не гарантированы давно расстреляли ))

 
Sergey Chalyshev:

Связь тут не причём, того кто сказал что события в  OnTradeTransaction не гарантированы давно расстреляли ))

Сарказм не однозначный, поэтому пояснить бы.

 
fxsaber:

Сарказм не однозначный, поэтому пояснить бы.


Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Как правильно открыть ордер по рынку?

prostotrader, 2017.02.04 11:45

Вы наверное, не видели сообщение от разработчиков, что теперь, OnTradeTransaction() гарантировано.

Кроме того, транзакции могут потеряться при доставке от сервера к терминалу.
Что касается этой фразы.

Судя по всему - она осталась из документации к одной из начальных версий терминала с асинхронной торговли. В ближайшее время уберём. Виновные будут расстреляны.

 

Сколько ставить паузу? 1 сек 2, а может 10?

2016.12.14 22:01:41.371 Trades  'xxxxx': cancel order #49932961 buy limit 1.00 CHMF-6.17 at 92501 placed for execution in 64873.549 ms

Добавлено

Не забывайте, что Вы работаете с приложением КЛИЕНТ - СЕРВЕР (запрос-ответ) 


Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

"Плавающая" ошибка PositionSelect()

MQ Alexander, 2016.08.03 18:00

Что касается ордеров, позиций и сделок.

Как написано в хелпе - последовательность поступления транзакций не гарантирована - транзакция переноса ордера в историю может быть получена раньше, чем транзакция сделки.
Изменение позиции в терминале происходит строго в результате получения сделочной транзакции, соответственно её получение является гарантией того что позиция поменялась.
Получение транзакции переноса ордера в историю, гарантирует только то, что ордер перестал быть активным (открытым) и был перенесён в историю ордеров.


Что касается этой фразы.

Судя по всему - она осталась из документации к одной из начальных версий терминала с асинхронной торговли. В ближайшее время уберём. Виновные будут расстреляны.


 
Vladimir Karputov:

Значит, я не ошибся.

 
fxsaber:

В OnTrade перед проверкой вызывайте HistoryOrderSelect(TicketEvent1).

Либо же используйте OnTradeTransaction. Там без обращения к истории можно получить инфу, но только при хорошей связи.


Спасибо, ваш совет помог. Почему-то мне показалось, что раз HistoryOrderGetInteger требует в аргументах тикет, то HistoryOrderSelect делать не нужно

 
JiffaR:

Спасибо, ваш совет помог. Почему-то мне показалось, что раз HistoryOrderGetInteger требует в аргументах тикет, то HistoryOrderSelect делать не нужно

Он требует по той причине, что есть еще HistorySelect.

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