先说结论:Kelly 分数 c 的增长率是一条抛物线 ,但亏损概率是一条指数曲线 。抛物线在顶点附近是平的——从全 Kelly 退到半 Kelly,增长率只损失 25%;指数曲线在同一段却是陡的——腰斩概率从 50% 掉到 12.5%,砍掉四分之三。这个不对称就是”分数 Kelly”能成为行业惯例的全部数学理由。我用 4000 条 20 年模拟路径实测:理论散点几乎完美贴合,且给定”腰斩概率不超过 10%“的约束可以直接反解出 c=0.463——回撤约束不是拍脑袋的风险偏好,是一个能算出来的数字。
这篇文章是 Kelly 系列的收官:Kelly 仓位管理基础推导了 ,状态条件 Kelly 讨论了参数随 regime 变化时怎么办。这一篇回答最后一个问题:就算参数全对,你也不该用全 Kelly——那到底该用多少?
全 Kelly 的问题不是错,是疼#
先复习设定。资产年化漂移 、波动 ,连续时间下以杠杆 持有,对数财富的长期增长率是:
对 求导取零,得到全 Kelly 杠杆 ,对应最大增长率 。
数学上无懈可击:任何长期对数增长的最大化者都必须用 ,这是 Breiman(1961)的经典结果。但把 代回去,整理一下会得到本文最重要的公式:
这是一条以 为顶点的抛物线。它有三个立刻能读出来的性质:
- 顶点是平的。在 处一阶导为零,意味着在最优点附近增减仓位对增长率的影响是二阶小量。半 Kelly()保留 ,即 75% 的最优增长;四分之三 Kelly 保留 93.75%。
- 对称性。 和 的增长率相同——但后者的风险大得多(下面马上看到)。超过全 Kelly 的每一分杠杆都是纯亏:风险更高,增长更低。
- 增长归零。两倍 Kelly 的长期增长率恰好为零——你承担着巨大的波动,财富的长期复合速度却和存款单持平。 则长期必然破产。
20 年、4000 条路径的模拟散点几乎落在理论线上:

模拟中 的年化对数增长中位数 12.05%(理论 12.5%,差异来自有限期限的抽样噪声), 是 9.52%, 是 0.17%——三个关键点全部验证。
那既然全 Kelly 增长最快,为什么没人用?因为增长率只描述了 的终点,没描述路径。而路径会疼。
亏损概率:一条指数曲线#
对数财富在杠杆 下是一个带漂移的布朗运动。对这类过程,“财富曾经跌破初始资金的 倍”的概率有闭式解(标准的首达时间结果):
注意指数 :它对 是双曲线式敏感。代几个数进去(,即腰斩):
| Kelly 分数 c | 腰斩概率(理论,无限期) | 20 年模拟 |
|---|---|---|
| 0.25 | 0.8% | 0.6% |
| 0.375 | 4.2% | 4.5% |
| 0.5 | 12.5% | 11.0% |
| 0.75 | 31.5% | 29.1% |
| 1.0(全 Kelly) | 50.0% | 46.8% |
| 1.5 | 70.7% | 71.3% |
| 2.0 | 84.1% | 87.1% |
**全 Kelly 意味着扔硬币决定你会不会腰斩。**这不是尾部风险,是均值事件。模拟值略低于理论值是因为理论是无限期极限、模拟只跑了 20 年——时间越长模拟值越逼近理论。

