OptiNod アカデミー

スリッページ・手数料・流動性 — バックテストが見落とす取引コスト

手数料だけを差し引けば実戦の収益を見積もれる、という計算は取引コストの一部しか見ていません。スリッページと流動性は、パフォーマンスをさらに大きく削ります。

> 手数料は取引所の画面に*事前に*表示されています。しかし、実戦の成績をより大きく削るスリッページと流動性は、注文を出した瞬間に初めて確定します。

取引コストは大きく三つに分けられます。取引所に支払う手数料(Fees)、表示価格と実際の約定価格の差であるスリッページ(Slippage)、そしてそのスリッページの大きさを左右する板の流動性(Liquidity)です。手数料は取引所の画面に、メイカー0.02%、テイカー0.04%のような数値で明示されているため、誰でも事前に計算できます。残りの二つは注文を出した瞬間に確定し、画面上のどこにも事前には表示されません。

多くのトレーダーは、バックテスト結果から手数料だけを差し引いて実戦での期待値を見積もります。片道0.04%、往復0.08%を引けば十分に現実的な計算だと考えます。しかし、この計算は取引コストの一部しか反映していません。取引所手数料は通常、1回あたり0.02%から0.1%の範囲で固定されていますが、スリッページは銘柄、注文サイズ、市場環境によって0bpから数百bpまで大きく変動します。

要点はシンプルです。手数料よりもスリッページと流動性のほうが成績を大きく削り、売買代金の小さい銘柄や取引頻度の高い戦略では、そのコストが積み上がって期待値をマイナスにします。特に成行でのエントリーは板の厚みを順に消費していくため、注文が大きいほど表示価格と平均約定価格の差が広がります。同じ戦略をBTCで動かす場合と、日次売買代金が数百万ドル規模のアルトで動かす場合では、手数料は同じでもスリッページは数十倍違います。

取引コストの三要素の比較。手数料は固定で、スリッページと流動性が成績を大きく左右する

手数料は固定、スリッページは変動します

手数料は、事前に計算できる唯一の取引コストです。取引所はメイカーとテイカーの料率を公開しており、取引量ランクが決まれば1回あたりのコストも確定します。業界の一般的な水準で見ると、テイカーは片道で約0.04%、往復で約0.08%です。この数値は、銘柄がBTCであっても小型アルトであっても同じです。

スリッページは違います。表示価格は板の最良気配値ですが、成行注文はその価格で買える数量だけを約定し、残りはさらに上の売り気配を取りにいきます。注文が大きいほど高い気配値まで食い上がるため、平均約定価格は表示価格より上にずれます。この差がスリッページであり、板に並んでいる数量が薄いほど、同じ注文サイズでも大きく発生します。

規模を比べると違いは明確です。取引所手数料は往復8bp付近で止まりますが、スリッページは銘柄と注文サイズによって0bpから100bp超まで広がります。1回あたりの平均損益が0.15%の短期戦略があるとします。往復手数料0.08%を引くと、残るエッジは0.07%です。そこに1回あたり0.1%のスリッページが加わるだけで、期待値はマイナスに転じます。手数料だけを見て組んだ損益計算が、実戦でずれる理由はここにあります。

成行エントリーは板の厚みを消費します

板は、価格帯ごとに並んだ買い注文と売り注文の一覧です。成行買いは、最も低い売り気配から順に上へ進みながら必要数量を満たします。最上位気配の数量が注文サイズより小さければ、その上の気配へ移り、平均約定価格は表示価格より上で確定します。

現在時点のBTCUSDTの板を見ると、厚みがあります。最上位の売り気配1本だけで約2.18 BTC、金額にして16万ドル相当がほぼ同じ価格に並んでいます。この場合、5万ドルの成行買いは最上位気配の範囲内ですべて約定し、スリッページは0bpに近くなります。表示価格と約定価格は実質的に同じです。

同じ時点の小型アルトの板の様子は異なります。日次売買代金が20万ドル程度のZILUSDTの板を見ると、最上位気配に並ぶ数量は約5,800ドル相当にすぎません。ここに2万5千ドルの成行買いを入れると、板の複数段を食い上がり、平均約定価格は表示価格より130bp(1.3%)上で確定します。10万ドルを入れると、板上部20段をすべて消費しても約3万ドル分しか約定できません。同じ注文サイズ、同じ成行方式でも、BTCでは0bp、ZILでは130bpになります。この差は手数料8bpを圧倒します。

成行注文が板の各段を順に消費し、平均約定価格が表示価格より上にずれていく仕組み

売買代金が小さいほどスプレッドは広がります

