OptiNod アカデミー
スリッページ・手数料・流動性 — バックテストが見落とす取引コスト
手数料に加え、予定する注文サイズでのスプレッドとスリッページを測ります。約定コストを二重計上せず、戦略のエッジと比較します。
手数料は取引前に確認できます。エッジが実際の約定後にも残るかを判断するには、予定する注文サイズでのスプレッドとスリッページも測ります。
取引所の手数料と約定に伴うコストを分けて考えます。手数料は取引所に支払う金額です。スプレッドは最良買い気配と最良売り気配の差です。スリッページは基準価格と実際の約定価格の差であり、その基準が仲値、最良気配、シグナル時点の価格のどれなのかを明示します。流動性は板の厚みやその変化を表し、約定コストを左右しますが、手数料やスリッページに加算する独立した料金ではありません。仲値を基準に測ったスリッページにはスプレッドの影響も含まれるため、スプレッドを別に足すと二重計上になります。
バックテストから手数料だけを引いても、現実的な期待値が確定するわけではありません。この記事の片道0.04%、往復約0.08%は、エントリーと決済の取引元本が等しいとした説明用の料率です。共通の手数料水準ではありません。実際の料率は取引所、商品、メイカー・テイカーの区分、取引量ランク、割引などによって異なります。約定コストも銘柄、注文サイズ、時間帯、市場環境によって変わります。
実務で必要なのは、基準価格をそろえ、コスト控除前のエッジと実測した総コストを比較することです。スリッページが手数料を上回る場合はありますが、常にそうなるわけではありません。注文サイズに対して板が薄ければ、成行注文は複数の価格帯を消費します。表示される手数料率が同じでも、取引所や注文サイズが変われば、同じシグナルのコスト控除後の成績も変わり得ます。

流動性は約定価格の差を左右する要因であり、別途加算する料金ではありません。
手数料率を確認し、スリッページは別に測ります
公開されている料率と約定した取引元本から、手数料を見積もれます。エントリーと決済でメイカー・テイカーの扱いが変わることもあるため、両側を確認します。片道0.04%で取引元本が変わらないという仮定なら、往復手数料は0.08%、つまり8bpです。1bpは0.01%を表します。この料率は予定する取引に対して確認する入力値であり、すべての銘柄や取引所に共通する性質ではありません。
約定コストを測るには、注文サイズに加えて基準価格が必要です。成行買いが発注直前の最良売り気配ですべて約定できず、残りが上の気配で約定すれば、平均約定価格には最良売り気配に対して不利なスリッページが生じます。売りも同様に、観測した最良買い気配を下回って約定する場合があります。注文が届くまでに気配は動くため、基準価格に対して有利にずれる場合もあります。コストへの耐性を調べるときは、不利な約定シナリオを使います。
説明用に、取引元本を固定した短期戦略のコスト控除前の平均損益を1往復あたり0.15%とします。仮定した往復手数料0.08%を引くと0.07%が残ります。さらに、その平均損益にまだ含まれていない往復の約定コストが0.10%なら、差し引きは−0.03%です。すべての率の分母をそろえ、スプレッドを二重計上していないことが、この計算の前提です。
成行エントリーは板の厚みを消費します
板は、価格帯ごとに並んだ買い注文と売り注文の一覧です。成行買いは、最も低い売り気配から順に上へ進みながら必要数量を満たします。最上位気配の数量が注文サイズより小さければ、その上の気配へ移り、平均約定価格は表示価格より上で確定します。
完全な仮想例として、銘柄Aの最良売り気配を100ドル、その価格にある数量を2,000単位とします。板が変化せず、その数量が利用できれば、500単位の成行買いは100ドルで約定します。約定金額は5万ドルで、観測した最良売り気配に対して板を食い上がることによるスリッページは0です。ただし、スプレッドをまたぐコストや手数料は別に発生します。これは仕組みを示す仮定であり、実際の市場のスナップショットではありません。
仮想の銘柄Bも最良売り気配は100ドルですが、そこには100単位しかなく、101ドルに900単位あるとします。途中で板が変わらなければ、同じ500単位の買いは100単位を100ドル、400単位を101ドルで約定します。平均約定価格は100.80ドル、約定金額は5万400ドルです。最初の最良売り気配に対する不利なスリッページは0.80%、つまり80bpです。手数料や、仲値を基準にした場合のスプレッドの影響はまだ含めていません。この差は設定した板の厚みから計算したもので、日次売買代金だけからは求められません。

