Нужно ставить RefreshRates() каждый раз перед t=OrderSend(Symbol(),OP_SELL,Lot,Bid,5,SL,TP,NULL,0,0,CLR_NONE);
Нужно ставить RefreshRates() каждый раз перед t=OrderSend(Symbol(),OP_SELL,Lot,Bid,5,SL,TP,NULL,0,0,CLR_NONE);
Ну поставил бы я RefreshRates()... Это не изменило бы того, что эксперт не стал выполнять цикл попыток открытия ордера!
А потом, насколько я понял, Bid в аргументах OrderSend практически аналогично применению RefreshRates.
Лучше по сигналу включить тригер о необходимости открытия/изменения позиции
(тригер - просто переменная, включен = 1, выключен = 0)
А дальше на каждом тике пытаемся один раз выполнить открытие.
Если удалось, или прошел заданный таймаут, или цена ушла слишком далеко, сбросываем тригер (=0)
Иначе выходим до следующего тика с включенным тригером.
Нужно ставить RefreshRates() каждый раз перед t=OrderSend(Symbol(),OP_SELL,Lot,Bid,5,SL,TP,NULL,0,0,CLR_NONE);
Ну поставил бы я RefreshRates()... Это не изменило бы того, что эксперт не стал выполнять цикл попыток открытия ордера!
А потом, насколько я понял, Bid в аргументах OrderSend практически аналогично применению RefreshRates.
Во время выполнения start() он не меняется, а реальная цена может уйти.
RefreshRates обновляет Bid при выполнении скрипта.
Нет, Bid известен на момент запуска функции start().
Во время выполнения start() он не меняется, а реальная цена может уйти.
RefreshRates обновляет Bid при выполнении скрипта.
OK. С этим я согласен. И метод открытия с триггером - понятно.
Но почему-же все-таки цикл НЕ ВЫПОЛНИЛСЯ ?
Надо бы анализировать GetLastError
Похоже, следующие запросы просто-напросто сам клиентский терминал
не пропустил
и никогда никаких проверок не делаю.
Через минуту (уже на другом запуске функции start()) если ордер не открылся делаю повторную посылку на его открытие и так далее. Давно уже так делаю (скоро уже год будет!) - пока что всё устраивало. За минуту цена туда и обратно ещё сходит и в итоге всё будет зависеть от вашей стратегии а не от скорости открытия ордера.
Я тоже, как и Mak, обхожусь без циклов. На каждом новом выполнении функции start() нужно пытаться открыть ордер. Во-первых, приходит реальный тик, во-вторых обновленное значение Bid().
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Т.е. эксперт должен совершить 5 попыток открытия в случае неудачи. Однако в логах видим, что этого не происходит:
Всю голову сломал, но так и не понял, что я сделал неправильно?
Полные логи - на https://www.mql5.com/ru/users/owl/