Kelly 公式 + 仓位大小完整解析
为什么大多用「半 Kelly」
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 比例:
f* = p - (1 - p) / b
(其中 f* 是「该下注本金的比例」,介于 0-1)具体例子
掷一枚有偏的硬币:头朝上 60%、字朝上 40%。 猜对赢 1 元、猜错亏 1 元。p=0.6、b=1。
f* = 0.6 - 0.4 / 1 = 0.2
→ 每次下注「20% 的当前本金」意思:你有 $100,第一次下注 $20。 赢了变 $120 → 下次下 $24(20% × 120)。 输了变 $80 → 下次下 $16(20% × 80)。 这套规则最大化「长期几何平均回报」。
E[log(wealth)]。 也就是长期财富的成长率最高。 这不是「赚最多钱」(那是 all-in),是「不会破产 + 长期最快增值」。2. Kelly 在交易应用版本
交易不是「赢 1 元 / 输 1 元」这么简单。Kelly 公式有交易版本:
离散版(适合明确进出场的策略)
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。
f* = (0.55 × 2 - 0.45) / 2 = 0.325
→ 每笔交易承担「总本金 32.5% 的风险」更糟的是:你估的 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:年化 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 控制仓位
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 动态调整下单量。
//@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)② 用半 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,会被短期回撤拖到仓位变很小, 反而错过反弹机会。建议用固定一段期间(月 / 季)重估。
8. 散户实用版:固定百分比 + 偶尔用 Kelly
对散户,不要直接套 Kelly。建议:
- 每笔风险 1-2%:海龟法则的经典做法。 用 ATR 算出止损点,反推仓位大小,让每笔「最大可能亏损」固定 1-2% 账户
- 跑满 100 笔后,算过去策略的 p、b, 再用半 Kelly检查目前仓位大不大
- 策略表现衰减就降仓位。 最近 30 笔胜率掉到 40% → 直接砍仓位一半
- 不同策略独立 Kelly。 相关性低的多策略才能加总,相关性高的要算 portfolio
9. 三个关键 takeaway
- Kelly 是「长期最优」不是「短期最优」。 短期 drawdown 可能 50%,要心理承受得住才能用
- 用半 Kelly 换 50% 安全。 业界共识,Thorp 自己也这样做
- 风控比策略本身重要。 一个普通策略 + 纪律的 Kelly,会赢过一个神策略 + 乱压注