風控 · 部位管理

Kelly 公式 + 部位大小完整解析
為什麼大多用「半 Kelly」

2026-06-03·12 分鐘閱讀·中階

1956 年,貝爾實驗室科學家 J.L. Kelly Jr. 發表一篇論文〈A New Interpretation of Information Rate〉, 試圖解決一個賭場問題:當你有資訊優勢時,每次該下注多少比例的本金,才能讓長期財富最大化?

這個公式後來被 21 點數牌大師 Edward Thorp 帶進金融市場, 成為 Princeton-Newport Partners(華爾街第一個量化基金)的核心。 本文講原理、為什麼業界用「半 Kelly」、Thorp 的傳奇故事, 以及怎麼在 Pine 實作。

1. Kelly 公式原始版(賭博情境)

給定:

  • p = 勝率(贏的機率)
  • b = 賠率(贏的時候,1 元能賺幾元)

Kelly 比例:

text
f* = p - (1 - p) / b

(其中 f* 是「該下注本金的比例」,介於 0-1)

具體例子

擲一枚有偏的硬幣:頭朝上 60%、字朝上 40%。 猜對贏 1 元、猜錯虧 1 元。p=0.6、b=1。

text
f* = 0.6 - 0.4 / 1 = 0.2

→ 每次下注「20% 的當前本金」

意思:你有 $100,第一次下注 $20。 贏了變 $120 → 下次下 $24(20% × 120)。 輸了變 $80 → 下次下 $16(20% × 80)。 這套規則最大化「長期幾何平均報酬」。

為什麼 Kelly 是最優的
數學上證明過:在「重複下注 + 可以複利」情境, Kelly 公式最大化 E[log(wealth)]。 也就是長期財富的成長率最高。 這不是「賺最多錢」(那是 all-in),是「不會破產 + 長期最快增值」。

2. Kelly 在交易應用版本

交易不是「贏 1 元 / 輸 1 元」這麼簡單。Kelly 公式有交易版本:

離散版(適合明確進出場的策略)

text
f* = (p × b - q) / b

其中:
  p = 勝率
  q = 1 - p(敗率)
  b = 平均賺賠比(average win / average loss)

具體例子

你的策略過去 100 筆:勝率 55%、平均賺 2%、平均虧 1%。 p=0.55、q=0.45、b=2。

text
f* = (0.55 × 2 - 0.45) / 2 = 0.325

→ 每筆交易承擔「總本金 32.5% 的風險」
32.5% 風險?這不是太大了嗎?
對,這正是 Kelly 真實的「問題」。 理論最優 = 實際不可承受。 想像連續 3 筆虧損:剩 67.5% × 67.5% × 67.5% = 30.8%。 帳戶縮 70%。
更糟的是:你估的 p、b 不可能準。 樣本越小估計誤差越大,Kelly 對估計誤差超敏感。

3. 為什麼業界用「半 Kelly」或「四分之一 Kelly」

這是業界共識:實際下注用 0.25 × f* 到 0.5 × f*

原因有三:

原因 ①:估計誤差

你不是真的知道 p=55%、b=2。這是過去 100 筆估的。 真實 p 可能是 50% 或 60%,誤差幅度大。 Kelly 對誤差的敏感性 — 估錯 10% 可能變成 50% 風險。 用半 Kelly 給自己留安全邊際(margin of safety)

原因 ②:心理承受度

全 Kelly 即使長期最優,路徑會很痛 — 最大回撤可能 50% 以上。 人類心理上連 30% drawdown 都會慌、開始違反系統。 半 Kelly 把 drawdown 砍一半,長期報酬只少 25%。

原因 ③:未來 ≠ 過去

策略的真實 edge 會隨市場變化衰減。 今年 p=55%,明年可能是 50%。 用半 Kelly 等於提前對沖未來 edge 衰減的風險。

不同 Kelly 倍數的數學對照
(假設 f* = 0.2,理論年化 50%)
全 Kelly:年化 50%、最大回撤 ~50%、破產風險低
半 Kelly:年化 37.5%、最大回撤 ~25%、破產風險極低
1/4 Kelly:年化 19%、最大回撤 ~12%、破產風險零
結論:用半 Kelly 換 50% 安全,CP 值最高。

4. Edward Thorp — Kelly 在金融的開山祖師

Edward Thorp(1932 年生)是 MIT 數學博士, 1962 年發表《Beat the Dealer》— 用機率論破解 21 點數牌策略, 成為賭場史上第一個用數學系統性贏錢的人。

他在加州賭場數牌賺了一陣子後(賭場開始禁他), 1969 年創立 Princeton-Newport Partners, 被認為是華爾街第一個量化避險基金

  • 1969-1988(19 年):平均年化 19.1%(after fees), 僅有 3 個月小幅度負報酬
  • Sharpe Ratio 約 1.4 — 19 年穩定
  • 策略主要:可轉債套利 + 統計套利,全部用 Kelly 控制部位
