表示しているチャートの足が変わったタイミングで処理する方法や、
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分経過した と判断します。
実行結果

5分毎に1回だけ、Printできています。
引数あり「Bars」に指定する時間軸は、「ENUM_TIMEFRAMES」列挙の値を指定します。
ENUM_TIMEFRAMES(チャート時間軸)定数は、以下を参考にしてください。
| I D | 値 | 詳 細 | 
|---|---|---|
| PERIOD_CURRENT | 0 | 現在チャートの時間軸 | 
| PERIOD_M1 | 1 | 1分 | 
| PERIOD_M5 | 5 | 5分 | 
| PERIOD_M15 | 15 | 15分 | 
| PERIOD_M30 | 30 | 30分 | 
| PERIOD_H1 | 60 | 1時間 | 
| PERIOD_H4 | 240 | 4時間 | 
| PERIOD_D1 | 1440 | 1日 | 
| PERIOD_W1 | 10080 | 1週間 | 
| PERIOD_MN1 | 43200 | 1ヶ月 | 
応用すれば、1時間に1回 や 1日に1回 なんて処理の仕方もできますね。
 
  
  
  
  
