真真奇怪

 

一个指标程序,是在MT4图表上画一些平仓后订单的开仓点、平仓点的价格标签,标签的名字都是 SELL 或 BUY 开头的。当指标程序关闭的时候,下面这段代码竟然不能完全删除这些标签,而只删除一部分。

迷惑中...

望各位高手赐教。

int deinit()
{
//----
  int obj_total = ObjectsTotal();
  
  for (int j=0; j<obj_total-1; j++)
  {
    name  = ObjectName(j);
    if(StringFind(name,"SELL",0)> -1)
    { 
      ObjectDelete(name);
    }
    if(StringFind(name,"BUY",0)> -1)
    { 
      ObjectDelete(name);
    }
  }  
//----
   return(0);
}
 

最简单的方法用:ObjectsDeleteAll(),保证全干掉,包括其他指标创建的物件都会被干掉。 

 

谢谢楼上的回复。

可是我不想把图上的物件都删除掉,只想删除开仓、平仓的价格标签。

这件事真奇怪,今天又做了一个单独用来删除标签的指标,其实就是把上面的代码放在 int start() {......} 函数里面,单独做成一个指标。用这个指标就把要删除的这些标签都删除了。

不过,这个指标刚加载的时候也只删除一部分,好像是指标第二次执行时才把全部要删除的标签删除了。为什么上面那段代码执行第一遍的时候不能把 SELL 和 BUY 开头的标签物件全删除掉,非要代码第二遍运行时才能删除利索?

以前做的类似的指标,都是在指标退出时, int deinit() {......} 里的一段代码,一次就把全部箭头物件删除干净了。

迷茫中...,还望各位赐教。 

 
for (int j=0; j<obj_total-1; j++)里面去掉-1,应该就好了。
 

受楼上的启发,把代码做了一点修改。

最后的代码为:

int deinit()
{
//----
  int obj_total = ObjectsTotal();
  int obj_type;
  
  for (int j=obj_total-1; j>=0; j--)
  {
    name  = ObjectName(j);
    obj_type = ObjectType(name);
    
    if(obj_type == OBJ_TREND || obj_type == OBJ_ARROW)
    {
      if(StringFind(name,"SELL",0)> -1)
      { 
        ObjectDelete(name);
      }

      if(StringFind(name,"BUY",0)> -1)
      { 
        ObjectDelete(name);
      }
    }
  } 
//----
   return(0);
}

问题完美解决。

谢谢楼上两位的回复,多谢。 

原因: