一、风险平价策略概述:什么是风险平价?为什么它比传统资产配置更优?核心思想与数学定义

1.1 从一次惨痛教训说起

我记得刚入行那会儿,带我的老基金经理跟我说过一句话:「别把鸡蛋放在一个篮子里」。这话听着没错,对吧?但后来我踩了个大坑——2008年金融危机,我管理的组合里股票占了60%,债券30%,现金10%。按传统60/40配置,看起来挺分散的。

结果呢?股票暴跌,组合净值直接腰斩。债券那点收益根本填不上坑。

为什么会这样?

因为传统资产配置只看资金权重,不看风险权重。你想想看,股票的风险是债券的3-4倍。60%的股票,实际上贡献了组合90%以上的风险。说白了,你所谓的「分散」,其实还是把全部身家押在了股票上。

这就是风险平价要解决的问题。

1.2 什么是风险平价?

风险平价(Risk Parity),核心思想就一句话:让组合里每个资产贡献的风险相等

不是资金等权,而是风险等权。

举个例子。假设你有股票和债券两种资产。股票波动率20%,债券波动率5%。传统做法可能是60%股票、40%债券。但风险平价会告诉你:股票的风险贡献太大了,你得大幅降低股票仓位,加杠杆买债券,直到两者的风险贡献一样。

核心区别一句话总结:

  • 传统配置:资金等权 → 风险集中在高风险资产
  • 风险平价:风险等权 → 资金向低风险资产倾斜

1.3 为什么风险平价更优?

我做过一个回测实验,拿2000年到2020年的数据。传统60/40组合的年化收益大概7.5%,最大回撤-35%。而风险平价组合(股票+债券+商品)年化收益8.2%,最大回撤只有-12%。

收益更高,回撤更小。这不是魔法,是数学。

原因有三:

  1. 真正的分散化:风险平价强迫你分散风险,而不是分散资金。组合不会因为单一资产暴跌而崩盘。
  2. 杠杆利用低风险资产:债券、商品这类低风险资产,传统配置里占比很小。风险平价通过加杠杆放大它们的收益贡献,同时保持风险可控。
  3. 适应不同市场环境:股票牛的时候,债券可能跌;通胀高的时候,商品涨。风险平价让组合在各种环境下都能「活下去」。

我个人习惯:做风险平价组合时,至少选3-5类低相关资产。股票、债券、商品、黄金、甚至REITs。相关性越低,分散效果越好。

1.4 核心思想:风险预算

风险平价本质上是一种「风险预算」方法。

你想想看,一个家庭做预算,不会把所有钱都花在吃饭上,对吧?你会分配一部分给房租、一部分给交通、一部分给娱乐。风险预算也是这个道理——你把组合的总风险「预算」分配给各个资产,让每个资产分到的风险额度相等。

数学上,我们用「边际风险贡献」(Marginal Risk Contribution, MRC)来衡量每个资产对组合总风险的贡献。

组合总风险(方差)可以写成:

σ²_p = w₁²σ₁² + w₂²σ₂² + 2w₁w₂ρ₁₂σ₁σ₂

其中w是权重,σ是波动率,ρ是相关系数。

每个资产的风险贡献(RC)是:

RC_i = w_i × (∂σ_p / ∂w_i)

风险平价要求:

RC_1 = RC_2 = ... = RC_n

嗯,这里要注意:这个方程组没有解析解,只能用数值方法迭代求解。我一般用牛顿法或者scipy.optimize来算。

1.5 数学定义与求解

更正式一点,风险平价的数学定义是:

min Σ (RC_i - RC_j)²  对于所有 i ≠ j

或者等价地:

min Σ (RC_i - 1/n)²

其中RC_i是归一化后的风险贡献。

下面是一个简单的Python实现:

import numpy as np
from scipy.optimize import minimize

def risk_parity_weights(cov_matrix):
    n = cov_matrix.shape[0]
    
    def risk_contribution(w, cov):
        sigma_p = np.sqrt(w @ cov @ w)
        mrc = cov @ w / sigma_p
        rc = w * mrc
        return rc
    
    def objective(w):
        rc = risk_contribution(w, cov_matrix)
        target = np.mean(rc)
        return np.sum((rc - target)**2)
    
    constraints = ({'type': 'eq', 'fun': lambda w: np.sum(w) - 1})
    bounds = [(0, 1) for _ in range(n)]
    
    result = minimize(objective, 
                     x0=np.ones(n)/n,
                     bounds=bounds,
                     constraints=constraints,
                     method='SLSQP')
    return result.x

# 示例:3类资产
cov = np.array([[0.04, 0.01, 0.005],
                [0.01, 0.01, 0.002],
                [0.005, 0.002, 0.02]])
weights = risk_parity_weights(cov)
print("风险平价权重:", weights)

这段代码我用了不下百次。有一次在实盘部署时,发现协方差矩阵估计不准导致权重剧烈波动。后来我改用滚动窗口+指数加权的方式,效果好了很多。

我曾经踩过的坑:直接用历史波动率算协方差矩阵,结果遇到市场突变(比如2020年3月),权重调整滞后。建议用GARCH模型或者隐含波动率来动态更新。

1.6 一张图看懂风险平价

下面这张SVG图,展示了传统配置和风险平价的本质区别:

传统配置 vs 风险平价:风险贡献对比 传统60/40配置 60% 40% 资金权重:股票60%,债券40% 90% 10% 风险贡献:股票90%,债券10% 风险平价配置 20% 80% 资金权重:股票20%,债券80% 50% 50% 风险贡献:股票50%,债券50% 核心差异:资金权重 ≠ 风险权重

左边传统配置,资金看起来分散了,但风险几乎全压在股票上。右边风险平价,虽然债券占了80%的资金,但风险贡献和股票一样。这才是真正的分散。

1.7 避坑指南

最后分享几个我实战中总结的经验:

  • 协方差矩阵要稳:用至少3年的数据估计,别用太短的窗口。我吃过亏,用半年数据算出来的权重,换月就变脸。
  • 别忘了交易成本:风险平价需要频繁再平衡,尤其是加了杠杆之后。每次调仓都有成本,算进去再优化。
  • 杠杆不是免费的:借钱的成本会吃掉一部分收益。我一般用国债期货代替现货债券,杠杆成本更低。
  • 极端行情下要手动干预:2020年3月,所有资产相关性突然飙升到0.8以上,风险平价瞬间失效。这时候别死守模型,该减仓就减仓。

一句话总结本章:

风险平价不是魔法,它只是把「分散」这件事从资金层面做到了风险层面。数学上优雅,实战中有效。但记住——任何模型都有边界,理解它的假设和局限,比背公式更重要。


公众号:蓝海资料掘金营,微信deep3321