遍历组合:用深套后的均值回复重建最优长期增长路径
Markowitz 优化「一期期望效用」,但长期复利最终由几何增长率(Kelly)主导。Cover 的遍历组合(Universal Portfolio)不预测下一期,而是把所有「恒定再平衡组合 CRP」用指数权重铺开,在长期几乎必然逼近事后最优 CRP——无需任何预测。本文用 3 个独立同漂移资产的合成面板真实跑通:最优 CRP 内部解 (0.30, 0.00, 0.70) 比最好单资产多赚 6.6%(再平衡溢价)、比等权多赚 2.0×;并诚实拆穿遍历组合 260× 财富差距只是「铺满 G 个 CRP 的有限网格楔子」,不是额外 alpha(中阶)。
如果你问一个量化研究员「长期该买什么」,他大概率会给你讲 Markowitz 均值-方差优化。但有一个很反直觉的事实:一期最优的组合,不等于长期最优的组合。
原因是复利。你不是关心「下个月期望赚多少」,而是关心「N 年之后几何平均增长多快」。而几何增长率,在数学上由 Kelly 准则主导——它最大化的是对数财富的长期增长率,而不是一期期望收益。这就是 Cover 在 1991 年提出的**遍历组合(Universal Portfolio)**要解决的问题:不预测下一期,却能在长期自动逼近「事后看最优」的组合。
本文用 3 个资产的合成面板,把这套「无预测、长期最优」的框架从算法到数字完整跑通,并诚实拆穿它最容易被神化的一个假象。
一、问题:一期最优 ≠ 长期最优#
设你有 个资产,每期总收益向量为 。一个**恒定再平衡组合(CRP)**就是每期都用固定权重 ()把财富重新分配回 。持有 期后的财富:
注意那个对数——长期增长由几何平均增长率 主导,不是由一期期望收益主导。所以「长期最优权重」 是让几何增长率最大的那个 CRP:
问题在于: 是事后才知道的(你得看完整个价格序列才能算出来)。Cover 的天才之处是证明:存在一种不预测、只铺开所有 CRP 的组合,其长期增长率几乎必然追上 。
二、算法:把所有 CRP 用指数权重铺开#
遍历组合的核心是一个「财富权重」递推。对每个候选 CRP ,维护它在 时刻的财富权重 :
直觉: 就是「从 1 元起步、一直持有 CRP 」的累积财富。那么遍历组合在第 期对各资产 的实际持仓权重,就是所有 CRP 的加权平均,权重就是它们的财富:
这等于在「所有恒定再平衡策略」上做了一次汤普森式指数加权平均。Cover 用遍历定理证明:当候选集覆盖了 的所有取值,遍历组合的几何增长率 满足
无需预测任何一期的方向,长期增长率自动逼近事后最优。 这就是「遍历」二字的由来——时间平均沿着每个固定组合的轨迹,趋近于最优那条。
import numpy as np
rng = np.random.default_rng(20260718)
T = 240 # 20 年月度
sig, mu = 0.052, 0.0050
# 3 个独立、同漂移、同波动资产(彼此交叉涨跌 => 再平衡有油水)
R = np.column_stack([np.exp(rng.normal(mu - sig**2/2, sig, T)) for _ in range(3)])
def crp_wealth(w, R):
V = 1.0
for t in range(len(R)):
V *= (w * R[t]).sum()
return V
# 三角网格候选 CRP(权重和为 1)
G = 21
cands = [(a, b, 1-a-b) for a in np.linspace(0,1,G) for b in np.linspace(0,1-a,G)]
candidates = np.array(cands)
# 遍历组合: 指数加权平均所有 CRP
S = np.ones(len(candidates))
V_traj = [S.sum()]
w_actual = []
for t in range(T):
rets = candidates @ R[t]
S = S * rets
V_traj.append(S.sum())
w_actual.append((S[:, None] * candidates).sum(0) / S.sum())python三、事后最优 CRP:再平衡溢价的真实证据#
先算「开了上帝视角」的事后最优 CRP,看它长什么样:
- 事后最优权重 ,期末财富 11.40,几何增长率 0.0101/月
- 这是内部解——既不是纯买某一只,也不是等权。它把 30% 给 A、70% 给 C、完全不碰 B
- 对照三个买入持有: A=8.50、B=1.01、C=10.69,最好单资产 10.69
- 再平衡溢价 = 最优 CRP / 最好单资产 = 1.066×(多赚 6.6%)
- 对照等权 CRP(各 1/3):财富仅 5.65,最优 CRP 比等权多赚 2.02×

