OnTick () и OnTimer() - кто главнее ?

 

Если в эксперте присутствуют обе функции и во время обработки очередного тика генерируется событие таймера или наоборот во время работы OnTimer() приходит очередной тик, то что происходит ?:

- событие или тик пропускается и не обрабатывается

- обрабатывается после завершения текущей функции

- существует приоритет функций (одна может прерывать другую)

Можно, конечно, написать тестовый эксперт для проверки, но лучше услышать пояснения разработчиков.

 
Valmars:

Если в эксперте присутствуют обе функции и во время обработки очередного тика генерируется событие таймера или наоборот во время работы OnTimer() приходит очередной тик, то что происходит ?:

- событие или тик пропускается и не обрабатывается

- обрабатывается после завершения текущей функции

- существует приоритет функций (одна может прерывать другую)

Можно, конечно, написать тестовый эксперт для проверки, но лучше услышать пояснения разработчиков.

До сегодняшнего дня (пока вопрос не был задан) с полной уверенностью полагал что работать будет по одному из первых двух вариантов.

Есть смутные сомнения что по первому, но надеюсь что поток событий последовательно обрабатывает все события (по крайней мере я надеюсь что события обрабатываются в очереди по схеме "Первый вошел, первый вышел")...

PS

Третий вариант, на мой взгляд, это что-то из научной фантастики  - На основании чего одна функция должна прервать выполнение другой?

 
Interesting:

До сегодняшнего дня (пока вопрос не был задан) с полной уверенностью полагал что работать будет по одному из первых двух вариантов.

Есть смутные сомнения что по первому, но надеюсь что поток событий последовательно обрабатывает все события (по крайней мере я надеюсь что события обрабатываются в очереди по схеме "Первый вошел, первый вышел")...

PS

Третий вариант, на мой взгляд, это что-то из научной фантастики  - На основании чего одна функция должна прервать выполнение другой?

Мы знаем, что пока не обработан очередной тик, вновь пришедшие тики игнорируются. Скорее всего, так же обстоит дело и с другими событиями. Но возможны варианты, как то очередь событий ...
 
Valmars:
Мы знаем, что пока не обработан очередной тик, вновь пришедшие тики игнорируются. Скорее всего, так же обстоит дело и с другими событиями. Но возможны варианты, как то очередь событий ...

По крайней мере с таймером обстоят дела именно так (пока код в OnTimer не выполнится новый вызов игнорируется)....

Логично предположить что выполнение обработка событий должно быть минимально короткой по времени.

При этом я склонен полагать, что в случае в случае выполнения рада событий длительность выполнения обработки OnTick должно быть минимальной и касаться только обработки "рабочего символа". Обработка OnTrade тоже должна быть не очень длинной, тут на мой взгляд нужно обрабатывать события связанные с действиями трейдера, а также те торговые события которые происходят на сервере (например: срабатывание SL и TP, а также события связанные со срабатыванием отложенных ордеров).

OnTimer при таком подходе должен обрабатывать периодические события. При этом мультивалютная обработка на мой взгляд должна вестись именно в OnTimer.

PS

Очень интересны решения по применению OnTimer в индикаторах, поскольку там свои таймеры (что может быть довольно удобным вариантом)...

 
https://www.mql5.com/ru/docs/runtime/running


Все возникающие события клиентский терминал складывает в общую очередь. Таким образом события обрабатываются одно за другим в порядке поступления. Исключение составляет событие NewTick. Если в очереди уже есть такое событие либо это событие находится в состоянии обработки, то новое событие NewTick в очередь не ставится.
Документация по MQL5: Программы MQL5 / Выполнение программ
Документация по MQL5: Программы MQL5 / Выполнение программ
  • www.mql5.com
Программы MQL5 / Выполнение программ - Документация по MQL5
 
Спасибо, что ткнули носом, сам прочитал раздел 'События клиентского терминала' и по первой ссылке, а вторую что-то пропустил. Потому и вопрос. Сам виноват.

Причина обращения: