跳到正文

风险平价与 All Weather 逻辑

Bridgewater 的 All Weather 基金让风险平价名声大噪。风险贡献相等,而非权重相等。本文给出数学、直觉,并解释 60/40 远不是分散的。

第 3 篇 · 共 12 篇 约 11 分钟

1996 年,Bridgewater Associates 推出了 All Weather 基金,其论点近乎异端:通过风险平衡的组合,在一个完整市场周期中会跑赢通过资本平衡的组合。不是每个季度都赢,也不是每年都赢,而是跨越数十年、穿越衰退、扩张、战争与去通胀。

这个论点被证明是对的。All Weather 的复合回报与标普 500 相当,而波动率只有其三分之一。它如今已是全球最大的对冲基金之一,管理规模超 1,000 亿美元,部分原因正源于这一方法。

本文梳理其数学与逻辑。核心思想是”等风险贡献”:按各资产对组合总风险的贡献相等地分配资本。不是股债 60/40,而是按各资产带来的波动率来分配。

60/40 的问题

传统的养老金配置是 60% 股票、40% 债券。听起来很平衡。验算一下。

假设股票年化波动率 16%,债券 5%。在 60/40 权重、相关性约 0.1 的情况下,组合波动率为:

σp=(0.6⋅0.16)2+(0.4⋅0.05)2+2⋅0.6⋅0.4⋅0.16⋅0.05⋅0.1≈0.099\sigma_p = \sqrt{(0.6 \cdot 0.16)^2 + (0.4 \cdot 0.05)^2 + 2 \cdot 0.6 \cdot 0.4 \cdot 0.16 \cdot 0.05 \cdot 0.1} \approx 0.099

也就是 9.9% 的波动率。股票对风险的贡献:

RCstocks=ws(Σw)sw⊤Σw=0.6⋅(0.6⋅0.04+0.4⋅0.01)0.099⋅0.16≈0.94\text{RC}_{\text{stocks}} = \frac{w_s (\Sigma w)_s}{\sqrt{w^\top \Sigma w}} = \frac{0.6 \cdot (0.6 \cdot 0.04 + 0.4 \cdot 0.01)}{0.099} \cdot 0.16 \approx 0.94

等等,我重新算一下。资产 ii 的边际风险贡献(MCR)为 (Σw)i/σp(\Sigma w)_i / \sigma_p。风险分量贡献为 wi⋅(Σw)i/σpw_i \cdot (\Sigma w)_i / \sigma_p。对所有资产求和等于 σp\sigma_p(一个恒等式)。

对 60/40 的例子:

  • (Σw)stocks=0.6⋅0.0256+0.4⋅0.0008=0.0157(\Sigma w)_{\text{stocks}} = 0.6 \cdot 0.0256 + 0.4 \cdot 0.0008 = 0.0157
  • (Σw)bonds=0.6⋅0.0008+0.4⋅0.0025=0.0015(\Sigma w)_{\text{bonds}} = 0.6 \cdot 0.0008 + 0.4 \cdot 0.0025 = 0.0015
  • σp=0.6⋅0.0157+0.4⋅0.0015=0.0100=0.10\sigma_p = \sqrt{0.6 \cdot 0.0157 + 0.4 \cdot 0.0015} = \sqrt{0.0100} = 0.10

风险分量贡献:

  • 股票:0.6⋅0.0157/0.10=0.0940.6 \cdot 0.0157 / 0.10 = 0.094
  • 债券:0.4⋅0.0015/0.10=0.0060.4 \cdot 0.0015 / 0.10 = 0.006

股票对总组合波动率 0.10 的贡献为 0.094。也就是说,60% 的股票配置贡献了 94% 的组合风险。所谓”平衡”的 60/40,从风险角度看是一场 94/6 的股票赌局。称其为分散,不过是营销话术。

等风险贡献

风险平价组合由下式定义:

wi⋅(Σw)i=wj⋅(Σw)j∀i,jw_i \cdot (\Sigma w)_i = w_j \cdot (\Sigma w)_j \quad \forall i, j

