Backtest Learning ・ BT09
理想約定のグロス成績は、実際の手数料・スプレッド・スリッページ・保有コストを差し引くと大きく目減りします。取引回数が多い戦略ほどこの摩擦は累積します。本記事では、コストを一貫した単位で反映してネット成績を出し、感度分析とストレスグリッドで結論の頑健さを確かめる手順を解説します。
この記事の要点
この記事では、TradingViewなどで得たストラテジーの理想約定成績を、手数料・スプレッド・スリッページ・保有コストを反映した現実的なネット成績へ近づける手順を解説します。まず結論を述べ、続いてコストの分類、片道と往復の区別、TradingViewの設定の考え方、スプレッドのモデル化、グロスとネットの比較、感度分析、ストレスグリッド、そして手元の数字を試せる概算ツールの順に進みます。バックテスト全体の流れから確認したい場合は、まずTradingViewバックテストの全体像を押さえておくと、本記事の位置づけが分かりやすくなります。
結論はシンプルです。戦略はグロス(理想約定)損益ではなく、ネット(コスト差引後)損益で比較すること。最低限、手数料・bid/askスプレッド・スリッページの3つを、すべて同じ単位でひとつずつ差し引きます。取引回数が多い戦略では、1取引あたりの小さなコストが積み重なり、期待値を静かに押し下げます。グロスでは魅力的に見えた曲線が、ネットでは平坦、あるいは右肩下がりに変わることも珍しくありません。
本記事では一貫して、1取引あたりグロス平均損益が5.0コスト単位、往復の想定コスト合計が3.0コスト単位という架空の教育用データを使います。ここでの「コスト単位」は口座通貨換算の相対値で、実際の金額・pips・%のいずれでもかまいませんが、入力全体で単位をそろえることが前提です。この例では1取引のネット期待値は5.0−3.0=2.0単位。取引回数が増えるほど、この差引後の値が効いてきます。期待値やプロフィットファクターの読み方はバックテスト結果の見方で詳しく扱っています。
コストは性質ごとに分けて管理すると、二重計上や漏れを防げます。分析目的によって、どこまで含めるかを決めます。
下の表は、この分類を発生タイミングと見積もりやすさで整理したものです。最低限の3つ(手数料・スプレッド・スリッページ)はほぼ毎回発生するため、まずこれらを反映します。
| コスト種別 | 発生タイミング | 見積もりやすさ | 最低限に含めるか |
|---|---|---|---|
| 手数料 | 約定ごと | 高い(仕様が明示) | 含める |
| スプレッド | 約定ごと | 中〜高 | 含める |
| スリッページ | 約定ごと | 低い(分布で扱う) | 含める |
| スワップ/資金調達 | 保有中 | 中 | 保有型は含める |
| 借株料 | 空売り保有中 | 中 | 該当時のみ |
| 税 | 実現時など | 制度依存 | 別枠管理 |
コスト反映で最も事故が多いのが単位の取り違えです。1回の取引は新規約定と決済約定の2回に分かれるため、コストも原則往復(ラウンドトリップ)で考えます。片道の値を往復として使えば過小計上、往復の値を各約定にも重ねれば二重計上になります。
スプレッドも同様です。往復で1.2単位という見積もりを、入口と出口の両方に0.6単位ずつ割り当てるのは一貫していますが、往復1.2をさらに各約定に1.2ずつ乗せると二重計上です。決済のタイミングやエントリー効率と合わせて確認したい場合は、MFE・MAEと決済効率の可視化も参考になります。
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のコスト感度・横断分析へ進めます。
実際のコストは日々変動し、平均だけでは捉えきれません。そこで、基準コストを置き、段階的に引き上げてどこでネット成績が崩れるかを観察します。段数に普遍的な正解はありませんが、基準・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が無効な場合は、直下の静的な計算例をご覧ください。
取引コスト概算ツール
上の値で「概算する」を押すと、総コスト・ネット期待値・損益分岐コストが表示されます。
この概算は考え方のイメージ用で、成績や利益を保証するものではありません。単位を混在させると結果が意味を失うため、金額・pips相当・%のいずれかに統一してください。スワップ・借株・税は目的に応じて別途加えます。