Связанные с событиями свойства графика

Четыре типа событий способны генерировать очень много сообщений и потому по умолчанию отключены. Для их активации или последующего отключения следует установить соответствующие свойства графика с помощью функции ChartSetInteger. Все свойства имеют логический тип: true — включено, false — выключено.

Идентификатор

Описание

CHART_EVENT_MOUSE_WHEEL

Отправка на график сообщений CHARTEVENT_MOUSE_WHEEL о событиях колёсика мыши

CHART_EVENT_MOUSE_MOVE

Отправка на график сообщений CHARTEVENT_MOUSE_MOVE о перемещениях мыши

CHART_EVENT_OBJECT_CREATE

Отправка на график сообщений о создании графических объектов CHARTEVENT_OBJECT_CREATE

CHART_EVENT_OBJECT_DELETE

Отправка на график сообщений об уничтожении графических объектов CHARTEVENT_OBJECT_DELETE

Если какая-либо MQL-программа изменяет одно из этих свойств, оно влияет на все другие программы, выполняющиеся на том же графике, и продолжает действовать даже после завершения исходной программы.

По умолчанию все свойства имеют значение false.

Дополним индикатор EventAll.mq5 из предыдущего раздела 4-мя входными переменными, позволяющими включить на выбор любые из данных типов событий (в дополнение к остальным, неотключаемым). Кроме того опишем 4 вспомогательных переменных, чтобы иметь возможность восстановить настройки графика после удаления индикатора.

input bool ShowMouseMove = false;
input bool ShowMouseWheel = false;
input bool ShowObjectCreate = false;
input bool ShowObjectDelete = false;
   
bool mouseMovemouseWheelobjectCreate, objectDelete;

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

void OnInit()
{
   mouseMove = PRTF(ChartGetInteger(0CHART_EVENT_MOUSE_MOVE));
   mouseWheel = PRTF(ChartGetInteger(0CHART_EVENT_MOUSE_WHEEL));
   objectCreate = PRTF(ChartGetInteger(0CHART_EVENT_OBJECT_CREATE));
   objectDelete = PRTF(ChartGetInteger(0CHART_EVENT_OBJECT_DELETE));
   
   ChartSetInteger(0CHART_EVENT_MOUSE_MOVEShowMouseMove);
   ChartSetInteger(0CHART_EVENT_MOUSE_WHEELShowMouseWheel);
   ChartSetInteger(0CHART_EVENT_OBJECT_CREATEShowObjectCreate);
   ChartSetInteger(0CHART_EVENT_OBJECT_DELETEShowObjectDelete);
}

Свойства восстанавливаются в обработчике OnDeinit.

void OnDeinit(const int)
{
   ChartSetInteger(0CHART_EVENT_MOUSE_MOVEmouseMove);
   ChartSetInteger(0CHART_EVENT_MOUSE_WHEELmouseWheel);
   ChartSetInteger(0CHART_EVENT_OBJECT_CREATEobjectCreate);
   ChartSetInteger(0CHART_EVENT_OBJECT_DELETEobjectDelete);
}

Запустите индикатор с разрешенными новыми типами событий. Будьте готовы к большому количеству сообщений о перемещениях мыши. Вот фрагмент журнала:

CHARTEVENT_MOUSE_WHEEL 5308557 -120.000000 ''
CHARTEVENT_CHART_CHANGE 0 0.000000 ''
CHARTEVENT_MOUSE_WHEEL 5308557 -120.000000 ''
CHARTEVENT_CHART_CHANGE 0 0.000000 ''
CHARTEVENT_MOUSE_MOVE 141 81.000000 '2'
CHARTEVENT_MOUSE_MOVE 141 81.000000 '0'
...
CHARTEVENT_OBJECT_CREATE 0 0.000000 'Daily Rectangle 37664'
CHARTEVENT_MOUSE_MOVE 323 146.000000 '0'
CHARTEVENT_MOUSE_MOVE 322 146.000000 '0'
CHARTEVENT_MOUSE_MOVE 321 146.000000 '0'
CHARTEVENT_MOUSE_MOVE 320 146.000000 '0'
CHARTEVENT_MOUSE_MOVE 318 146.000000 '0'
CHARTEVENT_MOUSE_MOVE 316 146.000000 '0'
CHARTEVENT_MOUSE_MOVE 314 146.000000 '0'
CHARTEVENT_MOUSE_MOVE 314 145.000000 '0'
...
CHARTEVENT_OBJECT_DELETE 0 0.000000 'Daily Rectangle 37664'
CHARTEVENT_KEYDOWN 46 1.000000 '339

Специфику информации по каждому типу события мы раскроем в соответствующих разделах далее.