5分に1回処理する(別の時間足のBarsで判断)

Bars-title MQL4プログラミング

表示しているチャートの足が変わったタイミングで処理する方法や、
OnTimer関数で一定時間ごとに処理する方法等がありますが、
ここでは、OnTimerを使わず、
1分足チャートを表示しつつ、5分に1回処理をする方法を書いていきたいと思います。

引数の無い「Bars」には、現在のチャート内のバー数が格納されています。
1分足チャートで「Bars」を呼び出すと、1分足のバー数が返ってくる為、
5分経過したことの計算が別途必要です。

それは面倒なので、簡単に書ける 引数ありの「Bars」を使用します。

サンプル

int bars_total = 0;

int OnInit(){
 bars_total = Bars(Symbol(), PERIOD_M5);
 return(INIT_SUCCEEDED);
}

void OnTick(){
 int nowBars = Bars(Symbol(), PERIOD_M5);
 if(nowBars != bars_total){
  Print(“=OK=”);
  bars_total = nowBars; //今のバー数を記録
 }
}

グローバル変数を使用して、EA起動時の5分足バー数を記録。
あとはイベントハンドラ(OnTickやOnTimerなど)で現在の5分足バー数を取得。
足が変わると、現在のバー数が増えるので、その違いをキャッチし、
5分経過した と判断します。

実行結果
Bars-result

5分毎に1回だけ、Printできています。

引数あり「Bars」に指定する時間軸は、「ENUM_TIMEFRAMES」列挙の値を指定します。
ENUM_TIMEFRAMES(チャート時間軸)定数は、以下を参考にしてください。

I D詳 細
PERIOD_CURRENT0現在チャートの時間軸
PERIOD_M111分
PERIOD_M555分
PERIOD_M151515分
PERIOD_M303030分
PERIOD_H1601時間
PERIOD_H42404時間
PERIOD_D114401日
PERIOD_W1100801週間
PERIOD_MN1432001ヶ月

応用すれば、1時間に1回 や 1日に1回 なんて処理の仕方もできますね。

タイトルとURLをコピーしました