ФОРТС: OnTradeTransaction() коды возврата - страница 6 1234567891011 Новый комментарий Dmitry Fedoseev 2015.11.25 16:07 #51 Офигеть! Время установки - 15:07:31.849Время удаления - 15:07:31.865И уже 25-ую неделю перетирается Invalid request, и это на полном серьезе. Теперь понятно почему сервисдеск молчит. Mikhail Filimonov 2015.11.25 18:54 #52 В каких случаях советник может получить код:TRADE_RETCODE_REJECT Mikhail Filimonov 2015.11.26 14:05 #53 Сергей!Ты оказался прав. Бага MQВ терминале не обновляется состояние ордера:2015.11.26 15:41:56.094 Forts_trader (GAZR-12.15,H1) Remove: Ордер не отослан! Причина: Неправильный запрос; Билет = 24041883 2015.11.26 15:41:56.094 Forts_trader (GAZR-12.15,H1) DEBUG: order state = ORDER_STATE_STARTED 2015.11.26 15:41:56.068 Forts_trader (GAZR-12.15,H1) CheckOrders: Sell ордер установлен. Билет = 24041883 Ордер я получил, а его состояние так и "висит" ORDER_STATE_STARTED [Удален] 2015.11.26 14:23 #54 Михаил: Сергей!Ты оказался прав. Бага MQВ терминале не обновляется состояние ордера: Ордер я получил, а его состояние так и "висит" ORDER_STATE_STARTED Михаил, ордер продолжает существовать после этих сообщений? По нему, случайно, за несколько мс до этого сделка не могла исполниться? Mikhail Filimonov 2015.11.26 14:29 #55 Alexey Kozitsyn: Михаил, ордер продолжает существовать после этих сообщений? По нему, случайно, за несколько мс до этого сделка не могла исполниться?Да, ордер существует существует и после ошибки.Да это и не важно, потому что перед удалением (модификацией) делается проверка что ордер существует:void COrder::Remove() { if ( ticket > 0 ) { if ( OrderSelect( ticket ) ) { ENUM_ORDER_STATE ord_state = ENUM_ORDER_STATE( OrderGetInteger( ORDER_STATE ) ); if ( ( ord_state == ORDER_STATE_REQUEST_MODIFY ) || ( ord_state == ORDER_STATE_REQUEST_CANCEL ) || ( ord_state == ORDER_STATE_REQUEST_ADD ) ) return; //........................................ Other code } } } [Удален] 2015.11.26 14:32 #56 Почему спрашиваю, у меня сложилась вот такая ситуация:Журнал (эксперты):2015.11.26 18:05:16.725 FROG (RTS-12.15,M1) TradeRemoveCycle case ORDER_STATE_PLACED: ОШИБКА #4756, retcode = 10013. Ордер не удален! 2015.11.26 18:05:16.691 FROG (RTS-12.15,M1) TradeRemoveCycle: ORDER_STATE_PLACED Видно, что ордер принят (значит с ним можно работать), однако запрос не верный.В журнале лог такой:2015.11.26 18:05:16.725 Trades '1007642': failed cancel order #35817112 buy 0.00 at market [Invalid request] 2015.11.26 18:05:16.693 Trades '1007642': cancel order #35817112 buy limit 1.00 RTS-12.15 at 87780 2015.11.26 18:05:16.691 Trades '1007642': deal #4375646 buy 1.00 RTS-12.15 at 87780 done (based on order #35817112) Т.е. в момент удаления ордера по нему исполнилась сделка. А далее, робот пытается удалить ордер, которого уже нет.Вот сейчас решаю, как быть. Особенности языка mql5, тонкости Цена не доходя до Новая версия платформы MetaTrader [Удален] 2015.11.26 14:32 #57 Михаил: Да, ордер существует существует и после ошибки.Да это и не важно, потому что перед удалением (модификацией) делается проверка что ордер существует:Как видите, у меня тоже делается... Mikhail Filimonov 2015.11.26 14:34 #58 Alexey Kozitsyn: Почему спрашиваю, у меня сложилась вот такая ситуация:Журнал (эксперты):Видно, что ордер принят (значит с ним можно работать), однако запрос не верный.В журнале лог такой:Т.е. в момент удаления ордера по нему исполнилась сделка. А далее, робот пытается удалить ордер, которого уже нет.Вот сейчас решаю, как быть. Я тоже наступал на эти грабли, но решил проблему.Вы какой командой устанавливаете ордер OrderSend() или OrderSendAsync()? [Удален] 2015.11.26 14:35 #59 Михаил: Я тоже наступал на эти грабли, но решил проблему.Вы какой командой устанавливаете ордер OrderSend() или OrderSendAsync()? OrderSend(). А в чем разница в этом случае? Mikhail Filimonov 2015.11.26 14:39 #60 Alexey Kozitsyn: OrderSend()Дело в том, что когда исполняется ордер, Вы не контролируете его исполнение и поэтому не блокируете OnTick() или OnBookEvent()Что бы быстро контролировать исполненный ордер, нужно обрабатывать событие сделки в OnTradeTransaction()Скоро выложу код, как это сделать... Почему открывает сделку по Помощь в кодировании Скорость исполнения 1234567891011 Новый комментарий
Офигеть!
Время установки - 15:07:31.849
Время удаления - 15:07:31.865
И уже 25-ую неделю перетирается Invalid request, и это на полном серьезе. Теперь понятно почему сервисдеск молчит.
В каких случаях советник может получить код:
TRADE_RETCODE_REJECTСергей!
Ты оказался прав. Бага MQ
В терминале не обновляется состояние ордера:
Ордер я получил, а его состояние так и "висит" ORDER_STATE_STARTED
Сергей!
Ты оказался прав. Бага MQ
В терминале не обновляется состояние ордера:
Ордер я получил, а его состояние так и "висит" ORDER_STATE_STARTED
Михаил, ордер продолжает существовать после этих сообщений? По нему, случайно, за несколько мс до этого сделка не могла исполниться?
Михаил, ордер продолжает существовать после этих сообщений? По нему, случайно, за несколько мс до этого сделка не могла исполниться?
Да, ордер существует существует и после ошибки.
Да это и не важно, потому что перед удалением (модификацией) делается проверка что ордер существует:
Почему спрашиваю, у меня сложилась вот такая ситуация:
Журнал (эксперты):
Видно, что ордер принят (значит с ним можно работать), однако запрос не верный.
В журнале лог такой:
Т.е. в момент удаления ордера по нему исполнилась сделка. А далее, робот пытается удалить ордер, которого уже нет.
Вот сейчас решаю, как быть.
Да, ордер существует существует и после ошибки.
Да это и не важно, потому что перед удалением (модификацией) делается проверка что ордер существует:
Почему спрашиваю, у меня сложилась вот такая ситуация:
Журнал (эксперты):
Видно, что ордер принят (значит с ним можно работать), однако запрос не верный.
В журнале лог такой:
Т.е. в момент удаления ордера по нему исполнилась сделка. А далее, робот пытается удалить ордер, которого уже нет.
Вот сейчас решаю, как быть.
Я тоже наступал на эти грабли, но решил проблему.
Вы какой командой устанавливаете ордер OrderSend() или OrderSendAsync()?
Я тоже наступал на эти грабли, но решил проблему.
Вы какой командой устанавливаете ордер OrderSend() или OrderSendAsync()?
OrderSend()
Дело в том, что когда исполняется ордер, Вы не контролируете его исполнение и поэтому не блокируете OnTick() или OnBookEvent()
Что бы быстро контролировать исполненный ордер, нужно обрабатывать событие сделки в OnTradeTransaction()
Скоро выложу код, как это сделать...