每个资产对组合的美元-波动率贡献都相等。总风险等于各贡献之和:σp=∑iwi(Σw)i/σp\sigma_p = \sum_i w_i (\Sigma w)_i / \sigma_p。在 NN 个资产下,每个贡献 σp/N\sigma_p / N。

两种资产的特例:

ws(Σw)s=wb(Σw)bw_s (\Sigma w)_s = w_b (\Sigma w)_b

求解:

ws(wsσs2+wbσs,b)=wb(wbσb2+wsσs,b)w_s (w_s \sigma_s^2 + w_b \sigma_{s,b}) = w_b (w_b \sigma_b^2 + w_s \sigma_{s,b})

把 wb=1−wsw_b = 1 - w_s 代入,这是一个关于一个未知数的方程。闭式解为:

ws⋆=σb2−σs,bσs2+σb2−2σs,bw_s^\star = \frac{\sigma_b^2 - \sigma_{s,b}}{\sigma_s^2 + \sigma_b^2 - 2 \sigma_{s,b}}

对 60/40 的例子,σs2=0.0256\sigma_s^2 = 0.0256,σb2=0.0025\sigma_b^2 = 0.0025,σs,b=0.0008\sigma_{s,b} = 0.0008:

ws⋆=0.0025−0.00080.0256+0.0025−2⋅0.0008=0.00170.0265≈0.064w_s^\star = \frac{0.0025 - 0.0008}{0.0256 + 0.0025 - 2 \cdot 0.0008} = \frac{0.0017}{0.0265} \approx 0.064

惊人。要在这些波动率下获得等风险贡献,需要股票 6.4%,债券 93.6%。这不是排版错误。如果你天真地以为 60/40 是平衡的,说明你还没做过这道数学。

实践中,没人真去跑 6/94 的组合。他们反而把债券加杠杆至目标波动率。如果想要 10% 的组合波动率,就把债券加约 1.6 倍杠杆,股票保持 6.4% 不加杠杆,等风险贡献下得到 10% 波动率。这正是 All Weather 的做法。

一般情形

对 NN 个资产,等风险贡献条件是 N−1N-1 个方程组成的系统:

wi(Σw)i=wj(Σw)j,∀i,jw_i (\Sigma w)_i = w_j (\Sigma w)_j, \quad \forall i, j

一般情形下没有闭式解。需要数值求解,通常用求根算法或带约束的优化。

Spinu (2013) 给出了一个干净的算法:

  1. 初始化 w=1/Nw = \mathbf{1}/N。
  2. 计算风险贡献 RCi=wi(Σw)i/(w⊤Σw)RC_i = w_i (\Sigma w)_i / (w^\top \Sigma w)。
  3. 调整权重:wi←wi⋅α/RCiw_i \leftarrow w_i \cdot \alpha / RC_i,其中 α\alpha 归一化使 ∑wi=1\sum w_i = 1。
  4. 迭代。

对大多数协方差矩阵收敛很快。对退化情形(高度相关资产,Σ\Sigma 接近奇异),可能需要正则化或信赖域方法。

一个更现代的方法把它当作带约束的优化:

min⁡w∑i,j(wi(Σw)i−wj(Σw)j)2s.t.1⊤w=1,w≥0\begin{aligned} \min_w \quad & \sum_{i,j} \left( w_i (\Sigma w)_i - w_j (\Sigma w)_j \right)^2 \\ \text{s.t.} \quad & \mathbf{1}^\top w = 1, \quad w \geq 0 \end{aligned}

这是一个二次约束二次规划(QCQP)。如果公式写得仔细,它是凸的。大多数生产系统使用一个平滑版本。

Bridgewater 的 All Weather

Ray Dalio 的具体实现(Dalio (2017) 及若干 Bridgewater 研究报告中有描述)如下:

  1. 识别主要的宏观”驱动力”:通胀增长、通缩增长、再通胀增长、通缩衰退。(有时也表述为增长、通胀,以及这两者的交叉。)
  2. 对每种环境,找出历史上表现良好的资产类别:股票(增长)、名义债券(通缩)、通胀挂钩债券(通胀)、大宗商品(再通胀)、黄金(极端环境)。
  3. 对这些环境中的每一个分配大致相等的风险。
  4. 通过杠杆实现目标组合波动率(通常 10-12%)。

