週末・休場中にEAが動かない?|OnTickは新しいティックが来た時だけ

MQL5のEAで売買の判断を書くOnTickは、EAが付いているチャートのシンボルに新しいティック(価格の更新)が来た時だけ呼ばれます。土日や休場中は価格が動かないため、EAが動いていても、OnTickの中の処理は動きません。一方、OnTimer は、タイマーを設定していれば、価格が来なくても一定の間隔で呼ばれます。

この記事では、MQL5リファレンスにもとづいて、OnTickが呼ばれる条件と、休場中の動き、自動売買をオフにした時の動きをまとめます。

(確認:MQL5リファレンス「OnTick」「OnTimer」。確認日:2026年10月6日。休場中の実際の動きは、業者や銘柄で違う可能性があり、実機での確認は行っていません)

OnTickが呼ばれる条件

リファレンスの記載は、次のとおりです。

  • NewTickイベントは、EAが付いているチャートのシンボルに対して新しいティックを受け取った時に、EAに対して生成される
  • OnTick は、EAでだけ定義できる(カスタム指標やスクリプトでは定義できない)
  • すべてのイベントは、受信した順に処理される。キューにNewTickが既にある、または処理中の時は、新しいNewTickはキューに追加されない(処理が遅い間に来たティックは、拾われないことがある)

つまり、OnTick は「一定の時間ごと」ではなく「価格が動いた時ごと」です。「1分ごとに〇〇する」「◯時になったら決済する」という処理をOnTickの中に書くと、価格が動かない間は、時刻になっても実行されません。

休場中・週末

イベント 休場中(価格が来ない時)
OnTick 呼ばれない(新しいティックが無いため)
OnTimer タイマーを設定していれば、呼ばれる(ターミナルが一定の間隔で生成する)

リファレンスには、OnTimerは、EventSetTimer() でタイマーを起動したEAに対して、ターミナルが定期的に生成するイベントだと書かれています。「価格が動かない間も、時刻で動かしたい処理」は、OnTimerに書きます(MQL5で一定時間ごとに処理する方法)。ただし、MT5が動いていて、サーバーに接続していることが前提です。

自動売買ボタンをオフにした時

リファレンスには、NewTickイベントは、自動取引が有効かどうかに関係なく生成されると書かれています。自動取引の無効化は、EAからの取引リクエストの送信を禁止するだけで、EAの動作は止まりません。ボタンを押して無効にしても、実行中のOnTickの処理は中断されません。

  • 「自動売買がオフでも、EAの計算やアラートは動いている」ことがある
  • 逆に、OnTickが動いている(ログが出ている)ことは、取引できる状態の証拠にならない

確認の方法はMT5でEAが動いているかを確認する方法、勝手にオフになる原因はMT5の自動売買が勝手にOFFになる原因にまとめています。

書き方の注意(一般的な考え方)

  • 時刻で動かす処理は、OnTimerにする。OnTickの中で時刻を見る場合は、価格が動いた時にしか判定されないことを前提にする
  • OnTickの処理は、短くする。処理が長いと、その間のティックは、キューに入らず、拾われない
  • 週明けの最初のティックで、まとめて判定する書き方になることがある。窓開けのような飛んだ価格で、判定が走る可能性を考える

休場が明けた直後に、EAが意図しない注文を出さないか確認するために、デモ口座で週をまたいで動かして確かめる方法があります。ストラテジーテスターは、休場の動きを完全には再現しないことがあります(MT5ストラテジーテスターのモデルの選び方)。

パソコンを閉じる場合

MT5が動いていなければ、OnTickもOnTimerも呼ばれません。週末にパソコンを閉じる運用でも、サーバーのストップロスは働きます(PCを閉じても損切りは効く?)。パソコンを閉じずに動かす方法はスマホのMT5でEAは動かせないにまとめています。

まとめ

  • OnTickは、新しいティックが来た時だけ呼ばれる。休場中は呼ばれない
  • 時刻で動かす処理は、OnTimerに書く。ただしMT5が動いていて、サーバーに接続していることが前提
  • 自動売買をオフにしても、OnTickは呼ばれる。取引リクエストの送信が禁止されるだけ

本記事はプログラミングの説明であり、特定の売買を推奨するものではありません。