halo 的技术博客

返回

「我们把组合波动锁定在 10%」是资产管理行业过去十五年最成功的一句销售话术。它听起来完全是免费的:不改变你选什么资产,只改变你用多大杠杆持有它们,把波动高的时候仓位降下来、波动低的时候加回去。

25 年、4 类资产、无条件波动与相关矩阵由构造给定的受控模拟给出的账本是:波动目标把 63 日滚动波动落在 10%±2pp 的比例从 71.9% 提到 98.6%,Sharpe 却从 0.883 掉到 0.775

而这 −0.108 里,只有 −0.006 是策略本身的,剩下 −0.102 全是换手买单。

风险平价与波动目标的净值与波动控制

左图五条净值曲线,右图是这篇文章真正的主角——波动目标那条红线几乎焊死在 10% 上,而常数杠杆的紫线在 5% 到 20% 之间来回荡。它确实做到了它承诺的事。问题在于,做到这件事值多少钱。

一、先把基准修对:为什么必须有「常数杠杆」这一列#

绝大多数波动目标的宣传材料犯同一个错误:拿 加了杠杆的波动目标组合 去比 不加杠杆的原始组合

这个比较从一开始就是坏的。原始 ERC 组合年化波动只有 5.46%,波动目标组合是 10.27%——你在比较两个风险等级完全不同的东西,无论比出什么结果都没有信息量。

修法是加一条对照腿:把 ERC 组合乘以一个在样本开始时就定死、之后永不改变的常数杠杆,让它的波动也落在 10% 附近。

elif mode.endswith("_fix"):
    # 常数杠杆:仅用 warmup 窗口估计,无前视
    if fixed_lev is None:
        v0 = float(np.std(ret[:cov_lb] @ w) * np.sqrt(TD))
        fixed_lev = min(target_vol / max(v0, 1e-6), lev_cap)
    lev = fixed_lev
python

这条腿跑出来的结果本身就是一次引擎自检:

策略年化收益年化波动Sharpe最大回撤年换手波动命中率
60/40 股债5.17%10.09%0.550−28.98%0.04x51.8%
逆波动率 RP4.85%5.77%0.851−11.56%0.33x2.0%
等风险贡献 ERC4.79%5.46%0.883410−10.72%0.34x1.5%
ERC + 常数杠杆9.25%10.66%0.883410−20.04%0.66x71.9%
ERC + 波动目标 10%7.71%10.27%0.774651−20.31%13.89x98.6%

注意第 3 行和第 4 行的 Sharpe:0.883410 和 0.883410,小数点后六位完全相同

这不是巧合,是必须发生的事。乘一个常数杠杆会同时按同一比例放大超额收益和波动,比值不变。如果这两个数字对不上,说明回测引擎在杠杆处理上有 bug(最常见的是把成本或现金收益算错了)。它们精确相等,说明引擎是干净的。

于是唯一有意义的问题变成:在同样 10.7% 的波动水平上,动态调仓比一次性定死好在哪?

二、公平比较的结果:Sharpe 是个平局#

把成本设为 0,剥掉换手干扰,两条同波动的腿正面对比:

口径(零成本)Sharpe年化波动最大回撤波动命中率
ERC + 常数杠杆0.88839810.658%−20.01%71.9%
ERC + 波动目标0.88280210.273%−17.72%98.6%
差额−0.0056−0.39pp+2.28pp+26.7pp

Sharpe 增量是 −0.0056。 在小数点后第三位。任何声称波动目标能显著提升风险调整后收益的说法,在这个设定下都得不到支持。

但最大回撤改善了 2.28 个百分点,波动命中率从 71.9% 跳到 98.6%。

这才是波动目标真正卖的东西:它不是收益增强工具,是风险预算的执行工具。你付出的不是 Sharpe,是换手;你买到的不是超额收益,是「这个产品的波动会稳定在我承诺的数字上」这个可交付的合同条款。

对一个要向委员会汇报风险预算、要满足 SFDR 或 UCITS 波动上限、要让客户不因为某个季度突然的 20% 波动而赎回的机构来说,这个交换可能完全值得。对一个只关心长期复合收益率的个人投资者来说,它大概率不值。

这两个人问的是不同的问题,而波动目标只回答其中一个。

三、机制拆解:钱花在哪,风险降在哪#

杠杆路径、风险贡献与同波动对照的回撤

中间那张图解释了为什么要先做风险平价再谈波动目标。60/40 组合里股票贡献了 98.8% 的风险,债券只有 1.2%——所谓「60% 股票 40% 债券」的资产权重,在风险维度上其实是「99% 股票」。ERC 把四类资产的风险贡献拉平到 24.9% / 25.3% / 25.3% / 24.6%,对应的资产权重是股票 12.7%、债券 53.2%、商品 10.9%、信用 23.1%。

债券占了一半以上的钱,却只承担四分之一的风险。这是风险平价必须加杠杆才有意义的根本原因:不加杠杆的风险平价组合波动只有 5.46%,收益 4.79%,对大多数机构来说太低了

