開発実務ノート

MQL5でスプレッドフィルターを実装する考え方|GOLD / XAUUSD対応EAの発注前確認

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の中では、エントリーシグナルの成立と、発注してよい状態かどうかを分けて扱います。

段階確認内容ログ例
SIGNALBUY候補、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_SPREADMT5側が返すスプレッド値を確認する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方式も合わせて確認します。

確認項目確認する理由
symbolXAUUSD、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の導入前チェックリストを見る

ABOUT ME
記事URLをコピーしました