バックテストの約定の前提:窓開け・TPとSLの同時ヒット・スプレッド
バックテストの成績は、売買ルールだけでなく「どの価格で約定したことにするか」という前提でも変わります。確かめたいのは、TP・SLの約定価格、窓開けの扱い、同じ足でTPとSLの両方に届いた場合、スプレッドと手数料、エントリーする足の5点です。前提を1つ直すだけで、同じ戦略の成績が数%動くこともあります。
約定の前提を直したら、成績が最大4%動いた
Hawk Backtesterの開発中に、自分のエンジンの約定まわりにミスが4つ見つかりました。
- TP・SLの到達は高値・安値で判定していたのに、約定価格はその足の終値になっていた
- スプレッドの向きが逆で、コストのはずが毎回少し得をしていた
- 戦略が見ている最後の足と、実際に約定する足が2本ずれていた
- 指値・逆指値が、指定した価格ではなく終値で約定していた
直して同じ合成データ・同じパラメータで流し直したところ、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に、両方とも届くことがあります。足のデータだけでは、どちらが先に起きたかは分かりません。
選択肢は主に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の両方に届く取引が多い戦略だけは、下位足での確認を考えたほうがよいです。
スリッページはどれくらいに設定すればいいですか?
銘柄・時間帯・注文サイズで変わるため、一律の正解はありません。実際の約定記録があればそこから見積もり、ない場合は複数の値で試して、結果がどれくらい変わるかを見るのが現実的です。