一、风险平价策略概述:什么是风险平价?为什么它比传统资产配置更优?核心思想与数学定义
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%。
收益更高,回撤更小。这不是魔法,是数学。
原因有三:
- 真正的分散化:风险平价强迫你分散风险,而不是分散资金。组合不会因为单一资产暴跌而崩盘。
- 杠杆利用低风险资产:债券、商品这类低风险资产,传统配置里占比很小。风险平价通过加杠杆放大它们的收益贡献,同时保持风险可控。
- 适应不同市场环境:股票牛的时候,债券可能跌;通胀高的时候,商品涨。风险平价让组合在各种环境下都能「活下去」。
我个人习惯:做风险平价组合时,至少选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图,展示了传统配置和风险平价的本质区别:
左边传统配置,资金看起来分散了,但风险几乎全压在股票上。右边风险平价,虽然债券占了80%的资金,但风险贡献和股票一样。这才是真正的分散。
1.7 避坑指南
最后分享几个我实战中总结的经验:
- 协方差矩阵要稳:用至少3年的数据估计,别用太短的窗口。我吃过亏,用半年数据算出来的权重,换月就变脸。
- 别忘了交易成本:风险平价需要频繁再平衡,尤其是加了杠杆之后。每次调仓都有成本,算进去再优化。
- 杠杆不是免费的:借钱的成本会吃掉一部分收益。我一般用国债期货代替现货债券,杠杆成本更低。
- 极端行情下要手动干预:2020年3月,所有资产相关性突然飙升到0.8以上,风险平价瞬间失效。这时候别死守模型,该减仓就减仓。
一句话总结本章:
风险平价不是魔法,它只是把「分散」这件事从资金层面做到了风险层面。数学上优雅,实战中有效。但记住——任何模型都有边界,理解它的假设和局限,比背公式更重要。
公众号:蓝海资料掘金营,微信deep3321