现在把两条曲线放在一起看,不对称就出来了:
- 从 c=1.0 退到 c=0.5:增长率 12.5% → 9.4%,损失 25%;腰斩概率 50% → 12.5%,下降 75%。
- 从 c=0.5 退到 c=0.25:增长率 9.4% → 5.5%,损失 41%;腰斩概率 12.5% → 0.8%,下降 94%。
每一步减仓,买到的安全都比付出的增长多。这就是”讨价还价”:抛物线的平顶意味着卖方(增长率)要价很低,指数曲线的陡坡意味着买到的商品(安全)很多。半 Kelly 是这场谈判里被引用最多的成交价,但它不神圣——真正的成交价应该由你的回撤约束反解出来。
把回撤约束变成一个方程#
实务中风控给的约束通常长这样:“腰斩概率不超过 10%“。把它代入闭式解:
三个常见约束的解:
| 约束 | 反解出的 c | 实际杠杆 | 保留的增长 |
|---|---|---|---|
| P(亏 50%) ≤ 10% | 0.463 | 1.16 | 71% |
| P(亏 30%) ≤ 10% | 0.268 | 0.67 | 47% |
| P(亏 20%) ≤ 5% | 0.139 | 0.35 | 26% |
第一行就是”半 Kelly 惯例”的定量出处:腰斩概率 10% 的约束反解出 c≈0.46,和拍脑袋的 0.5 几乎重合。但第三行同样重要——如果你的容忍度是”20% 回撤、95% 置信”,那么正确的 Kelly 分数是 0.14,杠杆只有 0.35。很多自认保守用了半 Kelly 的人,实际风险远超他们的真实容忍度。
import numpy as np
def solve_kelly_fraction(D, p_max):
"""给定约束 P(亏掉初始资金的 D) <= p_max,反解 Kelly 分数 c"""
k = np.log(p_max) / np.log(1 - D)
return 2.0 / (k + 1.0)
def growth_retained(c):
return 2*c - c**2 # 相对 g* 的比例
c = solve_kelly_fraction(D=0.5, p_max=0.10)
print(f"c = {c:.3f}, 保留增长 {growth_retained(c):.1%}")
# c = 0.463, 保留增长 71.1%python模拟验证(4000 条路径、每条 5040 个交易日):
rng = np.random.default_rng(42)
mu, sig, dt = 0.10, 0.20, 1/252
f_star = mu / sig**2
def simulate(c, n_paths=4000, T=5040):
f = c * f_star
drift = (f*mu - 0.5*f**2*sig**2) * dt
vol = f * sig * np.sqrt(dt)
logw = np.cumsum(drift + vol*rng.standard_normal((n_paths, T)), axis=1)
loss = 1 - np.exp(logw.min(axis=1)) # 相对初始资金的最深亏损
growth = logw[:, -1] / (T/252) # 年化对数增长
return growth, loss
g, loss = simulate(0.463)
print(f"P(腰斩) = {np.mean(loss > 0.5):.3f}") # ≈ 0.09,贴合约束的 0.10python一条路径看三种人生#
同一组随机冲击(同一个市场),三种仓位:

这条具体路径抽到了偏差的 20 年:全 Kelly 最大回撤 93%,20 年后净值 0.66——跑输了把钱放在床垫下;半 Kelly 回撤 70%,净值 1.52;四分之一 Kelly 回撤 44%,净值 1.44。
注意半 Kelly 和四分之一 Kelly 的终值几乎相同,但路径的疼痛程度完全不同。这条路径想说的是:增长率的抛物线是期望值的世界,你只活在一条路径里。全 Kelly 的 12.5% 期望增长里包含大量”先跌 90% 再涨回来”的路径——期望遍历不了你的人生,这正是状态条件 Kelly 里”遍历性”讨论的另一面。
还有一个容易被忽略的事实:即使是保守仓位,20 年里从峰值的最大回撤中位数也不小。模拟给出 c=0.25 的从峰值最大回撤中位数是 31%,c=0.5 是 55%,c=1.0 是 84%。从峰值回撤(high-water mark 口径)永远比从初始资金的亏损深得多——因为峰值在不断创新高,分母一直在涨。风控条款写的是哪个口径,签字前要看清楚。
讨价还价的完整菜单#
把增长率和腰斩概率画在同一个平面上,就得到这场谈判的完整菜单:

