风险平价
直觉
等权组合看似公平,实则资金公平、风险不公平——高波动资产(股票)会主导整个组合的风险。风险平价反其道:让每个资产贡献的风险相等,低波动资产因此获得更大权重。它对收益估计不敏感(只用 ),比均值-方差更稳健,是大型对冲基金的常用框架。
风险贡献
资产 的边际风险贡献与风险贡献:
风险平价要求所有 RC 相等:
「人话」解释:为什么只看风险、不看收益?
均值-方差对期望收益 极其敏感—— 一点小变动,权重就剧烈翻转,而 恰恰是最难估准的。 风险平价完全不用 ,只用协方差 (相对好估),让各资产「风险各占一份」。 代价:它不追求最优,只追求稳健、均衡。
可运行案例:等权 vs 最小方差 vs 风险平价
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from numpy.linalg import inv
df = pd.read_csv('/data/multi_asset_daily.csv', parse_dates=['date']).set_index('date')
assets = ['equity', 'bond', 'commodity', 'reit']
R = np.log(df[assets] / df[assets].shift(1)).dropna()
S = R.cov().values * 252
n = len(assets)
ones = np.ones(n)
def min_var(): return inv(S) @ ones / (ones @ inv(S) @ ones)
def risk_parity(Sigma, iters=5000):
w = np.ones(Sigma.shape[0]) / Sigma.shape[0]
b = np.ones(Sigma.shape[0]) / Sigma.shape[0]
for _ in range(iters):
w_new = b / (Sigma @ w)
w_new /= w_new.sum()
if np.max(np.abs(w_new - w)) < 1e-12: break
w = w_new
return w
def risk_contrib(w):
rc = w * (S @ w) / np.sqrt(w @ S @ w)
return rc / rc.sum()
ew = np.ones(n) / n
mv = min_var()
rp = risk_parity(S)
print("风险贡献(风险平价应≈各 25%):")
print(pd.Series(risk_contrib(rp), index=assets).round(3).to_dict())
W = pd.DataFrame({'等权': ew, '最小方差': mv, '风险平价': rp}, index=assets)
print("\n权重对比:"); print(W.round(3))
W.plot(kind='bar', figsize=(7, 3.6))
plt.ylabel('权重'); plt.title('等权 / 最小方差 / 风险平价')
plt.tight_layout(); plt.show()
小结
- 等权是资金平价,风险平价是风险平价;
- 风险贡献 ,风险平价令其全部相等;
- 只用 、不用 ,对收益估计不敏感,因而稳健。