Управление видимостью элементов графика

Большой набор свойств в ENUM_CHART_PROPERTY_INTEGER управляет видимостью элементов графика. Почти все они имеют логический тип: true соответствует показу элемента, а false — сокрытию. Исключение составляет CHART_SHOW_VOLUMES, для которого используется перечисление ENUM_CHART_VOLUME_MODE (см. ниже).

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

Описание

Тип значения

CHART_SHOW

Признак отрисовки ценового графика в целом. Если установлено значение false, то отключается отрисовка любых атрибутов ценового графика и устраняются все отступы по краям графика: шкалы времени и цены, строка быстрой навигации, метки событий календаря, значки сделок, всплывающие подсказки индикаторов и баров, подокна индикаторов, гистограммы объёмов и т.д.

bool

CHART_SHOW_TICKER

Отображение в левом верхнем углу тикера символа. Отключение тикера автоматически отключает OHLC (CHART_SHOW_OHLC)

bool

CHART_SHOW_OHLC

Отображение в левом верхнем углу значений OHLC. Включение OHLC автоматически включает тикер (CHART_SHOW_TICKER)

bool

CHART_SHOW_BID_LINE

Отображение значения Bid горизонтальной линией

bool

CHART_SHOW_ASK_LINE

Отображение значения Ask горизонтальной линией

bool

CHART_SHOW_LAST_LINE

Отображение значения Last горизонтальной линией

bool

CHART_SHOW_PERIOD_SEP

Отображение вертикальных разделителей между соседними периодами

bool

CHART_SHOW_GRID

Отображение сетки на графике

bool

CHART_SHOW_VOLUMES

Отображение объемов на графике

ENUM_CHART_VOLUME_MODE

CHART_SHOW_OBJECT_DESCR

Отображение текстовых описаний объектов (описания показываются не для всех типов объектов)

bool

CHART_SHOW_TRADE_LEVELS

Отображение на графике торговых уровней (уровни открытых позиций, Stop Loss, Take Profit и отложенных ордеров)

bool

CHART_SHOW_DATE_SCALE

Отображение на графике шкалы времени

bool

CHART_SHOW_PRICE_SCALE

Отображение на графике ценовой шкалы

bool

CHART_SHOW_ONE_CLICK

Отображение на графике панели быстрой торговли (опция "Торговля одним кликом")

bool

Флаги в диалоге настроек для некоторых свойств ENUM_CHART_PROPERTY_INTEGER

Флаги в диалоге настроек для некоторых свойств ENUM_CHART_PROPERTY_INTEGER

Некоторые из этих свойств доступны пользователю из контекстного меню графика, некоторые — только из диалога настроек, однако есть и такие, которые можно менять только из MQL5, в частности, отображение вертикальной (CHART_SHOW_DATE_SCALE) и горизонтальной (CHART_SHOW_DATE_SCALE) шкалы, а также видимость всего графика целиком (CHART_SHOW). Последний случай следует отметить особо, потому что отключение отрисовки является идеальным решением для создания собственного интерфейса программы с использованием графических ресурсов и графических объектов — они отрисовываются всегда, независимо от значения CHART_SHOW.

К книге прилагается скрипт ChartBlackout.mq5, который переключает режим CHART_SHOW из текущего на обратный при каждом запуске.

void OnStart()
{
   ChartSetInteger(0CHART_SHOW, !ChartGetInteger(0CHART_SHOW));
}

Таким образом, можно применить его на обычном графике, чтобы полностью очистить окно, а потом применить повторно, чтобы восстановить прежний внешний вид.

Вышеупомянутое перечисление ENUM_CHART_VOLUME_MODE содержит следующие элементы.

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

Описание

Значение

CHART_VOLUME_HIDE

Объемы скрыты

0

CHART_VOLUME_TICK

Тиковые объемы

1

CHART_VOLUME_REAL

Торговые объемы (если есть)

2

По аналогии со скриптом ChartMode.mq5 реализуем монитор видимости элементов графика в скрипте ChartElements.mq5. Основное отличие заключается в другом наборе контролируемых флагов.

void OnStart()
{
   int flags[] =
   {
      CHART_SHOW,
      CHART_SHOW_TICKERCHART_SHOW_OHLC,
      CHART_SHOW_BID_LINECHART_SHOW_ASK_LINECHART_SHOW_LAST_LINE,
      CHART_SHOW_PERIOD_SEPCHART_SHOW_GRID,
      CHART_SHOW_VOLUMES,
      CHART_SHOW_OBJECT_DESCR,
      CHART_SHOW_TRADE_LEVELS,
      CHART_SHOW_DATE_SCALECHART_SHOW_PRICE_SCALE,
      CHART_SHOW_ONE_CLICK
   };
   ...

Кроме того, после создания бэкапа настроек мы намеренно отключаем шкалы времени и цены программным способом (при завершении работы скрипт восстановит их из бэкапа).

   ...
   m.backup();
   
   ChartSetInteger(0CHART_SHOW_DATE_SCALEfalse); 
   ChartSetInteger(0CHART_SHOW_PRICE_SCALEfalse);
   ... 
}

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

CHART_SHOW_DATE_SCALE 1 -> 0   // отключили шкалу времени в MQL5-коде
CHART_SHOW_PRICE_SCALE 1 -> 0  // отключили шкалу цен в MQL5-коде
CHART_SHOW_ONE_CLICK 0 -> 1    // отключили "Торговля в один клик"
CHART_SHOW_GRID 1 -> 0         // отключили "Сетку"
CHART_SHOW_VOLUMES 0 -> 2      // показали реальные "Объемы"
CHART_SHOW_VOLUMES 2 -> 1      // показали "Тиковые объемы"
CHART_SHOW_TRADE_LEVELS 1 -> 0 // отключили "Торговые уровни"