OnTick()とOnTimer()の違い

OnTimer()は便利そうなのにバックテストで使えない欠点が

OnTick()はティックごとに動作する関数で、EAの売買ロジック等、根幹部分をここに記述します。

他方、OnTimer()は指定時間間隔ごとに動作する関数で、OnTick()と同様に、EAの根幹部分をここに記述します。

OnTimer()はティックの変動量に関係なく一定間隔で動作するので、経済指標の発表前後に注文するような日時を考慮したトレードに向いている!と気付きました。

※注意:OnTick()の場合、ティックが動かないとそもそも関数が起動しないので、厳密なタイミングを測れない。

確かに、読み通りではあったのですが、OnTimer()には大きな問題がありました。なんと、バックテストで動作しないのです。

デモ口座でのフォワードテストなら問題なく動作するものの、バックテストで動作しない以上、OnTimer()の使い所は非常に限られてきます。

OnTick()を擬似的な方法で再現しようと試みている方がいらっしゃいましたが、現状では使いにくい関数仕様となっています。勿体無いなぁ…。

ちなみに、OnTimer()はローカル時刻(MT4がインストールされているPCの時刻)を参照して動作します。この点も要注意です。

OnTimer()を使うには、いくつかおまじない的な記述があるので、プログラムの雛形を残しておきます。

int OnInit()
{
  EventSetTimer(1); // 1秒ごとに起動。カッコ内の数値を変えることで起動間隔を変えられる。

  return(INIT_SUCCEEDED);
}
void OnDeinit(const int reason)
{
  EventKillTimer(); // タイマーイベントの削除
}
void OnTimer()
{
  // ここに実現したいロジックを記述
}

MT4の無料プログラミング講座

LINE公式アカウントを友だち追加して、MT4のプログラミング講座を無料で受けちゃおう!

超豪華プレゼントも盛りだくさん♪

MT4プログラミングを習得すると、オリジナルEA運用、作成代行、商品販売等、複数の収入源を手に入れられるよ。副業に最適だね!

↓↓↓ 詳細はこちら ↓↓↓

アイキャッチ

>

エターナル・パートナーPRO ~MT4裁量トレード支援ツール~ 「MT4は裁量トレーダーに優しくない」そう思ったことありませんか?もっと快適にトレードするための強力な売買ツールが必要だと考え、開発したのが「エターナル・パートナーPRO」です。元々は自分自身のために開発したツールですので、手抜き無しのガチものです。既に200名近い方に手に取っていただき、喜びの声が続々と届いております。ぜひご覧ください!

CTR IMG