Особенности языка mql5, тонкости и приёмы работы - страница 204
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Никто не гарантировал, что будут прерваны (или не будут запущены) другие обработчики событий.
После алерта же происходит и деинит и инит, правда?
Да, идет полная перезагрузка. Просто таймер (даже секундный) нарывается - особенность, не баг.
Этот советник алертит при переключении между счетами. Казалось бы, он не должен этого делать, согласно правилу
Эту особенность можно использовать для решения простой по формулировке, но сложной по реализации задачи.
Эту особенность можно использовать для решения простой по формулировке, но сложной по реализации задачи.
Почему нельзя просто проверять смену счета на входе каждой On-функции?
Зачем миллисекундный таймер? Он все равно не прервет выполнение программы, если перелогин произойдет в процессе работы.
Почему нельзя просто проверять смену счета на входе каждой On-функции?
Зачем миллисекундный таймер? Он все равно не прервет выполнение программы, если перелогин произойдет в процессе работы.
Попробуйте. По ссылке выше длинное обсуждение этой темы.
Да, идет полная перезагрузка. Просто таймер (даже секундный) нарывается - особенность, не баг.
После команды ExpertRemove() просто взводится стоп-флаг и советник продолжает работать до следующего тика. На новом тике, встретив взведённый стоп-флаг, советник выгружается. Значит - пока не пришёл новый тик, все On-функции продолжают работать в штатном режиме.
Соответственно, если мы не можем получить программно состояние этого флага (не искал специально эту возможность), то нам нужно иметь глобально свой флаг. Перед командой ExpertRemove() взводим собственный флаг, а в каждой On-функции проверяем его. Если флаг взведён - уходим. Тогда и таймер не будет исполнять код, в него заложенный.
Или я не так всё понял и вопрос в другом?
После команды ExpertRemove() просто взводится стоп-флаг и советник продолжает работать до следующего тика. На новом тике, встретив взведённый стоп-флаг, советник выгружается. Значит - пока не пришёл новый тик, все On-функции продолжают работать в штатном режиме.
Соответственно, если мы не можем получить программно состояние этого флага (не искал специально эту возможность), то нам нужно иметь глобально свой флаг. Перед командой ExpertRemove() взводим собственный флаг, а в каждой On-функции проверяем его. Если флаг взведён - уходим. Тогда и таймер не будет исполнять код, в него заложенный.
Или я не так всё понял и вопрос в другом?
Не в курсе, решение какой задачи описали.
После команды ExpertRemove() просто взводится стоп-флаг и советник продолжает работать до следующего тика. На новом тике, встретив взведённый стоп-флаг, советник выгружается. Значит - пока не пришёл новый тик, все On-функции продолжают работать в штатном режиме.
Соответственно, если мы не можем получить программно состояние этого флага (не искал специально эту возможность), то нам нужно иметь глобально свой флаг. Перед командой ExpertRemove() взводим собственный флаг, а в каждой On-функции проверяем его. Если флаг взведён - уходим. Тогда и таймер не будет исполнять код, в него заложенный.
Или я не так всё понял и вопрос в другом?
Не на новом тике, а на ближайшем return;
Поставь ExpertRemove() в OnInit() и пошагово проверь в отладке.
Не на новом тике, а на ближайшем return;
Поставь ExpertRemove() в OnInit() и пошагово проверь в отладке.
Да, ошибся. Любое следующее событие уже не будет выполняться. Давненько в справку не глядел по не нужным мне функциям :)
Не в курсе, решение какой задачи описали.
Смысл ответа не понятен. Ну и ладно.
Смысл ответа не понятен.
ExpertRemove не вызывал.