左图是杠杆路径,也是这篇文章第一个反直觉的地方。ERC 组合的最大回撤发生在第 1473 到 1682 天(0.83 年),而波动目标在这段区间的平均杠杆是 1.890x,全样本均值是 1.941x——只降低了 2.6%

在最需要它降杠杆的那段时间,它几乎什么都没做。

原因在下一节。

四、两条安慰剂:波动目标的收益不来自波动可预测性#

时间置换、同方差世界与多路径分布

波动目标的理论依据只有一条:波动是可预测的(波动聚集,高波动后面跟着高波动)。如果这个前提不成立,动态调仓就退化成噪声交易。

所以设计两个真值已知的对照世界:

安慰剂 A —— 时间置换。 把 25 年的日收益随机重排。这保留了每个资产的边际分布、保留了同期的四资产相关结构,但彻底销毁了时间维度上的波动聚集

安慰剂 B —— 同方差世界。 直接关掉 GARCH,用恒定方差生成收益。这个世界里波动完全不可预测,波动目标的真实增益由构造精确为 0

世界ERC Sharpe波动目标 Sharpe增益
真实世界(GARCH 聚集)0.88340.7747−0.1088
安慰剂 A:时间置换0.88950.7619−0.1276
安慰剂 B:同方差0.33040.2341−0.0964

三个数字几乎一样。

中间那张 |收益| 自相关图证明置换确实生效了——真实世界的红线在滞后 40 天时仍有显著正自相关,置换和同方差世界的线贴着 0。波动聚集在真实世界里是真的存在的,我没有把它意外抹掉。

但即使存在,波动目标也没能从中赚到钱。

原因是预测质量。把 EWMA 预测值和未来 21 日实际已实现波动对比,相关系数 0.4225,R² 只有 0.1785(n=6029)。你知道波动大致的方向,但不知道它的幅度,而杠杆是按幅度算的。GARCH 持续性 α+β=0.98 已经是相当高的设定了,预测质量仍然只有这个水平。

这也解释了上一节的谜题:危机期间杠杆只降 2.6%,因为 EWMA 是滞后的——等它认识到波动上来了,跌已经跌完了

右图是 40 条独立路径的增益分布:均值 −0.084,中位 −0.090,胜率只有 15%(5% 分位 −0.173,95% 分位 +0.028)。但同一批路径里,回撤改善比例是 100%——40 条路径里没有一条的波动目标版本回撤更差。

这个组合非常干净地表达了整件事:Sharpe 上它稳定地小输,回撤上它稳定地小赢。

五、成本与参数:真正的悬崖在哪#

成本扫描、预测窗口与杠杆上限

成本扫描是全文最刺眼的一张:没有盈亏平衡点,全区间为负。 即使成本设为 0,增益仍是 −0.0056;成本 8bp 时 −0.109,20bp 时 −0.264,50bp 时 −0.650。

波动目标在这个设定下从来就没赚过 Sharpe,成本只是让亏损从「可忽略」变成「显著」。

杠杆上限扫描藏着一个非单调的悬崖:

杠杆上限Sharpe年化收益最大回撤年换手
1.0x0.88344.79%−10.72%0.34x
1.5x0.87797.00%−15.46%1.44x
2.0x0.80477.61%−17.86%8.28x
3.0x0.77477.71%−20.31%13.89x
6.0x0.77277.71%−20.52%14.64x

从 1.5x 到 2.0x,年化收益只多了 0.61pp,换手却从 1.44 倍暴涨到 8.28 倍(5.75 倍),Sharpe 掉了 0.073。

原因是约束绑定:上限 1.5x 时杠杆绝大部分时间贴着天花板(均值 1.488,几乎等于上限),天花板本身起到了平滑作用,策略退化成了常数杠杆。一旦放开到 2.0x,杠杆开始真正浮动,换手就炸了。

而 3.0x 到 6.0x 之间几乎没有区别(Sharpe 0.7747 vs 0.7727,换手 13.89 vs 14.64)——上限设到 3x 以上就是摆设,因为触及它的时间已经很少了。

目标波动扫描则显示这个旋钮基本上只是在风险-收益前沿上滑动:

目标波动与已实现波动

左图里 4% 到 12% 的点几乎精确落在 45° 线上(目标 10% → 实现 10.27%),说明控制是有效的。但 15% 和 20% 明显偏离——目标 20% 时实际只跑出 16.17%,因为平均杠杆已经顶到 2.98x,撞上了 3.0x 的上限

右图更重要:所有点几乎落在一条直线上。改目标波动不会让你得到更好的风险调整收益,只是决定你想站在这条线的哪个位置。

六、真正的修复:无交易带#

既然亏损几乎全部来自换手,那修法就应该直接打在换手上。

无交易带对换手与波动控制的影响

无交易带的逻辑很简单:只有当目标杠杆和当前杠杆的相对偏离超过某个阈值,才真的去调仓