Thorp 的核心思想
「Don't be a hero. Use half-Kelly.」 Thorp 自己的部位永遠用半 Kelly,從不全 Kelly。 他 2017 年的回憶錄《A Man for All Markets》詳細記錄這套思維。 書中也提到:他幫 Warren Buffett 早期合夥人 Bill Gross推廣 Kelly 思維。

5. William Poundstone《Fortune's Formula》要點

這本 2005 年出的書詳細記錄了 Kelly 公式從貝爾實驗室到華爾街的歷史。 重點:

  • Kelly 公式跟 Shannon 資訊理論密切相關(Kelly 是 Shannon 的同事)
  • Thorp 用 Kelly + 數牌打敗賭場
  • Long-Term Capital Management(LTCM)1998 年崩盤的核心原因之一: 用了超過 Kelly 的槓桿
  • 學術派 Eugene Fama(效率市場理論)跟實踐派 Thorp 的長期分歧

6. Pine Script 實作:Kelly 動態部位

以下範例會:① 算過去 100 筆勝率/賺賠比、② 算 Kelly 比例、③ 用半 Kelly 動態調整下單量。

pine
//@version=5
strategy("Kelly 動態部位(簡化版)", overlay=true,
  initial_capital=10000, default_qty_type=strategy.percent_of_equity)

// === 你的進出場訊號(這裡用 RSI 作範例)===
rsi = ta.rsi(close, 14)
longSignal = ta.crossover(rsi, 30)
exitSignal = ta.crossunder(rsi, 70)

// === 計算策略歷史表現(過去 100 筆) ===
lookback = input.int(100, "回看筆數")
wins = ta.cum(strategy.netprofit > strategy.netprofit[1] ? 1 : 0)
losses = ta.cum(strategy.netprofit < strategy.netprofit[1] ? 1 : 0)
trades = wins + losses

p = trades > 0 ? wins / trades : 0.5
avgWin = ta.cum(strategy.netprofit > strategy.netprofit[1]
  ? (strategy.netprofit - strategy.netprofit[1]) : 0) / math.max(wins, 1)
avgLoss = ta.cum(strategy.netprofit < strategy.netprofit[1]
  ? math.abs(strategy.netprofit - strategy.netprofit[1]) : 0) / math.max(losses, 1)
b = avgLoss > 0 ? avgWin / avgLoss : 1.0

// === Kelly 比例 + 半 Kelly ===
kelly = math.max((p * b - (1 - p)) / b, 0)
halfKelly = kelly * 0.5
positionPct = math.min(halfKelly * 100, 10)  // 最多 10% 部位

if (longSignal and trades >= 30)  // 樣本足夠才用 Kelly
    strategy.entry("Long", strategy.long, qty_percent=positionPct)

if (exitSignal)
    strategy.close("Long")

plotchar(positionPct, "Position %", "•", location=location.bottom)
實盤注意
① 樣本量 < 30 筆別用 Kelly,估計誤差太大
② 用半 Kelly 而非全 Kelly
③ 設絕對上限(例如 10%),不讓 Kelly 失控
④ 連續虧損時 Kelly 會自動縮,這是設計如此(保護你)

7. Kelly 不能用的情境

❌ 樣本太少

少於 30 筆完整交易,估計的 p、b 誤差太大。Kelly 算出來會極端。 用固定百分比(例如 1-2%)先跑到累積足夠樣本。

❌ 報酬分布不對稱

有些策略是「小贏小贏小贏 + 大虧」(賣 OTM put 那種)。 Kelly 在這種「肥尾」情境會嚴重低估風險。 要用調整版的 Kelly(考慮高階動差),或乾脆別用。

❌ 多個策略同時跑

你有 3 個策略各自 Kelly 算出 10%,加總 30%。 但這些策略可能相關性高(同方向同時錯), 實際風險遠超 30%。要算 portfolio Kelly。

❌ 連續調整參數

每筆交易都重算 Kelly,會被短期回撤拖到部位變很小, 反而錯過反彈機會。建議用固定一段期間(月 / 季)重估

Get started

想把今天學到的東西自動化跑起來?

策略寫好後,TVSBot 幫你執行 + 風控保護(每日最大虧損 kill-switch)。

免費註冊 TVSBot

8. 散戶實用版:固定百分比 + 偶爾用 Kelly

對散戶,不要直接套 Kelly。建議:

  1. 每筆風險 1-2%:海龜法則的經典做法。 用 ATR 算出止損點,反推部位大小,讓每筆「最大可能虧損」固定 1-2% 帳戶
  2. 跑滿 100 筆後,算過去策略的 p、b, 再用半 Kelly檢查目前部位大不大
  3. 策略表現衰減就降部位。 最近 30 筆勝率掉到 40% → 直接砍部位一半
  4. 不同策略獨立 Kelly。 相關性低的多策略才能加總,相關性高的要算 portfolio

9. 三個關鍵 takeaway

  1. Kelly 是「長期最優」不是「短期最優」。 短期 drawdown 可能 50%,要心理承受得住才能用
  2. 用半 Kelly 換 50% 安全。 業界共識,Thorp 自己也這樣做
  3. 風控比策略本身重要。 一個普通策略 + 紀律的 Kelly,會贏過一個神策略 + 亂壓注