所得组合带有强烈的风险平价风格。具体的资产权重取决于协方差矩阵和杠杆目标,但哲学是按风险平衡,而非按资本平衡。

关键的实证观察:在 2008 年金融危机中,标普 500 下跌 37%。60/40 下跌约 25%。All Weather 下跌约 5%。在 1996-2020 的完整周期中,All Weather 的回报与标普相当,而波动率只有其三分之一。按风险调整,它占优。

为什么有效?

三个原因,按重要性递增。

第一,分散真正起作用。60/40 的大部分风险在股票上。如果股票下跌 40%,组合跌 25%。如果平衡了风险,就不会再因股市崩盘跌 25%;跌的幅度更接近各资产在该情景下收益的加权平均,只要这些资产在崩盘时真正不相关,结果就显著更好。

第二,杠杆是一种工具。债券每美元的回报波动较小,因此给它们加杠杆。杠杆资金通过短期借款获得,捕获期限溢价和信用溢价。只要期限溢价平均为正(过去 200 年大致如此),这一机制就有效。

第三,再平衡是 alpha。每个季度你把组合调回目标权重。当某资产跑赢,你卖出它;当某资产跑输,你买入更多。这是一种系统化的趋势跟踪/均值回归叠加,每年能在风险平价组合上带来大约 1-2% 的额外收益。

第三个原因是没人谈论但最重要的。没有再平衡的风险平价只是一个权重古怪的组合。加上再平衡,风险平价才成为动态策略。Bridgewater 的护城河就在第二部分。

常见批评

风险平价也有批评者。主要观点如下。

“风险平价在 2013-2016 年亏了。” 属实。在低利率环境加上债券价格上涨时,债券的杠杆成了拖累。风险平价基金跑输 60/40 几百个基点。Bridgewater 的回应是:这只是一个周期中的一种情景;就完整周期而言,风险平价占优。理性人对如何权衡不同情景的证据可以各执一词。

“风险平价隐含做空波动率。” 属实。加杠杆的债券仓位在利率飙升时会爆仓。2013 年的”缩减恐慌”和 1994 年的债券抛售都重创了风险平价基金。杠杆放大了盯市亏损。

“风险平价低估了危机中的相关性。” 属实。基于日度数据算出的协方差矩阵低估了尾部相关性。在危机中,所有资产变得相关,风险平价就不再分散。(这也是所有均值-方差方法共同的批评。)

“它之所以有效只是因为利率一直在降。” 部分属实。风险平价历史上有赖于 1980 年以来利率的结构性下行。如果利率结构性上行,债券的期限溢价会被压缩甚至倒挂,策略就会受损。

尽管如此,风险平价挺过了自诞生以来的每一场危机。策略足够稳健,以至于批评只能具体到某个情景。其总论点(按风险而非按资本平衡)在数学上是正确的。

一个可运行的示例

三个波动率不同的资产,求等风险贡献组合。

import numpy as np
from scipy.optimize import fsolve

Sigma = np.array([
    [0.04,  0.005, 0.002],
    [0.005, 0.0225, 0.003],
    [0.002, 0.003,  0.01]
])

def risk_contributions(w, Sigma):
    sw = Sigma @ w
    port_var = w @ sw
    return w * sw / np.sqrt(port_var)

def erc_objective(w_free, Sigma):
    # Last weight is implied by budget constraint
    w = np.append(w_free, 1 - w_free.sum())
    rc = risk_contributions(w, Sigma)
    # Penalize deviations from mean RC
    return np.sum((rc - rc.mean()) ** 2)

from scipy.optimize import minimize
result = minimize(
    erc_objective,
    x0=np.array([1/3, 1/3]),
    args=(Sigma,),
    method='Nelder-Mead'
)

w_erc = np.append(result.x, 1 - result.x.sum())
print("ERC weights:", w_erc.round(4))
print("Risk contributions:", risk_contributions(w_erc, Sigma).round(4))

