Графические объекты

Пользователи MetaTrader 5 хорошо знакомы с понятием графических объектов: трендовых линий, ценовых меток, каналов, уровней Фибоначчи, геометрических фигур и многих других визуальных элементов, с помощью которых выполняется аналитическая разметка графика. Язык MQL5 позволяет создавать, редактировать, удалять графические объекты программно. Это может пригодиться, например, если в индикаторе желательно отображать некие данные одновременно в подокне и на основном окне — поскольку платформа поддерживает вывод индикаторных буферов только в одно окно, во втором мы можем генерировать объекты. По разметке из графических объектов легко организовать полуавтоматическую торговлю экспертами. Кроме того, объекты часто используются для построения собственного графического интерфейса MQL-программ: кнопок, полей ввода, флагов. Такими программами можно управлять, не открывая диалог свойств, да и создаваемые на MQL панели могут обладать гораздо большей гибкостью, что стандартные входные переменные.  

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

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

В общем случае обновление графических объектов на графике производится терминалом автоматически по событиям изменения графика — поступлению новой котировки, изменению размера окна и т.д. Для принудительного обновления графических объектов используйте функцию для запроса перерисовки графика (ChartRedraw). Это особенно важно после массового создания или модификации объектов.

Объекты являются источником программных событий, таких как создание, удаление, изменение их свойств, нажатия мышью: все аспекты возникновения и обработки событий рассматриваются в отдельной главе, одновременно с событиями в общем контексте окна.

Изложение мы начнем с теоретических основ и постепенно перейдем к практике.