Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Скорее всего правильным решением будет вариант с семафором, чтоб не блокировать работу эксперта. У меня аналогичная проблема, делаю семафор.
Торговля по символу блокируется после успешной отсылки ордера. Разблокируется в OnTrade() после совершения сделки.
Если ордер успешно отослан,то результат как бы обязан появится в истории..А если не появляется и эксперт висит в цикле while,значит все равно что то уже не в порядке..
Интересно,что реализация обнуления переменной через OnTrade(),которую привел выше,снижает эффективность на 30%.При этом количество сделок не меняется,по тому же алгоритму ..
Все остальные реализации в тестере,в режиме задержек,ничего не меняют.
HistoryDealSelect(DealTicket)
в OnTick/OnTimer конфликтует с конструкцией
в OnTtrade. Сама то выполняется правильно, а вот HistoryDealsTotal() возвращает чёрт знает что. Приходится отключать.
1. Если ордер успешно отослан,то результат как бы обязан появится в истории..А если не появляется и эксперт висит в цикле while,значит все равно что то уже не в порядке..
2. Интересно,что реализация обнуления переменной через OnTrade(),которую привел выше,снижает эффективность на 30%.При этом количество сделок не меняется,по тому же алгоритму ..
Все остальные реализации в тестере,в режиме задержек,ничего не меняют.
1. Я делаю отказоустойчивую систему. Которая продолжает правильно работать, даже если что-то не в порядке.
2. Вы про какую эффективность? Скорость работы в тестере?
1. Я делаю отказоустойчивую систему. Которая продолжает правильно работать, даже если что-то не в порядке.
2. Вы про какую эффективность? Скорость работы в тестере?
Если ордер успешно отослан,то результат как бы обязан появится в истории..А если не появляется и эксперт висит в цикле while,значит все равно что то уже не в порядке..
Интересно,что реализация обнуления переменной через OnTrade(),которую привел выше,снижает эффективность на 30%.При этом количество сделок не меняется,по тому же алгоритму ..
Все остальные реализации в тестере,в режиме задержек,ничего не меняют.
Что значит, ордер успешно отослан ? Можно отослать любую чушь. Правда, в MT5, разработчики позаботились о "защите от дураков', и явно ошибочный ордер на сервер не уйдёт. Но, бывает, что торговые условия изменились во время обработки ордера, и тогда OrderSend вернёт false и соответствующую ошибку. Если OrderSend вернул true, то сделка однозначно совершилась, и result.deals однозначно содержит её тиккет. Так что, поиск её в истории должен однозначно завершиться.
Необходимость проверки истории вызвана асинхронностью процессов в терминале.
Парадоксально, но советник, пославший запрос на исполнение сделки, и уже получивший ответ, что сделка совершена, вынужден ждать, когда-же и терминал об этом узнает и скорректирует свою историю и позиции !!! Я понимаю, требование минимальных задержек при исполнении торговых операций - веление времени, но нельзя же доводить до абсурда.
Я думаю, что терминал никак не должен вернуть значение, что позиция существует, если советник уже получил ответ, что она закрыта. На сегодняшний день это условие не выполняется.
P.S. Кстати, всё это касается и отложников.
Что значит, ордер успешно отослан ? Можно отослать любую чушь. Правда, в MT5, разработчики позаботились о "защите от дураков', и явно ошибочный ордер на сервер не уйдёт. Но, бывает, что торговые условия изменились во время обработки ордера, и тогда OrderSend вернёт false и соответствующую ошибку. Если OrderSend вернул true, то сделка однозначно совершилась, и result.deals однозначно содержит её тиккет. Так что, поиск её в истории должен однозначно завершиться.
Необходимость проверки истории вызвана асинхронностью процессов в терминале.
Парадоксально, но советник, пославший запрос на исполнение сделки, и уже получивший ответ, что сделка совершена, вынужден ждать, когда-же и терминал об этом узнает и скорректирует свою историю и позиции !!! Я понимаю, требование минимальных задержек при исполнении торговых операций - веление времени, но нельзя же доводить до абсурда.
Я думаю, что терминал никак не должен вернуть значение, что позиция существует, если советник уже получил ответ, что она закрыта. На сегодняшний день это условие не выполняется.
P.S. Кстати, всё это касается и отложников.
Это и имел ввиду.В цикл входит только в результате OrderSend()==true.Соответственно по логике должен появиться результат в истории,что и ожидаем.
Парадоксально, но советник, пославший запрос на исполнение сделки, и уже получивший ответ, что сделка совершена, вынужден ждать, когда-же и терминал об этом узнает и скорректирует свою историю и позиции !!! Я понимаю, требование минимальных задержек при исполнении торговых операций - веление времени, но нельзя же доводить до абсурда.
Я думаю, что терминал никак не должен вернуть значение, что позиция существует, если советник уже получил ответ, что она закрыта. На сегодняшний день это условие не выполняется.
Ах вот в чем фишка....Ну теперь ясно :-)
Кстати подумал,что и закрывать позиции требуется таким макаром...А то сработает закрывающий ордер и пока туда-сюда идет инфа,попытается еще раз закрыть...
Кстати подумал,что и закрывать позиции требуется таким макаром...А то сработает закрывающий ордер и пока туда-сюда идет инфа,попытается еще раз закрыть...
Вот именно, именно это и наблюдал на демо, но очень редко, трудно уловить, только при нарушении логики, анализируя логи эксперта и терминала.
Думаю, это подводная мина замедленного действия под автотрейдинг в MQL5.
Или разработчикам надо будет ходить и всем объяснять, что если PositinSelect вернула false, то это вовсе не означает, что позиции не существует и нужны дополнительные проверки.
Думаю, это подводная мина замедленного действия под автотрейдинг в MQL5