売買代金から推測せず、スプレッドを測ります
スプレッドは最良買い気配と最良売り気配の差です。流動性やボラティリティの影響を受けますが、日次売買代金が大きくても、注文時点のスプレッドが狭いとは限りません。小さな成行買いは売り気配、小さな成行売りは買い気配で約定するのが基本です。気配値とスプレッドの定義はInvestor.govの用語解説で確認できます。
仲値100ドル、買い気配99.95ドル、売り気配100.05ドルという仮想例を考えます。十分な数量があり、気配が動かないまま売り気配で買い、直後に買い気配で売ると、1単位あたり0.10ドルの損失です。仲値を基準にすると、これはスプレッド1本分の10bpであり、20bpではありません。各取引で仲値に対する半スプレッドを負担します。エントリーと決済でスプレッドが異なる場合は、それぞれの半分の和が概算の往復コストです。入口10bp、出口20bpなら合計約15bpになります。仲値基準のスリッページにこの差が含まれている場合は、再び加算しません。
出来高は取引された数量、売買代金はその金額です。売買代金は銘柄間の活動量を比較する手掛かりになりますが、過去の合計であり、現在利用できる板の厚みではありません。日次の金額が大きくても、特定の取引所や時間帯の板が薄い場合があります。売買代金に加えて、スプレッド、予定サイズに対する板の数量、実際の約定記録を確認します。デリバティブでは、契約数量と取引元本の定義も確認します。

各取引のコストを取引元本で重み付けします
コスト率に取引回数を掛けただけでは、口座資産に対する損失率にはなりません。手数料は約定金額×手数料率で求めます。約定価格のずれによるコストは、数量×約定価格と基準価格の差で求め、不利な約定が正のコストになるよう売買方向に応じて符号をそろえます。率を使う場合は、その率の分母に使った基準価格での取引元本を掛けます。銘柄Bの例なら5万ドル×0.80%=400ドルであり、5万400ドルに0.80%を掛けるのではありません。これらの金額を合計し、初期資産に対する率を出すときに初期資産で割ります。取引元本×往復コスト率という簡略計算は、各率の分母が同じで、入口と出口の取引元本も等しい場合に使えます。それ以外は両側を別々に計算します。
1日10往復を22日行えば、合計220往復です。往復コスト0.10%で合計が初期資産の22%になるのは、毎回の取引元本を初期資産と同額に固定し、入口と出口の取引元本が等しく、価格変化や複利を考慮しない場合だけです。毎回の取引元本を初期資産の10%に固定するなら2.2%です。初期資産と同額の取引元本で月2往復なら0.2%なので、回数とコストの比は220÷2=110倍です。これは固定した前提での累積コストであり、口座収益率の予測ではありません。
証拠金と取引元本を混同しないでください。単純化した例では、資産の10%の証拠金を10倍のレバレッジで使うと、取引元本は資産の100%になります。取引元本に対する手数料は、その大きい金額に掛かります。手数料だけのバックテストで重要な約定コストが抜ける場合はありますが、抜けた額を「総コストの半分」と決め付けずに測ります。損益曲線の悪化を取引頻度のせいにする前に、実際のポジションサイズとコスト総額を照合します。