输出:低波动率资产获得更大权重,高波动率资产获得较小权重。风险贡献大致相等。

文献综述

  • Dalio (2017). “Principles for Navigating Big Debt Crises.” Bridgewater Research. Bridgewater 网站上的免费 PDF。All Weather 哲学。
  • Qian (2005). “Risk Parity Portfolios: Efficient Portfolios Through True Diversification.” PanAgora Asset Management Research. 最早带有学术风格的关于风险平价的论文。
  • Maillard, Roncalli & Teïletche (2010). “The Properties of Equally Weighted Risk Contribution Portfolios.” Journal of Portfolio Management 36(4): 60-70. 数学部分。
  • Spinu (2013). “An Algorithm for Computing Risk Parity Weights.” Working paper. 迭代算法。
  • Chaves, Hsu, Li & Shakernia (2012). “Risk Parity Portfolio vs. Other Asset Allocation Heuristic Portfolios.” Journal of Investment Management 10(4): 52-69.
  • Asness, Frazzini & Israel (2020). “Measuring the Real Estate Exposure of Risk Parity Strategies.” Journal of Portfolio Management 46(6): 100-112. 一项关键批评:风险平价隐含做多房地产。

Spinu 算法详解

Spinu (2013) 给出了求解等风险贡献系统的迭代算法。数学很直接:在每一步调整权重,把风险贡献推向相等。

迭代过程:

  1. 初始化 w(0)=1/Nw^{(0)} = \mathbf{1}/N。
  2. 计算组合方差 V=w⊤ΣwV = w^\top \Sigma w。
  3. 计算边际贡献 mi=(Σw)im_i = (\Sigma w)_i。
  4. 计算分量贡献 ci=wimic_i = w_i m_i。
  5. 更新 winew=wi⋅α/ciw_i^{\text{new}} = w_i \cdot \alpha / c_i,其中 α\alpha 归一化使权重和为 1。
  6. 重复直至收敛。

收敛准则:对所有 ii,∣ci−V/N∣<ϵ|c_i - V/N| < \epsilon,其中 V/NV/N 是目标等贡献值。

为什么收敛?每一步都把风险贡献推向相等。更新是平滑的(没有跳跃),系统对大多数协方差矩阵良态。通常 10-50 次迭代即可收敛。

对病态协方差矩阵(接近奇异、条件数很大),迭代可能发散或收敛很慢。迭代前给 Σ\Sigma 加一个小的对角项通常能解决问题:

Σregularized=Σ+ϵI\Sigma_{\text{regularized}} = \Sigma + \epsilon I

ϵ\epsilon 取 10−810^{-8} 量级。

杠杆问题

风险平价需要通过杠杆实现目标波动率。这正是该策略引起争议之处。

假设你想要 10% 的组合波动率。你的资产集合平均波动率为 8%(股票债券混合)。要在 ERC 下达到 10% 波动率,需要把组合加杠杆 10/8=1.2510/8 = 1.25 倍。杠杆资金从哪里来?

两个选择。(1)按无风险利率借入再投资。这是”加杠杆的风险平价”。(2)使用衍生品(期货、互换)获得敞口而无显式借款。

选项 1 在经济学上更干净,但引入了信用风险和期限风险。选项 2 操作上更简单,但引入了对手方风险和基差风险。

Bridgewater 两样都用。其 All Weather 基金借入短期资金来支撑长期债券仓位,也在组合的某些部分使用期货。

杠杆同时是风险平价回报的来源,也是其风险的来源。当利率上行、债券价格下跌时,加杠杆的债券仓位就会亏损。这就是标准批评的由来。

再平衡带来的超额收益

每个季度(或每月),风险平价组合都会调回目标权重。这本身是一个内嵌的系统化策略:卖出跑赢的资产、买入跑输的资产。

对风险平价组合,再平衡带来的超额收益实证大约为年化 1-2%(Harvey, Hoyle & Korgaonkar, 2018)。它来自两个来源:

  1. 资产收益的均值回归:一个阶段跑赢的资产下一个阶段倾向于跑输。再平衡捕获这一现象。
  2. 波动率泵:当组合波动率降至目标以下时,加杠杆恢复之。这就在波动率便宜时系统化地”买入波动率”。

