第3章 凯利公式详解:标准凯利公式推导、半凯利与分数凯利、凯利公式的局限性
凯利公式,说白了就是一个帮你决定「每次下注多少」的数学工具。我最早接触它是在做期货策略回测的时候,那时候我总想着怎么让资金曲线更平滑,结果发现仓位管理比策略本身还重要。嗯,今天我们就来把这个公式彻底讲透。
3.1 标准凯利公式的推导
先别急着看公式,我们从一个简单场景开始。
假设你有一个交易策略,胜率是60%,盈亏比是2:1(赚的时候赚2块,亏的时候亏1块)。每次你该用多少仓位?直觉告诉你,肯定不能全押,但具体多少?
凯利公式给出了答案:
f* = (bp - q) / b
其中:
- f* = 最优投资比例(占总资金的比例)
- b = 盈亏比(净收益率,比如赚2亏1,b=2)
- p = 胜率(盈利概率)
- q = 败率(亏损概率,q = 1 - p)
代入刚才的例子:
f* = (2 * 0.6 - 0.4) / 2 = (1.2 - 0.4) / 2 = 0.4
也就是说,每次应该用40%的资金去下注。这个数字不是拍脑袋出来的,它是在「长期复利最大化」这个目标下推导出来的最优解。
核心思想:凯利公式追求的是长期几何增长率最大化,而不是单次收益最大化。你想想看,如果你每次都全押,哪怕胜率再高,一次亏损就归零了。
推导过程其实不复杂。假设你连续交易n次,每次用f比例的资金,胜率p,盈亏比b。那么n次后的资金总额是:
G = (1 + bf)^(np) * (1 - f)^(nq)
取对数,求导,令导数为0,就得到了上面的公式。我在项目中遇到过不少交易员,他们觉得推导太数学,直接跳过。但我建议你至少理解这个逻辑——它决定了你的资金曲线是向上还是向下。
3.2 半凯利与分数凯利
标准凯利公式算出来的仓位,说实话,有点激进。40%的仓位,如果连续亏3次,你的资金就缩水到21.6%了。这在实盘中很难接受。
所以就有了「半凯利」和「分数凯利」的概念。
半凯利
半凯利就是把标准凯利算出来的仓位砍一半。比如上面例子中,标准凯利是40%,半凯利就是20%。
为什么要这么做?
- 降低波动性:半凯利的最大回撤大约是标准凯利的一半
- 减少心理压力:连续亏损时,你不会那么慌
- 容错性更强:如果你的胜率估计有偏差,半凯利不会让你亏得太惨
我的习惯:我个人在实盘中通常用1/4凯利。标准凯利算出来是40%,我只用10%。虽然理论增长率降低了,但资金曲线的平滑度让我能睡得着觉。记住,交易是马拉松,不是百米冲刺。
分数凯利
分数凯利是半凯利的推广形式。你可以用1/3凯利、1/4凯利,甚至1/10凯利。公式很简单:
f_分数 = k * f*
其中k是分数系数,0 < k < 1。k越小,仓位越保守。
我曾经见过一个做高频交易的团队,他们用1/8凯利。为什么?因为高频交易胜率高但盈亏比低,标准凯利算出来仓位很大,但实际执行中滑点和手续费会吃掉利润。用分数凯利后,他们的夏普比率反而提升了。
3.3 凯利公式的局限性
凯利公式不是万能的。我在项目中踩过不少坑,这里给你列几个最重要的局限性。
局限性一:需要精确的胜率和盈亏比
凯利公式要求你知道p和b的准确值。但实盘中,这两个参数都是估计的。你回测出来的胜率是60%,不代表未来也是60%。一旦估计偏差,凯利公式给出的仓位可能让你亏得很惨。
避坑指南:我曾经用历史数据回测得到一个胜率65%的策略,直接用了标准凯利。结果实盘前三个月胜率只有45%,资金回撤超过50%。从那以后,我再也不敢直接用标准凯利了。现在我的做法是:用最保守的参数估计,然后取1/4凯利。
局限性二:假设交易是独立同分布的
凯利公式假设每次交易的结果是独立的,且胜率和盈亏比不变。但金融市场哪有这么简单?趋势行情中,连续盈利的概率更高;震荡行情中,胜率会下降。这些相关性会破坏凯利公式的假设。
举个例子:如果你的策略在趋势行情中胜率80%,在震荡行情中胜率40%,那么用固定参数算出来的凯利仓位,在震荡行情中就会过度交易。
局限性三:不考虑资金提取和流动性
凯利公式假设你可以随时按比例调整仓位。但实盘中,你可能需要提取资金(比如生活开销),或者遇到流动性问题(比如小市值股票无法按理想价格成交)。这些都会影响实际效果。
局限性四:心理承受能力
这个最容易被忽视。标准凯利的最大回撤可能达到30%-50%。你问问自己,能接受账户从100万亏到50万吗?如果不能,那就别用标准凯利。
我的建议:凯利公式是一个很好的参考工具,但不要把它当成圣杯。我通常的做法是:先用凯利公式算出一个理论仓位,然后根据以下因素调整:
- 策略的稳定性(回测时间越长,系数可以越大)
- 当前市场环境(波动大时降低系数)
- 个人心理承受能力(保守就选小系数)
- 资金规模(资金越大,越要保守)
3.4 知识体系总览
下面这张图帮你理清本章的核心逻辑:
3.5 代码实战:凯利公式计算器
光说不练假把式。下面这个Python函数,你可以直接拿去用:
def kelly_calculator(win_rate, profit_ratio, loss_ratio=1, fraction=1):
"""
凯利公式计算器
参数:
win_rate: 胜率 (0-1)
profit_ratio: 盈利时的收益率(如赚2块,则profit_ratio=2)
loss_ratio: 亏损时的损失率(如亏1块,则loss_ratio=1)
fraction: 分数凯利系数 (0-1),默认1表示标准凯利
返回:
f_star: 标准凯利仓位比例
f_actual: 实际建议仓位比例
"""
# 计算盈亏比
b = profit_ratio / loss_ratio
p = win_rate
q = 1 - p
# 标准凯利
f_star = (b * p - q) / b
# 分数凯利
f_actual = f_star * fraction
return f_star, f_actual
# 示例:胜率60%,盈亏比2:1,使用半凯利
f_star, f_actual = kelly_calculator(0.6, 2, 1, 0.5)
print(f"标准凯利仓位: {f_star:.2%}")
print(f"半凯利仓位: {f_actual:.2%}")
# 输出:
# 标准凯利仓位: 40.00%
# 半凯利仓位: 20.00%
小提示:你可以把这个函数封装到你的回测框架里。每次跑完策略,先算凯利仓位,再根据你的风险偏好调整。我个人习惯在回测报告中同时输出标准凯利和1/4凯利,方便对比。
好了,凯利公式的核心内容就这些。记住,它是个工具,不是规则。用得好,它能帮你控制风险、提升复利;用得不好,它也能让你加速亏损。关键还是在于你对策略的理解和对风险的敬畏。
公众号:蓝海资料掘金营,微信deep3321