エッジがコストより小さければ期待値はマイナスです
損益分岐点となるコストは、推定した純期待値が0になるまでに手数料と約定コストへ使える、コスト控除前の平均損益です。平均損益とコストは単位とポジションサイズの扱いをそろえます。過去の純期待値がプラスでも、今後の利益が保証されるわけではありません。実際の約定価格から計算した損益に含まれる価格差を、再びスリッページとして差し引かないことも必要です。
同じサイズの仮想取引で、勝率60%、平均利益と平均損失がそれぞれ0.30%なら、控除前の期待値は60%×0.30%−40%×0.30%=0.06%です。説明用の往復手数料0.08%を引くと−0.02%、追加の往復約定コスト0.05%を引くと−0.07%になります。手数料だけですでにマイナスのこの例は、スリッページを0にしてもプラスにはなりません。この前提なのに手数料のみのバックテストがプラスなら、入力値、損失の符号、損益に手数料が含まれるか、手数料を掛ける金額、ポジションサイズを点検します。
控除前のエッジが0.06%なら、推定値をプラスに残すためには、実測した往復総コストが0.06%を下回る必要があります。銘柄名だけでこの条件は保証されません。仮に総コストが0.50%ならこの期待値はマイナスです。一方、控除前の平均損益が3%という別の仮定では、同じコストを引いて2.50%が残ります。ただし、この計算だけでは売買の少ない銘柄が適しているとはいえず、異なる市場環境での検証が必要です。
流動性が減る局面のコストを検証します
普段は板が厚い銘柄でも、ボラティリティが急変する局面では板の数量が急速に消えます。価格が一方向へ速く動くと、事前に置かれていた指値注文が約定するか取り消され、新たに補充される速度が注文の消費速度に追いつきません。この瞬間、同じサイズの成行注文でも普段よりはるかに深い気配まで食い込み、スリッページが大きくなります。
日足から約定状況を推測する代わりに、仮想のストレス状況を考えます。通常は最良気配の範囲で収まる注文でも、損切りの発動直前にその板の大半が取り消され、次の気配が離れた価格にしかないことがあります。この場合、成行になった注文は想定した損切り水準を超えて約定し得ます。日次売買代金の増加だけでは、どの注文が取り消されたか、板がどれだけあったか、なぜ価格が動いたかは分かりません。それを確かめるには板と約定のデータが必要です。
実際に使う取引所と取引時間帯の観測から不利な約定を見積もり、さらに悪い条件でも結果がどう変わるかを検証します。ギャップ、急変局面、自分のデータで板が薄いと確認できた時間帯を含めます。普段の狭いスプレッドや大きな日次売買代金は、損切りの約定価格を保証しません。起こり得る約定コストが推定エッジを使い切るなら、サイズを減らすか、そのセットアップを見送ります。
取引コストフィルターで候補銘柄と戦略を事前に絞ります
コストフィルターは、戦略の推定エッジと、予定サイズでの約定実績から作ります。日次売買代金1,000万ドル以上、スプレッド10bp以下といった数値を満たせば、どの戦略も成立するわけではありません。基準値は許容コストと取引所のデータに基づいて決め、市場環境が変われば見直します。
- 売買の活発さと板の厚み: 売買代金を参考にしたうえで、使う取引所・時間帯・注文サイズでの板と約定記録を確認します。日次売買代金は流動性の保証ではありません。
- スプレッドの予算: エントリー時の半スプレッドと、想定する決済時の半スプレッドの和を許容コストと比べます。変化しない10bpのスプレッドで直ちに往復するなら、追加のスリッページと手数料を除いたコストは10bpです。
- コスト前提: 適用される手数料率と、平常時・不利な局面の約定実績を使います。この記事の手数料0.08%、追加の往復コスト0.05%は説明用であり、必須の下限ではありません。スプレッドを含むスリッページへの二重加算を避けます。
- 損益分岐点の確認: 控除前の期待値と総コストを同じ取引元本ベースで比較し、推定誤差の余地も取ります。起こり得るコストがエッジを使い切るなら、見送るか設計を変えます。
- 注文サイズの確認: 必要な価格帯全体で約定を見積もります。サイズ縮小や指値で執行は変わりますが、指値は未約定になることがあり、注文分割も総コスト低下を保証しません。
高頻度戦略では、小さな1回あたりのエッジが累積した売買コストに耐える根拠を確認します。頻度が高いだけでスリッページ率が大きくなるわけではなく、注文サイズ、スプレッド、遅延、市場環境に基づいて前提を決めます。エントリー前に総コストの上限、注文サイズ、検証済みの決済ルールを設定します。利用できる板や予想される決済コストが予算を超えるなら、シグナルが変わらなくてもセットアップは無効です。
現実的なコスト前提でバックテストを回し直します
価格の基準、手数料を掛ける金額、サイズの決め方をそろえ、平常時と不利な条件のコストで再検証します。スリッページ0の結果は比較用の基準にはなりますが、実際にその価格で約定できる証明にはなりません。追加控除の前に、約定価格へすでに含まれるスプレッドや価格差を確認します。各条件で純期待値と金額ベースのコスト総額を比較します。
ローソク足の価格だけでは、その瞬間に約定できた数量は分かりません。TradingViewの戦略テストでは、固定ティック数のスリッページや手数料を設定できます。固定幅で約定を不利にする方法は感度分析に使えますが、変化する板の厚み、遅延、部分約定を精密に再現するものではありません。特にシグナル足の終値約定を使う場合は、注文のタイミングと約定の前提を確認します。TradingViewの戦略ドキュメントに設定の説明があります。
先ほどの220往復の仮想例で、総コストを0.10%から0.15%へ増やすと、累積コストが初期資産の22%から33%になるのは、毎回の取引元本を初期資産と同額に固定し、価格変化や複利を考慮しない場合だけです。取引元本を初期資産の10%に固定するなら2.2%から3.3%になります。実際の戦略では、そのエントリーと決済サイズを使ってコストを合計します。予定する注文に合ったコストと不利な約定条件を反映しても推定エッジが残るかを、採用の判断基準にします。