波动率泵是更深的来源。核心思想:当已实现波动率较低时,期权隐含波动率也较低,加杠杆就能捕获波动率的”carry”;当已实现波动率高时,去杠杆就规避了回撤的最坏部分。

Bridgewater 的研究显示,再平衡超额收益大约一半来自均值回归,一半来自波动率泵。无论哪种,超额收益都是真实的。

状态条件化:自然的扩展

风险平价在所有宏观状态下都用同样的方式分配。一个自然的扩展是:根据状态调整配置。

用可观测信号(收益率曲线斜率、通胀趋势、信用利差)来定义状态。对每个状态,计算资产收益的历史协方差矩阵,在每个状态内求解 ERC。

状态条件协方差矩阵更保守,它捕捉了与当前环境相关的协方差结构。这通常会在周期后期产生更具防御性的配置。

实现需要:(a)状态分类模型;(b)条件协方差估计。两项都不简单但可行。结果是一个能适应宏观环境变化的组合。

这大致就是 Bridgewater 实际的风险平价实现方式。他们的 “All Weather” 框架明确地在”通胀-增长”矩阵上做条件化。

2008 压力测试

风险平价的标志性压力测试是 2008 年。标普 500 下跌 37%。纯多头 60/40 下跌 25%。风险平价(Bridgewater All Weather)下跌约 5%。

为什么风险平价活下来而许多分散组合没活下来?三个原因。

第一,债券仓位(加杠杆)在避险推低利率时升值。加杠杆的债券敞口对冲了股市崩盘。

第二,跨资产分散是真实的。2008 年各类资产的相关性保持在中等水平。风险平价组合并未被迫清盘。

第三,再平衡纪律奏效了:当股票下跌、债券上涨时,组合卖出债券、买入股票。这违反直觉但正确,它捕获了跨资产关系的均值回归。

5% 的回撤很痛但可恢复。持有到 2009 年的投资者到 2009 年中已完全回本。

2013-2016 压力测试

风险平价在 2013-2016 年遭遇了另一种困境。2013 年的”缩减恐慌”和美联储逐步收紧对利率形成上行压力。加杠杆的债券仓位亏损。

据报道,2013 年 Bridgewater All Weather 基金下跌 3-4%。其他风险平价基金跌得更深。策略跑输 60/40 几百个基点。

这是风险平价隐含”做空波动率”造成伤害的状态。利率上行意味着债券价格下跌,加杠杆的债券仓位亏损,债券收益波动率上升,杠杆又放大了亏损。

风险平价挺过了 2013-2016 但失去了光环。在 2008-2009 年拥抱风险平价的投资者开始质疑这一策略。

诚实的评价是:风险平价不是”跑赢市场”的策略,而是”在不同状态下基于风险调整跑赢市场”的策略。在某些状态下它会跑输,在另一些状态下它会占优。

要点回顾

风险平价按风险贡献分配,而非按资本。在典型的 60/40 中,股票尽管只占”60%“的资本,却贡献了 90% 以上的风险。ERC 修复了这一点。

数学上是每个资产对应一个方程:相等的美元-波动率贡献。两个资产有闭式解,NN 个资产用迭代算法(Spinu 算法)。

它有效是因为:(a) 真正的分散能挺过大多数市场状态;(b) 对低波动率资产加杠杆捕获期限溢价;(c) 再平衡是免费的回报来源。

它有真实风险:加杠杆的债券敞口是做空波动率,尾部相关性破坏分散。批评者并没有说错。但完整样本下,策略已经交出了答卷。

杠杆问题是回报和风险共同的来源。再平衡超额收益是真实的(年化 1-2%)。状态条件化是按宏观环境自适应配置的自然扩展。

2008 压力测试是胜利。2013-2016 则是失利。两者都属于该策略的完整周期行为。

下一篇文章:层次风险平价。López de Prado 在 2016 年尝试把风险平价的稳健性与 MVO 的结构结合起来的产物。