EAはどうやって売買を判断しているのか|tick・OnTick・注文送信
EAの内部では、価格更新(tick)がNewTickイベントを発生させ、OnTick()が呼ばれ、条件判定を経て注文リクエストが作られます。公式リファレンスの記述をもとに、判断から約定までを段階ごとに平易に解説します。
PR当ページにはプロモーション(アフィリエイト広告)が含まれます。順位・評価は公開の評価基準に基づき編集部が独立して決定しています。EAの成績はすべて過去の検証結果であり、将来の利益を保証するものではありません。海外FX業者は金融庁未登録です。
この記事の目次
「条件を満たしたら自動で注文する」——EAの説明はたいていここで終わります。しかし実際には、価格が届いてからEAが反応し、条件を判定し、注文がサーバーに受理されるまでに、決まった順序の処理があります。この流れを知っていると、動かない原因も、検証と実運用のずれも自分で切り分けられます。MQL公式リファレンスの記述をもとに、順を追って説明します。
結論:EAは「イベント駆動」で動く
✅ 結論
EAは常時ぐるぐる回っているプログラムではありません。「新しい価格が届いた」「取引が成立した」といったイベントが起きたときだけ呼び出される関数の集まりです。つまり、イベントが起きなければEAは何もしません。「チャートを閉じた」「市場が休みでtickが来ない」「重い処理でtickを取りこぼした」——これらはすべてEAが沈黙する正当な理由になります。
EAが持つ主なイベントハンドラ
MQLでは、決まった名前の関数を用意しておくと、対応するイベント発生時にMetaTraderが呼び出します。EAで使われる主なものは次の通りです。
| 関数名 | 呼ばれるタイミング | 主な用途 |
|---|---|---|
|
| EAをチャートに適用した直後、パラメータ変更時 | パラメータ検証、ハンドル作成、初期ログ出力 |
|
| 新しいtickを受信したとき(NewTickイベント) | 条件判定と発注 |
|
| 設定した間隔ごと | tickに依存しない定期処理 |
|
| 取引状態が変化したとき(MT5) | 約定・決済の追跡 |
|
| EAを外したとき、チャートを閉じたとき | 後片付け、オブジェクト削除 |
この中心にあるのが OnTick() です。公式リファレンスは次のように定義しています。
"The function is called in EAs when the NewTick event occurs to handle a new quote."
出典: MQL5 Reference - OnTick (2026年9月24日確認)
tickとは何か
tickは「価格の更新1回分」です。ブローカーの取引サーバーから、Bid(売値)とAsk(買値)の組が配信されるたびに1tickが発生します。
重要な性質が4つあります。
- 一定間隔ではない。 ロンドン時間帯のドル円なら1秒に数回届くこともあり、早朝の閑散時間帯は数秒に1回ということもあります。
- ブローカーごとに異なる。 同じ通貨ペアでも、業者によって配信されるtickの数と価格が微妙に違います。これがバックテストと実運用がずれる最初の理由です。
- 市場が動いていないと発生しない。 土日や年末年始、対象銘柄の取引時間外にはtickが来ません。
- チャートの銘柄にしか届かない。 公式は "The NewTick event is generated only for EAs upon receiving a new tick for a symbol of the chart the EA is attached to." と明記しています。EURUSDのチャートに置いたEAは、USDJPYが動いても呼ばれません。
⚠️ tickは取りこぼされる
公式リファレンスには "If the queue already contains the NewTick event or this event is in the processing stage, then the new NewTick event is not added to mql5 application queue." とあります。前のtickの処理が終わる前に次のtickが来ても、キューには積まれません。重い計算を OnTick() に書いたEAは、その間の価格変動を見落とします。スキャルピング系EAで処理を軽く保つ必要があるのはこのためです。
もう一つ、実務で役立つ記述があります。
"The NewTick event is generated regardless of whether auto trading is enabled (AutoTrading button)."
"Disabled auto trading means only a ban on sending trade requests from an EA. The EA operation is not stopped."
つまり自動売買ボタンがオフでもEA自体は動いており、禁止されるのは取引リクエストの送信だけです。「ログは流れているのに注文が出ない」という症状は、ここで説明がつきます。
OnTick()の中で何が行われるか
典型的なEAの OnTick() は、おおよそ次の順序で処理を進めます。移動平均のクロスでエントリーする単純なEAを例に見てみます。
1. 前提条件のチェック
- 取引時間帯か(時間帯フィルタ)
- スプレッドが許容範囲内か(スプレッドフィルタ)
- 重要指標の発表前後でないか(ニュースフィルタ)
- 口座に十分な証拠金があるか
ここで弾かれれば、以降の処理は行われません。「エントリーが極端に少ない」EAの多くは、ここで止まっています。
2. 自分のポジションの確認
マジックナンバーを使って、そのEAが出した注文だけを抽出します。MT4なら OrderMagicNumber()、MT5なら PositionGetInteger(POSITION_MAGIC) で読み取ります。
💡 なぜマジックナンバーが必要か
1つの口座では、手動注文も他のEAの注文も同じ場所に並びます。マジックナンバーがなければ、EAは「自分のポジションが何本あるか」を正しく数えられません。同じEAを複数の通貨ペアで動かすときもペアごとに別の値を割り当てないと、ロット計算や決済ロジックが壊れます。用語の整理はEA用語集を参照してください。
3. 指標値の取得と条件判定
短期移動平均と長期移動平均の値を取得し、前回のバーと今回のバーで大小関係が入れ替わったか(ゴールデンクロス/デッドクロス)を判定します。
ここで多くのEAが使うのが**「バーの確定を待つ」**という設計です。tickごとに判定すると、同じバーの中で条件を満たしたり満たさなかったりして、エントリーが不安定になります。そこで「新しいバーが生成された最初のtickのときだけ判定する」という書き方が一般的です。
この違いは検証結果にも影響します。バックテストで「始値のみ(Open prices only)」モデルが使えるのは、バー確定時にしか判定しないEAに限られます。tickごとに判定するEAを始値モデルでテストすると、結果は意味をなしません。
4. ロットと損切り・利確価格の計算
リスク率ベースで計算する場合、式は次の通りです。
ロット = (口座残高 × 1トレードあたりリスク率) ÷ (損切り幅[pips] × 1pipsあたりの価値[円/lot]) この段階で、業者の最小ロット・最大ロット・ロットの刻み幅に丸める処理が必要です。ここを省略したEAは、計算結果が刻み幅に合わずエラーで弾かれます。
注文リクエストが作られる
条件がそろうと、EAは注文リクエストを組み立てます。MT4とMT5で構造がまったく異なります。
| MT4(MQL4) | MT5(MQL5) | |
|---|---|---|
| 発注 |
|
|
| 結果の受け取り | 戻り値(チケット番号 or −1) |
|
| 決済 |
| 反対売買のリクエストを送る |
| ポジション管理 | 注文(Order)ベース |
|
| 両建て | 同一銘柄で可 | 口座がヘッジングなら可、ネッティングなら不可 |
| 部分約定の指定 | 概念なし | FOK / IOC / RETURN を指定 |
| イベントハンドラ |
|
|
MQL5はOOP(クラス・継承・テンプレート)を全面採用しており、MQL4とMQL5は相互に非互換です。「同じEA」を名乗るMT4版とMT5版は、別々に書かれた別プログラムであり、バックテスト結果も一致しません。詳しい比較は MT4とMT5の違い にまとめています。
サーバーが受理するか拒否するかを決める
ここが最も誤解される部分です。**EAは注文を「出す」のではなく「依頼する」**だけで、採否を決めるのはブローカーの取引サーバーです。
拒否されると、エラーコードが返ります(出典: MQL4 Error Codes / MQL5 Trade Server Return Codes 、2026年9月24日確認)。
| MT4 | MT5 | 公式の説明 | 原因 |
|---|---|---|---|
| 130 | 10016 | "Invalid stops" | SL/TPが業者のストップレベル以内 |
| 131 | 10014 | "Invalid trade volume" | ロットが最小・最大・刻み幅から外れている |
| 132 | 10018 | "Market is closed" | 取引時間外 |
| 136 | 10021 | "Off quotes" | 価格急変で提示価格が使えない |
| 146 | — | "Trade context is busy" | 他の注文処理と競合(MT4のシングルスレッド構造に起因) |
| 4109 | 10027 | "Trade is not allowed" | 自動売買が無効 |
| — | 10030 | "Invalid order filling type" | 業者が許可していない約定ポリシーを指定 |
MT5固有の10030は、海外FX業者でMT5のEAが動かない原因として特に多いものです。MT5では注文ごとに約定ポリシーを指定します。
| 定数 | 意味 | 挙動 |
|---|---|---|
|
| Fill or Kill | 全量約定できなければ注文自体が破棄される |
|
| Immediate or Cancel | 約定できる数量だけ約定し、残りをキャンセル |
|
| — | 部分約定後、残数量が板に残る |
銘柄ごとに許可されるポリシーは SYMBOL_FILLING_MODE(allowed order filling modes)で定義されており、許可されていないポリシーを指定すると必ず弾かれます(出典: MQL5 Reference - Order Properties 、2026年9月24日確認)。
約定して、ようやく損益が動く
サーバーが受理すると約定価格が確定します。ここで初めてスリッページが確定します。EAが要求した価格と実際の約定価格の差で、バックテストには基本的に現れない実損です。
自分で測る手順は次の通りです。
- 実口座で一定期間EAを動かす
- 口座履歴をCSV/HTMLでエクスポートする
- EAのログに記録された発注要求価格と、履歴の約定価格を突き合わせる
スリッページ(pips) = 約定価格 − 要求価格(買いは正が不利、売りは負が不利)- 平均スリッページと、不利方向スリッページの比率を出す
健全な業者では有利・不利がおおむね対称で、平均は0付近からわずかに不利になります。不利方向に偏っている業者は避けるべきです。約定拒否率は (リクオート + オフクォート + 拒否) ÷ 発注試行回数 で、通常時1%未満が目安になります。
バックテストと実運用がずれる箇所
ここまでの流れを踏まえると、ずれが生まれる箇所を段階ごとに特定できます。
| 段階 | 検証時 | 実運用時 | 差の大きさ |
|---|---|---|---|
| tick | 生成ティックまたは保存された実ティック | 自分のブローカーのtick | 中〜大(スキャルピング系で特に大) |
| OnTick呼び出し | 取りこぼしなし | 処理が重いと取りこぼす | 小〜中 |
| スプレッド | 固定値を設定できてしまう | 時間帯で変動。指標時は数倍〜10倍 | 大 |
| 発注 | ほぼ100%受理される | ストップレベル・約定ポリシー・規約で弾かれる | 中 |
| 約定 | スリッページ設定値のみ | 実際のスリッページとリクオート | 中〜大 |
| 手数料・スワップ | 設定を忘れやすい | 必ず発生する | 中 |
📊 参考データ
国内のEA検証サイトが実測した例では、2023年10月6日の米雇用統計発表時に、ドル円のスプレッドが1.5pipsから15pipsへ10倍に拡大しています(出典: EA-BANK「EAの失敗パターン」解説記事、2026年9月24日確認)。固定スプレッド0.5pipsでバックテストした成績が、実運用で再現しない理由がここにあります。
EAが「判断していない」もの
最後に、EAの限界を明確にしておきます。次の項目はプログラムの判断対象外です。
- ロジックが陳腐化したかどうか。 EAは書かれた条件を実行するだけで、「この戦略はもう通用しない」とは考えません。
- 相場の構造変化。 金融政策の転換、規制変更、市場参加者の入れ替わりを認識しません。
- 資金全体のリスク。 複数EAを動かしている場合、他のEAの含み損は見ていません。
- 停止すべきタイミング。 含み損が膨らんでも、設計どおり動き続けます。
🚨 停止基準は人間が決める
最大ドローダウンが50%に達すると、元本回復に+100%のリターンが必要になります。60%なら+150%、70%なら+233%です。停止ラインをDD30〜40%に置く根拠はここにあります。必要資金・許容DD計算機で、自分の許容水準から逆算してください。
まとめ
EAの動作は「tick受信 → NewTickイベント → OnTick() → 条件判定 → リクエスト組立 → サーバー判定 → 約定」という一本の流れです。この順序を頭に入れておけば、症状からどこで止まっているかを推定できます。
- 次に読む: EA(FX自動売買)とは — 全体像とEAの入手先
- 次に読む: MT4とMT5の違い — 発注APIとテスターの差
- 次に読む: EA用語集50語 — マジックナンバー・ストップレベルなどの定義
よくある質問
Q.MT4のEAをMT5に移行(変換)することはできますか?
Q.MT4の時間が日本時間とずれるのはなぜですか?
Q.自動売買は24時間稼働が必要ですか?
Q.EAは最初勝てていて、だんだん勝てなくなっていくのが普通ですか?
関連記事
EA(FX自動売買)とは|注文が出るまでの仕組みを6段階で理解する
更新: 2026年9月24日
基礎知識・始め方FX自動売買の始め方|口座開設からEA稼働までの6ステップを解説
更新: 2026年9月24日
基礎知識・始め方EA用語集50語|PF・DD・RF・マジックナンバーまで定義と目安
更新: 2026年9月24日
基礎知識・始め方EAとコピートレード・ミラートレードの違い|法規制の線引きも解説
更新: 2026年9月24日
基礎知識・始め方FX自動売買は儲かるのか|利回りの現実を一次データの数字で検証する
更新: 2026年9月24日
基礎知識・始め方FX自動売買はいくらから始められるか|1万・10万・30万円の現実
更新: 2026年9月24日