mt5 ObjectDelete中是否有一个错误?

 

嗨,我正在用MQL5写一个指标,但无论我写什么字符串名称,ObejectDelete都会返回真!即使是在一个没有对象的空图表上也是如此!我想知道为什么?

int ObjCount = ObjectsTotal(ChartID(),/*0=main subwindow*/0,/*all objectTypes*/-1)。

bool deleteResult=ObjectDelete(ChartID(), "非现有对象")。

Print(__LINE__,"-",deleteResult," | ObjCount=",ObjCount)。

这里是结果。

2016.12.11 13:46:38.385 Far-Test (EURUSD,H1) 37-true| ObjCount=0

它不应该返回false吗?


 
Farzin Sadeghi:

嗨,我正在用MQL5写一个指标,但无论我写什么字符串名称,ObejectDelete都会返回真!即使是在一个没有对象的空图表上也是如此!我想知道为什么?

int ObjCount = ObjectsTotal(ChartID(),/*0=main subwindow*/0,/*all objectTypes*/-1)。

bool deleteResult=ObjectDelete(ChartID(), "非现有对象")。

Print(__LINE__,"-",deleteResult," | ObjCount=",ObjCount)。

这里是结果。

2016.12.11 13:46:38.385 Far-Test (EURUSD,H1) 37-true| ObjCount=0

它不应该返回false吗?


这是mt4中相同代码的结果。

2016.12.11 14:00:10.141 Far-TestObjDelete EURUSD_e,H1: 38-假| ObjCount=0

所以mt5的工作是错误的!

 
Farzin Sadeghi:

这是mt4中相同代码的结果。

2016.12.11 14:00:10.141 Far-TestObjDelete EURUSD_e,H1: 38-false| ObjCount=0

所以mt5的工作是错误的!

你使用的是什么版本的MT5?目前可用的版本是1495(2016年12月9日)!
 
Fernando Carreiro:
你使用的是MT5的哪个版本?目前可用的版本是1495(2016年12月9日)!
是的,MT5是1495版本,2016.Dec.09,元编辑也是1495。
 
Farzin Sadeghi:
是的,mt5是build 1495,2016.12.09,metaeditor也是1495。

请提供一个完整的小测试脚本/指示器代码,我们可以在我们这一端进行编译和测试,看看它是否也产生同样的效果?

如果它在我们这端确实产生了同样的效果,那么你可以把它 作为一个可能的bug报告给服务台!

把它作为一个完整的文件,在你的下一个帖子中附上!

 
Fernando Carreiro:

请提供一个完整的小测试脚本/指示器代码,我们可以在我们这一端进行编译和测试,看看它是否也产生同样的效果?

如果它在我们这端确实产生了同样的效果,那么你可以把它 作为一个可能的bug报告给服务台!

把它作为一个完整的文件,附在你的下一篇文章中!

这是mt5和mt4中的相同代码,结果是不同的,但帮助文件说的是一样的。

ObjectDelete

该函数从指定的图表中删除具有指定名称的对象。

bool ObjectDelete(
longchart_id,// 图表标识符
string name// 对象名称
);

参数

chart_id

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

名称

[in] 要删除的对象的名称。

返回值

如果删除成功则返回true, 否则返回 false

附加的文件:
 
Farzin Sadeghi: 这是mt5和mt4中的相同代码。结果不同,但帮助文件说的是一样的。
在后续工作中,为了确定这不是OP的源代码的错误,我重新创建了自己的代码,用下面的指标代码得到了同样的效果,我也确实得到了和OP一样的结果。
#property strict
#property indicator_chart_window

int OnInit()
{
   return(INIT_SUCCEEDED);
}

int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[],
   const double &open[], const double &high[], const double &low[], const double &close[],
   const long &tick_volume[], const long &volume[], const int &spread[])
{
   static bool boolFirstTime = true;
  
   if( boolFirstTime )
   {
      boolFirstTime = false;
      bool boolDeleteResult = ObjectDelete( 0, "Non-existing Object" );
      Print("Result of Deleteing non-existing Chart Object: ", boolDeleteResult );
   }
  
   return(rates_total);
}
输出结果如下。
2016.12.11 11:12:29.999 TestObjectDelete (EURUSD.m,H4)  Result of Deleteing non-existing Chart Object: true
所以,这确实是一个需要报告给服务台的错误。
 
Fernando Carreiro:
在后续工作中,为了确定这不是OP的源代码的错误,我重新创建了自己的代码,用下面的指标代码得到了同样的效果,我也确实得到了与OP相同的结果。
#property strict
#property indicator_chart_window

int OnInit()
{
   return(INIT_SUCCEEDED);
}

int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[],
   const double &open[], const double &high[], const double &low[], const double &close[],
   const long &tick_volume[], const long &volume[], const int &spread[])
{
   static bool boolFirstTime = true;
  
   if( boolFirstTime )
   {
      boolFirstTime = false;
      bool boolDeleteResult = ObjectDelete( 0, "Non-existing Object" );
      Print("Result of Deleteing non-existing Chart Object: ", boolDeleteResult );
   }
  
   return(rates_total);
}
输出结果如下。
2016.12.11 11:12:29.999 TestObjectDelete (EURUSD.m,H4)  Result of Deleteing non-existing Chart Object: true
所以,这确实看起来是一个需要报告给服务台的错误。
谢谢你的时间 :)
 
Farzin Sadeghi:
谢谢你的时间 :)
你打算在服务台报告吗?
 
Fernando Carreiro:
你要在服务台报告吗?
是的,我准备写。我在等待你的确认。谢谢。
 
Farzin Sadeghi:
是的,我准备写。我在等待你的确认。谢谢。
我也会这样做的,以帮助加强这个问题!