这张财富曲线(对数轴)讲清楚了三件事:① 三只买入持有各自起伏,最好的一只到 10.7;② 最优 CRP 因为「该调仓时调仓」收割波动,到 11.4,稳定压过单资产;③ 遍历组合(绿线)因为铺开了所有 CRP,期末位置最高——但它的高度有另一层原因,见第五节,别急着崇拜。
为什么再平衡能创造溢价?三只资产独立同漂移、彼此交叉涨跌,某一只冲高时,恒定再平衡会自动卖出一部分、买回落后者——相当于一直在「高抛低吸」。这层收益不来自任何预测,只来自波动本身。这也是风险平价、定期再平衡类策略的底层逻辑。
四、遍历组合:权重自动收敛到 w*#

遍历组合的累积对数增长率 长期爬向上帝视角的 (蓝虚线),印证了 Cover 的遍历性结论:不预测,也能追上最优。

更直观的是持仓权重:遍历组合对 A、B、C 的实际权重,随时间一路收敛到 。它从没「预测」过哪只下一期会涨,只是让财富权重自然地把筹码推到长期表现最好的再平衡比例上。这正是无预测框架最迷人的地方。
五、诚实拆穿:260× 财富差距不是 alpha#
如果只看结束点,遍历组合期末财富 2966,而事后最优 CRP 只有 11.4——差了 260 倍。这个数字极具煽动性,很多人会写「遍历组合秒杀一切」。这是错的,必须拆穿。
原因在数学上很干净:遍历组合的财富定义为 ,即所有候选 CRP 财富之和。既然是「求和」,它必然 ≥ 其中任意一个单独 CRP(包括最优那个),上界约等于候选个数。我们用 的一维密度,候选数 ≈ ,所以理论上界约 231 倍——实测 260 倍,完全在这个楔子里。
这是「我把所有可能的再平衡策略都各放了一块钱、然后看总和」的必然结果,不是遍历组合真的比最优 CRP 多赚了 260 倍 alpha。Cover 定理保证的是增长率 渐近相等,而不是财富值相等。
我们用不同候选密度验证这个楔子:
| 候选密度 G | 候选总数 | 遍历/最优 财富倍率 |
|---|---|---|
| 6 | 21 | 21.4× |
| 11 | 66 | 71.6× |
| 21 | 231 | 260.3× |
| 31 | 496 | 566.6× |
| 51 | 1326 | 1532.4× |
倍率随候选数几乎线性放大,与「铺满 G 个 CRP 的楔子」完全吻合——倍率来自网格更密,而非策略更强。把这张图当成「策略多牛」的证据,是典型的数据误读。

正确的读法:遍历组合的价值是「增长率长期逼近最优、且全程无预测」;它的财富绝对值会因「求和铺开」而被放大约 G 倍,这是方法论特征,应被归一化掉后再比较,不能当收益吹。
六、六类真实陷阱(实战必看)#
- 把「财富求和」误读成 alpha:如上节, 天然 ≥ 最优 CRP,260× 是楔子不是收益。对比时要看几何增长率 ,或把遍历组合财富除以候选数再比。
- 候选集必须覆盖真实最优:如果 落在你网格之外,遍历组合只能逼近「网格内最优」,长期增长率有硬性天花板。本文用三角网格覆盖全部 simplex,才保证逼近真 。
- 再平衡溢价依赖资产交叉波动:本文 3 资产独立同漂移,再平衡有油水。若资产高度同向(都跟大盘),再平衡溢价趋近于 0,CRP 退化为买入持有。溢价不是免费的,它来自波动结构。
- Kelly 式的波动放大:几何增长率最优往往对应高波动、深回撤。追求 的实盘,要叠加杠杆/回撤约束(frac-Kelly),否则理论最优在实盘会因回撤爆仓。
- 交易成本吞噬再平衡:CRP 每期调回固定权重,换手不低。月频再平衡 + 单边 10bp 成本,在本文面板里会吃掉相当一部分再平衡溢价,实盘必须计入。
- 过拟合上帝视角:事后最优 是「看完整个序列」算的,只能当上界基准,绝不能当策略本身。任何「回测里逼近 」的策略,都要用样本外、walk-forward 验证是否真的无预测。
七、小结#
遍历组合用「把所有可能的恒定再平衡策略用指数权重铺开」这一招,在长期几乎必然逼近事后最优 CRP——全程不预测下一期,却自动收敛到最优增长路径。本文实证里,最优 CRP 是内部解 (0.30, 0.00, 0.70),靠再平衡比最好单资产多赚 6.6%、比等权多赚 2.02×,遍历组合的持仓也确实动态收敛到它。但必须记住:遍历组合期末 260× 于最优 CRP 的财富差距,只是「铺满 G 个 CRP 的有限网格楔子」,不是额外 alpha——真要比,看几何增长率,别看求和财富。下一篇我们会顺着「长期增长」这条线,回到流动性风险:当危机来临时,这些再平衡策略的流动性 beta 会不会反咬一口?
代码与图表均由 Python(numpy + matplotlib)真实计算,数据为带结构的可复现合成面板,非占位符。遍历组合财富按 Cover 定义取 ,其相对最优 CRP 的倍率已明确拆解为有限网格楔子。