Получение списка графиков

MQL-программа может получить список открытых в терминале графиков (как окон, так и объектов-графиков) с помощью функций ChartFirst и ChartNext.

long ChartFirst()

long ChartNext(long chartId)

Функция ChartFirst возвращает идентификатор первого графика клиентского терминала. MetaTrader 5 поддерживает некий внутренний список всех графиков, порядок в котором может отличаться от того, что мы видим на экране, например, в закладках окон, когда те максимизированы. В частности, порядок в списке может поменяться в результате перетаскивания вкладок, открепления и закрепления окон. После загрузки терминала видимый порядок закладок совпадает с внутренним представлением списка.

Функция ChartNext возвращает идентификатор графика, следующего за графиком с указанным идентификатором chartId.

В отличие от других функций для работы с графиками, значение 0 в параметре chartId означает не текущий график, а "начало списка". Иными словами, вызов ChartNext(0) эквивалентен ChartFirst.

Если достигнут конец списка, функция возвращает -1.

Скрипт ChartList1.mq5 позволяет вывести в журнал список графиков. Основную работу выполняет функция ChartList, вызываемая из OnStart. В самом начале функции мы узнаем идентификатор текущего графика с помощью ChartID и позднее помечаем его звездочкой в списке. В конце выводится общее количество графиков.

void OnStart()
{
   ChartList();
}
   
void ChartList()
{
   const long me = ChartID();
   long id = ChartFirst();
   // long id = ChartNext(0); - аналог вызова ChartFirst()
   int count = 0used = 0;
   Print("Chart List\nN, ID, *active");
   // продолжаем перебирать графики, пока их не останется
   while(id != -1)
   {
      const string header = StringFormat("%d %lld %s",
         countid, (id == me ? " *" : ""));
    
      // поля: N, id, метка текущего графика
      Print(header);
      count++;
      id = ChartNext(id);
   }
   Print("Total chart number: "count);
}

Ниже показан пример результата.

Chart List
N, ID, *active
0 132358585987782873 
1 132360375330772909  *
2 132544239145024745 
3 132544239145024732 
4 132544239145024744 
Total chart number: 5