Skip to content

6.2 风险平价与分散度

概念详解

风险平价(Risk Parity)是一种不依赖预期收益的组合构建方法。它的核心思想是:让组合中每个资产(或每个风险来源)对总风险的贡献度相等,从而实现真正意义上的"风险分散化"。

传统等权重组合的问题在于:虽然资金分配均匀,但风险分配可能极度不均衡。一个60%股票/40%债券的组合,其90%以上的波动风险可能都来自股票部分——这根本不是真正的"分散化"。

风险平价解决了这个问题:组合中股票的风险预算被大幅削减(通过降杠杆或低配),债券的风险预算被大幅提升(通过加杠杆或超配),最终使两类资产的风险贡献相等。

名词解释:风险平价

组合中每个资产对总风险的贡献度相等,不依赖预期收益,较等权重更稳健。桥水全天候策略即基于此理念。风险平价的数学基础是边际风险贡献(MRC = Marginal Risk Contribution):MRCi=σpwi=(Σw)iσp,组合风险贡献 RCi=wi×MRCi。风险平价要求 RCi=RCj 对所有 i,j

名词解释:边际风险贡献(MRC)

资产权重增加1单位时组合风险的变化量。MRCi=(Σw)i/σp。在最优解中,所有资产的MRC应该相等(否则可以通过调仓降低风险)。

名词解释:桥水全天候策略

由桥水基金Ray Dalio创立的经典风险平价策略。将宏观经济环境按增长率超/低于预期、通胀超/低于预期划分为四种状态,每种状态配置不同资产(股票、债券、商品、通胀保护债券等),最终实现跨经济环境的稳健表现。

风险平价 vs 其他方法的比较

方法需要预期收益分散化效果对输入的敏感度杠杆需求
等权重(1/N)资本分散,风险不分散
最小方差
MVO切线极高无(默认)
风险平价高(风险维度)通常需要
最大分散度极高

数学原理

风险贡献分解

组合波动率 σp=wTΣw 可以分解为各资产的风险贡献之和:

σp=i=1Nwi(Σw)iσp=i=1NRCi

其中 RCi=wi(Σw)i/σp 是资产 i 对组合总风险的贡献。

风险平价的优化问题

风险平价可以通过求解以下最小化问题实现:

minwi=1Nj=1N(wi(Σw)iwj(Σw)j)2s.t.wi=1,wi0

解析解(特殊情况)

在资产间相关性全部相等的假设下,风险平价的解析解为:

wi=1/σij=1N1/σj

这个"波动率倒数加权"是最简单的风险平价近似。注意它忽略了相关性结构,只适用于相关性较低且均匀的情况。

Python实战

📌 案例:简单风险平价迭代

PYTHON4 行 · 93 B
📄此处有展示代码4 行 · 93 B展开 ▼
python
cov = returns.cov()
vols = np.sqrt(np.diag(cov))
weights = 1 / vols
weights /= weights.sum()
点击展开可浏览运行结果
📘 本段为公式演示片段(伪代码占位符,无完整上下文)

📌 案例:完整风险平价优化

PYTHON67 行 · 2.0 KB
📄此处有展示代码67 行 · 2.0 KB展开 ▼
python
import numpy as np
from scipy.optimize import minimize

def risk_parity_weights(Sigma):
    """
    风险平价:使每个资产的风险贡献相等

    Parameters:
        Sigma: 协方差矩阵 (N, N)
    Returns:
        weights: 风险平价权重
    """
    n = Sigma.shape[0]

    def risk_contributions(w):
        """计算各资产的风险贡献"""
        port_vol = np.sqrt(w @ Sigma @ w)
        marginal_contrib = Sigma @ w  # 边际风险贡献
        risk_contrib = w * marginal_contrib / port_vol  # 风险贡献
        return risk_contrib

    def objective(w):
        """目标函数:最小化风险贡献的方差"""
        rc = risk_contributions(w)
        target_rc = 1.0 / n  # 目标:每个资产贡献相等
        return np.sum((rc - target_rc) ** 2)

    # 约束
    constraints = [{'type': 'eq', 'fun': lambda w: np.sum(w) - 1}]  # 权重和为1
    bounds = [(0, 1) for _ in range(n)]  # 不允许卖空

    w0 = np.ones(n) / n
    result = minimize(objective, w0, method='SLSQP',
                      bounds=bounds, constraints=constraints)

    return result.x

def risk_budgeting(Sigma, risk_budgets=None):
    """
    风险预算(Risk Budgeting):广义的风险平价

    允许不同资产有不同的目标风险贡献

    Parameters:
        Sigma: 协方差矩阵
        risk_budgets: 各资产的目标风险预算(自动归一化),None时等风险贡献
    """
    n = Sigma.shape[0]
    if risk_budgets is None:
        risk_budgets = np.ones(n) / n
    else:
        risk_budgets = np.array(risk_budgets)
        risk_budgets = risk_budgets / risk_budgets.sum()

    def objective(w):
        port_vol = np.sqrt(w @ Sigma @ w)
        rc = w * (Sigma @ w) / port_vol
        return np.sum((rc - risk_budgets) ** 2)

    constraints = [{'type': 'eq', 'fun': lambda w: np.sum(w) - 1}]
    bounds = [(0, 1) for _ in range(n)]

    w0 = np.ones(n) / n
    result = minimize(objective, w0, method='SLSQP',
                      bounds=bounds, constraints=constraints)

    return result.x