曲线上每一点是一个 c 的选择。菜单上没有免费午餐,但价格表严重非线性:靠近 c=1 的地方,多买一点增长要付出巨额的亏损概率;靠近 c=0.25 的地方,增长很便宜。理性的消费者会停在边际交换率等于自己风险偏好的地方——对大多数人,这个点在 0.25 到 0.5 之间。
顺带说一句:这个框架和 CPPI 回撤控制是互补而非竞争。分数 Kelly 是静态地选一个常数杠杆,让亏损概率有界;CPPI 是动态地随缓冲垫收缩杠杆,硬保证地板不破。前者简单、无路径依赖、不怕跳空造成的”缓冲垫瞬间击穿”失效模式;后者提供硬保证但有 cash-lock 风险。资金量大、调仓成本高时分数 Kelly 更实用。
为什么实务中还要再打个折#
上面的一切都建立在” 和 已知且正确”上。实务中至少有三个理由让你在反解出的 c 上再乘一个小于 1 的系数:
参数误差是乘法性的。Kelly 杠杆 对 线性敏感,而 恰好是金融里最难估的参数(估计误差的标准差 ,20 年日线数据也只能把年化 估到 ±4.5 个百分点)。如果你的 实际只有 6%,你以为的全 Kelly 实际是 1.67 倍 Kelly——落在抛物线右侧的纯亏损区。参数不确定性下,估计出的 系统性地偏向过度杠杆,先打对折是贝叶斯上说得通的(详细论证见 Kelly 组合应用那篇的收缩讨论)。
真实收益有肥尾。 是几何布朗运动的结果。真实日收益的峰度普遍在 5 以上,跳跃会让亏损概率高于闭式解——方向明确:闭式解是下界,不是估计值。
回撤约束经常是软约束叠加硬约束。“腰斩概率 10%“是长期约束,但基金还面临”单年回撤 25% 触发清盘条款”这类短期硬约束。短窗口约束换算出的 c 通常更小,取两者的 min。
工程清单#
- 先算 再谈 c。很多人直接争论”半仓还是满仓”,跳过了 这一步。、 时全 Kelly 是 2.5 倍杠杆——“满仓”()其实已经是 0.4 Kelly,本身就是分数 Kelly。
- 用约束反解 c,而不是先选 c 再看结果。 一行代码,让风险预算从形容词变成数字。
- 口径要锁死:从初始资金的亏损(本文闭式解的口径)和从峰值的回撤(业界报表口径)差别巨大。c=0.5 的腰斩概率 12.5%,但 20 年内从峰值回撤过 50% 的概率是 64%。
- 参数保守化在前,分数化在后。先把 收缩(对半砍或贝叶斯收缩),再在收缩后的 上取分数。两层保险不重复——一层管估计误差,一层管路径疼痛。
局限#
第一,所有闭式解都建立在几何布朗运动上:常数 、,无跳跃、无自相关。真实市场的波动聚集会让回撤比 GBM 更深更集中(这正是 GEV 那篇讨论的 extremal clustering),肥尾修正方向是把 c 再调低。
第二,本文假设单一资产。多资产 Kelly 的最优权重是 ,分数化应该作用在整个向量上还是逐资产讨论,取决于约束写在组合层还是资产层——组合层约束下直接缩放向量即可,结论不变。
第三,、 恒定意味着本文的 c 是一次性决策。若参数随状态切换,正确做法是先按 regime 条件矩重算 ,再对每期的 取同一个分数——分数管路径风险,条件矩管参数时变,两者正交。
第四,增长率-亏损概率的权衡里没有效用函数。如果你有明确的 CRRA 风险厌恶系数 ,最优杠杆直接是 ,分数 Kelly 等价于 ——半 Kelly 就是 的对数效用推广。两套语言描述同一件事,用哪套取决于你的约束是用概率还是用效用表达的。
回到那句讨价还价:全 Kelly 是数学上的最优,分数 Kelly 是活得到长期的最优。抛物线顶上那 25% 的增长率,换不来腰斩概率从 50% 到 12.5% 的下降——这笔交易,闭着眼睛做。