Русский

Справочник MQL4 Возможности MQL5 Функции MQL5 Обработка событий

Справка MQL4 одним файлом:

Обработка событий

В языке MQL5 предусмотрена обработка некоторых предопределенных событий. Функции для обработки этих событий должны быть определены в программе MQL5: имя функции, тип возвращаемого значения, состав параметров (если они есть) и их типы должны строго соответствовать описанию функции-обработчика события.

Именно по типу возвращаемого значения и по типам параметров обработчик событий клиентского терминала идентифицирует функции, обрабатывающие то или иное событие. Если у соответствующей функции указаны иные, не соответствующие нижеследующим описаниям, параметры или указан иной тип возвращаемого значения, то такая функция не будет использоваться для обработки события.

Функция

Описание

OnStart

Вызывается в скрипте при наступлении события Start для выполнения действий, заложенных в скрипт

OnInit

Вызывается в индикаторах и экспертах при наступлении события Init для инициализации запущенной MQL5-программы

OnDeinit

Вызывается в индикаторах и экспертах при наступлении события Deinit для деинициализации запущенной MQL5-программы

OnTick

Вызывается в экспертах при наступлении события NewTick для обработки новой котировки

OnCalculate

Вызывается в индикаторах при наступлении события Calculate для обработки изменения ценовых данных

OnTimer

Вызывается в индикаторах и экспертах при наступлении периодического события Timer, которое  с заданным интервалом времени генерируется терминалом

OnTrade

Вызывается в экспертах при наступлении события Trade, которое генерируется при завершении торговой операции на торговом сервере

OnTradeTransaction

Вызывается в экспертах при наступлении события TradeTransaction для обработки результатов выполнения торгового запроса

OnBookEvent

Вызывается в экспертах при наступлении события BookEvent для обработки изменений в стаканe заявок

OnChartEvent

Вызывается в индикаторах и экспертах при наступлении события ChartEvent для обработки изменений графика, вызванных действиями пользователя или работой MQL5-программ

OnTester

Вызывается в экспертах при наступлении события Tester для выполнения необходимых действий по окончании тестирования

OnTesterInit

Вызывается в экспертах при наступлении события TesterInit для выполнения необходимых действий перед началом оптимизации

OnTesterDeinit

Вызывается в экспертах при наступлении события TesterDeinit для выполнения необходимых действий по окончании оптимизации эксперта

OnTesterPass

Вызывается в экспертах при наступлении события TesterPass для обработки поступления нового фрейма данных во время оптимизации эксперта

Клиентский терминал отсылает возникающие события в соответствующие открытые графики. Также события могут генерироваться графиками (события графика) либо mql5-программами (пользовательские события). Генерацию событий создания и удаления графических объектов на графике можно включать и отключать заданием свойств графика CHART_EVENT_OBJECT_CREATE и CHART_EVENT_OBJECT_DELETE. Каждая mql5-программа и каждый график имеют свою собственную очередь событий, куда складываются все вновь поступающие события.

Программа получает события только от графика, на котором она запущена. Все события обрабатываются одно за другим в порядке поступления. Если в очереди уже есть событие NewTick либо это событие находится в состоянии обработки, то новое событие NewTick в очередь mql5-программы не ставится. Аналогично, если в очереди mql5-программы уже находится событие ChartEvent или такое событие обрабатывается, то новое событие такого типа не ставится в очередь. Обработка событий таймера производится по такой же схеме – если в очереди находится или уже обрабатывается событие Timer, то новое событие таймера не ставится в очередь.

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

Крайне не рекомендуется использовать бесконечные циклы для обработки событий. Исключением из этого правила могут быть только скрипты, которые обрабатывают одно единственное событие Start.

Библиотеки не обрабатывают никаких событий.