Получение количества и признака видимости окон/подокон

С помощью функции ChartGetInteger MQL-программа может узнать количество окон на графике (включая подокна), а также их видимость.

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

Описание

Тип значения

CHART_WINDOWS_TOTAL

Общее количество окон графика, включая подокна индикаторов (r/o)

int

CHART_WINDOW_IS_VISIBLE

Видимость подокна, параметр window — номер подокна (r/o)

bool

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

Настройка видимости индикатора на разных таймфреймах

Настройка видимости индикатора на разных таймфреймах

Следует отметить, что в MQL5 нет штатных средств для программного определения состояния и переключения конкретных флагов. Наиболее простой способ сымитировать подобный контроль заключается в сохранении tpl-шаблона и его анализе, с возможным последующим редактированием и загрузкой (см. раздел Работа с tpl-шаблонами).

В новой версии скрипта ChartList4.mq5 выведем количество подокон (одно окно — основное — есть всегда), признак активности графика, признак объекта-графика, а также Windows-дескриптор.

      const int win = (int)ChartGetInteger(idCHART_WINDOWS_TOTAL);
      const string header = StringFormat("%d %lld %s %s %s %s %s %s %lld",
         countidChartSymbol(id), PeriodToString(ChartPeriod(id)),
         (win > 1 ? "#" + (string)(win - 1) : ""), (id == me ? " *" : ""),
         (ChartGetInteger(idCHART_BRING_TO_TOP0) ? "active" : ""),
         (ChartGetInteger(idCHART_IS_OBJECT) ? "object" : ""),
         ChartGetInteger(idCHART_WINDOW_HANDLE));
      ...
      for(int i = 0i < wini++)
      {
         const bool visible = ChartGetInteger(idCHART_WINDOW_IS_VISIBLEi);
         if(!visible)
         {
            Print("  "i"/Hidden");
         }
      }

Вот что может получиться в результате.

Chart List
N, ID, Symbol, TF, #subwindows, *active, Windows handle
0 132358585987782873 EURUSD M15 #1    68030
1 132360375330772909 EURUSD H1  * active  68048
 [S] ChartList4
2 132544239145024745 XAUUSD H1     395756
3 132544239145024732 USDRUB D1     395768
4 132544239145024744 EURUSD H1 #2    461286
  2/Hidden
Total chart number: 5, with MQL-programs: 1
Experts: 0, Scripts: 1

На первом графике (под индексом 0) имеется одно подокно (#1). На последнем графике нашлось два подокна (#2), причем второе из них в данный момент скрыто. Позднее, в разделе Управление индикаторами на графике мы представим полную версию ChartList.mq5, где включим в отчет информацию об индикаторах, находящихся в подокнах и основном окне.

Внимание! У чарта внутри объекта-графика свойство CHART_WINDOW_IS_VISIBLE всегда равно true, даже если визуализация объекта отключена на текущем или на всех таймфреймах.