События клиентского терминала

Init #

Сразу же после того, как клиентский терминал загрузит программу (эксперт или пользовательский индикатор) и запустит процесс инициализации глобальных переменных, будет послано событие Init, которое обрабатывается функцией OnInit(), если она есть. Это событие также генерируется после смены финансового инструмента и/или периода графика, после перекомпиляции программы в редакторе MetaEditor, после смены входных параметров из окна настройки эксперта или пользовательского индикатора. Советник также инициализируется после смены счета. Для скриптов событие Init не генерируется.

Deinit #

Перед деинициализацией глобальных переменных и выгрузкой программы (эксперт или пользовательский индикатор) клиентский терминал посылает программе событие Deinit. Событие Deinit также генерируется при завершении работы клиентского терминала, при закрытии графика, непосредственно перед сменой финансового инструмента и/или периода графика, при удачной перекомпиляции программы, при смене входных параметров, а также при смене счета.

Причину деинициализации можно получить из параметра, переданного в функцию OnDeinit(). Выполнение функции OnDeinit() ограничивается 2.5 секундами. Если за это время функция не закончила свою работу, то ее выполнение завершается принудительно. Для скриптов событие Deinit не генерируется.

Start

Событие Start – это специальное событие для запуска скрипта или сервиса после его загрузки. Это событие обрабатывается функцией OnStart. Событие Start экспертам и пользовательским индикаторам не посылается.

NewTick #

Событие NewTick генерируется при поступлении новых котировок и обрабатывается функцией OnTick() у присоединенных советников. Если при поступлении новой котировки выполнялась функция OnTick, запущенная на предыдущей котировке, то пришедшая котировка будет проигнорирована советником, так как соответствующее событие не будет поставлено в очередь событий эксперта.

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

Событие NewTick генерируется независимо от того, запрещена или разрешена автоматическая торговля (кнопка "Разрешить/запретить Авто-торговлю"). Запрет автоматической торговли означает только запрет на отправку торговых запросов из эксперта, работа эксперта не прекращается.

Запрет автоматической торговли путем нажатия на указанную кнопку не прерывает текущее выполнение функции OnTick().

Calculate #

Событие Calculate генерируется только для индикаторов сразу после посылки события Init и при любом изменении ценовых данных. Обрабатывается функцией OnCalculate.

Timer #

Событие Timer периодически генерируется клиентским терминалом для эксперта, который активизировал таймер при помощи функции EventSetTimer. Обычно эта функция вызывается в функции OnInit. Обработка события Timer производится функцией OnTimer. При завершении работы эксперта необходимо уничтожить созданный таймер при помощи EventKillTimer, которую обычно вызывают в функции OnDeinit.

Trade #

Событие Trade генерируется при завершении торговой операции на торговом сервере. Обработка события Trade производится функцией OnTrade() для следующих торговых операций:

  • установка, модификация или удаление отложенного ордера;
  • отмена отложенного ордера при нехватке средств либо по истечении срока действия;
  • срабатывание отложенного ордера;
  • открытие, добавление или закрытие позиции (или части позиции);
  • модификация открытой позиции (изменение стопов).

TradeTransaction #

В результате выполнения определенных действий с торговым счетом, его состояние изменяется. К таким действиям относятся:

  • Отсылка торгового запроса любым MQL5-приложением в клиентском терминале при помощи функций OrderSend и OrderSendAsync и его последующее исполнение;
  • Отсылка торгового запроса через графический интерфейс терминала и его последующее исполнение;
  • Срабатывание отложенных ордеров и стоп-ордеров на сервере;
  • Выполнение операций на стороне торгового сервера.

В результате данных действий, для счета выполняются торговые транзакции:

  • обработка торгового запроса;
  • изменение открытых ордеров;
  • изменение истории ордеров;
  • изменение истории сделок;
  • изменение позиций.

Например, при отсылке рыночного ордера на покупку, он обрабатывается, для счета создается соответствующий ордер на покупку, происходит исполнение ордера, его удаление из списка открытых, добавление в историю ордеров, далее добавляется соответствующая сделка в историю и создается новая позиция. Все эти действия являются торговыми транзакциями. Приход каждой такой транзакции в терминал является событием TradeTransaction. Данное событие обрабатывается функцией OnTradeTransaction.

Tester #

Событие Tester генерируется по окончании тестирования эксперта на исторических данных. Обработка события  Tester производится функцией OnTester().

TesterInit #

Событие TesterInit генерируется при запуске оптимизации в тестере стратегий перед самым первым проходом. Обработка события TesterInit производится функцией OnTesterInit().

TesterPass #

Событие TesterPass генерируется при поступлении нового фрейма данных. Обработка события TesterPass производится функцией OnTesterPass().

TesterDeinit #

Событие TesterDeinit генерируется по окончании оптимизации эксперта в тестере стратегий. Обработка события TesterDeinit производится функцией OnTesterDeinit().

ChartEvent #

Событие ChartEvent генерируется клиентским терминалом при работе пользователя с графиком:

  • нажатия клавиатуры, когда окно графика находится в фокусе;
  • создание графического объекта;
  • удаление графического объекта;
  • щелчок мыши на графическом объекте, принадлежащего графику;
  • перемещение графического объекта при помощи мыши;
  • окончание редактирования текста в поле ввода графического объекта LabelEdit.

Также существует пользовательское событие ChartEvent, которое может послать эксперту любая mql5-программа при помощи функции EventChartCustom. Событие обрабатывается  функцией OnChartEvent.

BookEvent #

Событие BookEvent генерируется клиентским терминалом при изменении состояния стакана цен и обрабатывается функцией OnBookEvent. Для того чтобы клиентский терминал начал генерировать события BookEvent по конкретному символу, достаточно предварительно подписаться на получение этих событий для этого символа с помощью функции MarketBookAdd.

Для того чтобы отписаться от получения события BookEvent по символу, необходимо вызывать функцию MarketBookRelease. Событие BookEvent является широковещательным – это означает, что достаточно одному эксперту подписаться на получение события BookEvent с помощью функции MarketBookAdd, и все остальные эксперты, имеющие обработчик OnBookEvent, будут получать это событие. Поэтому необходимо анализировать имя символа, которое передается в обработчик в качестве параметра.

Смотри также

Функции обработки событий, Выполнение программ