- OnStart
- OnInit
- OnDeinit
- OnTick
- OnCalculate
- OnTimer
- OnTrade
- OnTradeTransaction
- OnBookEvent
- OnChartEvent
- OnTester
- OnTesterInit
- OnTesterDeinit
- OnTesterPass
Обработка событий
В языке MQL5 предусмотрена обработка некоторых предопределенных событий. Функции для обработки этих событий должны быть определены в программе MQL5: имя функции, тип возвращаемого значения, состав параметров (если они есть) и их типы должны строго соответствовать описанию функции-обработчика события.
Именно по типу возвращаемого значения и по типам параметров обработчик событий клиентского терминала идентифицирует функции, обрабатывающие то или иное событие. Если у соответствующей функции указаны иные, не соответствующие нижеследующим описаниям, параметры или указан иной тип возвращаемого значения, то такая функция не будет использоваться для обработки события.
Функция |
Описание |
---|---|
Вызывается в скрипте при наступлении события Start для выполнения действий, заложенных в скрипт |
|
Вызывается в индикаторах и экспертах при наступлении события Init для инициализации запущенной MQL5-программы |
|
Вызывается в индикаторах и экспертах при наступлении события Deinit для деинициализации запущенной MQL5-программы |
|
Вызывается в экспертах при наступлении события NewTick для обработки новой котировки |
|
Вызывается в индикаторах при наступлении события Calculate для обработки изменения ценовых данных |
|
Вызывается в индикаторах и экспертах при наступлении периодического события Timer, которое с заданным интервалом времени генерируется терминалом |
|
Вызывается в экспертах при наступлении события Trade, которое генерируется при завершении торговой операции на торговом сервере |
|
Вызывается в экспертах при наступлении события TradeTransaction для обработки результатов выполнения торгового запроса |
|
Вызывается в экспертах при наступлении события BookEvent для обработки изменений в стаканe заявок |
|
Вызывается в индикаторах и экспертах при наступлении события ChartEvent для обработки изменений графика, вызванных действиями пользователя или работой MQL5-программ |
|
Вызывается в экспертах при наступлении события Tester для выполнения необходимых действий по окончании тестирования |
|
Вызывается в экспертах при наступлении события TesterInit для выполнения необходимых действий перед началом оптимизации |
|
Вызывается в экспертах при наступлении события TesterDeinit для выполнения необходимых действий по окончании оптимизации эксперта |
|
Вызывается в экспертах при наступлении события TesterPass для обработки поступления нового фрейма данных во время оптимизации эксперта |
Клиентский терминал отсылает возникающие события в соответствующие открытые графики. Также события могут генерироваться графиками (события графика) либо mql5-программами (пользовательские события). Генерацию событий создания и удаления графических объектов на графике можно включать и отключать заданием свойств графика CHART_EVENT_OBJECT_CREATE и CHART_EVENT_OBJECT_DELETE. Каждая mql5-программа и каждый график имеют свою собственную очередь событий, куда складываются все вновь поступающие события.
Программа получает события только от графика, на котором она запущена. Все события обрабатываются одно за другим в порядке поступления. Если в очереди уже есть событие NewTick либо это событие находится в состоянии обработки, то новое событие NewTick в очередь mql5-программы не ставится. Аналогично, если в очереди mql5-программы уже находится событие ChartEvent или такое событие обрабатывается, то новое событие такого типа не ставится в очередь. Обработка событий таймера производится по такой же схеме – если в очереди находится или уже обрабатывается событие Timer, то новое событие таймера не ставится в очередь.
Очереди событий имеют ограниченный, но достаточный размер, поэтому переполнение очереди для корректно написанной программы маловероятно. При переполнении очереди новые события отбрасываются без постановки в очередь.
Крайне не рекомендуется использовать бесконечные циклы для обработки событий. Исключением из этого правила могут быть только скрипты, которые обрабатывают одно единственное событие Start.
Библиотеки не обрабатывают никаких событий.