Share Notes

chundev

View the Project on GitHub latteouka/share-notes

槓桿倍率的雙約束 — Kelly Criterion 遇上 Margin Call

日期:2026-04-20 情境:期貨 / 槓桿商品的部位規模決策


TL;DR

「既然策略有統計支撐,為什麼不 all-in?」因為你受兩條獨立約束Kelly Criterion 的數學上限(避免賭太大毀了複利)與 Margin Call 的物理下限(避免單日波動強制平倉)。回測不模擬 margin call,所以低槓桿看起來年化 700%+、實盤卻是歷史必爆倉。真正可用的倍率是兩條線的交集 — 以勝率 76%、賺賠比 2.72 的策略為例,Kelly 建議資金利用率 67%,歷史最大盤中跌 11.8% 要求至少 2x 保證金。這兩個數字把倍率釘在 2x 附近。


背景

期貨交易的部位規模有兩種思考:

  1. 期望值觀點(Kelly):高勝率 + 賺賠比 → 數學上該押重一點
  2. 生存觀點(Margin Call):保證金不足會強制平倉,押太重會死

這兩個觀點得出的答案會打架。以動態口數策略常見的 multiplier 設計為例:

每口保證金 = 價格 × 點值 × marginRate × multiplier
可開口數 = floor(資金 / 每口保證金)

multiplier 越低,每口需要的錢越少,同資金能開更多口 → 更高槓桿。


Kelly Criterion — 數學上限

公式

Kelly% = W - (1 - W) / R

W = 勝率
R = 賺賠比 = avg win % / avg loss %

實測某策略:

Full Kelly = 0.759 - 0.241 / 2.72 = 0.670 = 67% 資金利用率

意思:每次交易下注金額 ≈ 67% 可用資金。

為什麼 Full Kelly 危險

雖然數學上 Kelly 最大化對數財富長期成長率,實務上都用 Half Kelly(33.5%):

  1. 參數估計誤差:W 和 R 是歷史估計,真實值可能 ±10%,Kelly 算錯一點就是破產
  2. 路徑效應:Full Kelly 在到達終點途中會經歷 ~50% drawdown,撐不住就出場 → 再也回不來
  3. 尾端風險:真實報酬分布比常態分布肥尾,Kelly 基於常態近似會低估毀滅機率

對應到 multiplier

假設每口合約需要 27% 合約價值作為保證金(= marginRate 13.5% × 2x multiplier),則:

2-3 口 = 54-81% 曝險 → 接近 Full Kelly 67%
1-2 口 = 27-54% 曝險 → 接近 Half Kelly 33.5%

實務上 2x multiplier 配 DS(Dynamic Sizing)自動控制在 Kelly 區間。


Margin Call — 物理下限

機制

期貨結算:每日 mark-to-market。當帳戶權益 < 維持保證金,觸發追繳 / 強制平倉。

每口合約價值 = 價格 × 點值
原始保證金 = 合約價值 × marginRate × multiplier
維持保證金 ≈ 原始保證金 × 75%

可承受的盤中跌幅:

tolerance = (原始保證金 - 維持保證金) / 合約價值
         = marginRate × multiplier × (1 - 0.75)
         = marginRate × multiplier × 0.25

實測:不同 multiplier 的耐受度

以 marginRate = 13.5%、歷史最大盤中跌 11.8% 為基準:

multiplier 保證金佔合約價值 可承受盤中跌 vs 歷史最大 判定
0.5x 6.8% -3.4% -0.29x 餘裕 ❌ 歷史已爆
0.75x 10.1% 0% 0x ❌ 歷史已爆
1.0x 13.5% 3.4% 0.29x ❌ 歷史已爆
1.5x 20.3% 10.1% 0.86x ❌ 歷史剛好爆
2.0x 27.0% 16.9% 1.43x ⚠️ 勉強撐住
2.5x 33.8% 23.6% 2.00x ✅ 安全
3.0x 40.5% 30.4% 2.57x 🛡️ 保守

關鍵洞察:1.5x 以下歷史會爆倉


兩條約束的交集

把兩個觀點疊在一張表:

multiplier 回測年化 Kelly 達成度 Margin Call 餘裕 可用
0.5x (all-in 概念) 727.9% > Full Kelly(過賭) ❌ -0.29x 紙上富貴
1.0x 285.0% 接近 Full Kelly ❌ 0.29x 歷史已爆
1.5x 165.4% 超過 Full Kelly 上緣 ❌ 0.86x 歷史剛爆
2.0x 115.3% 接近 Full Kelly 下緣 1.43x ⚠️ ✅ 最佳交集
2.5x 87.2% Half Kelly ✅ 2.0x ✅ 保守可用
3.0x 67.1% < Half Kelly ✅ 2.57x ✅ 極保守

