ObjectsDeleteAll

从指定图表中删除所有物件,指定图表子窗口,指定类型。

int  ObjectsDeleteAll(
   long  chart_id,           // 图表标识符
   int   sub_window=-1,      // 窗口索引
   int   type=-1             // 物件类型
   );

使用对象名称的前缀移除所有指定类型的对象。

int  ObjectsDeleteAll(
   long           chart_id,   // 图表标识符
   const string     prefix,   // 对象名称前缀
   int       sub_window=-1,   // 窗口索引
   int      object_type=-1    // 对象类型
   );

参量

chart_id

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

prefix

[in] 对象名称前缀:所有名称以这组字符开头的对象都将从图表移除。您可以指定前缀为 'name' 或 'name*' – 两种变量的工作相同。如果空字符串设定为前缀,那么所有可能名称的对象都将被移除。

sub_window=-1

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

type=-1

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

返回值

返回删除物件的数量。阅读更多关于 错误 信息,调用 GetLastError()

注意

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

 

示例:

#property copyright "Copyright 2025, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
 
#property script_show_inputs
 
enum ENUM_REMOVE_MODE
  {
   REMOVE_MODE_TRADE_ARROWS,  // 删除全部箭头
   REMOVE_MODE_AUTOTRADE      // 删除全部自动交易箭头
  };
 
input ENUM_REMOVE_MODE  InpRemoveMethod = REMOVE_MODE_TRADE_ARROWS;  /*Remove Method*/ // 全部箭头或者仅自动交易箭头
 
//+------------------------------------------------------------------+
//| 脚本程序起始函数                                                   |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- 图表 ID 和删除对象的数量
   long chart_id=ChartID();
   int  count=0;
   
   ResetLastError();
//--- 如果选择了删除全部箭头对象
//--- 删除全部 OBJ_ARROW_BUY 和 OBJ_ARROW_SELL 类型的对象, 进而删除全部自动交易图标,
//--- 也删除图表上相同类型的其他对象
   if(InpRemoveMethod==REMOVE_MODE_TRADE_ARROWS)
     {
      count+=ObjectsDeleteAll(chart_id, -1OBJ_ARROW_BUY);
      count+=ObjectsDeleteAll(chart_id, -1OBJ_ARROW_SELL);
     }
     
//--- 如果您选择仅删除自动交易图标
//--- 删除全部在名称中包含 "autotrade" 子字符串的对象
//--- 删除全部自动交易图标并保留其它箭头对象
   else
     {
      count=ObjectsDeleteAll(chart_id"autotrade");
     }
 
//--- 如果在删除图形对象时发生错误, 则报告错误并终止操作
   if(GetLastError()!=ERR_SUCCESS)
     {
      PrintFormat("ObjectsDeleteAll() failed. Error %d. count=%d"GetLastError(), count);
      return;
     }
     
//--- 更新图表以立即反映变化
   ChartRedraw(chart_id);
   
//--- 在日志中设置删除箭头对象的数量
   string type=(InpRemoveMethod==REMOVE_MODE_TRADE_ARROWS ? "OBJ_ARROW_BUY and OBJ_ARROW_SELL" : "with prefix \"autotrade\"");
   PrintFormat("%d objects %s removed"counttype);
   /*
   result for InpRemoveMethod = REMOVE_MODE_TRADE_ARROWS:
   116 objects OBJ_ARROW_BUY and OBJ_ARROW_SELL removed
   
   result for InpRemoveMethod = REMOVE_MODE_AUTOTRADE:
   131 objects with prefix "autotrade" removed
   */
  }