ビッド・アスク・スプレッド(Spread)は、最上位の買い気配と最上位の売り気配の差です。この差は、その銘柄に入る注文がどれだけ密に並んでいるかで決まり、売買代金が大きいほど狭く、小さいほど広くなります。スプレッドは成行でエントリーするたびに、そのままコストとして乗ります。買った直後に売れば、スプレッド分だけ損失を抱えた状態から始まります。

現在の板を基準に銘柄別のスプレッドを比べると、売買代金との関係がそのまま見えます。日次売買代金が10億ドル規模のBTCUSDTはスプレッドがほぼ0bp、5億ドル規模のETHUSDTも0.05bp付近です。一方、日次売買代金が200万ドル未満のALGOUSDTは9bp、20万ドル規模のZILUSDTは25bpまで広がります。ZILを成行で買ってすぐ成行で売ると、エントリーと決済の両方でスプレッドとスリッページが重なり、往復50bpを超えるコストが先に発生します。

取引量と売買代金は区別する必要があります。取引量は売買されたコインの数量であり、売買代金はその数量に価格を掛けた金額です。板の厚みとスリッページを左右するのは売買代金です。コイン数量ベースの取引量が数億枚と大きく見えても、単価が0.004ドルなら実際の売買代金は数十万ドル規模にすぎないことがよくあります。銘柄を選ぶときにUSDT建ての売買代金を見る理由はここにあります。コイン数量の取引量は実態を見誤らせます。

売買代金が大きい厚い板はスプレッドが狭く、薄い板では広がるという関係

取引頻度に1回あたりのコストを掛けると累積コストになります

取引コストは1回あたりで見ると小さく見えます。往復0.1%なら、1回だけなら無視できるように感じます。しかし、戦略の期待値は取引の積み重ねで決まります。1回あたりのコストに取引頻度を掛けたものが総コストであり、取引頻度が高いほどこの積は急速に膨らみます。

1日に10回取引するスキャルピング戦略を考えてみます。往復コストを0.1%とすると、1日で1%、月22営業日なら約22%が取引コストとして出ていきます。同じコスト前提でも、月に2回だけ取引するスイング戦略なら月間コストは0.2%にすぎません。1回あたりのコストが同じでも、頻度が100倍違えば累積コストも100倍違います。高頻度戦略が先に損益分岐点を下回る理由は、コストが頻度に比例して積み上がるからです。シグナルの質とは別の問題です。

この掛け算は、バックテストで最も抜け落ちやすい項目です。スリッページを0に置き、手数料だけを反映したバックテストは、1回あたりのコストを実際の半分にも満たない水準で見積もっていることになります。その誤差は1回ごとには小さくても、取引頻度の高い戦略では累積し、損益曲線の傾きそのものを反転させます。バックテストでは急角度で右肩上がりだった高頻度戦略が、実戦では口座残高がじわじわ減る流れに変わる原因は、この累積コストにあります。

1回あたりのコストが取引頻度に比例して積み上がり、高頻度戦略の損益曲線を崩していく過程

エッジがコストより小さければ期待値はマイナスです

戦略の価値は、損益分岐となる取引コストで判断します。1取引の平均損益から往復取引コストを差し引いたものが期待値であり、この値がプラスのときだけ戦略は利益を生みます。取引コストが平均損益を上回った瞬間、期待値はマイナスに転じ、シグナルがどれほど正確でも口座残高は減ります。

具体的な数字で見てみます。勝率60%、利確と損切りがそれぞれ平均0.3%の戦略では、1回あたりの平均損益は0.06%です。ここから往復手数料0.08%だけを差し引いても、すでにマイナスです。手数料だけを反映したバックテストでこの戦略がプラスになっていたなら、その結果はスリッページが0という前提に支えられています。実戦で1回あたり0.05%のスリッページが乗るだけで、期待値はさらに深いマイナスへ落ちます。平均損益が1回あたり0.06%の戦略は、取引コストがそれより小さい銘柄と市場環境でのみ意味を持ちます。

損益分岐となる取引コストを先に計算しておけば、どの戦略がどの銘柄で期待値をプラスに保てるかを事前に検討できます。平均損益が1回あたり0.06%のスキャルピング戦略は、往復コストが0.06%未満に収まるBTCやETHのような高流動性銘柄でのみ候補になります。同じ戦略を往復コスト50bpの小型アルトに適用すれば、シグナルの精度に関係なく期待値はマイナスです。反対に、平均損益が1回あたり3%のスイング戦略なら、往復コスト50bpを差し引いても余裕が残るため、小型アルトでも候補になります。戦略のエッジの大きさが、エントリー可能な銘柄の流動性の下限を決めます。

ボラティリティ急変局面ではスリッページが拡大し、流動性が消えます

