MQLで指定時間に実行する

MT4のEAで、指定時間に動作する仕組みを調べましたので、そのメモです。

プログラム

void OnTick(){
   if(TimeHour(TimeCurrent()) == 1 && TimeMinute(TimeCurrent()) == 15){
      Print("1時15分");
   }
}

非常にシンプルに、

時間取得では、

・TimeHour()に引数として現在時間TimeCurrent()を与える。

分取得では、

・TimeMinute()に引数として現在時間TimeCurrent()を与える。

ちょっとした実用的な改良として、上記プログラムでは、Ontick関数内で動作するため、その時間のティックすべてで実行してしまうため、最初の一回のティックのみで動作するようにしたものが次のプログラムです。

void OnTick(){
   static datetime time = Time[0];
   if(Time[0] != time){//毎分最初のティックのみ実行
      if(TimeHour(TimeCurrent()) == 1 && TimeMinute(TimeCurrent()) == 15){
         Print("1時15分");
      }
      time = Time[0];
   }
}

テスト

ストラテジーテスタでのテストです。

1時15分の一回のみ実行されます。

参考

以下のサイトを参考にさせていただきました。

・時間取得について

① http://fx.zeniken.net/?p=388

【MQL4勉強プログラミング】TimeHour()関数で指定した時刻の時間(0~23時)を取得

・毎分の処理について

③ http://forex.toyolab.com/?p=666