Stop Lossを設定しても、実際の損失額が計画値と一致するとは限りません。約定価格、スリッページ、手数料を分離し、MT5で計画リスクと実現損失の乖離を継続計測する方法を解説します。
損切り価格を決めても損失額は確定しない
EAのリスク管理では、エントリー価格とStop Lossの距離から「この取引では1万円を失う」と事前計算することが多い。しかし、そこで求めているのはあくまで計画上の損失額である。
実際の決済は、指定したSL価格そのものではなく、市場で成立したDeal Priceによって損益が決まる。MQL5でもStop Lossの価格と実際のDeal Priceは別のプロパティとして管理されている。
したがって検証では「SLを置いたか」だけでなく、計画したリスクと実際に発生した損失の差を記録する必要がある。この差を測ることで、売買ロジックでは見えない執行品質を評価できる。
まずPlanned Riskを口座通貨で固定する
比較の基準になるのがPlanned Risk、つまり注文時点で想定していた最大損失額である。
MT5ではOrderCalcProfitを使い、エントリー予定価格、Stop Loss価格、ロット数を渡すことで、想定損益を口座通貨ベースで事前評価できる。計算方法はFX、CFD、先物など銘柄のCalculation Modeによって異なるため、pipsを独自換算するより、銘柄仕様を反映した計算を利用する方が汎用性を持たせやすい。
例えば発注時にplanned_loss、entry_price、sl_price、volumeを保存し、1取引ごとのRisk Recordを作成する。
実際の決済価格からActual Lossを取得する
ポジション終了後は、取引履歴からDEAL_PRICE、DEAL_PROFIT、DEAL_COMMISSION、DEAL_SWAP、DEAL_FEEなどを取得できる。
ここで重要なのは、DEAL_PROFITだけを見るのではなく、取引に関連するコストを同じ単位へ集約することである。
概念的には、Actual Lossを「価格変動による損益+手数料+Fee+Swap」として管理する。ブローカーや商品によって費用構造は異なるため、どの項目を含めたかもログへ残しておく。
これにより、SL設計そのものの問題と、執行・コストによる損失拡大を切り分けやすくなる。
Slippage Costを独立して計測する
SL価格と実際の決済価格との差を、単なるpipsではなく金額へ変換すると比較しやすい。
例えば買いポジションなら、予定SLより低い価格で決済された部分が追加損失となる。反対に予定価格より有利に約定するケースもあり得るため、差は符号付きで保存する。
指標としては「Risk Gap = Actual Loss − Planned Loss」と定義できる。さらに「Risk Gap Ratio = Risk Gap ÷ Planned Loss」とすれば、ロットや銘柄が異なる取引も同じ尺度で比較できる。
予定損失1万円に対して実損失が1万500円なら、Gapは500円、Gap Ratioは5%となる。
平均値ではなく分布を見る
執行差は平均値だけで判断するとテールを見落とす。
例えば100回中95回の乖離が小さくても、残り5回で大きなスリッページが発生すれば、最大ドローダウンには強く影響する可能性がある。そのためMedian、90%点、95%点、99%点、Maximumなどを併記する。
さらに時間帯、曜日、銘柄、買い・売り、保有時間、ニュース前後などでグループ化すると、Risk Gapが発生しやすい条件を特定できる。
これは「どの方向に売買するか」を判断する指標ではなく、同じ戦略をどの執行条件で動かした場合に計画リスクから乖離しやすいかを測るためのデータである。
Stop LevelとExecution Modeも記録する
銘柄にはStop Lossを設定できる最小距離を示すSYMBOL_TRADE_STOPS_LEVELがあり、注文や変更が制限される価格帯も存在する。
またMT5ではRequest、Instant、Market、ExchangeなどExecution Modeがあり、実際の約定価格の決まり方は一律ではない。Market Executionでは、取引サーバー側で実行価格が決定される。
したがってRisk Gapを比較する際は、銘柄名だけでなくExecution ModeやStop Levelも保存しておくと、環境差を誤って戦略性能の差として扱うことを避けやすい。
バックテストとの比較指標にする
バックテストで最大損失を1Rと定義していても、ライブで平均1.03R、90%点1.10Rとなるなら、その差は実運用側のコストとして扱える。
バックテスト損益へ後から一律のスプレッドを加えるだけでなく、ライブで観測したRisk Gap分布をStress Testへ利用する方法も考えられる。
こうすると「SLが機能したか」という二値評価から、「予定したリスク量をどの程度の精度で実現できたか」という執行評価へ進められる。
まとめ
Stop Lossは損失を制御する重要な仕組みだが、指定価格と実際の損失額は同じ概念ではない。
MT5では注文時にPlanned Riskを保存し、終了後にDeal Price、利益、手数料などからActual Lossを取得できる。両者の差をRisk Gapとして継続計測し、中央値や高パーセンタイルまで確認することで、EAのリスク管理を「設定したSL」ではなく「実際に発生した損失」で評価できる。