普段は板が厚い銘柄でも、ボラティリティが急変する局面では板の数量が急速に消えます。価格が一方向へ速く動くと、事前に置かれていた指値注文が約定するか取り消され、新たに補充される速度が注文の消費速度に追いつきません。この瞬間、同じサイズの成行注文でも普段よりはるかに深い気配まで食い込み、スリッページが大きくなります。

2024年8月5日のBTC急落は、この状況をよく示しています。BTCUSDTの日足は58,161ドルで始まり、49,000ドルまで下落しました。1日で約16%の下落です。同日の売買代金は85.8億ドルで、前日8月4日の18.7億ドルから4倍以上に増えました。売買代金が急増したということは、それだけ成行注文が板を急速に消費しながら価格を押し下げたという意味です。このような局面で損切りを成行にしておくと、想定していた損切り価格よりかなり下で約定します。

急変局面のスリッページは、平常時の前提では見積もれません。普段0bpだったBTCでも急落局面では数十bp単位で広がり、普段スプレッドの狭い銘柄でも板が空になり、成行注文が想定外の価格で約定します。ボラティリティの大きい局面を取引する戦略ほど、バックテスト上のスリッページ前提を平常時より数倍保守的に置かなければ、実戦とかけ離れます。ギャップが頻繁に発生する銘柄や、週末・早朝のように流動性が薄くなる時間帯でも、同じ理由でスリッページは大きくなります。

取引コストフィルターで候補銘柄と戦略を事前に絞ります

銘柄と戦略を選ぶとき、先に取引コストフィルターを通せば、期待値がマイナスになる組み合わせをエントリー前に除外できます。日次売買代金の下限、スプレッドの上限、そして1回あたりのコスト前提を数値で決めておくことで、スリッページがエッジを食い尽くす銘柄を事前に外せます。

  • [ ] 売買代金の下限: エントリーする銘柄の日次売買代金(USDT基準)が1,000万ドル以上か確認します。売買代金で見ます。コイン数量の取引量は実態を見誤らせます。
  • [ ] スプレッドの上限: エントリー直前の板スプレッドが10bp以下か確認します。10bpを超えると、エントリーと決済の往復だけで20bp以上がコストになります。
  • [ ] 1回あたりのコスト前提: バックテストには、往復手数料0.08%にスリッページ0.05%以上を加えたコストを反映します。高頻度戦略ならスリッページを0.1%以上で置きます。
  • [ ] 損益分岐の確認: 戦略の1回あたり平均損益が、上で設定した往復コストより大きいか確認します。平均損益がコストより小さければ、その銘柄ではエントリーしません。
  • [ ] 注文サイズの確認: エントリー注文サイズが最上位気配の数量を超えていないか確認します。超える場合は、指値で分割して入るか、サイズを落とします。

取引頻度の高い戦略ほど、このフィルターの基準は厳しく設定します。1日に何度も取引する戦略では、1回あたりのコスト前提を大きくし、売買代金の下限も引き上げなければ、累積コストがエッジを上回ってしまいます。スイングのように1回あたりのエッジが大きい戦略では売買代金の下限を少し下げても構いませんが、その場合でも注文サイズが板の厚みを超えないかは必ず確認します。

現実的なコスト前提でバックテストを回し直します

取引コストフィルターを通過した戦略でも、バックテストのコスト前提が現実と合っているかを改めて確認する必要があります。スリッページを0とするバックテスト、小型アルトで終値約定を前提にした検証、回転率の高い戦略をコストなしで検証した結果は、いずれも実戦の期待値を過大評価します。同じ戦略を保守的なコスト前提で回し直すと、損益曲線がどこで崩れるのかを事前に確認できます。

最もよくある誤用は、終値約定の前提です。バックテストエンジンが、シグナルが出た足の終値で正確に約定したと仮定するなら、その終値に実際どれだけの板数量があったかを無視していることになります。BTCのように板が厚い銘柄ではこの誤差は小さくなりますが、日次売買代金が数百万ドル規模のアルトでは、その終値で必要数量を満たせる板自体が存在しないケースが多くあります。終値約定前提で検証したアルト戦略のバックテスト収益は、実戦では再現されません。

回転率の高い戦略は、コスト前提一つで結果が丸ごと変わります。スリッページを0から0.05%へ上げるだけでも、1日10回取引する戦略では月間コストが22%から33%へ跳ね上がり、バックテスト上の右肩上がりの曲線が実戦では右肩下がりに折れます。バックテストを信頼するには、スリッページを0にした結果を信じてはいけません。エントリーする銘柄の実際の板の厚みと、ボラティリティ急変局面を反映した保守的なコスト前提で検証した結果を見る必要があります。手数料だけを差し引いて計算した期待値は、取引コストの一部だけを見た数字であり、実戦で口座を左右するのは残りの二つです。