Функция обработки событий OnChartEvent
Индикатор или эксперт может получать интерактивные события от терминала, если в коде описана функция OnChartEvent со следующим прототипом.
void OnChartEvent(const int event, const long &lparam, const double &dparam, const string &sparam)
Эта функция будет вызываться терминалом в ответ на действия пользователя или в случае генерации "пользовательского события" с помощью EventChartCustom.
В параметре event передается идентификатор события (его тип) — одно из значений перечисления ENUM_CHART_EVENT (см. таблицу).
Идентификатор |
Описание |
---|---|
CHARTEVENT_KEYDOWN |
Действие на клавиатуре |
CHARTEVENT_MOUSE_MOVE |
Перемещение мыши и нажатие кнопок мышки (если для графика установлено свойство CHART_EVENT_MOUSE_MOVE) |
CHARTEVENT_MOUSE_WHEEL |
Нажатие или прокрутка колесика мышки (если для графика установлено свойство CHART_EVENT_MOUSE_WHEEL) |
CHARTEVENT_CLICK |
Нажатие мышки на графике |
CHARTEVENT_OBJECT_CREATE |
Создание графического объекта (если для графика установлено свойство CHART_EVENT_OBJECT_CREATE) |
CHARTEVENT_OBJECT_CHANGE |
Изменение графического объекта через диалог свойств |
CHARTEVENT_OBJECT_DELETE |
Удаление графического объекта (если для графика установлено свойство CHART_EVENT_OBJECT_DELETE) |
CHARTEVENT_OBJECT_CLICK |
Нажатие мышки на графическом объекте |
CHARTEVENT_OBJECT_DRAG |
Перетаскивание графического объекта |
CHARTEVENT_OBJECT_ENDEDIT |
Окончание редактирования текста в графическом объекте "поле ввода" |
CHARTEVENT_CHART_CHANGE |
Изменение размеров или свойств графика (через диалог свойств, панель инструментов или контекстное меню) |
CHARTEVENT_CUSTOM |
Начальный номер события из диапазона пользовательских событий |
CHARTEVENT_CUSTOM_LAST |
Конечный номер события из диапазона пользовательских событий |
Параметры lparam, dparam, sparam используются по-разному в зависимости от типа события. В общем можно сказать, что они содержат дополнительные данные, необходимые для обработки конкретного события. В следующих разделах приведены подробности для каждого типа.
Внимание! Функция OnChartEvent вызывается только в индикаторах и экспертах, которые непосредственно нанесены на график. Если какой-либо индикатор создан программно с помощью iCustom или IndicatorCreate, в него события OnChartEvent транслироваться не будут.
Кроме того, обработчик OnChartEvent не вызывается в тестере, даже в визуальном режиме.
Для первой демонстрации обработчика OnChartEvent рассмотрим безбуферный индикатор EventAll.mq5, который позволяет перехватывать и записывать в журнал все события.
void OnChartEvent(const int id,
|
По умолчанию на графике могут генерироваться все типы событий, кроме четырех массовых, которые, как указано в вышеприведенной таблице, включаются специальными свойствами графика. В следующем разделе мы дополним индикатор настройками, чтобы по желанию включать те или иные типы.
Попробуйте запустить индикатор на графике, возможно, с уже имеющимися объектами, или создайте их в процессе работы индикатора.
Меняете размер или настройки графика, совершайте щелчки мышью, редактируйте свойства объектов. В журнале появятся записи следующего вида.
CHARTEVENT_CHART_CHANGE 0 0.000000 ''
|
Здесь мы видим события различных типов, значения их параметров станут понятны после прочтения следующих разделов.