风控 · 仓位管理

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% 安全,性价比最高。

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,会赢过一个神策略 + 乱压注