Есть ли система прерываний при обработки событий MT4. Если при обработке события NewTick обработчиком OnTick, происходит событие Timer, то какой сценарий выполняется:
- Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам
- Еще раз про лимит времени тестирования экспертов на Чемпионат
- Периодичность обработки событий
По данной теме нашел только описание https://book.mql4.com/ru/special/index исходя из которого вроде бы верный вариант 3.
На Рис. 159 показано, что тик, пришедший в период исполнения start(), а именно в момент t 4, не приводит к новому запуску специальной функции, и в следующий раз start() запускается в момент t 5. При этих условиях также возникает пауза между окончанием текущего исполнения и началом следующего исполнения функции start().
Рис. 159 Различная скважность при исполнении функции start(),
запускаемой клиентским терминалом, и зацикленной функции start().
Кроме того в описании https://docs.mql4.com/ru/runtime/running сказано следующее:
Все события обрабатываются одно за другим в порядке поступления. Если в очереди уже есть событие NewTick либо это событие находится в состоянии обработки, то новое событие NewTick в очередь mql4-программы не ставится. Аналогично, если в очереди mql4-программы уже находится событие ChartEvent или такое событие обрабатывается, то новое событие такого типа не ставится в очередь. Обработка событий таймера производится по такой же схеме – если в очереди находится или уже обрабатывается событие Timer, то новое событие таймера не ставится в очередь.
То есть, если в момент прихода события соответствующий данному событию обработчик занят, то событие игнорируется. Но ситуация, когда в работе находится обработчик события одного типа, а приходит событие другого типа - не рассмотрена и непонятно как она разрешается.
- docs.mql4.com
Ситуация наоборот, если обрабатывается OnTimer() и поступает новый тик уже рассматривалась и ответ был от разработчиков - "OnTick()" игнорируется.
А в этой ситуации, на мой взгляд, разумно было-бы выполнить по завершению обработки OnTick(). Ведь если таймер вызывается достаточно редко, скажем 1 раз в 15-20 секунд, то пропускать его не целесообразно.
На самом деле не знаю и ткну первый вариант чтобы видеть результат ответов других.
Ситуация наоборот, если обрабатывается OnTimer() и поступает новый тик уже рассматривалась и ответ был от разработчиков - "OnTick()" игнорируется.
А в этой ситуации, на мой взгляд, разумно было-бы выполнить по завершению обработки OnTick(). Ведь если таймер вызывается достаточно редко, скажем 1 раз в 15-20 секунд, то пропускать его не целесообразно.
На самом деле не знаю и ткну первый вариант чтобы видеть результат ответов других.
Если можно, приведите пожалуйста ссылку на ответ разработчиков.
Это было так давно, что уже и не помню в какой стороне искать... Возможно я что-то попутал. Вот документация что говорит.
Клиентский терминал отсылает возникающие события в соответствующие открытые графики. Также события могут генерироваться графиками (события графика) либо mql5-программами (пользовательские события). Генерацию событий создания и удаления графических объектов на графике можно включать и отключать заданием свойств графика CHART_EVENT_OBJECT_CREATE и CHART_EVENT_OBJECT_DELETE. Каждая mql5-программа и каждый график имеют свою собственную очередь событий, куда складываются все вновь поступающие события.
Программа получает события только от графика, на котором она запущена. Все события обрабатываются одно за другим в порядке поступления. Если в очереди уже есть событие NewTick либо это событие находится в состоянии обработки, то новое событие NewTick в очередь mql5-программы не ставится. Аналогично, если в очереди mql5-программы уже находится событие ChartEvent или такое событие обрабатывается, то новое событие такого типа не ставится в очередь. Обработка событий таймера производится по такой же схеме – если в очереди находится или уже обрабатывается событие Timer, то новое событие таймера не ставится в очередь.
Очереди событий имеют ограниченный, но достаточный размер, поэтому переполнение очереди для корректно написанной программы маловероятно. При переполнении очереди новые события отбрасываются без постановки в очередь.
- www.mql5.com
Я уже спрашивал. Ничто не прерывается и в очередь не ставится.
Кто первый тот и папа:))))
То есть, если в момент прихода события соответствующий данному событию обработчик занят, то событие игнорируется. Но ситуация, когда в работе находится обработчик события одного типа, а приходит событие другого типа - не рассмотрена и непонятно как она разрешается.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Anton, 2014.04.04 15:28
Все события в эксперте обрабатываются в одном потоке (собственном потоке эксперта), последовательно, без прерываний. События помещаются во входящую очередь эксперта и их обработчики вызываются строго в порядке очередности (fifo). Одновременно в очереди может находится только одно событие тика и одно событие таймера (т.е. если эксперт не успел взять на обработку событие тика, то дополнительное событие в очередь не помещается, с таймером - аналогично).Пусть в очередь попало событие тика - и его начал обрабатывать обработчик тиков, до завершения обработки в очередь попадает событие таймера. Что при этом будет с обработкой этого события? Обработается после завершения события тика или будет проигнорировано? С последовательностью однотипных событий всё понятно. Интересует именно обработка разнородных событий.
Таймер обработается.
Потеряться может только при переполнении очереди событий (теоретически).
Пусть в очередь попало событие тика - и его начал обрабатывать обработчик тиков, до завершения обработки в очередь попадает событие таймера. Что при этом будет с обработкой этого события? Обработается после завершения события тика или будет проигнорировано? С последовательностью однотипных событий всё понятно. Интересует именно обработка разнородных событий.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования