バックテストでは、エントリーシグナルの重要度はおそらく最も低いものです。平凡なモメンタムルールを1つ選び、すべてのエントリーとエグジットのタイムスタンプはそのままにして、保有する契約数を決める関数だけを変えると、ネットSharpeを0.41から0.71へ、最大ドローダウンを31%から13%へ動かせます。同じ取引。同じ約定。違う戦略です。
この主張にいら立つ人もいますが、そうなるのも当然です。ルックバック期間やフィルター閾値の調整に費やす時間の多くは、小さな項を最適化していることになるからです。そこで、まず実際の検証結果をお見せし、そのうえで批判にも正面から向き合います。この議論には誤った形もあり、私がどちらの主張をしているのか知っておく価値があるからです。
1つのシグナルを6通りの方法で運用する
シグナルは、Binance USDⓈ-MのETHUSDT無期限先物、1時間足。12時間EMAが96時間EMAを上回るとロング、それ以外はフラットで、ショートはしません。期間は2022年7月から2026年6月まで。往復取引は431回。両側ともtaker手数料は5.0 bps、実際のポジションに応じて8時間ごとに資金調達料を支払いまたは受け取り、スリッページは最良気配の板の厚さからモデル化しています。あえて退屈なシグナルを選びました。誰も擁護しないものなら、検証対象として明快だからです。
以下の各行では、エントリーとエグジットの足のタイムスタンプはすべて同じです。異なるのはサイズ調整関数だけです。
| サイズ調整ルール | ネットSharpe | 最大DD | 年間取引想定元本(×平均ポジション) | グロスPnLに占めるコストの割合 | 最大レバレッジ |
|---|---|---|---|---|---|
| 固定想定元本 $10k | 0.41 | 18.2% | 246× | 14% | 1.0× |
| 固定比率、エクイティの100% | 0.44 | 30.8% | 251× | 15% | 1.0× |
| 20日実現ボラティリティの逆数 | 0.68 | 14.1% | 690× | 29% | 4.4× |
| 年率ボラティリティ目標20%、1時間ごとにリバランス、上限なし | 0.71 | 12.9% | 1,180× | 41% | 6.3× |
| ボラティリティ目標20%、ノートレードバンド20%、レバレッジ上限3× | 0.66 | 15.3% | 402× | 19% | 3.0× |
| 60日ローリング平均・分散に基づくHalf-Kelly | 0.52 | 24.6% | 830× | 33% | 8.1× |
この差を見てください。最悪と最良の行では、Sharpeに相対差で73%、ドローダウンに2.4倍の開きがあります。このデータセットで、明らかな過剰適合もせずSharpeを0.30動かすエントリーシグナルのパラメーターを探してみてください。私も探しました。EMAの期間の組み合わせで動くのは、妥当な範囲全体でも約0.12です。その動きの大半は、サンプル外では維持できないノイズです。
逆ボラティリティが好成績に見える理由と、そのうち本物の部分
仕組みは難しくありません。固定想定元本では、ポジションサイズと実現ボラティリティに相関がありません。つまり、取引ごとのドルベースのリスクは、その週のボラティリティ次第です。この期間のETHでは、20日実現ボラティリティは年率31%から118%の範囲でした。固定想定元本の検証では、2023年7月より2024年3月のほうがドルベースのリスクを3.8倍多く取っています。シグナルの確信度が高かったからではなく、市場の値動きが荒かったからです。ドローダウンのほぼすべてが、ボラティリティ上位20%の期間に集中しています。逆ボラティリティによるサイズ調整はこの連動を取り除き、リターン系列の形を実際に改善します。
ただし、Sharpeの改善には測定上のアーティファクトも含まれます。両者を切り分けないと、その後の判断を誤ります。Sharpeはリターンの標準偏差で割って求めます。ボラティリティ・ターゲティングは、定義上、リターンの標準偏差を安定させる操作です。つまり、分母を直接最適化しています。事前に一定のボラティリティになるようポジションを調整するルールは、ボラティリティ・クラスタリングのあるリターン系列なら、エッジがゼロでもほぼどれでもSharpeを改善します。私はシャッフルしたシグナルでも確認しました。エントリーのタイムスタンプをランダム化し、ボラティリティ・ターゲティングの上乗せルールは維持すると、平均ゼロのベースでも固定想定元本よりSharpeが約0.06改善します。小さな差ですが、ゼロではありません。純粋に仕組みによるものです。
だから、社内でサイズ調整ルールを比較するとき、シートに載せるのはSharpeだけではありません。Calmarも、平均投入想定元本あたりのネットPnLも、グロスからネットへのコスト内訳も確認します。この3つを合わせれば、分母を操作する手法で取り繕うのはずっと難しくなります。
ボラティリティ推定値はモデルなので、モデルと同じように情報が漏れる
サイズ調整の好成績が実は偽物だった、というケースで最もよくある原因は、サイズを決める対象の足の情報をボラティリティ推定値が使っていることです。ボラティリティ系列を中心化ウィンドウで計算していたり、現在の未確定足を含むリサンプルの後にpandasのデフォルトの `rolling().std()` を適用していたり、全サンプルで標準化していたりすれば、情報リークが起きています。ボラティリティには持続性があるので、各行でのリークは小さく、エクイティカーブも一見もっともらしいままです。肝心な週にだけ、少し滑らかすぎるように見えます。
結果をペーパートレードのキューに進める前に、エージェントがすべてのサイズ調整ルールについて次の4点を確認します。
- 意思決定時点でのデータ利用可能性。14:00に始まる足で使うサイズは、終値のタイムスタンプが≤ 13:59:59.999のデータから算出できなければなりません。ランダムに選んだ200の意思決定時点で、フレームをその時点までに切り詰めてサイズ系列を再計算し、差分を取ってこれを検証します。
- 推定期間も正式なパラメーター。ボラティリティの20日ウィンドウと60日ウィンドウは、別々の戦略です。ほかのすべての条件とともにウォークフォワードのグリッドに加えます。1つの期間長でしか機能しないなら、それは脆弱性についての発見です。
- レバレッジの最大値だけでなく、その推移も確認。グロスレバレッジの分布全体を出力します。上の上限なしボラティリティ・ターゲティングの検証では、全時間の4%でレバレッジが5×を超えていました。要約表には決して載らないのに、戦略を実装できるかどうかを完全に左右する要素です。
- サイズ調整の感度を頑健性テストに。ボラティリティ目標を20%から25%に変えただけでSharpeが崩れるなら、それはボラティリティ・ターゲティング戦略ではなく、レバレッジを調整した戦略です。数字を選んだことでエッジを見つけてしまっています。
レバレッジ上限はリスク管理の飾りではなく、戦略の定義の一部です。Binanceでは、ポジションの想定元本が増えるとETHUSDTのティアごとの最大レバレッジが下がり、維持証拠金率も段階的に上がります。想定元本$400kでボラティリティ・ターゲティングのルールを6.3×まで許すバックテストは、その証拠金では取引所が保有を認めないポジションを描いています。表の上限ありの行はSharpeを0.05犠牲にしますが、現実に即しているのはこの2つのうちこちらだけです。
資金が流れ出すのはリバランス
コストの列を見てください。ボラティリティ目標に合わせて1時間ごとにリバランスすると、見出し上は最高のSharpeが得られますが、同時にグロスPnLの41%を取引所に渡すことになります。片道5 bpsにスプレッドとインパクトを加え、年間で平均ポジション想定元本の1,180倍を取引しています。単純な対策は、スケジュールに従ってリバランスの頻度を下げることです。よりよい対策はノートレードバンドです。現在のポジションが目標から一定のしきい値を超えて乖離したときだけサイズを調整します。
20%のバンドを設けると、年間取引想定元本は1,180×から402×へ、66%減りました。Sharpeの低下は0.05です。これまで8つのシグナルで検証しましたが、傾向は同じです。15%から25%のバンドなら、売買回転を3分の1に抑えながらリスク管理の効果をほぼ維持できます。10%未満では、どうせ20日ウィンドウで推定している数値を見かけ上細かく調整するためだけに手数料を払うことになります。標準誤差が15%もある数値を、小数点以下3桁までリバランスするわけにはいきません。
2月に、エージェントが書いたレポートが「改善したエントリーフィルター」によるSharpeの0.22改善を報告したことがありました。差分はサイズ調整モジュールの1行でした。フィルターには変更がありません。今はレポートの先頭にサイズ調整設定のハッシュを出すようにしています。要因の特定には規律が必要ですし、モデルも人と同じように、整った筋書きを語りたがるからです。
ペーパートレードでサイズ調整ルールがどう変わるか
バックテストとペーパートレードの差が最も大きく開くのはここで、その大半は算数の問題です。ボラティリティに応じたサイズ調整では、サンプル内でポジションサイズが4倍から8倍も変動します。その範囲の両端は、バックテストでモデル化していなかった取引所の制約にぶつかります。
小さい側では、刻み幅と最小想定元本が問題です。ETHUSDT無期限先物の数量刻みは0.001、最小想定元本は$5です。低ボラティリティ局面でのサイズが0.0004 ETHなら、バックテストでは保有しますが、ペーパートレードでは何も保有しません。これは特殊な例に聞こえるかもしれません。しかしボラティリティ・ターゲティングのルールでは最も小さいサイズが最も穏やかな相場で生じます。トレンドシグナルでは、そこが好エントリーになりやすいのです。大きい側では、ポジション上限や証拠金ティアに加え、6×のポジションには、清算モデルもバックテストしていない分離マージン運用が必要になります。
バックテストと3%以内の精度で6週間推移したあと、大きく乖離したペーパーのエクイティカーブもありました。原因は丸め処理です。注文サイズ計算で刻み幅に合わせて丸めず `int()` で切り捨てており、平均1.4刻みのポジションに適用されていました。バックテストでは連続値でサイズを計算していた一方、実運用のサイズ計算では小さな取引のたびに意図したサイズの20-30%が失われていました。約定モデルの特殊要素も、レイテンシの話もありません。切り捨てです。
批判が当たっているところ
3つの反論には一理あります。これを隠して話を進めたくはありません。
まず、最も重要な点です。サイズ調整はエッジを配分するものであり、作り出すことはできません。現実的な手数料と資金調達料を差し引いた後のシグナルのグロス期待値がゼロ以下なら、表のどのルールでも損失が出ます。高度なルールは、見栄えのよい分散で損をするだけです。この期間では、小さいながらも正のネットエッジがあるシグナルを選びました。ネットで取引あたり−1.2 bpsのシグナルに同じ6つのルールを適用すると、順位は保たれますが、最終エクイティはいずれも開始時を下回ります。サイズ調整は何かに掛ける倍率です。その「何か」は、別途必要です。
次に、ボラティリティ・ターゲティングには、実際に起きることが記録されている失敗パターンがあります。急落の底に向かってレバレッジを下げ、急反発の後にレバレッジを戻すことです。急激なV字回復では、固定想定元本のほうが勝つことがあり、差が大きい場合もあります。株式市場の2020年3月と暗号資産市場の2024年8月の急落では、戻り局面でボラティリティ連動型のサイズ調整が不利になりました。私が使った4年間のETHの期間には、V字型の乱高下よりも、ボラティリティが固まって続く揉み合いが多く含まれており、逆ボラティリティの行に有利でした。別の期間なら順位の一部は逆転します。もし2020年の表を最初に出していたら、この主張はもっと弱いものになっていたでしょう。
3つ目に、サイズ調整ルールもほかの要素と同様に過剰適合しえます。表でその兆候を示すのが、ローリング推定に基づくHalf-Kellyです。洗練されて見え、理論的な根拠もありますが、ローリング平均によるノイズの多いリターン系列の推定値は使いものにならず、Kellyはその値に非常に敏感なため、2番目に悪いドローダウンになりました。期待リターンの推定値を入力に使うサイズ調整ルールは、その推定誤差を引き継ぎ、さらに増幅させます。分散の推定値だけを使うルールのほうがずっと安定しています。4年分の1時間足データから実際に推定できるモーメントは、分散だからです。
ここから持ち帰ってほしいのは、バックテストの結果が予想外なら、シグナルに妙案を探す前にサイズ調整モジュールを確認すること。そしてSharpeを報告するときは、レバレッジの推移とコストの内訳も併記することです。これほどサイズ調整の判断に左右される数値は、そもそもシグナル自体の特性ではありません。
← 記事一覧
