MQL5でスプレッドフィルターを実装する考え方|GOLD / XAUUSD対応EAの発注前確認
- MQL5でスプレッドフィルターを実装する考え方
- スプレッドフィルターとは
- シグナル成立と発注許可を分ける
- 現在スプレッドを確認する方法
- points表記と価格差を混同しない
- GOLD / XAUUSDでスプレッドフィルターを使う時の注意点
- スプレッド上限をどこに適用するか
- 決済までスプレッドで止めるかを確認する
- ENTRY_SKIPとSPREAD_BLOCKのログ設計
- バックテストで確認すること
- デモ環境で確認すること
- スプレッドフィルターと通知・外部連携
- スプレッドフィルター実装の実務チェック表
- スプレッドフィルターは発注前確認の一部として扱う
- スプレッドフィルターは運用確認・発注前チェック・ログ設計とあわせて確認する
- GOLD / XAUUSD対応EAの導入前確認もあわせて確認する
MQL5でスプレッドフィルターを実装する考え方
MQL5でEAを作る時は、エントリーシグナルが成立した後、すぐに発注するのではなく、現在スプレッドを確認してから注文処理へ進む設計が重要です。
スプレッドが広い状態で新規発注すると、短期EA、スキャルEA、GOLD / XAUUSD対応EA、ナンピンEA、グリッドEAでは、想定より不利な価格で注文されたり、発注後の損益確認が難しくなったりする場合があります。
このページでは、MQL5でスプレッドフィルターを実装する時に確認したい現在スプレッド、上限値、points換算、ENTRY_SKIP、SPREAD_BLOCKログを整理します。
このページで確認すること
- スプレッドフィルターを作る理由
- シグナル成立と発注許可を分ける考え方
- 現在スプレッドの確認方法
- SYMBOL_SPREADとAsk – Bidの違い
- points表記と価格差の扱い
- GOLD / XAUUSDで注意したいpointとdigits
- スプレッド上限をどこに適用するか
- ENTRY_SKIP、SPREAD_BLOCKログの設計
- バックテストとデモ環境での確認
このページで扱わないこと
このページでは、売買判断、推奨エントリー、推奨ロット、推奨スプレッド値、利益保証、勝率保証、特定ブローカーへの誘導は行いません。
スプレッドフィルターは、EAの発注前確認とログ確認をしやすくするための実装項目として扱います。
スプレッドフィルターとは
スプレッドフィルターとは、EAが新規注文を出す前に現在スプレッドを確認し、設定した上限を超えている場合に発注を見送る仕組みです。
EAの中では、エントリーシグナルの成立と、発注してよい状態かどうかを分けて扱います。
| 段階 | 確認内容 | ログ例 |
|---|---|---|
| SIGNAL | BUY候補、SELL候補、WAITを判断する | SIGNAL_BUY、SIGNAL_SELL、SIGNAL_WAIT |
| SPREAD CHECK | 現在スプレッドが上限以内か確認する | SPREAD_OK、SPREAD_BLOCK |
| ORDER PRECHECK | ロット、証拠金、取引許可などを確認する | ORDER_PRECHECK_OK、LOT_BLOCK、MARGIN_BLOCK |
| EXECUTION | 注文要求を送る | ORDER_SENT、ORDER_FAIL |
スプレッドフィルターで止まることは、EAが壊れているという意味ではありません。条件に合わないため、新規注文を安全側で見送っている状態です。
シグナル成立と発注許可を分ける
スプレッドフィルターを実装する時は、シグナル成立と発注許可を分けてログ化することが重要です。
たとえば、インジケーター条件や方向条件が成立していても、スプレッドが上限を超えている場合は、発注しない設計にできます。
| 状態 | 意味 | 確認すること |
|---|---|---|
| シグナル不成立 | EAの売買候補が出ていない | SIGNAL_WAIT、GATE_FAIL、SCORE不足など |
| シグナル成立 | BUYまたはSELL候補がある | SIGNAL_BUY、SIGNAL_SELL |
| スプレッド超過 | 候補はあるが発注前に見送る | SPREAD_BLOCK、ENTRY_SKIP |
| 発注許可 | スプレッド条件を通過した | SPREAD_OK、ORDER_PRECHECK_OK |
この分離がないと、「サインが出ているのに注文しない」原因を確認しにくくなります。
現在スプレッドを確認する方法
MQL5で現在スプレッドを確認する方法には、主に2つの考え方があります。
1つは銘柄仕様として提供されるスプレッド値を確認する方法、もう1つはAskとBidの差から計算する方法です。
| 確認方法 | 確認内容 | 注意点 |
|---|---|---|
| SYMBOL_SPREAD | MT5側が返すスプレッド値を確認する | points単位で扱う前提を確認する |
| Ask – Bid | 現在のAsk価格とBid価格の差を計算する | pointで割ってpoints換算する必要がある |
| SYMBOL_SPREAD_FLOAT | 変動スプレッドかどうかを確認する | 固定か変動かの前提確認に使う |
どの方法を使う場合でも、EA内部で使う単位を統一し、ログにも同じ単位で出すことが重要です。
points表記と価格差を混同しない
スプレッドフィルターでよくある確認ミスが、points表記と価格差の混同です。
たとえば、スプレッドを価格差として見ているのか、pointsとして見ているのかが曖昧だと、設定値と実際の判定が合わなくなることがあります。
| 項目 | 意味 | 確認すること |
|---|---|---|
| 価格差 | AskとBidの価格そのものの差 | 例として、現在価格の小数単位で確認する |
| points | 価格差をpoint単位に換算した値 | EAのinputやログ単位と一致させる |
| point | 銘柄の最小価格単位 | SYMBOL_POINTで確認する |
| digits | 価格表示の小数桁数 | SYMBOL_DIGITSで確認する |
GOLD / XAUUSDでは、pointやdigitsが口座環境によって異なる場合があります。スプレッド上限の入力値が何単位なのか、ログで明確に分かるようにしてください。
GOLD / XAUUSDでスプレッドフィルターを使う時の注意点
GOLD / XAUUSDでは、スプレッドが時間帯や相場状況によって変わる場合があります。
そのため、スプレッドフィルターを使う場合は、現在スプレッドだけでなく、銘柄仕様、時間帯、EA方式も合わせて確認します。
| 確認項目 | 確認する理由 |
|---|---|
| symbol | XAUUSD、GOLD、suffix付き銘柄を区別するため |
| point / digits | スプレッドpoints、SL / TP、価格距離の解釈に関係するため |
| 現在スプレッド | 発注見送り条件に直接関係するため |
| 時間帯 | 早朝、取引開始直後、指標前後などで変動しやすいため |
| EA方式 | スキャル、ナンピン、グリッド、コピーEAで影響が異なるため |
スプレッドフィルターは、GOLD / XAUUSDで勝率を保証する仕組みではありません。発注条件を整理し、検証時の見送り理由を明確にするための仕組みです。
スプレッド上限をどこに適用するか
スプレッドフィルターを実装する時は、どの処理にスプレッド上限を適用するかを決める必要があります。
新規エントリーだけに適用するのか、ナンピン追加にも適用するのか、コピーEAの発注にも適用するのかで、EAの挙動が変わります。
| 適用対象 | 確認すること |
|---|---|
| 新規エントリー | 初回注文をスプレッドで見送るか |
| ナンピン追加 | 追加注文にもスプレッド条件を適用するか |
| グリッド注文 | 新規グリッド配置や追加注文を止めるか |
| コピーEA | コピー先発注時にもスプレッド条件を見るか |
| 決済処理 | 決済までスプレッドで止めるか、決済は継続するか |
実務上は、新規エントリーや追加注文にはスプレッド条件を使い、決済処理は別責務として扱う設計もあります。ただし、最終的にはEA仕様として明確に決める必要があります。
決済までスプレッドで止めるかを確認する
スプレッドフィルターを設計する時に注意したいのが、決済処理への影響です。
新規エントリーを止める目的でスプレッドフィルターを入れたつもりでも、実装によっては決済、トレーリング、建値移動、バスケット決済まで止まってしまう場合があります。
| 処理 | スプレッドフィルター適用の考え方 |
|---|---|
| 新規エントリー | スプレッド超過時に見送る対象になりやすい |
| 追加注文 | EA仕様により適用するか決める |
| SL / TP決済 | リスク管理上、別責務として扱うことが多い |
| トレーリング | 新規発注とは分けて確認する |
| バスケット決済 | 複数ポジション管理の決済条件として別に確認する |
スプレッドフィルターは、どの処理を止めるためのものかを明確にし、ログでも対象を分けて確認できるようにします。
ENTRY_SKIPとSPREAD_BLOCKのログ設計
スプレッドフィルターを実装する場合は、見送り理由をログに残すことが重要です。
EAが注文しなかった時に、シグナル不成立なのか、スプレッド超過なのか、ロット不正なのか、証拠金不足なのかを分けて確認できるようにします。
| ログ項目 | 意味 | 含めたい値 |
|---|---|---|
| SPREAD_CHECK | スプレッド確認を行った | current_spread、max_spread、symbol |
| SPREAD_OK | スプレッド条件を通過した | current_spread、max_spread |
| SPREAD_BLOCK | スプレッド超過で発注を見送った | current_spread、max_spread、signal方向 |
| ENTRY_SKIP | 新規エントリーを見送った | 見送り理由、symbol、timeframe |
| ORDER_PRECHECK_OK | 発注前チェックを通過した | spread、lot、margin、trade allowed |
ログには、現在スプレッドだけでなく、スプレッド上限、対象symbol、売買方向、見送り理由を残しておくと確認しやすくなります。
バックテストで確認すること
スプレッドフィルターを入れたEAをバックテストする場合は、スプレッド条件によって取引回数や見送り回数がどう変わるかを確認します。
| 確認項目 | 確認する内容 |
|---|---|
| スプレッド条件 | 固定スプレッドか、テスター上の条件か |
| 取引回数 | スプレッド上限変更で取引回数が変わるか |
| ENTRY_SKIP回数 | 見送りがどの程度発生したか |
| SPREAD_BLOCK回数 | スプレッド超過による見送り回数 |
| ORDER_FAIL | 発注要求後の失敗が残っていないか |
| setファイル | スプレッド上限を含む入力条件を保存したか |
バックテスト結果は、将来の結果を保証するものではありません。スプレッド条件がEAの挙動にどのように影響するかを確認するための材料として扱ってください。
デモ環境で確認すること
バックテストで問題がなくても、デモ環境ではリアルタイムのスプレッド変動があります。
そのため、デモ環境では、現在スプレッド、SPREAD_BLOCK、ENTRY_SKIP、ORDER_SENT、ORDER_FAILを実際の時間帯で確認します。
| 確認項目 | 確認する内容 |
|---|---|
| 現在スプレッド | 実際の環境でどの程度のスプレッドが出ているか |
| 時間帯 | 早朝、取引開始直後、指標前後など |
| ENTRY_SKIP | スプレッド以外の見送り理由が混ざっていないか |
| SPREAD_BLOCK | スプレッド上限超過で止まったか |
| ORDER_SENT | スプレッド条件通過後に注文要求へ進んだか |
| ORDER_FAIL | 発注要求後に価格変動や約定条件で失敗していないか |
デモ環境では、チャート上の見た目だけでなく、Expertsログでスプレッド判定の結果を確認してください。
スプレッドフィルターと通知・外部連携
EAにDiscord通知や外部連携がある場合、スプレッドブロックを通知対象にするかどうかも検討します。
ただし、毎回のSPREAD_BLOCKをすべて通知すると、通知過多になる場合があります。状態変化時だけ通知する、一定間隔で要約する、バックテスト時は通知しないなど、運用に合わせて設計します。
| 通知対象 | 確認すること |
|---|---|
| SPREAD_BLOCK通知 | 毎回通知するか、要約するか |
| 状態変化通知 | SPREAD_OKからBLOCKへ変わった時だけ通知するか |
| 外部制御 | 外部シート停止とスプレッドブロックを分けて通知するか |
| 通知ログ | NOTIFY_SEND、NOTIFY_FAILを確認する |
通知は売買判断を促すためではなく、EAの状態確認やログ確認を補助するために使います。
スプレッドフィルター実装の実務チェック表
| 確認 | チェック項目 |
|---|---|
| □ | シグナル成立と発注許可を分けて設計した |
| □ | 現在スプレッドの取得方法を決めた |
| □ | SYMBOL_SPREADを使うのか、Ask – Bidから計算するのか整理した |
| □ | points表記と価格差を混同しないようにした |
| □ | GOLD / XAUUSDのpoint、digitsを確認した |
| □ | スプレッド上限を新規エントリー、追加注文、コピーEAのどこに適用するか決めた |
| □ | 決済処理までスプレッドフィルターで止めないか確認した |
| □ | SPREAD_CHECK、SPREAD_OK、SPREAD_BLOCKのログを分けた |
| □ | ENTRY_SKIPの理由にスプレッド超過を含めた |
| □ | ORDER_SENTとORDER_FAILをスプレッド判定後の処理として分けた |
| □ | バックテストでSPREAD_BLOCK回数と取引回数を確認した |
| □ | デモ環境でリアルタイムのスプレッド変動を確認した |
スプレッドフィルターは発注前確認の一部として扱う
MQL5 EAのスプレッドフィルターは、単独でEAの成績を保証する仕組みではありません。
重要なのは、エントリーシグナルが成立した時に、現在のスプレッドが発注条件に合っているかを確認し、合わない場合は明確な理由をログに残して見送ることです。
特にGOLD / XAUUSD対応EAでは、point、digits、現在スプレッド、スプレッド上限、ENTRY_SKIP、SPREAD_BLOCKを分けて確認できるようにしておくと、バックテストやデモ環境で原因を追いやすくなります。
スプレッドフィルターは、売買判断ではなく、EAの発注前確認、ログ追跡性、検証再現性を高めるための実務設計です。
スプレッドフィルターは運用確認・発注前チェック・ログ設計とあわせて確認する
MQL5でスプレッドフィルターを実装する場合は、運用時のスプレッド確認、発注前チェック、ログ設計、GOLD / XAUUSDの銘柄仕様をあわせて確認すると、SPREAD_BLOCKやENTRY_SKIPの理由を整理しやすくなります。
GOLD / XAUUSD対応EAの導入前確認もあわせて確認する
この記事で扱った内容は、GOLD / XAUUSD対応EAを確認する時の一部です。導入前には、MT5設定、銘柄仕様、スプレッド、ログ、バックテスト、VPS、コピーEA、通知・外部連携もあわせて確認しておくと整理しやすくなります。
GOLD / XAUUSD対応EAの導入前チェックリストを見る
