週末・休場中に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は呼ばれる。取引リクエストの送信が禁止されるだけ
本記事はプログラミングの説明であり、特定の売買を推奨するものではありません。


