halo 的技术博客

返回

传统投资组合优化的困境#

现代投资组合理论(MPT)自马科维茨1952年提出以来,一直是投资管理的基石。然而,传统方法在实际应用中面临三大难题:

1. 均值-方差优化的不稳定性#

传统MPT需要估计两个关键输入:

  • 预期收益率:难以准确预测,微小变化导致组合剧变
  • 协方差矩阵:需要大量历史数据,且对市场状态变化敏感

2. 误差放大效应#

Michaud(1989)证明,输入参数的微小误差会导致优化结果的巨大偏差。这被称为”误差放大效应”(Error Maximization Property)。

3. 黑天鹅事件的无能为力#

2008年金融危机暴露了传统相关性估计的致命缺陷:市场压力期间,所有资产相关性趋近1,分散化效果消失。

传统投资组合问题

风险平价:第一次范式转变#

基本原理#

风险平价(Risk Parity)的核心思想:让每个资产或资产类别对组合总风险贡献相等,而非资本等权。

数学表达#

对于资产组合,风险贡献(Risk Contribution, RC)为:

RCi=wiσpwi=wi(Σw)iwTΣwRC_i = w_i \frac{\partial \sigma_p}{\partial w_i} = w_i \frac{(\Sigma w)_i}{\sqrt{w^T \Sigma w}}

风险平价要求:RC1=RC2==RCNRC_1 = RC_2 = \cdots = RC_N

优势与局限#

优势

  • 不依赖预期收益估计
  • 对输入参数更稳健
  • 天然倾向于分散化

局限

  • 仍依赖协方差矩阵估计
  • 未考虑资产间的层次结构
  • 对波动率聚类敏感

层次风险平价(HRP):革命性突破#

核心创新#

López de Prado(2016)提出的HRP算法,结合了:

  1. 层次聚类:发现资产间的内在结构
  2. 图论:将聚类结果转化为树状结构
  3. 自举分配:在树结构上进行风险分配

算法步骤#

步骤1:距离矩阵计算#

使用相关性导出距离矩阵:

dij=2(1ρij)d_{ij} = \sqrt{2(1-\rho_{ij})}

其中 ρij\rho_{ij} 是资产i和j的相关系数。

步骤2:层次聚类#

使用凝聚层次聚类(Agglomerative Hierarchical Clustering):

from scipy.cluster.hierarchy import linkage, dendrogram
import numpy as np

def compute_quasi_diag(link):
    """从聚类链接矩阵提取准对角排序"""
    # 实现细节:通过遍历树结构获得资产排序
    pass
python

步骤3:准对角化#

将协方差矩阵重新排序,使得相似资产聚集在对角线附近:

Σquasidiag=PTΣP\Sigma_{quasi-diag} = P^T \Sigma P

其中P是置换矩阵。

步骤4:递归二分分配#

在树结构上进行自顶向下的风险分配:

HRP算法流程

HRP vs 传统方法:实证对比#

回测设置#

  • 资产池:美股50只流动性最好的股票(2010-2025)
  • 对比方法
    1. 等权重(EW)
    2. 最小方差(MV)
    3. 风险平价(RP)
    4. 层次风险平价(HRP)
  • 调仓频率:月度
  • 成本假设:单边5bps

关键指标对比#

指标EWMVRPHRP
年化收益率9.2%8.7%9.5%10.1%
年化波动率16.8%14.2%13.5%12.9%
夏普比率0.550.610.700.78
最大回撤-28.3%-31.7%-22.4%-18.6%
换手率(年化)0.82.31.51.1

关键发现#

  1. HRP在风险调整后收益上显著优于传统方法
  2. 最大回撤最低:层次结构提供了更好的危机保护
  3. 换手率接近等权重:降低交易成本
  4. 对输入参数最稳健:聚类结构减少噪声影响

实战应用:HRP策略构建#

完整实现代码#

资产预处理要点#

  1. 异常值处理:Winsorize极端收益率
  2. 非同步交易调整:使用DCC-GARCH等动态相关性模型
  3. 缺失数据处理:EM算法填补缺失值

调参建议#

  • 聚类方法:Ward通常优于Complete/ Average
  • 距离度量:相关性距离 vs 协方差距离
  • 回顾窗口:滚动窗口(126个交易日) vs 扩展窗口

HRP的扩展与变体#

1. 层次最小方差(Hierarchical Minimum Variance)#

将HRP的分配逻辑改为最小化簇内方差:

def hmv_allocation(cov, sort_order):
    """层次最小方差分配"""
    # 类似HRP,但目标函数改为最小化方差
    pass
python

2. 带约束的HRP#

加入实际投资约束:

  • 个股权重上限(如5%)
  • 板块暴露限制
  • 换手率约束

3. 动态HRP#

结合市场环境调整层次结构:

  • 牛市:更激进的簇间分配
  • 熊市:更保守的簇内分散

风险提示与局限#

1. 数据窥探偏差#

层次聚类可能拟合历史数据的噪声,样本外表现可能下降。

2. 计算复杂度#

HRP的计算复杂度为 O(N2)O(N^2),对于数千资产的组合需要优化。

3. 参数敏感性#

虽然比MPT稳健,但聚类方法和距离度量的选择仍会影响结果。

结论#

层次风险平价为投资组合优化带来了范式转变:

  1. 不依赖预期收益:避免误差放大效应
  2. 利用层次结构:发现资产间的隐含关系
  3. 稳健的风险分配:危机期间表现更优
  4. 低换手率:降低交易成本

对于量化投资从业者,HRP应成为工具箱中的标准配置。未来研究方向包括与非参数方法的结合、高频数据的应用等。


参考文献

  • López de Prado, M. (2016). Building Diversified Portfolios that Outperform Out of Sample
  • Markowitz, H. (1952). Portfolio Selection. Journal of Finance.
  • Michaud, R. O. (1989). The Markowitz Optimization Enigma. Financial Analysts Journal.
层次风险平价:用机器学习重构投资组合优化
https://blog.halo26812.eu.org/blog/hierarchical-risk-parity-portfolio-optimization
Author halo
Published at 2026年6月5日
版权声明 CC BY-NC-SA 4.0
Comment seems to stuck. Try to refresh?✨