バックテストにスプレッド・手数料・スリッページを反映する方法|コスト感度とストレステスト
Backtest Learning ・ BT09
バックテストにスプレッド・手数料・スリッページを反映する方法|コスト感度とストレステスト
理想約定のグロス成績は、実際の手数料・スプレッド・スリッページ・保有コストを差し引くと大きく目減りします。取引回数が多い戦略ほどこの摩擦は累積します。本記事では、コストを一貫した単位で反映してネット成績を出し、感度分析とストレスグリッドで結論の頑健さを確かめる手順を解説します。
- 最低限入れるべき手数料・スプレッド・スリッページの分類と単位
- 片道と往復、1約定と1取引を取り違えず二重計上を防ぐ考え方
- グロスとネットのエクイティ曲線の差と、コストドラッグの累積
- コスト感度分析と2次元ストレスグリッドで頑健さを確かめる方法
この記事の要点
- 戦略はグロス損益ではなく、少なくとも手数料・スプレッド・スリッページを一貫した単位で差し引いたネット損益で比較する。
- コストは片道と往復、1約定と1取引を区別して入れ、二重計上や過小計上を避ける。
- 取引回数が増えるほどコストドラッグは累積し、グロスとネットのエクイティ曲線の差は広がる。
- 基準・1.25倍・1.5倍・2倍のコスト感度分析で、どこで損益分岐を割るかを確認する。
- スリッページ×手数料などの2次元ストレスグリッドで、結論が一点の前提に依存していないかを見る。
目次
この記事では、TradingViewなどで得たストラテジーの理想約定成績を、手数料・スプレッド・スリッページ・保有コストを反映した現実的なネット成績へ近づける手順を解説します。まず結論を述べ、続いてコストの分類、片道と往復の区別、TradingViewの設定の考え方、スプレッドのモデル化、グロスとネットの比較、感度分析、ストレスグリッド、そして手元の数字を試せる概算ツールの順に進みます。バックテスト全体の流れから確認したい場合は、まずTradingViewバックテストの全体像を押さえておくと、本記事の位置づけが分かりやすくなります。
30秒でわかる結論
結論はシンプルです。戦略はグロス(理想約定)損益ではなく、ネット(コスト差引後)損益で比較すること。最低限、手数料・bid/askスプレッド・スリッページの3つを、すべて同じ単位でひとつずつ差し引きます。取引回数が多い戦略では、1取引あたりの小さなコストが積み重なり、期待値を静かに押し下げます。グロスでは魅力的に見えた曲線が、ネットでは平坦、あるいは右肩下がりに変わることも珍しくありません。
本記事では一貫して、1取引あたりグロス平均損益が5.0コスト単位、往復の想定コスト合計が3.0コスト単位という架空の教育用データを使います。ここでの「コスト単位」は口座通貨換算の相対値で、実際の金額・pips・%のいずれでもかまいませんが、入力全体で単位をそろえることが前提です。この例では1取引のネット期待値は5.0−3.0=2.0単位。取引回数が増えるほど、この差引後の値が効いてきます。期待値やプロフィットファクターの読み方はバックテスト結果の見方で詳しく扱っています。
取引コストの分類:何を差し引くか
コストは性質ごとに分けて管理すると、二重計上や漏れを防げます。分析目的によって、どこまで含めるかを決めます。
- 手数料(コミッション):ブローカーへ支払う明示的な費用。1約定あたり、取引金額の比率、1枚あたりなど単位が分かれます。
- bid/askスプレッド:売値と買値の差。成行で入るたびに構造的に発生する既知のコストで、銘柄と時間帯で変動します。
- スリッページ:想定価格と実際の約定価格のずれ。板の薄さ・急変・約定サイズで拡大する不確実なコストです。
- スワップ/資金調達:ポジションを持ち越すと発生するコスト。FX・CFDのスワップ、先物のロール、暗号資産の資金調達率などが該当します。
- 借株料:空売り時に株を借りる費用。銘柄の需給で変動します。
- 税:制度と個人の状況に依存します。本記事は税務助言を行わないため、別枠で管理してください。
下の表は、この分類を発生タイミングと見積もりやすさで整理したものです。最低限の3つ(手数料・スプレッド・スリッページ)はほぼ毎回発生するため、まずこれらを反映します。
| コスト種別 | 発生タイミング | 見積もりやすさ | 最低限に含めるか |
|---|---|---|---|
| 手数料 | 約定ごと | 高い(仕様が明示) | 含める |
| スプレッド | 約定ごと | 中〜高 | 含める |
| スリッページ | 約定ごと | 低い(分布で扱う) | 含める |
| スワップ/資金調達 | 保有中 | 中 | 保有型は含める |
| 借株料 | 空売り保有中 | 中 | 該当時のみ |
| 税 | 実現時など | 制度依存 | 別枠管理 |
片道と往復、単位の取り違えを防ぐ
コスト反映で最も事故が多いのが単位の取り違えです。1回の取引は新規約定と決済約定の2回に分かれるため、コストも原則往復(ラウンドトリップ)で考えます。片道の値を往復として使えば過小計上、往復の値を各約定にも重ねれば二重計上になります。
- 片道/往復:手数料が1約定あたりなら、1取引では2回分(往復)が乗る。本記事の例では片道手数料0.4×2=往復0.8単位。
- 1注文/1約定/1枚:1注文が複数約定に分割されると、約定ごとに課金される費用は回数分だけ増える。枚数(数量)比例の費用はサイズに連動する。
- 取引金額の%:比率型の手数料はポジション金額に比例する。固定額型と混ぜず、どちらの単位かを明示する。
スプレッドも同様です。往復で1.2単位という見積もりを、入口と出口の両方に0.6単位ずつ割り当てるのは一貫していますが、往復1.2をさらに各約定に1.2ずつ乗せると二重計上です。決済のタイミングやエントリー効率と合わせて確認したい場合は、MFE・MAEと決済効率の可視化も参考になります。
TradingViewのcommissionとslippage
TradingViewでコストを反映する場所は主に2つです。1つはストラテジーのプロパティ画面にあるコミッションとスリッページの設定、もう1つはPine Scriptのstrategy()関数の引数です。プロパティ画面で入力した値は、その場でバックテスト結果に反映されます。スクリプト側で指定すると、公開・共有した際も前提が固定されます。
コミッション(手数料)の単位
コミッションは、金額・比率・1約定あたりといった単位から選ぶのが一般的です。ここで重要なのは、選んだ単位が片道か往復かを理解することです。多くの場合、設定値は約定単位で課金されるため、1取引では新規と決済の2回分が乗ります。前掲の往復0.8単位という数字は、片道0.4を約定ごとに課した結果です。
スリッページの単位
スリッページはティック単位で加えるのが一般的です。成行の想定約定価格を、設定したティック数だけ不利な方向へずらして計算します。実際のスリッページは局面で変わるため、単一の固定値だけでなく、後述の感度分析で幅を持たせて確認します。
スプレッドのモデル化
スプレッドは既知のコストですが、常に一定ではありません。どこまで精緻にモデル化するかは戦略の性質で決めます。万能な単一設定は存在しないため、複数モデルで結論が揺れないかを見ます。
- 固定スプレッド:全期間で一定値を使う最も単純な近似。流動性が高く取引時間が限定的なら扱いやすい一方、急変時や薄い時間帯を含むと実態と乖離します。
- 時間帯別スプレッド:セッション(東京・ロンドン・ニューヨークなど)や寄り引けでスプレッドを変える。時間帯をまたぐ戦略で精度が上がります。
- ボラティリティ連動:ボラティリティ指標に応じてスプレッドを広げる。指標発表時や急変局面を含む戦略で、コストの過小評価を防ぎます。
実務では、まず固定スプレッドでネット成績の当たりを付け、結果が薄利なら時間帯別やボラティリティ連動へ精緻化して、結論が変わらないかを確かめます。相場局面ごとの挙動を外部視点で把握したい場合は、マクロリサーチワークベンチのような環境認識のツールも補助になります。
グロスとネットのエクイティ曲線
コストの影響は、1取引あたりでは小さく見えても、取引回数だけ積み上がると無視できません。ここでは前掲の設定(グロス平均5.0/往復・保有合計コスト3.0単位)で400取引を行った架空の教育用データを使い、グロスとネットのエクイティ曲線を比べます。
グロスの累積損益は400×5.0=2000単位、往復・保有コストの累積は400×3.0=1200単位、ネットは差し引き800単位です。指数化すると、グロスは開始100から180へ、ネットは100から132へ。両者の差は取引を重ねるほど開いていきます。これがコストドラッグで、取引回数が多い高頻度の戦略ほど傾きの差が効いてきます。
差引後の傾きが平坦に近い戦略は、コストのわずかな上振れで期待値が沈みます。ドローダウンの深さや回復期間への影響もあわせて見るなら、最大ドローダウンの見方を参照してください。
手元のバックテストでコストの効き方を確かめる
まずは取引コスト計算機で銘柄のスプレッド・手数料を概算し、続いて無料のバックテスト分析ラボにStrategy TesterのCSV/XLSXを読み込めば、KPI・エクイティ・ドローダウンを実データで可視化できます。コスト仮定を動かした感度や、コスト分解の深掘りが必要になった段階で、Proのコスト感度・横断分析へ進めます。
コスト感度分析:基準から2倍まで
実際のコストは日々変動し、平均だけでは捉えきれません。そこで、基準コストを置き、段階的に引き上げてどこでネット成績が崩れるかを観察します。段数に普遍的な正解はありませんが、基準・1.25倍・1.5倍・2倍のように刻むと、損益分岐を割る境目が見えやすくなります。
下表は、グロス総利益5000/グロス総損失3000(グロスPF=1.67)の架空の教育用データに、往復・保有コスト(基準3.0単位×400取引=1200単位)を倍率別に上乗せした例です。コストは損失側に加算する簡易な扱いにしています。
| シナリオ | コスト倍率 | 1取引コスト | 累積コスト | ネット純益 | ネット期待値/取引 | ネットPF | 状態 |
|---|---|---|---|---|---|---|---|
| 基準 | 1.00× | 3.0 | 1200 | 800 | 2.0 | 1.19 | 余裕あり |
| やや悪化 | 1.25× | 3.75 | 1500 | 500 | 1.25 | 1.11 | 余裕あり |
| 悪化 | 1.50× | 4.5 | 1800 | 200 | 0.5 | 1.04 | 分岐点近い |
| 大幅悪化 | 2.00× | 6.0 | 2400 | -400 | -1.0 | 0.93 | 分岐点割れ |
この例では、コストが基準の2倍になるとネット純益が−400単位、ネットPFが0.93へ沈み、期待値が負に転じます。1.5倍の時点で純益は200単位まで細り、分岐点が近いことが分かります。基準だけを見て「余裕あり」と判断せず、現実的に起こり得る倍率まで引き上げて確認することが重要です。倍率や刻みは、対象銘柄の実測とブローカー仕様から決めます。
多次元ストレスグリッド
コストは1軸だけ動くとは限りません。スリッページと手数料が同時に悪化する、スプレッド拡大と約定悪化が重なる、といった複合的なストレスを見るには、2軸のグリッドが有効です。下は、手数料倍率(横)とスリッページ倍率(縦)を組み合わせ、ネット純益(単位)を色と数値で示した架空の教育用データのヒートマップです。スプレッド1.2とスワップ0.4は固定しています。
このグリッドの範囲ではネット純益はいずれも正のままですが、手数料2.0倍のような、より強いストレスまで広げると表2のとおり分岐点を割ります。グリッドは「どの組み合わせで、どの程度細るか」を面で捉えるための道具で、単一の楽観シナリオに結論が依存していないかを確認できます。ウォークフォワードで局面ごとの劣化を見る手法と組み合わせると、時間軸とコスト軸の両面から頑健さを検証できます。設計はウォークフォワード分析とOOS検証を参照してください。複数戦略を束ねた場合のコスト影響は複数戦略ポートフォリオのバックテストで扱います。
コスト概算ツールで試す
取引回数・1取引あたりグロス平均損益・片道手数料・往復スプレッド相当・スリッページ相当を入れると、総コスト・ネット期待値・損益分岐コストを概算します。入力値はブラウザ内だけで計算し、外部へ送信しません。すべて同じ単位(金額、pips相当、%のいずれか)でそろえて入力してください。JavaScriptが無効な場合は、直下の静的な計算例をご覧ください。
取引コスト概算ツール
上の値で「概算する」を押すと、総コスト・ネット期待値・損益分岐コストが表示されます。
- 1取引あたり総コスト–
- 総コスト(全取引)–
- ネット期待値/取引–
- ネット総損益–
- 損益分岐コスト–
- 分岐点までの余裕–
この概算は考え方のイメージ用で、成績や利益を保証するものではありません。単位を混在させると結果が意味を失うため、金額・pips相当・%のいずれかに統一してください。スワップ・借株・税は目的に応じて別途加えます。
実務チェックリスト
- グロスではなくネット損益で戦略を比較しているか。手数料・スプレッド・スリッページの3つを最低限入れたか。
- 片道と往復、1約定と1取引、金額と比率の単位を取り違えず、二重計上・過小計上を避けたか。
- TradingViewのコミッションとスリッページの単位が片道か往復かを、公式ドキュメントで確認したか。
- スプレッドを固定だけでなく、時間帯別やボラティリティ連動でも試し、結論が揺れないか確かめたか。
- 保有型の戦略でスワップ・資金調達・借株を含めたか。税は別枠で管理しているか。
- 基準・1.25倍・1.5倍・2倍のコスト感度で、どの倍率で損益分岐を割るかを把握したか。
- スリッページ×手数料などの2次元グリッドで、複合悪化への頑健さを面で確認したか。
- 比較する戦略どうしで、含めたコストと単位の前提をそろえたか。