点击展开可浏览运行结果
📘 本段代码定义了 2 个函数/类:函数 `risk_parity_weights`(风险平价:使每个资产的风险贡献相等)、函数 `risk_budgeting`(风险预算(Risk Budgeting):广义的风险平价)。该片段为教学展示(未包含独立运行的输入数据),可在实战练习中结合真实数据调用。

📌 案例:风险贡献分析

PYTHON40 行 · 1.3 KB
📄此处有展示代码40 行 · 1.3 KB展开 ▼
python
def risk_contribution_report(weights, Sigma):
    """
    生成风险贡献报告:展示每个资产的风险来源

    Parameters:
        weights: 组合权重
        Sigma: 协方差矩阵
    """
    port_vol = np.sqrt(weights @ Sigma @ weights)
    mrc = Sigma @ weights  # 边际风险贡献
    rc = weights * mrc / port_vol  # 风险贡献(百分比)

    report = pd.DataFrame({
        '权重': weights,
        '波动率': np.sqrt(np.diag(Sigma)),
        '边际风险贡献': mrc,
        '风险贡献(%)': rc * 100,
    })

    # 按风险贡献排序
    report = report.sort_values('风险贡献(%)', ascending=False)
    report['累积风险贡献(%)'] = report['风险贡献(%)'].cumsum()

    return report

# 示例:对比等权和风险平价的风险集中度
def concentration_analysis(weights, Sigma):
    """计算风险集中度指标"""
    rc = risk_contribution_report(weights, Sigma)['风险贡献(%)'] / 100

    # 赫芬达尔-赫希曼指数(HHI): 风险贡献越集中, HHI越高
    hhi = np.sum(rc ** 2)

    # 有效风险分散度: 1/HHI
    effective_n = 1 / hhi if hhi > 0 else np.inf

    print(f"风险集中度(HHI): {hhi:.4f}")
    print(f"有效分散度: {effective_n:.1f} (相当于{effective_n:.0f}个等风险资产)")

    return hhi, effective_n
点击展开可浏览运行结果
📘 本段代码定义了 2 个函数/类:函数 `risk_contribution_report`(生成风险贡献报告:展示每个资产的风险来源)、函数 `concentration_analysis`(计算风险集中度指标)。该片段为教学展示(未包含独立运行的输入数据),可在实战练习中结合真实数据调用。

常见误区

  1. 把波动率倒数当作风险平价wi1/σi 是风险平价的一个特例(假设所有资产间相关性为零)。当资产间存在显著相关性时,这种方法不能实现真正的等风险贡献。

  2. 忽略杠杆的必要性:风险平价组合的波动率通常远低于市场组合。要获得与市场相当的预期收益,风险平价通常需要加杠杆(如1.5-2倍)。无杠杆的风险平价通常夏普较高但收益较低。

  3. 在利率极低环境中的风险:风险平价超配债券(因为债券波动率低,在风险平价中权重高)。在利率急剧上升时,债券价格大幅下跌,风险平价组合可能遭受"股债双杀",这是2022年桥水全天候策略的重大挑战。

  4. 资产类别选择至关重要:风险平价把"风险"等同于波动率,但如果选择的资产类别不够丰富(如只有股和债),那么分散效果仍然有限。好的风险平价需要在商品、通胀保护证券、REITs等多种低相关资产中分配。

  5. 相关性结构的时变性:风险平价依赖协方差矩阵的估计。如果危机期间资产相关性急剧上升("相关性趋同"),风险平价的分散效果会大幅下降。

实战练习

  1. 选取股票、债券、黄金、商品4类资产(可以使用ETF的日收益率),分别计算等权组合和风险平价组合的:

    • 总波动率和各资产的风险贡献分布
    • 滚动24个月的风险贡献变化(观察风险贡献的稳定性)
  2. 对风险平价组合施加杠杆:将组合波动率缩放到与股票相当的15%,对比加杠杆后风险平价组合与纯股票组合的夏普比率和最大回撤。

  3. 风险预算实验:设定风险预算为[40%股票, 30%债券, 20%商品, 10%黄金],计算对应的风险预算组合权重,并与等风险贡献的结果对比。

延伸阅读

  • Qian, E. (2005). "Risk Parity Portfolios: Efficient Portfolios Through True Diversification." PanAgora. 风险平价概念的早期重要论文。
  • Maillard, S., Roncalli, T., & Teiletche, J. (2010). "The Properties of Equally Weighted Risk Contribution Portfolios." Journal of Portfolio Management.
  • Roncalli, T. (2013). Introduction to Risk Parity and Budgeting. Chapman and Hall. 风险平价最全面的教科书。
  • Asness, C. S., Frazzini, A., & Pedersen, L. H. (2012). "Leverage Aversion and Risk Parity." Financial Analysts Journal.
  • Dalio, R. (2015). "All Weather Story." Bridgewater Associates.

本章要点

  • 风险平价的核心是使各资产对总风险的风险贡献相等,实现真正的风险分散化,而非简单的资金分散。
  • 风险贡献的数学分解:RCi=wi(Σw)i/σp,所有资产的RC之和等于组合总风险 σp
  • 风险平价不需要预期收益输入,因此避免了MVO最大的痛点——误差最大化问题。
  • 波动率倒数加权(wi1/σi)是最简单的风险平价近似,但忽略了资产间的相关性结构。
  • 风险平价通常需要加杠杆以达到与市场可比的收益水平——这是"风险平价的代价"。
  • 桥水全天候策略是风险平价理念最著名的实践案例,覆盖四种宏观经济状态和多种资产类别。