Добрый день коллеги. Два вопроса.
1. Каким флагом (функцией) проверяется сработавший ExpertRemove()?
2. Кто-нибудь сталкивался с такой проблемой (возникло один раз, хочу понять насколько такое часто происходит) - Поток свободен, OrderDelete() на отложенный ордер вернул true, а ордер не удалился. По журналу ошибка - поток занят.
Надо что-то в Deinit делать, если есть такая нужда. Например писать флаг в Глобальную переменную терминала через
GlobalVariableSet |
Вот из хелпа.
Остановка эксперта не происходит немедленно при вызове функции ExpertRemove(), производится лишь взвод флага для прекращения работы эксперта. Т.е., любое следующее событие эксперт обрабатывать уже не будет, произойдет вызов OnDeinit() и выгрузка с удалением с графика.
Остановка эксперта не происходит немедленно при вызове функции ExpertRemove(), производится лишь взвод флага для прекращения работы эксперта. Т.е., любое следующее событие эксперт обрабатывать уже не будет, произойдет вызов OnDeinit() и выгрузка с удалением с графика.
Это я читал. Вопрос в том, есть ли у меня доступ к этому флагу.
Это я читал. Вопрос в том, есть ли у меня доступ к этому флагу.
Просто надо засомневаться, что OrderDelete() вернул true и перед удалением советника проверять всё что надо.
1. Каким флагом (функцией) проверяется сработавший ExpertRemove()?
_StopFlag, но есть особенность в MT5 (возможно, и в MT4)
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Особенности языка mql5, тонкости и приёмы работы
fxsaber, 2017.08.16 11:11
В тестере IsStopped() всегда возращает ноль (не false). Поэтому рассчитывать на взаимодействие этого флага с ExpertRemove(), как на реале, ошибочно в тестере.
2. Кто-нибудь сталкивался с такой проблемой (возникло один раз, хочу понять насколько такое часто происходит) - Поток свободен, OrderDelete() на отложенный ордер вернул true, а ордер не удалился. По журналу ошибка - поток занят.
Скорее всего, OrderDelete вернул false. Иначе это очень серьезный баг, о котором еще никто за годы не сообщал.
Скорее всего, OrderDelete вернул false. Иначе это очень серьезный баг, о котором еще никто за годы не сообщал.
bb = OrderDelete( maso [ i ] ); else if ( OrderCloseTime() == nd );
if ( !bb ) Alert ( ExName + " Ошибка удаления ордера" );
Это выдержка из программы. Сообщения об ошибке не было.
_StopFlag, но есть особенность в MT5 (возможно, и в MT4)
Я вот тоже думал, что он. Но нигде нет конкретного описания, что это именно он. Везде написано "принудительное прерываение программы"... а что это за прерывание не написано.
Я вот тоже думал, что он. Но нигде нет конкретного описания, что это именно он. Везде написано "принудительное прерываение программы"... а что это за прерывание не написано.
Прерывание может произойти ИСКЛЮЧИТЕЛЬНО ПОСЛЕ того как закончится выполнение события. То-есть если ExpertRemove() вызван из void OnTick(), то эксперт будет удалён с графика после того как выполнение программы дойдёт до последней фигурной скобки или команды return.
bb = OrderDelete( maso [ i ] ); else if ( OrderCloseTime() == nd ); if ( !bb ) Alert ( ExName + " Ошибка удаления ордера" );
Это выдержка из программы. Сообщения об ошибке не было.
А где if которому относится else может и не должно было выполняться Alert()???
bb = OrderDelete( maso [ i ] );
if ( !bb ) Alert ( ExName + " Ошибка удаления ордера" );
извините... случайно вышло...
Случайно такое не выходит.
А откуда знаете, что OrderDelete вообще вызывался?
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Добрый день коллеги. Два вопроса.
1. Каким флагом (функцией) проверяется сработавший ExpertRemove()?
2. Кто-нибудь сталкивался с такой проблемой (возникло один раз, хочу понять насколько такое часто происходит) - Поток свободен, OrderDelete() на отложенный ордер вернул true, а ордер не удалился. По журналу ошибка - поток занят.