ホーム システムトレード 投稿

MetaTrader 5での「カウント」機能の実装方法

添付ファイル
49213.zip (1.04 KB, ダウンロード 2回)

01. "X"回カウントしてから処理を進める

  • ステップ01 - カウント制限を設定するための変数を作成します。この変数は、入力パラメータとしても利用でき、コードの最適化にも役立ちます。
  • ステップ02 - カウントした回数を保持するための別の変数を作成します。
  • ステップ03 - カウンターと設定したカウント制限が等しくなった場合、指定したコードブロックを実行するタイミングです。
  • ステップ04 - コードが実行されたら、必ずカウンターをリセットしてください。リセットしないと、無限にカウントし続けます。

カウンターブロックにはフィルタ条件を設定することもできます。例えば、>> "この条件が真なら、1回カウントする。" のように。

input int count = 50; // カウント制限を入力として設定

int Counter; // カウンター変数

// エキスパート初期化--------------------
int OnInit()
{
 return(INIT_SUCCEEDED);
}

// エキスパート非初期化-------------------
void OnDeinit(const int reason)
{

}

// エキスパートOnTick--------------------------
void OnTick()
{
 Counter ++; // 各ティックでカウンターに1を加算
 Comment("現在のカウント -:", Counter);
 
 if(Counter == count) // "X"回カウントして処理を進める | このブロックは各カウントごとに1回だけ実行されます。
 {
  
  // ここにあなたのコードを書いてください......
 Alert(count,"回カウントしました"); 
 Counter = 0; // コードブロックの最後でカウンターをリセットします。これは必須です。
 } 

} // OnTick終了----------------------


02. "X"回処理してから"X"回待機してから処理を進める

この方法は、待機してから処理を進めたり、処理を進めてから待機したりすることができます。

  • ステップ01 - カウント制限と待機制限を設定するための変数を作成します。これらも入力パラメータとして利用できます。
  • ステップ02 - カウントした回数と待機した回数を保持するための変数を作成します。
  • ステップ03 - カウンターとカウント制限が等しくなった場合、指定したコードブロックを実行するタイミングです。
  • ステップ04 - 待機変数と待機制限が等しくなった場合、しばらく待機するタイミングです。
  • ステップ05 - 待機制限に達したら、カウンターと待機変数をリセットしてください。リセットしないと正常に動作しなくなります。

カウンターブロックと待機ブロックにもフィルタ条件を設定できます。例えば、>> "この条件が真なら、少し待機する" のように。


input int count = 50; // カウント制限を入力として設定
input int wait = 50; // 待機制限を入力として設定

int Counter; // カウンター変数のデフォルト値は"0"
int Waiter; // 待機変数のデフォルト値は"0"

// エキスパート初期化--------------------
int OnInit()
  {
   return(INIT_SUCCEEDED);
  }

// エキスパート非初期化-------------------
void OnDeinit(const int reason)
  {
  }

// エキスパートOnTick--------------------------
void OnTick()
  {
   Comment("カウントしたティック -: ", Counter, "\n", "待機したティック -: ", Waiter);

   if(Counter < count) // "X"回処理を進める
     {
      Counter++; // カウンターを更新

      // ここにあなたのコードを書いてください。

     }
   else
      if(Waiter < wait) // "X"回待機する
        {
         Waiter++; // 待機変数を更新

         // ここにあなたのコードを書いてください。

        }

   if(Waiter == wait) // 待機制限に達した
     {
      Counter = 0; // カウンターをリセット
      Waiter = 0; // 待機変数をリセット
     }



  } // OnTick終了----------------------
//+------------------------------------------------------------------+

特別なお知らせ -:

上記のコードを修正し、待機コードブロックを削除することで、「X回処理して停止する」機能を実装できます。特定の回数カウントした後は、カウンターがリセットされるまで動作を停止します。これらの変数をグローバルスコープで作成すれば、コードのどこでもリセットできます。


関連記事

コメント (0)