Obtener la lista de gráficos

Un programa MQL puede obtener una lista de los gráficos abiertos en el terminal (tanto windows como objetos gráficos) mediante las funciones ChartFirst y ChartNext.

long ChartFirst()

long ChartNext(long chartId)

La función ChartFirst devuelve el identificador del primer gráfico del terminal de cliente. MetaTrader 5 mantiene una lista interna de todos los gráficos, el orden de los cuales puede diferir con respecto al que vemos en pantalla; por ejemplo, en las pestañas de las ventanas cuando están maximizadas. En concreto, el orden en la lista puede cambiar como resultado de arrastrar pestañas y desacoplar y acoplar ventanas. Después de cargar el terminal, el orden visible de los marcadores es el mismo que el de la vista de lista interna.

La función ChartNext devuelve el ID del gráfico siguiente al gráfico con el chartId especificado.

A diferencia de otras funciones para trabajar con gráficos, el valor 0 en el parámetro ChartId no significa el gráfico actual, sino el principio de la lista. En otras palabras: la llamada a ChartNext(0) equivale a ChartFirst.

Si se llega al final de la lista, la función devuelve -1.

El script ChartList1.mq5 muestra la lista de gráficos en el registro. El trabajo principal lo realiza la función ChartList que se llama desde OnStart. Al principio de la función obtenemos el identificador del gráfico actual utilizando ChartID y a continuación lo marcamos con un asterisco en la lista. Al final, se obtiene el número total de gráficos.

void OnStart()
{
   ChartList();
}
   
void ChartList()
{
   const long me = ChartID();
   long id = ChartFirst();
   // long id = ChartNext(0); - analogue of calling ChartFirst()
   int count = 0used = 0;
   Print("Chart List\nN, ID, *active");
   // keep iterating over charts until there are none left
   while(id != -1)
   {
      const string header = StringFormat("%d %lld %s",
         countid, (id == me ? " *" : ""));
    
      // fields: N, id, label of the current chart
      Print(header);
      count++;
      id = ChartNext(id);
   }
   Print("Total chart number: "count);
}

A continuación se muestra un ejemplo de resultado:

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