ObjectName

函数返回指定图表中相关物件名称,在制定子窗口中的指定类型。

string  ObjectName(
   long  chart_id,           // 图表标识符
   int   pos,                // 物件列表中的数量
   int   sub_window=-1,      // 窗口索引
   int   type=-1             // 物件类型
   );

参量

chart_id

[in]  图表标识符。0表示当前图表。

pos

[in]  根据指定过滤器物件的序列号确定子窗口的类型和号码。

sub_window=-1

[in]  图表子窗口的号码。0代表主图表窗口,-1代表所有图表子窗口,包括主窗口。

type=-1

[in]  物件类型。值可以是 ENUM_OBJECT 值中一个,-1表示全部类型。

返回值

如果成功返回物件名称。

注释

该函数使用同步调用,这意味着这个函数等待执行在调用之前已入列图表的所有命令,这就是该函数耗费时间的原因。当处理图表上的大量对象时应该考虑这个特性。

当物件重命名,两个事件同时形成。这些事件可以在EA交易或者 OnChartEvent() 函数指标中处理:

  • 旧名称物件删除事件;
  • 新名称物件新建事件。

 

示例:

#property copyright "Copyright 2025, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| 脚本程序起始函数                                                   |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- 图表 ID
   long chart_id=ChartID();
   
//---获取图表子窗口包括主窗口的数量
   long wnd=0;
   ResetLastError();
   if(!ChartGetInteger(chart_idCHART_WINDOWS_TOTAL0wnd))
     {
      Print("ChartGetInteger() failed. Error "GetLastError());
      return;
     }
   
//--- 按图表子窗口(包括主窗口)的数量循环
   for(int sub_wnd=0sub_wnd<(int)wndsub_wnd++)
     {
      //--- 在日志中显示图表标题
      string wnd_name=(sub_wnd==0 ? "Main window:" : StringFormat("Subwindow %d:"sub_wnd));
      Print(wnd_name);
      
      //--- 获取当前子窗口中的图形对象数量
      //--- 并在全部子窗口对象的循环中输出每个对象的名称
      int objects=ObjectsTotal(chart_idsub_wnd);
      for(int obj_index=0obj_index<objectsobj_index++)
        {
         //--- 循环中当前对象的名称
         string obj_name=ObjectName(chart_idobj_indexsub_wnd);
         
         //--- 如果这是一个交易标签 (自动交易), 则不在日志中显示该对象名称
         if(sub_wnd==0 && StringFind(obj_name"autotrade")==0)
            continue;
         
         PrintFormat("  [%d] Graphic object name: \"%s\""obj_indexobj_name);
        }
     }
   /*
   具有两个子窗口的主窗口的结果,
   其中主窗口包含两个图形对象和交易标签(跳过),
   在每个图表子窗口中构造两个图形对象:
   Main window:
     [0Graphic object name"M30 Fibo 29182"
     [1Graphic object name"M30 Vertical Line 13600"
   Subwindow 1:
     [0Graphic object name"M30 Cycle Lines 63004"
     [1Graphic object name"M30 Trendline 40731"
   Subwindow 2:
     [0Graphic object name"M30 Equidistant Channel 58930"
     [1Graphic object name"M30 Rectangle 5636"
   */
  }