2x 是兩條線的甜蜜點

低於 2x 就踩進歷史會爆倉區,高於 2.5x 就犧牲掉 Kelly 該拿的報酬。


為什麼回測不會發現爆倉問題

實測 0.5x multiplier 回測輸出:

年化:727.9%
最大單筆虧損:-401,372 萬(-40 億)
最大口數:49,999 口
終值:2,302,568 萬

-40 億的單筆虧損?49,999 口?這些數字荒謬,因為:

  1. 回測假設無限流動性 + 無限資金補繳
  2. 電腦計算的是「如果隨時有錢填保證金,最終會變多少」
  3. 實盤券商會在保證金不足時強制平倉,帳戶直接清零

所以回測高年化要搭配 margin call 分析一起看,光看績效會被誤導。


決定歷史最大盤中跌的重要性

用來對照的「歷史最大」應該是策略會進場期間的最大波動,不是隨便找一個市場跌最多的日子。

做法:

  1. 從歷史資料取所有「策略進場日」
  2. 對每個進場日,計算當日「盤中最低價 / 進場價 - 1」
  3. 取最大跌幅

以某個期貨策略為例:

這個 11.80% 就是 multiplier 選擇的硬門檻。任何比 0.88x 更激進的 multiplier,都會在 2018-02 或 2021-01/02 被爆倉過。


Monte Carlo 的誤導

有人會做 Monte Carlo 模擬:隨機重組歷史交易,看不同 multiplier 表現。結果通常是:

multiplier Monte Carlo 中位終值
1.75x 4,642 萬
2.0x 4,650 萬
2.5x 3,960 萬

1.75x 看起來跟 2.0x 幾乎一樣。但真實回測:

multiplier 真實終值 真實最大回撤
1.75x 4,642 萬 41.0%
2.0x 4,650 萬 39.0%

Monte Carlo 看不見 1.75x 的回撤放大。原因:隨機重組消除了口數累積效應。真實回測中,大贏後口數膨脹,1.75x 比 2.0x 分配更多口數,後續虧損被放大。

教訓:Monte Carlo 不能用來推薦 multiplier,只能驗證路徑依賴性(某策略是否過擬合特定市場序列)。


實務決策流程

設計新策略時,決定 multiplier 的完整步驟:

1. 計算 Kelly

const winRate = winTrades.length / totalTrades;
const avgWin = mean(winTrades.map(t => t.returnRate));
const avgLoss = Math.abs(mean(lossTrades.map(t => t.returnRate)));
const R = avgWin / avgLoss;
const fullKelly = winRate - (1 - winRate) / R;
const halfKelly = fullKelly / 2;

2. 計算歷史最大盤中波動

const intradayDrops = trades.map(t => {
  // 找進場日的盤中最低價
  const entryDay = getDayData(t.entryDate);
  return (entryDay.low - t.entryPrice) / t.entryPrice * 100;
});
const maxDrop = Math.min(...intradayDrops); // 最深負值

3. 計算生存下限

minMultiplier ≈ |maxDrop| / (marginRate × 0.25) × 安全係數(通常 1.5)

例:maxDrop = -11.8%, marginRate = 13.5%:

minMultiplier = 11.8 / (13.5 × 0.25) × 1.5 = 5.25 ?

不對,應該是:

需要的保證金佔合約價值 = maxDrop / 0.25 = 47.2% × 安全係數
marginRate × multiplier ≥ 47.2% × 1.5 / (1 - 0.25) ... 

簡化:直接查上面那張耐受度表,找 tolerance ≥ maxDrop × 1.5 的最小 multiplier。

4. 取兩端交集

兩端的 multiplier 對應區間 = 可用範圍。


一個常見誤解

「Kelly 只跟勝率有關,跟保證金無關」

錯。Kelly 計算每筆下注金額 / 總資金,但多少口數對應多少下注金額取決於 multiplier。

例:

等等——口數不是關鍵,曝險金額才是

重新想:

低 multiplier 放大曝險倍數,直接越過 Full Kelly。所以 Kelly 和保證金是雙向互動的:想要 67% 曝險(Full Kelly),就不能用太低 multiplier。


學到的事


參考資料