2017年3月23日木曜日

[MT4プログラム]小ネタ同じチャートで同一インジケータの複数起動を防止する。

ハーモニックパターン検出インジケータや、それ系のインジケータですが、同じチャートの2個のインジケータをセットすると動作がおかしくなります。

オブジェクトの名前を見て動作を制御しているためなのですが、そもそもハーモニックパターン検出インジケータを同じチャートに2個セットする必要がありません。

そこで、同じチャートで2重起動を防止させたいと思います。

いろいろテクニックはあるのですが、今回はその中かからグローバルパラメータを使った簡易的な2重起動防止を行います。


// グローバル名
string m_globalName = IntegerToString(ChartID()) + "__INDICATOR_NAME__";

//------------------------------------------------------------------
// 初期化
int OnInit()
{
   //2重起動防止
   if( GlobalVariableCheck(m_globalName) )
   {
      Print("double run.");
      return INIT_FAILED;
   }
   GlobalVariableSet(m_globalName, 1);
}

//------------------------------------------------------------------
//終了処理
void OnDeinit(const int reason)
{
   GlobalVariableDel(m_globalName);
   
   if( reason != REASON_INITFAILED )
   {
      //初期化失敗以外の終了処理
   }
}

ポイントは、チャートID+インジケータ名でグローバルパラメーターを作成することです。
起動時にグローバルパラメータがすでに存在していた場合、起動させないという制御を行います。
たとえば、OS上で1個しか動いてほしくない場合などは、Mutexを使った本格的な制御もあるのですが、今回はユーザの誤操作対策ですので、そこまでの厳しい制御はいらない場合向けです。

「MT4でFXを勝ち抜く研究をするブログ」で公開している無料インジケータは、こちらの一覧から。
インジケータ一覧

Twitterもよろしくお願いします。
https://twitter.com/mt4program

ブログランキングにご協力よろしくお願いします。m(._.)m
にほんブログ村 為替ブログ FX テクニカルトレード派へ
にほんブログ村

お約束ですが、本ブログは、投資に対する利益を約束する物ではありません。最終的には自己責任によるご判断よろしくお願いいたします。