コンテンツにスキップ

【移植#84】MAクロスを次足始値で仮想約定する — インジケーター内損益線の読み方

EURUSD H1のSMA10とSMA20を次足始値で仮想約定し、粗損益と固定コスト控除後を比較したMT5実画面

この記事の3行まとめ

  • 確定したSMA10/20クロスを、その次の足の始値で反転したと仮定して損益線を描きます
  • 固定20ポイントのコストは入力した見積もりで、過去の実スプレッドやStrategy Testerの約定結果ではありません
  • 確定1,000本について6系列を3回、計18,000値照合し、上向き29件・下向き29件・不一致0でした

価格タグの次は、仮に売買した線を描く

前回の移植#83では、MAクロスが起きた足の終値をタグにしました。4月18日の元記事は、そこから一歩進めて「その価格で売買したら残高はどう見えるか」を、インジケーターの別窓へ描く試みを紹介しています。

元記事「インジケータだけを使ったバックテスト。」を読む

原典の CrossMA_Tester_v2.mq4 は、MQL4公式フォーラムの投稿に添付されています。SMAのクロスを見つけると、判定できた次の足の始値を仮の反転価格にし、残高と評価損益を線で表示します。

発想は便利ですが、これをそのまま「バックテスト結果」と呼ぶと、実際の約定を再現したように見えます。今回のMT5版は用途を仮想約定の監査に限定し、表示名にも SIMULATION - NOT STRATEGY TESTER と明記しました。発注は一切しません。

確定したクロスを、次の足の始値で処理する

時系列配列で、仮想約定する足を (i)、ひとつ前の確定足を (i+1)、さらに前を (i+2) とします。短期SMAを (F)、長期SMAを (S) とすると、上向きクロスは次です。

\[ F_{i+1}>S_{i+1}\quad\land\quad F_{i+2}<S_{i+2} \]

下向きは反対です。

\[ F_{i+1}<S_{i+1}\quad\land\quad F_{i+2}>S_{i+2} \]

原典どおり、同値はクロスに含めない厳密不等号です。シグナル足 (i+1) の終値が確定してから、その次の足 (i) の始値を仮想約定価格にします。形成中の0番足は表示対象から外しました。

時点 このインジケーターでの扱い
シグナル足の途中 未確定なので使わない
シグナル足の終値確定 クロスを判定できる
次の足の始値 仮想的に新規または反転
次の反対クロス 直前の仮想ポジションを決済して反転

「次足始値」はOHLC履歴上の値です。実際の売買ではBidとAskが分かれ、注文処理の遅れやスリッページもあります。この線が、その始値で約定できた証拠になるわけではありません。

粗損益、純損益、評価損益を混ぜない

方向を (d=1)(買い)または (d=-1)(売り)、建値を (P_{in})、反転価格を (P_{out}) とすると、完了した1レッグの粗損益はポイント単位で次のように置けます。

\[ G=d\frac{P_{out}-P_{in}}{\mathrm{Point}} \]

完了レッグ数を (n)、1レッグの固定往復コストを (C) とした純実現残高は、

\[ B_{net}=B_{gross}-nC \]

です。未完了の現在レッグまで含めた純評価損益では、そのレッグを将来閉じるためのコスト1回分も見積もります。

既定値 (C=20) pointsは比較用の入力です。原典は、インジケーターを動かした時点の MODE_SPREAD をひとつ取得し、それを過去の全期間へ使います。どちらも過去の各時点に存在したスプレッドを復元する方法ではありません。

シグナル足終値の経路も、比較線として残す

次足始値の経路とは別に、シグナル足終値で反転したと仮定する比較線も計算します。これは実行可能価格を主張する線ではありません。タイミングの置き方だけで結果がどの程度変わるかを見つけるための基準線です。

今回のEURUSD H1では、両方の純実現残高の差が最大113 pointsになりました。クロス条件が同じでも、約定価格の仮定が違えば損益線は同じになりません。

公開する6バッファは次のとおりです。

番号 内容
0 次足始値経路の純評価損益
1 次足始値経路の純実現残高
2 次足始値経路の粗実現残高
3 シグナル足終値経路の純実現残高(比較用)
4 上向きクロスの仮想約定マーカー
5 下向きクロスの仮想約定マーカー

最初のクロスより前はポジションを仮定しないため、6系列とも空値です。0を描いて「損益がゼロだった期間」のようには見せません。

使い方と入力

84_CrossMA_Virtual_Execution_Auditor_v1_00.mq5 をダウンロード

MT5の「ファイル → データフォルダを開く」からMQL5/Indicatorsへ保存し、MetaEditorでコンパイルします。ナビゲータから調べたいチャートへ適用してください。

入力 既定値 内容
InpFastPeriod 10 短期SMAの期間
InpSlowPeriod 20 長期SMAの期間
InpLookback 1,000 監査する直近の確定足数
InpRoundTurnCostPoints 20.0 完了1レッグに差し引く固定往復コスト

短期は1以上、長期は短期より大きく10,000以下、対象本数は50〜10,000、コストは0〜100,000 pointsです。MA方式は終値の単純移動平均へ限定しています。

原典にある適用価格、複数のMA方式、開始日指定は今回の版に含めません。条件を絞る代わりに、何をどの価格で計算したかを明示し、外部のMAインジケーターにも依存しない形にしました。

実機で独立照合した結果

MT5 Build 6182、EURUSD・H1で確認しました。配布インジケーターと検証EAは、どちらもコンパイル0エラー・0警告です。

検証側はインジケーターの内部計算を呼び出さず、OHLCからSMA、クロス、次足始値経路、シグナル足終値経路、固定コスト控除を別に計算しました。

検査 結果
確定足の対象 1,000本
上向き/下向きクロス 29件/29件
完了した仮想レッグ 57
6バッファ×1,000本×3回 18,000値一致、空値を含む
純実現と粗実現のコスト恒等式 全対象足で一致
次足始値とシグナル足終値の最大差 113 points
1値を1pointずらす負対照 一致判定を拒否
注文数・ポジション数 変更なし

3回は同じ確定データが安定して読めることを確認する反復です。174件の別シグナルを発見したという意味ではありません。価格履歴が3周の途中で変化していないことも確認しています。

冒頭画像は検証時のMT5実画面です。緑が次足始値経路の純評価損益、水色が純実現、白の破線が粗実現、橙の点線がシグナル足終値の比較線です。水色とピンクの矢印は仮想約定の方向を示します。

この線だけでは検証できないもの

このインジケーターが確認するのは、決めたOHLC規則で計算した仮想経路が一貫しているかです。次は再現していません。

  • tickごとのBid・Askと変動スプレッド
  • 手数料、スリッページ、スワップ
  • 注文遅延、約定拒否、stop・limitの順序
  • ロット数と口座通貨への換算
  • 複数銘柄の時刻同期
  • パラメータ最適化とアウト・オブ・サンプル評価

したがって、表示線が右肩上がりでも、そのまま実運用できる戦略とは限りません。売買条件を候補として調べる段階では役立ちますが、収益性を判断するなら、約定モデルを定義したStrategy Testerと別期間の検証が必要です。

あわせて読みたい記事


前後の記事

前: 【移植#83】MAクロスへ終値タグを付ける — 表示価格と約定価格を分ける

次: 【移植#85】色つきRCIとStochasticを同じ窓で比べる — 似た線でも計算は別

— SPONSORED —