ブログタイトルを「FX自動売買システム開発部」から「autoFX」に変更しました!

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()
{
  // ここに実現したいロジックを記述
}

MQL4プログラミングの最新記事8件

>完全放ったらかしEA 「AutoEndlessCatchRange」

完全放ったらかしEA 「AutoEndlessCatchRange」

「本業が忙しい!」「でも資産運用したい!」そんなあなたに最適なEAです。兼業トレーダーの方はチャートを毎日みて分析してトレードする時間はなかなか確保できないものです。トレードは本EAに任せて、本業やプライベートの時間をもっと増やしませんか?元々は自分自身のために開発したEAですので、手抜き無しのガチものです。

CTR IMG