ホーム > ブログ > MQL5のOnTickとOnTimer|EA設計での使い分け

MQL5EA開発MT5

MQL5のOnTickとOnTimer|EA設計での使い分け

公開日: 2026-10-29読了目安: 約5分
⏱ 本記事は公開日時点の情報です。EAの実績数値(PF・DD・年率)は運用や再検証で変動するため、最新値は各EAページでご確認ください。 最新のEA実績を見る →

結論:判断は「新しい足」で、時間の処理は OnTimer で

先に結論を書きます。H1やH4のような長めの時間足で売買を決めるEAなら、売買の判断は「新しい足ができた最初のティック」だけで行えば足ります。ティックが来るたびに同じ計算を繰り返すと、CPUを使うだけで判断は変わりません。いっぽう、ティックが来なくても動かしたい処理には OnTimer を使います。週末に状態を書き出す、決まった時刻に注文を整理する、といった処理です。

ただし、どちらが正しいかは戦略によって決まります。この記事では、2つの仕組みの違いと、EAを選ぶ側が確かめられるポイントを整理します。

おすすめブローカー比較 →

🎁 無料EAをダウンロード

📧 無料メール講座(全8通)+登録者限定 MT5 インジケーター13本パック

登録するとすぐに、サイトの MT5 インジケーター13本をコンパイル済みファイル(.ex5)・ソースコード・使い方ガイドにまとめた登録者限定パックのダウンロードリンクが届きます。続けて、FX自動売買の本質、バックテストの正しい見方、ブローカー選びのコツなどを全8通(最初の5日間は毎日1通、その後は登録7・14・30日後)でお届けします。MQL5 Market 版(ローンチ価格・販売数に応じて段階的に値上げ)の値上げ前のお知らせも届きます。当サイトのEAは提携ブローカーのリアル口座があれば無料です。

※ プライバシーは厳守。配信解除はいつでも可能です。

仕組み:ティック駆動と時間駆動

OnTick(ティック駆動)

OnTick は、EAを動かしている銘柄に新しい価格(ティック)が届くたびに呼ばれます。値動きが激しい時間帯には1秒に何度も呼ばれ、相場が止まっている週末には一度も呼ばれません。

ここで知っておくべき仕様があります。前回の OnTick の処理がまだ終わっていないあいだに届いたティックは、順番待ちに積まれず読み飛ばされます。つまり、1回の処理が重いEAは、急な値動きの最中にティックを取りこぼします。

OnTimer(時間駆動)

OnTimer は、EventSetTimer() で決めた間隔ごとに呼ばれます。値動きとは関係なく動くため、市場が閉まっている間も呼ばれます。タイマーは1つのEAに1つだけで、処理が詰まっていると同じように読み飛ばされます。また、指定した間隔ぴったりに呼ばれる保証はありません。

項目OnTickOnTimer
呼ばれるきっかけ価格の更新一定時間の経過
市場が閉まっている間呼ばれない呼ばれる
呼ばれる回数相場が荒いほど多いほぼ一定
向いている処理エントリー・決済の判断定期的な集計・時刻で決まる処理
主な注意点重い処理でティックを取りこぼす新しい価格が来ていなくても動く

低頻度戦略でCPUを無駄にしない書き方

H4足で判断する戦略なら、1本の足が続く4時間のあいだに何千回 OnTick が呼ばれても、判断に使う確定足の値は変わりません。そこで私たちは、次のように「足が変わったときだけ」重い処理を通す形を基本にしています。

datetime g_lastBar = 0;

void OnTick()
{
   datetime cur = iTime(_Symbol, PERIOD_H4, 0);
   if(cur == g_lastBar) return;   // 同じ足の間は何もしない
   g_lastBar = cur;
   // ここで確定足(シフト1)を使って判断する
}

インジケーターのハンドルは OnInit で一度だけ作り、OnTick の中で毎回作り直さないことも大切です。OnTimer を使う場合は、OnDeinit で EventKillTimer() を呼んでタイマーを止めます。

VPSで複数のチャートにEAを入れていると、こうした差がCPU負荷として表れます。VPS選びの考え方は VPS情報 にまとめています。

EAを選ぶ側が確かめられること

中身のコードを見られなくても、次の点はある程度確かめられます。

  • 説明書きやパラメータ:「新しい足でのみ判断」のような設定があるか
  • VPSのCPU使用率:1つのEAを外したときに負荷がはっきり下がるなら、毎ティック重い処理をしている可能性がある
  • エキスパートログ:同じ内容の出力が毎ティック並んでいないか
  • テスターの結果:足の始値で判断するEAなら、「始値のみ」と「全ティック」で結果が大きく変わらないはず。大きくずれるなら、足の途中の値動きにも反応している

EAの入れ方や設定の基本は EA設定方法 を参照してください。

限界と注意

都合の悪い面も書いておきます。

  • 足の途中のリスクは見ていない:判断を新しい足に限ると、足の途中での急変には反応しません。損切りは注文に付ける逆指値で守る設計にしないと、思わぬ損失を許すことになります。
  • 新しい足のずれ:新しい足ができても、その足で最初のティックが届くまでは処理が動きません。値動きの少ない銘柄や時間帯では、判断が足の始まりより遅れることがあります。
  • OnTimer はテスターと実際の動きがずれやすい:テスターではタイマーが仮想の時刻で呼ばれるため、実際の口座と同じ間隔になるとは限りません。
  • 処理が軽くても成績は変わらない:CPU負荷を下げても勝ちやすくなるわけではありません。戦略の良し悪しは別の問題です。

H4足のEA、たとえば ETHEREUM EA のように取引の少ない戦略ほど、こうした設計の差はわかりにくくなります。ただし、外から確かめられる範囲には限りがあります。私たちが断定できるのは、私たち自身が書いたコードについてだけです。

まとめ

  • OnTick は価格が届いたとき、OnTimer は一定時間ごとに呼ばれる
  • 処理中に届いたイベントは順番待ちに積まれず読み飛ばされる。重い処理は取りこぼしにつながる
  • 低頻度戦略は「新しい足のときだけ判断する」形にすると、CPUを無駄にしない
  • ティックがない時間にも動かしたい処理には OnTimer を使う
  • 足の途中のリスクへの備えは逆指値で行う。軽い処理が成績を上げるわけではない
  • ほかのノウハウは EA・MT5ノウハウ にまとめています

📧 無料メール講座(全8通)+登録者限定 MT5 インジケーター13本パック

登録するとすぐに、サイトの MT5 インジケーター13本をコンパイル済みファイル(.ex5)・ソースコード・使い方ガイドにまとめた登録者限定パックのダウンロードリンクが届きます。続けて、FX自動売買の本質、バックテストの正しい見方、ブローカー選びのコツなどを全8通(最初の5日間は毎日1通、その後は登録7・14・30日後)でお届けします。MQL5 Market 版(ローンチ価格・販売数に応じて段階的に値上げ)の値上げ前のお知らせも届きます。当サイトのEAは提携ブローカーのリアル口座があれば無料です。

※ プライバシーは厳守。配信解除はいつでも可能です。

EAやFXについて質問はありますか?

Nattzyのトレード掲示板に質問を投稿できます(無料登録)。この記事の内容に限らず、EAの設定やブローカー選びの相談も歓迎です。

Nattzyで質問する ↗

コメント・質問