バックテストの約定の前提:窓開け・TPとSLの同時ヒット・スプレッド

バックテストの成績は、売買ルールだけでなく「どの価格で約定したことにするか」という前提でも変わります。確かめたいのは、TP・SLの約定価格、窓開けの扱い、同じ足でTPとSLの両方に届いた場合、スプレッドと手数料、エントリーする足の5点です。前提を1つ直すだけで、同じ戦略の成績が数%動くこともあります。

約定の前提を直したら、成績が最大4%動いた

Hawk Backtesterの開発中に、自分のエンジンの約定まわりにミスが4つ見つかりました。

  1. TP・SLの到達は高値・安値で判定していたのに、約定価格はその足の終値になっていた
  2. スプレッドの向きが逆で、コストのはずが毎回少し得をしていた
  3. 戦略が見ている最後の足と、実際に約定する足が2本ずれていた
  4. 指値・逆指値が、指定した価格ではなく終値で約定していた

直して同じ合成データ・同じパラメータで流し直したところ、16通りのうち9通りで成績が下がり、7通りで上がりました。動いた幅は最大で4%ほどです。

相場戦略直す前直した後
トレンド高値・安値ブレイク+14.46%+10.20%
トレンドボリンジャー・ブレイクアウト+1.83%+6.10%
トレンドRSI逆張り−8.14%−4.08%
レンジ移動平均クロス−2.36%−6.14%
ミックス移動平均クロス−0.43%−2.79%

合成データ(1時間足1,500本)、TP 1%・SL 0.5%・スプレッド0.01で計測。一部抜粋。

約定モデルの修正前後で、同じ戦略の損益を比べたグラフ
修正前後の損益の比較

一番まずかったのは、戦略同士の順位が入れ替わっていたことです。ずれた前提の上で戦略やパラメータを選ぶと、選んだ理由そのものが崩れます。

TP・SLは「水準の価格」で約定させる

多くのバックテストは足(OHLC)単位で動きます。TPやSLに届いたかは、その足の高値・安値で判定します。このとき約定価格を終値にしてしまうと、「利確したのにマイナスで終わる」取引が生まれます。

TP・SLは、その水準の価格で約定させるのが基本です。注意が必要なのは窓開けです。

窓開けで損切りラインを飛び越えたとき

前の足の終値から大きく離れて次の足が始まり、始値の時点ですでにSLの水準を越えていたとします。現実には、SLの価格では約定できません。約定するのは、だいたい始値付近です。

ここでSLの価格ちょうどで約定させるバックテストは、損失を小さく見積もっています。窓を開けて越えていた場合は始値で約定させるほうが、現実に近い前提です。

約定ルールの図。TPは水準で約定、窓開けは始値で約定、同じ足で両方に届いたらSLが先
左が誤った前提、中央と右が直した後のルール

同じ足でTPとSLの両方に届いたとき

値動きの大きい足では、高値がTPに、安値がSLに、両方とも届くことがあります。足のデータだけでは、どちらが先に起きたかは分かりません。

選択肢は主に3つです。

  • SLが先に起きたことにする(保守的)
  • TPが先に起きたことにする(楽観的)
  • 下位足(1分足など)のデータで順番を確かめる

TPを先にすると、実際より成績が良く見える方向にずれます。下位足がない場合は、SLを先にしておくのが安全です。Hawk BacktesterもSLを先に起きたことにしています。

この扱いで成績が大きく変わる戦略は、TPとSLの幅が足の値幅に比べて狭すぎる可能性があります。

スプレッド・手数料・スリッページ

コストは、入るときと出るときの両方にかかります。片方にしかかけていない、あるいは向きが逆になっていると、取引回数の多い戦略ほど成績が良く見えます。

項目確かめること
スプレッド買いは高く、売りは安く約定しているか。往復でスプレッド1つ分のコストになっているか
手数料エントリーと決済の両方で差し引いているか。率と固定額のどちらか
スリッページ成行だけでなく、TP・SL・逆指値にもかけているか

取引回数の多い戦略は、コストを0にした結果と、少し多めにした結果の両方を見ておくと安心です。コストを少し上げただけで赤字になる戦略は、実際の取引では残る利益がほとんどありません。

シグナルの足の終値で入るか、次の足の始値で入るか

終値を見てシグナルを出し、その同じ終値で約定させる前提は、手作業の売買では現実的ではありません。終値が確定した時点では、もうその価格では取引できないことが多いからです。

次の足の始値で約定させる前提のほうが、現実に近くなります。地味な違いですが、ブレイクアウトのように動き出しを狙う戦略では、結果がかなり変わります。両方の前提で試して、差が大きくないかを確かめるのがおすすめです。

もう1つ確かめたいのは、戦略が見ている最後の足と、約定する足が一致しているかです。未来の足を見ていれば成績は実際より良くなり、遅れていれば悪くなります。前述のミスの3つ目は、後者でした。

自分のバックテストを見直すチェックリスト

  • TP・SLは何の価格で約定しているか。窓を開けたときはどうか
  • 同じ足でTPとSLの両方に届いたとき、どちらを先にしているか
  • スプレッドと手数料が、入るときと出るときの両方でコストになっているか
  • 戦略が見ている最後の足と、約定する足が同じか
  • 指値・逆指値が指定価格で約定しているか

確かめるには、答えを手計算できる数本の価格データを作り、約定価格を1つずつ比べるテストが有効です。「買いで利確幅1、次の足の高値が利確ラインを越える」なら、約定は利確ラインちょうど、損益は数量×1になるはずです。

Hawk Backtesterの約定ルールは、シミュレーションモデルの仕様にすべて書いています。前提を揃えたうえで、負けトレードの中身を見る方法はMFE・MAEの解説で扱っています。

よくある質問

ティックデータがないと、正確なバックテストはできませんか?

足のデータでも、前提を明示して保守的な側に揃えれば、戦略の比較には十分使えます。同じ足でTPとSLの両方に届く取引が多い戦略だけは、下位足での確認を考えたほうがよいです。

スリッページはどれくらいに設定すればいいですか?

銘柄・時間帯・注文サイズで変わるため、一律の正解はありません。実際の約定記録があればそこから見積もり、ない場合は複数の値で試して、結果がどれくらい変わるかを見るのが現実的です。

この記事はバックテストの方法についての解説です。特定の売買や投資判断をすすめるものではありません。