lev_tgt = min(target_vol / max(fcst, 1e-6), lev_cap)
# 无交易带:目标杠杆偏离当前杠杆不足 band 时不动
if lev_band > 0 and lev_prev > 0 and abs(lev_tgt / lev_prev - 1.0) < lev_band:
    lev = lev_prev
else:
    lev = lev_tgt
python
带宽Sharpe(8bp)年换手已实现波动波动命中率
0%(每日调)0.774713.89x10.27%98.6%
5%0.80789.22x10.19%98.7%
15%0.86544.73x10.18%97.0%
30%0.87122.57x10.62%83.1%
50%0.89000.92x11.54%53.2%

15% 带宽是最好的实用点:换手砍掉 66%(13.89 → 4.73),Sharpe 从 0.7747 回到 0.8654,而波动命中率只从 98.6% 掉到 97.0%。你用 1.6 个百分点的控制精度,换回了 0.09 的 Sharpe。

50% 带宽的 Sharpe 最高(0.8900,甚至超过了 ERC 基准),但它已经不叫波动目标了——命中率只剩 53.2%,年换手 0.92 倍,本质上就是一个偶尔调一次的准常数杠杆策略。它赢在 Sharpe,但它没有兑现产品承诺。

右图的两条线把这个取舍画得很清楚:换手(对数轴)随带宽陡降,命中率在 15% 以内几乎不动,过了 20% 才开始塌。免费的午餐在 0% 到 15% 之间,之后每一口都要付钱。

预测窗口扫描给出同方向的结论:半衰期从 5 日拉到 250 日,含成本 Sharpe 从 0.658 单调升到 0.876,换手从 29.4 降到 1.29。但零成本 Sharpe 在整个区间几乎是平的(0.8786 到 0.8866,极差 0.008)——反应快慢本身对策略质量几乎没有影响,全部差异都来自你为反应速度付了多少手续费

七、这套结论的边界在哪#

这是一个受控模拟,不是历史回测。 每一个百分点的成因由构造已知,这是它的优势(可以做真值安慰剂),也是它的边界。真实世界里有三件事这里没建模:

第一,尾部与跳跃。 这里用的是 GARCH + 正态冲击,没有跳跃过程。真实危机里价格会跳空,波动目标策略在跳空时既来不及降杠杆、又会在跳空后的高波动期被迫在低点减仓——这是它最经常被批评的地方(「波动目标是系统性的追涨杀跌」)。本文的结论低估了这个成本。

第二,相关矩阵是固定的。 真实危机中相关性会向 1 收敛,风险平价的分散化效果恰好在最需要的时候消失。本文的 ERC 组合在整个 25 年里都享受着股债 −0.15 的稳定负相关,这是一个乐观假设。

第三,融资成本设为 0。 平均 1.94x 杠杆意味着你要借将近一倍的钱。真实融资利差在 50–150bp 之间,按 0.94 倍的净借款算,这会直接从年化收益里扣掉 47–141bp。9.25% 的常数杠杆收益变成 7.8%–8.8%,而波动目标因为杠杆在波动,融资成本还会更不稳定。本文所有加杠杆的腿的收益都是高估的。

另外,25 年 6300 个交易日听起来很多,但从 Sharpe 估计的角度只有一个样本路径。40 条独立路径的增益标准差是 0.065,这意味着单条路径上 ±0.13 的 Sharpe 差异都在两倍标准差以内——如果你在真实数据上跑出「波动目标提升了 0.1 Sharpe」,那个数字大概率是噪声。

八、实践 Checklist#

如果你要做波动目标,这几条是从上面的数字里直接推出来的:

  1. 先建常数杠杆对照腿。 没有它,你的所有比较都是在比风险等级,不是在比策略质量。检查两条腿的 Sharpe 是否精确相等——不等就是引擎有 bug。

  2. 默认加 10%–15% 的无交易带。 这是全文性价比最高的一条:换手降 66%,控制精度只掉 1.6pp。

  3. 杠杆上限别设太高。 3x 以上是摆设。真正的行为分水岭在 1.5x 和 2.0x 之间,因为上限一旦不绑定,换手会跳 5.75 倍。

  4. 把预测 R² 报出来。 如果你的波动预测 R² 低于 0.2(本文 0.1785),就不要指望动态调仓能赚 Sharpe,它只能帮你控制波动。

  5. 明确你在为谁做。 需要交付波动承诺的产品 → 值得。追求长期复合收益的自有资金 → 常数杠杆更省事也更便宜。

  6. 把融资成本建进去。 平均 1.94x 杠杆下,50bp 的融资利差就吃掉 47bp 年化收益,比 8bp 的交易成本影响大得多。

最后一句:波动目标是一个优秀的风险控制工具,和一个平庸的收益增强工具。行业把它当后者卖,而它只在前者上兑现。知道自己买的是哪一个,比调参重要得多。

波动率目标风险平价:把组合波动锁在固定区间
https://blog.halo26812.eu.org/blog/risk-parity-vol-targeting
Author halo
Published at 2026年8月7日
版权声明 CC BY-NC-SA 4.0
Comment seems to stuck. Try to refresh?✨