获取图表列表

MQL 程序可以使用 ChartFirstChartNext 函数获取终端中打开的图表列表(包括窗口和 图形对象)。

long ChartFirst()

long ChartNext(long chartId)

ChartFirst函数返回客户端终端中第一个图表的标识符。MetaTrader 5 维护着所有图表的内部列表,其顺序可能与屏幕显示不同,例如在窗口标签页最大化时的顺序。特别是,该列表中的顺序可能会因拖动选项卡、分离窗口和固定窗口而发生变化。加载终端后,书签的可见顺序与内部列表视图保持一致。

ChartNext函数返回具有指定 chartId 的图表之后的图表的 ID。

与其他用于操作图形的函数不同,ChartId参数中的 0 值并非指向当前图表,而是表示列表起始位置。换言之,调用 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); - 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);
}

以下显示的是一个结果示例。

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