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

MetaTrader 5で新しいバーを検出するシンプルなコード

添付ファイル
49018.zip (977 bytes, ダウンロード 0回)

今回は、MetaTrader 5を使って新しいバー(キャンドル)を検出するためのシンプルなコードをご紹介します。このコードは、前のバーの時間を記録し、一定の時間(例えば1分)を加算して現在のバーのクローズ時間を取得します。

基本的な流れは以下の通りです:

  • 前のバーの時間を取得し、60秒を加算して現在のバーのクローズ時間を計算します。
  • 現在の時間がクローズ時間と一致する場合、新しいバーが受信されたと判断します。
  • このコードは、バーごとに一度だけ実行されるようにフラグを使って制御します。

以下が実際のコード例です。コード内のコメントを参考にしながらカスタマイズしてみてください。

//+------------------------------------------------------------------+
//|                                                  新しいバー検出.mq5 |
//|                                          作成者: H A T Lakmal |
//+------------------------------------------------------------------+

bool NewBarRecived = false; // フラグの初期化

//+------------------------------------------------------------------+
//| エキスパート初期化関数 |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- タイマーをセット
   EventSetTimer(60);

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| エキスパート非初期化関数 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- タイマーを解除
   EventKillTimer();
  }

//+------------------------------------------------------------------+
//| エキスパートティック関数 |
//+------------------------------------------------------------------+
void OnTick()
  {
   datetime TimePreviousBar = iTime(_Symbol,PERIOD_M1,1);
   datetime TimeCurrentClose = TimePreviousBar + 60; // 現在のバーのクローズ時間
   datetime Time_Current = TimeCurrent();

   if(Time_Current == TimeCurrentClose && NewBarRecived == false)
     {
      PlaySound("ok.wav");   // コードの動作確認用
      NewBarRecived = true; // フラグを更新

        // あなたのコードをここに記述 ----- (何か処理を行う)
     }
   else
      if(Time_Current > TimeCurrentClose)
        {
         NewBarRecived = false; // 次のバーのオープンのためにフラグをリセット

         // あなたのコードをここに記述 ----- (何か処理を行う)
    }

   Comment("
" +  "
" +  "現在のバーの時間 -: " + TimeToString(TimePreviousBar,TIME_DATE|TIME_MINUTES|TIME_SECONDS) +
         "
" + "現在のクローズ時間 -: " +TimeToString(TimeCurrentClose,TIME_DATE|TIME_MINUTES|TIME_SECONDS) +
         "
" + "現在の時間 -: " + TimeToString(Time_Current,TIME_DATE|TIME_MINUTES|TIME_SECONDS) + 
           "
" +"
" + "新しいバーが受信されました -: " + NewBarRecived); 
           // 計算を確認するため

  }
//+------------------------------------------------------------------+
//| タイマー関数 |
//+------------------------------------------------------------------+
void OnTimer()
  {
//---
  }
//+------------------------------------------------------------------+
//| トレード関数 |
//+------------------------------------------------------------------+
void OnTrade()
  {
//---
  }
//+------------------------------------------------------------------+
//| チャートイベント関数 |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
//---
  }
//+------------------------------------------------------------------+

このコードを使うことで、新しいバーの到着を簡単に検出できます。ぜひ試してみてください!

関連記事

コメント (0)