2、凯利公式入门:数学推导、最优下注与实战应用

凯利公式,说白了就是帮你算「每次该押多少」的数学工具。

我最早接触它是在做期货策略回测的时候。当时有个策略胜率挺高,但仓位一重就爆仓,仓位轻了又赚不够。后来一个老交易员跟我说:「你去看看凯利公式。」嗯,这一看就是十年。

2.1 凯利公式的数学推导

先别急着背公式。我们从一个简单场景开始:

你有一个交易策略,胜率是 p,赔率是 b(赚的时候赚 b 倍,亏的时候亏 1 倍)。每次你押总资金的 f 比例。问:f 取多少,长期增长最快?

假设你连续交易 n 次。赢了 w 次,输了 l 次,n = w + l。最终资金是:

最终资金 = 初始资金 × (1 + bf)^w × (1 - f)^l

取对数,算每期的平均增长率 G:

G = (w/n) × ln(1 + bf) + (l/n) × ln(1 - f)

当 n 足够大时,w/n 趋近于 p,l/n 趋近于 q = 1 - p。所以:

G = p × ln(1 + bf) + q × ln(1 - f)

我们要让 G 最大。对 f 求导,令导数为零:

dG/df = (p × b) / (1 + bf) - q / (1 - f) = 0

解出来:

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

这就是凯利公式的核心。f* 就是最优下注比例。

核心公式:

f* = (bp - q) / b = p - (1-p) / b

其中 p = 胜率,q = 1-p = 败率,b = 赔率(净赔率)

2.2 最优下注比例计算

公式看着简单,用起来有几个坑。我一个个说。

2.2.1 标准情形:已知胜率和赔率

假设你的策略胜率 60%,赔率 1:1(赚1块亏1块)。那么:

f* = (0.6 × 1 - 0.4) / 1 = 0.2

也就是说,每次押 20% 的仓位。我刚开始用的时候觉得「才20%?太保守了吧」。后来回测发现,超过这个比例,长期收益反而下降。

2.2.2 赔率不对称的情形

现实中很少是 1:1 的赔率。比如趋势跟踪策略,经常是赚大亏小。假设胜率 40%,但赚的时候赚 3 倍,亏的时候亏 1 倍:

f* = (0.4 × 3 - 0.6) / 3 = 0.2

同样是 20%。但注意,这里胜率只有 40%,却因为赔率高,依然值得下注。

我的经验:

凯利公式对胜率低但赔率高的策略特别友好。我在做期权卖方策略时,胜率经常在 70% 以上,但赔率只有 0.3 左右。算下来 f* 经常是负数——也就是说,不该做。后来我调整了策略结构,才让凯利值转正。

2.2.3 多资产情形

如果你同时交易多个品种,凯利公式需要扩展成矩阵形式。这里不展开,但记住一个原则:

  • 各品种之间的相关性越低,总仓位可以越高
  • 相关性高的时候,凯利会建议你降低总敞口

2.3 凯利公式在交易中的实际应用

理论讲完了,说说实战。凯利公式在真实交易中,我建议做三件事:

2.3.1 用半凯利降低风险

全凯利仓位波动极大。我见过有人用全凯利,连续亏 5 次后账户缩水 70%。虽然长期能回来,但心理扛不住。

所以我个人习惯用「半凯利」——也就是 f = f* / 2。增长慢一点,但回撤小很多。

注意:

凯利公式假设你的胜率和赔率是精确已知的。但现实中,这两个参数都是估计值。估计有误差,全凯利就会出问题。半凯利相当于给估计误差留了安全边际。

2.3.2 动态调整参数

胜率和赔率不是一成不变的。我建议每 20-30 笔交易重新计算一次。比如:

def kelly(p, b):
    q = 1 - p
    f = (p * b - q) / b
    return max(0, f)  # 负值表示不该做

# 滚动窗口计算
window = 30
recent_trades = trades[-window:]
win_rate = sum(recent_trades) / window
avg_odds = ...  # 平均赔率
current_f = kelly(win_rate, avg_odds)
print(f"当前建议仓位: {current_f:.2%}")

我曾经在股指期货上跑过这个逻辑。市场波动率变化时,凯利值会跟着变。波动率低的时候仓位可以重一些,波动率高的时候要减仓。嗯,这个逻辑后来成了我风控模块的核心。

2.3.3 结合最大回撤限制

凯利公式不考虑最大回撤。但你的资金曲线需要考虑。我常用的做法是:

  • 先算凯利比例 f*
  • 再算一个「回撤限制比例」f_risk = 最大容忍回撤 / 单笔最大亏损
  • 实际仓位 = min(f*, f_risk)

举个例子。你最多能接受 20% 的回撤,单笔最大亏损是 5%。那么 f_risk = 20% / 5% = 4 倍杠杆?不对,这里要小心。实际上 f_risk 应该用风险平价的思想来算,但简单起见,取两者最小值已经能避免很多坑。

实战口诀:

  1. 先算凯利,再砍一半
  2. 动态更新,别死扛
  3. 回撤优先,仓位服从

2.4 凯利公式的局限性

说实话,凯利公式不是万能的。我见过有人把它当圣杯,结果亏得很惨。几个常见问题:

  • 参数敏感:胜率差 5%,仓位可能差一倍
  • 忽略交易成本:高频交易中手续费会吃掉利润
  • 不适用于非独立事件:如果你的交易有序列相关性,凯利会高估仓位

我曾经在商品期货上吃过这个亏。策略本身有正期望,但连续亏损后参数变了,凯利没跟上,结果仓位过重。那次回撤让我记住了:凯利是工具,不是信仰。

2.5 本章小结

凯利公式的核心就一句话:用数学告诉你该押多少。但数学是死的,市场是活的。我的建议是:

  • 理解推导过程,别死记公式
  • 实战用半凯利,留足安全边际
  • 动态更新参数,别一套参数用一年
  • 结合回撤控制,别让凯利毁了你的账户

下一章我们会讲风险平价,那是另一个维度的仓位管理思路。但凯利是基础,先把这块吃透。

凯利公式知识体系 凯利公式 f* = p - q/b 数学推导 最优下注比例计算 实际应用 对数增长率最大化 求导推导过程 标准情形计算 不对称赔率情形 多资产扩展 半凯利降风险 动态参数调整 结合回撤限制 核心:数学推导 → 比例计算 → 实战应用

公众号:蓝海资料掘金营,微信deep3321