こんにちは、私は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の動作がおかしくなっています !
以下は、同じコードをmt4で実行した結果です。
2016.12.11 14:00:10.141 Far-TestObjDelete EURUSD_e,H1: 38-false | ObjCount=0
ということで、mt5の動作がおかしくなっています !
MT5のビルドは何をお使いですか?現在利用可能なビルドは1495(2016.12.09)です!
はい、mt5はビルド1495、2016.12.09で、metaeditorも1495です。
私たちがコンパイルして、同じ効果を生むかどうか私たちの側でテストすることができる完全な小さなテストスクリプト/インジケータコードを提供してください?
もし、私たちの側でも同じように動作するのであれば、バグの可能性があるとしてサービスデスクに報告 することができます。
次の投稿で、完全なファイルとして添付してください。
私たちがコンパイルして、同じ効果を生むかどうか私たちの側でテストすることができる完全な小さなテストスクリプト/インジケータコードを提供してください?
もし、私たちの側でも同じように動作するのであれば、バグとしてサービスデスクに 報告することができます。
次の投稿で、完全なファイルとして添付してください!
ここにmt5とmt4で同じコードがあります。結果は違いますが、ヘルプファイルには同じことが書いてあります。
オブジェクト削除
この関数は、指定されたチャートから指定された名前のオブジェクトを削除します。
boolObjectDelete( |
パラメータ
chart_id
[in] チャート識別子。0 は現在のチャートを意味します。
名前
[in] 削除するオブジェクトの名前。
戻り値
削除に成功した場合は true を、 失敗した場合は false を返します。
出力は以下の通りでした。#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
フォローアップとして、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
お疲れ様です :)
サービスデスクに報告するつもりですか?
はい、書こうと思います。あなたの確認を待っていたのです。
- 無料取引アプリ
- 8千を超えるシグナルをコピー
- 金融ニュースで金融マーケットを探索
こんにちは、私は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を返してはいけないのでしょうか?