Отлично видно и по столбцу времени и по числовым показателям советника, что длительность выполнения торгового приказа никак не сказывается на череде событий OnTradeTransaction. Вся асинхронность летит к чертям! Умудрились же так напортачить. Build 1755.
Запускаем на MQ-Demo на каком-нибудь медленно двигающемся символе. Например, EURHUF.
Скрипт открывает BUY-позицию с TP = Bid. Т.е. позиция должна сразу закрыться. Но TP будет проверяться на соответствие условию акцептирования только на следующем тике!
Никакого мгновенного закрытия позиции не произойдет, пока не придет новый тик. Более того, если следующий у следующего тика будет Bid < TP, то TP так и останется без акцепта.
Это же касается и лимитных ордеров (закомментированная строка). В Тестере - аналогичная ситуация.
Запускаем на MQ-Demo на каком-нибудь медленно двигающемся символе. Например, EURHUF.
Скрипт открывает BUY-позицию с TP = Bid. Т.е. позиция должна сразу закрыться. Но TP будет проверяться на соответствие условию акцептирования только на следующем тике!
Никакого мгновенного закрытия позиции не произойдет, пока не придет новый тик. Более того, если следующий у следующего тика будет Bid < TP, то TP так и останется без акцепта.
Это же касается и лимитных ордеров (закомментированная строка). В Тестере - аналогичная ситуация.
Пожалуйста в вопросах по MQL5 прикладывайте чистый MQL5 код.
Надоело видеть Вашу НАСТЫРНУЮ рекламу по поводу и без.
Открываю руками BUY-позицию на двух торговых демо-серверах
RoboForex-MetaTrader 5
FXOpen-MT5
Строки одного цвета обозначают одно и то же. Однако, хорошо видно, что они идут в разных очередностях. У Робо сообщение о выполнении приказа приходит после выполнения сделки. А у опенов - ДО! По этой причине OrderSend возвращает удачу, но сделки еще нет. Т.е. получаем несинхронизированность OrderSend с историей, что есть баг. В чем причина?
Если ордер отправдяется во внешнюю торговую систему, то торговый сервер MetaTrader 5 не ждет ответа от неё и сразу возвращает результат запроса как "ордер размещен". По этой причине OrderSend всегда вернет deal=0, так как информации о совершенной сделке еще нет. Ловите её в OnTrade или OnTradeTransaction.
Из Агента через фрейм нужно вытащить всю необходимую инфу для анализа.
Вся череда событий OnTradeTransaction идет после завершения OrderSend.
Советник
Руками отправляем торговый приказ.
Лог
2018.02.14 09:41:46.671 '8854170': instant sell 1.00 EURUSD at 1.23673 2018.02.14 09:41:46.853 '8854170': accepted instant sell 1.00 EURUSD at 1.23673 2018.02.14 09:41:46.853 '8854170': deal #192088422 sell 1.00 EURUSD at 1.23673 done (based on order #208541700) 2018.02.14 09:41:46.853 '8854170': order #208541700 sell 1.00 / 1.00 EURUSD at 1.23673 done in 190.608 msРезультат советника
Отлично видно и по столбцу времени и по числовым показателям советника, что длительность выполнения торгового приказа никак не сказывается на череде событий OnTradeTransaction. Вся асинхронность летит к чертям! Умудрились же так напортачить. Build 1755.
Символ имеет Digits == 3
при этом в логе гораздо больше цифр выводится
Запускаем на MQ-Demo на каком-нибудь медленно двигающемся символе. Например, EURHUF.
Скрипт открывает BUY-позицию с TP = Bid. Т.е. позиция должна сразу закрыться. Но TP будет проверяться на соответствие условию акцептирования только на следующем тике!
Никакого мгновенного закрытия позиции не произойдет, пока не придет новый тик. Более того, если следующий у следующего тика будет Bid < TP, то TP так и останется без акцепта.
Это же касается и лимитных ордеров (закомментированная строка). В Тестере - аналогичная ситуация.
Гадкий баг не Терминала, а Платформы MT5
Запускаем на MQ-Demo на каком-нибудь медленно двигающемся символе. Например, EURHUF.
Скрипт открывает BUY-позицию с TP = Bid. Т.е. позиция должна сразу закрыться. Но TP будет проверяться на соответствие условию акцептирования только на следующем тике!
Никакого мгновенного закрытия позиции не произойдет, пока не придет новый тик. Более того, если следующий у следующего тика будет Bid < TP, то TP так и останется без акцепта.
Это же касается и лимитных ордеров (закомментированная строка). В Тестере - аналогичная ситуация.
Пожалуйста в вопросах по MQL5 прикладывайте чистый MQL5 код.
Надоело видеть Вашу НАСТЫРНУЮ рекламу по поводу и без.Пожалуйста в вопросах по MQL5 прикладывайте чистый MQL5 код.
Баг не касается MQL5.
Надоело видеть Вашу НАСТЫРНУЮ рекламу по поводу и без.
рекламу чего?
Открываю руками BUY-позицию на двух торговых демо-серверах
RoboForex-MetaTrader 5
FXOpen-MT5
Строки одного цвета обозначают одно и то же. Однако, хорошо видно, что они идут в разных очередностях. У Робо сообщение о выполнении приказа приходит после выполнения сделки. А у опенов - ДО! По этой причине OrderSend возвращает удачу, но сделки еще нет. Т.е. получаем несинхронизированность OrderSend с историей, что есть баг. В чем причина?
Если ордер отправдяется во внешнюю торговую систему, то торговый сервер MetaTrader 5 не ждет ответа от неё и сразу возвращает результат запроса как "ордер размещен". По этой причине OrderSend всегда вернет deal=0, так как информации о совершенной сделке еще нет. Ловите её в OnTrade или OnTradeTransaction.
Пример слушателя торговых событий дан в статье С чего начать при создании торгового робота для Московской биржи MOEX - TradeTransactionListener.mq5