mt5のObjectDeleteにはバグがあるのでしょうか?

 

こんにちは、私はMQL5でインジケータを書いていますが、文字列名としてObejectDeleteを書くと、オブジェクトのない空のチャートでもtrueを返します。

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

bool deleteResult=ObjectDelete(ChartID(), "non existing object");

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を書くと、オブジェクトのない空のチャートでもtrueを返します。

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

bool deleteResult=ObjectDelete(ChartID(), "non existing object");

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-false | 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月09日)です!
 
Fernando Carreiro:
MT5のビルドは何をお使いですか?現在利用可能なビルドは1495(2016.12.09)です!
yes , the mt5 is build 1495 , 2016.dec.09 , and metaeditor is 1495 too.
 
Farzin Sadeghi:
はい、mt5はビルド1495、2016.12.09で、metaeditorも1495です。

私たちがコンパイルして、同じ効果を生むかどうか私たちの側でテストすることができる完全な小さなテストスクリプト/インジケータコードを提供してください?

もし、私たちの側でも同じように動作するのであれば、バグの可能性があるとしてサービスデスクに報告 することができます。

次の投稿で、完全なファイルとして添付してください。

 
Fernando Carreiro:

私たちがコンパイルして、同じ効果を生むかどうか私たちの側でテストすることができる完全な小さなテストスクリプト/インジケータコードを提供してください?

もし、私たちの側でも同じように動作するのであれば、バグとしてサービスデスクに 報告することができます。

次の投稿で、完全なファイルとして添付してください!

ここにmt5とmt4で同じコードがあります。結果は違いますが、ヘルプファイルには同じことが書いてあります。

オブジェクト削除

この関数は、指定されたチャートから指定された名前のオブジェクトを削除します。

boolObjectDelete(
longchart_id,// チャート識別子
string name// オブジェクト名
);

パラメータ

chart_id

[in] チャート識別子。0 は現在のチャートを意味します。

名前

[in] 削除するオブジェクトの名前。

戻り値

削除に成功した場合は true を、 失敗した場合は false を返します。

ファイル:
 
Farzin Sadeghi: mt5とmt4で同じコードです。結果は異なりますが、ヘルプファイルには同じことが書かれています。
フォローアップとして、OPのソースコードのバグでないことを確認するために、私自身のコードを再作成し、以下のIndicatorコードで同じ効果を得ました、そして私も確かに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のソースのバグでないことを確認するため、自作のコードを再現し、以下のIndicatorのコードで同じ効果を得ましたが、私も確かに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:
はい、書こうと思います。あなたの確認を待っていたのです。
私もそうして、問題の補強に努めたいと思います
理由: