4. 相关性分析
多策略组合的核心假设是“策略之间低相关甚至负相关,从而在同等收益下降低组合波动”。但相关性不是静态常数,它会随市场状态漂移,甚至在压力情景下突然升高。若只用一个全样本相关系数做资金分配,组合很可能在关键时刻失去分散化保护。本节围绕四个问题展开:如何计算策略间相关系数、如何观察滚动相关性、如何识别尾部相关性、以及相关性突变如何影响组合风险与资金分配。
一、核心原理:相关系数只是线性同步性的快照
常用皮尔逊相关系数衡量两条策略日收益序列的线性同步程度,公式为两序列协方差除以各自标准差的乘积。它的取值范围是[-1,1],接近1表示同涨同跌,接近-1表示反向,接近0表示线性关系弱。但在策略组合中,必须注意三点:
- 尺度无关但不代表风险贡献相同。相关系数只描述方向同步性,不包含波动率大小。两个策略相关系数0.8,但一个波动率5%、另一个20%,它们对组合的风险贡献差异巨大。
- 对非线性关系不敏感。若策略A在趋势市盈利、震荡市亏损,策略B恰好相反,但两者收益并非线性关系,皮尔逊系数可能低估这种互补性。
- 对异常值敏感。少数极端收益会显著拉高或拉低相关系数,因此需要结合斯皮尔曼秩相关或肯德尔秩相关做稳健校验。
实战原则:相关性分析不是算一个数,而是建立“全样本—滚动窗口—尾部条件—突变检测”四层视图。资金分配应基于多层视图的综合判断,而非单一全样本系数。
二、方法流程:从收益矩阵到相关性监控
假设有N条策略,每条策略有T个交易日的日收益。标准流程如下:
- 数据对齐:按交易日对齐所有策略收益,缺失值用0填充或剔除,避免因不同市场日历导致伪相关。
- 全样本相关矩阵:计算N×N皮尔逊相关矩阵,观察整体分散化水平。
- 滚动相关:设定窗口W(如60日、120日),逐日滚动计算两两相关系数,形成时间序列。
- 尾部相关:取各自收益最差5%或10%的样本,计算条件相关系数,观察极端行情下的同步性。
- 突变检测:对滚动相关序列做均值漂移检测,如CUSUM或滚动Z-score,标记相关性突然升高的时点。
- 组合影响评估:将相关矩阵代入组合波动率公式,比较不同相关性假设下的组合风险与资金分配权重。
import numpy as np
import pandas as pd
# returns: DataFrame, index=date, columns=strategy
def rolling_corr(returns, s1, s2, window=60):
return returns[s1].rolling(window).corr(returns[s2])
def tail_corr(returns, s1, s2, q=0.05):
threshold = returns[[s1, s2]].min(axis=1).quantile(q)
mask = returns[[s1, s2]].min(axis=1) <= threshold
return returns.loc[mask, s1].corr(returns.loc[mask, s2])
def corr_shift_z(rolling_series, lookback=120):
mu = rolling_series.rolling(lookback).mean()
sigma = rolling_series.rolling(lookback).std()
return (rolling_series - mu) / sigma
组合波动率可近似写为:σ_p² = wᵀΣw,其中Σ为协方差矩阵。当相关性从0.2升到0.8时,即使各策略波动率不变,组合波动率也会显著上升。资金分配若仍按低相关假设执行,实际风险敞口会被低估。
三、案例/场景:相关性突变如何击穿组合
假设组合中有三条策略:趋势跟踪A、均值回归B、套利C。全样本相关系数显示A与B为-0.15,A与C为0.10,B与C为0.05,看起来分散化良好。资金分配按等风险贡献法给A、B、C各约33%权重。
某月市场出现流动性冲击,所有风险资产同步下跌。此时:
- A与B的滚动60日相关系数从-0.15快速升至0.65;
- A与C从0.10升至0.55;
- 尾部5%条件相关系数显示A与B达到0.78。
组合实际波动率比模型预测高出约40%,最大回撤远超预期。原因不是策略本身失效,而是相关性突变导致分散化收益消失。若在突变检测触发时及时降低A与B的权重,并增加与两者低相关的C或现金,组合回撤可显著收敛。
| 视图 | 计算方式 | 观察重点 | 对资金分配的含义 |
|---|---|---|---|
| 全样本相关 | 全期皮尔逊系数 | 整体分散化水平 | 初始权重设定参考 |
| 滚动相关 | 60/120日滚动窗口 | 相关性趋势与漂移 | 动态调整权重 |
| 尾部相关 | 最差5%/10%条件相关 | 极端行情同步性 | 压力测试与风险预算 |
| 突变检测 | Z-score/CUSUM | 相关性跳变时点 | 触发降权或对冲 |
四、误区/复盘:相关性分析中最容易犯的错
误区一:用全样本相关系数做动态分配。全样本系数是历史平均,无法反映当前状态。应至少以滚动相关作为分配输入。
误区二:忽略尾部相关。正常时期低相关不代表危机时低相关。尾部相关系数才是压力情景下的真实分散化能力。
误区三:把相关当因果。两条策略同涨同跌可能只是共同暴露于某个风险因子,而非彼此驱动。应进一步做因子归因。
误区四:窗口越短越好。窗口过短噪声大,容易频繁调仓;窗口过长反应迟钝。建议同时观察60日与120日,并用突变检测辅助。
复盘清单:
- 是否计算了全样本、滚动、尾部三层相关?
- 滚动相关是否出现持续上升趋势?
- 尾部相关是否显著高于全样本相关?
- 突变检测是否触发?触发后资金分配是否调整?
- 组合波动率预测与实际偏差是否在可接受范围?
相关性分析的目标不是追求一个精确数字,而是建立对策略间同步性的动态认知。只有把全样本、滚动、尾部和突变四个视角结合起来,才能在资金分配中真正实现“该分散时分散、该收缩时收缩”。