記事"MQL4からMQL5への移植"についてのディスカッション - ページ 11

 

皆さんこんにちは、

MQL5でObjectSet(objname,OBJPROP_FIRSTLEVEL+level,value)を使用する方法をご存知ですか?OBJPROP_FIRSTLEVELを検索しようとしましたが、MQL5では見つかりません。

mql4:

void _SetFibLevel(string objname, int level, double value, string description)

//+------------------------------------------------------------------+

{

ObjectSet(objname,OBJPROP_FIRSTLEVEL+level,value);

ObjectSetFiboDescription(objname,level,description);

}

-----------------------------------

 
vietlh216:

MQL5でObjectSet(objname,OBJPROP_FIRSTLEVEL+level,value)を使用する方法をご存知ですか? OBJPROP_FIRSTLEVELを検索しようとしましたが、MQL5では見つかりません。

mql4:

void _SetFibLevel(string objname, int level, double value, string description)

//+------------------------------------------------------------------+

{

ObjectSet(objname,OBJPROP_FIRSTLEVEL+level,value);

ObjectSetFiboDescription(objname,level,description);

}

-----------------------------------


私のブログポストで 既成の解決策を読むことができます。

 
Stanislav Korotky:

私のブログ記事を 読めば、すぐに解決できる。


とても役に立った。)

 
Stanislav Korotky:

私のブログの記事を 読めば、すぐに解決できます。


Stanislav Korotkyさん、解決策をありがとうございます。しかし、私はMQL5があまり得意ではなく、OBJPROP_FIRSTLEVELをMQL5で使用するために変換する方法がまだわかりません。

同じオブジェクト・プロパティは見当たりません:

OBJPROP_FIRSTLEVEL+n

210+n

int

インデックスnのフィボナッチ・オブジェクト・レベルの値を設定/取得する整数値。インデックスnは0(レベル数-1)から可能ですが、31より大きくはできません。

MQL5にはありません。

例: MQL4 ObjectSetFiboDescription(objname,level,description);->MQL5: ObjectSetString(0,objname,OBJPROP_LEVELTEXT,level,description);

MQL4:ObjectSet(objname,OBJPROP_FIRSTLEVEL+level,value);->MQL5:?

 
vietlh216:

Stanislav Korotkyさん、解決策をありがとうございます。しかし、私はMQL5があまり得意ではなく、OBJPROP_FIRSTLEVELをMQL5で使用するためにどのように変換すればよいのかわかりません。

同じオブジェクト・プロパティは見当たりません:

OBJPROP_FIRSTLEVEL+n

210+n

int

インデックスnのフィボナッチ・オブジェクト・レベルの値を設定/取得する整数値。インデックスnは0(レベル数-1)から可能ですが、31より大きくはできません。

MQL5にはありません。

例: MQL4 ObjectSetFiboDescription(objname,level,description);->MQL5: ObjectSetString(0,objname,OBJPROP_LEVELTEXT,level,description);

MQL4:ObjectSet(objname,OBJPROP_FIRSTLEVEL+level,value);->MQL5:?


あ、見つけました

ObjectSetDouble(0,objname,OBJPROP_LEVELVALUE,level,value);

^^

 
vietlh216:

あ、ありました

ObjectSetDouble(0,objname,OBJPROP_LEVELVALUE,level,value);

^^


私のincludeに次のような補足を加えてみてください:

class OBJPROP_DOUBLE_BROKER_EXTENDED: public OBJPROP_DOUBLE_BROKER
{
  public:
    OBJPROP_DOUBLE_BROKER_EXTENDED(const ENUM_OBJECT_PROPERTY_DOUBLE property, const int modifier): OBJPROP_DOUBLE_BROKER(property, modifier)
    {
    }
    
    OBJPROP_DOUBLE_BROKER_EXTENDED *operator+(const int add)
    {
      i = add;
      return &this;
    }
};

OBJPROP_DOUBLE_BROKER_EXTENDED OBJPROP_FIRSTLEVEL(OBJPROP_LEVELVALUE, 0);

この後、あなたの最初のMQL4コードはそのまま動作するはずです。

 
Stanislav Korotky:

私のincludeに以下の追記をしてみてください:

これでMQL4のコードがそのまま動くはずだ。


Stanislav Korotkyに感謝します。

 

に交換することをお勧めする。

string StringConcatenate(..);

に置き換えることをお勧めします。

string StringFormat("",..);

どちらの関数も 文字列を返すので、特定の条件下では置き換えが簡単になる!

 
Stanislav Korotky:

私のincludeに以下の追記をしてみてください:

この後、最初のMQL4コードはそのまま動作するはずです。

OBJPROP_DOUBLE_BROKER_EXTENDEDクラスをあなたのind4to5インクルードに追加したのですが、最新のMetaeditorビルドでは、1958のObjectSetDouble(chart_ID,name,OBJPROP_PRICE1,price1)の呼び出しはコンパイルエラー'ObjectSetDouble'を返します。何かアイデアはありますか?

 

ObjectSetDoubleがind4to5に含まれていないことを自分で突き止めた。mqhに以下のコードを追加したところ、問題は解決した。

bool ObjectSetDouble(long chart_id, const string name, const OBJPROP_DOUBLE_BROKER &property, const double value)
{
  return ObjectSetDouble(chart_id, name, property.p, property.i, value);
}