OnTimerを利用して一定時間毎に処理を行う

EAファイルのOnTickや、インジケーターファイルのOnCalulateは、ティックが動く毎に処理が実行されます。
そのため場合によっては何分もの間処理が実行されない可能性もあります。

MQL4プログラミンでは、ティックの動きに関係なく必ず処理が実行されて欲しいタイミングもあります。
例えば週末前にポジションを決済したい場合には、日本時間の土曜日朝の時間帯を指定しおき、その時間帯の中で決済などを作成します。
しかしマーケットクローズ前の時間帯は非常に値動きが少ないため、場合によっては何分もティックが動かない場合などがあります。

OnTimerを利用するとティックの動きに関係なく、一定時間毎に処理を実行することが可能です。

OnTimerを使用するにはまずOnInit内でEventSetTimer関数を実行して処理の頻度を指定します。

bool EventSetTimer(
int seconds
);

引数に指定した値が何秒毎にOnTimerの処理を実行するかになります。
1分毎にOnTimerを実行する例は以下のようになります。

int OnInit(){
EventSetTimer(60);
return(INIT_SUCCEEDED);
}


OnTimerを利用するにはさらにOnDeinit内でEventKillTimerを実行する必要があります。

void EventKillTimer();



void OnDeinit(const int reason){
EventKillTimer();
}


EventSetTimer関数とEventKillTimer関数を用意したら、OnTimer関数を作成して処理を書きます。

void OnTimer(){
// 一定時間毎に実行したい処理を書く
}



OnTimerを利用して1秒毎に現在時刻を表示する例です。

#property copyright "Copyright 2016, gogojungle"
#property link "http://labo.fx-on.com"
#property version "1.00"
#property strict
#property indicator_chart_window

int OnInit(){
EventSetTimer(1);
return(INIT_SUCCEEDED);
}

void OnDeinit(const int reason){
EventKillTimer();
}

int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
return(rates_total);
}

void OnTimer(){
Comment(TimeLocal());
}
TwitterでシェアFacebookでシェアGoogle+でシェアはてなブックマークに追加

TOPへ