4. 策略组合构建
单策略回测再漂亮,也只是一个“样本内的故事”。真实资金管理面对的是策略失效、风格切换与回撤叠加,因此需要把多个策略组合起来,用分散化换取更稳定的风险收益特征。本节围绕四个问题展开:为什么要组合、如何度量策略之间的相关性、权重怎么分配、以及组合后如何再平衡。
一、多策略组合的动机:从“单点押注”到“风险预算”
多策略组合的核心动机不是“多买几个策略”,而是通过低相关或负相关的收益流,降低组合整体波动与最大回撤,提高夏普比率和Calmar比率。常见动机包括:
- 分散风险:趋势策略在震荡市亏损,而均值回归策略在震荡市盈利,两者叠加可平滑净值曲线。
- 应对失效:单一策略可能因市场结构变化而失效,组合中其他策略可提供缓冲。
- 容量管理:不同策略的资金容量不同,组合可把大资金分散到多个容量池。
- 收益来源多元化:把Alpha来源从“一个因子”扩展为“多个逻辑”,降低对单一假设的依赖。
二、策略相关性分析:先看收益,再看回撤
相关性分析是组合构建的“体检”。常用方法包括皮尔逊相关系数、斯皮尔曼秩相关、滚动窗口相关以及回撤同步性分析。皮尔逊相关对线性关系敏感,斯皮尔曼对非线性单调关系更稳健;滚动相关能揭示相关性是否随时间漂移。
实操中建议按以下流程执行:
- 对齐各策略的日频或周频收益序列,处理缺失值与停牌日。
- 计算全样本相关矩阵,并绘制热力图观察聚类结构。
- 计算滚动60日或120日相关,识别相关性突变区间。
- 结合回撤重叠度:若两个策略最大回撤区间高度重叠,即使相关系数不高,也需警惕。
- 剔除或降权高度相关的策略,保留边际分散化贡献最大的策略。
import pandas as pd
import numpy as np
# returns: DataFrame, index=date, columns=strategy
corr = returns.corr(method='pearson')
roll_corr = returns['S1'].rolling(60).corr(returns['S2'])
# 边际分散化贡献:加入新策略后组合波动下降幅度
def marginal_diversification(returns, weights, new_col):
base_var = np.dot(weights, np.dot(returns.cov(), weights))
new_returns = returns.copy()
new_weights = np.append(weights * 0.9, 0.1)
new_var = np.dot(new_weights, np.dot(new_returns.cov(), new_weights))
return base_var - new_var
三、权重分配方法:从等权到风险平价
权重分配决定了组合的风险暴露结构。常见方法有:
- 等权:简单稳健,适合策略数量少、相关性低的场景,但未考虑波动差异。
- 波动率倒数:按 1/σ 分配,使各策略风险贡献接近,但对相关性不敏感。
- 风险平价:使每个策略对组合风险的边际贡献相等,需数值优化求解。
- 均值-方差优化:理论最优,但对预期收益估计误差极敏感,易产生极端权重。
- 层次风险平价:先聚类再分配,适合策略数量多、相关矩阵不稳定的场景。
| 方法 | 核心思想 | 优点 | 局限 |
|---|---|---|---|
| 等权 | 每个策略相同权重 | 简单、无估计误差 | 忽略波动与相关性 |
| 波动率倒数 | 权重与波动成反比 | 风险贡献较均衡 | 未考虑相关性 |
| 风险平价 | 边际风险贡献相等 | 风险分散好 | 需优化、对协方差敏感 |
| 均值-方差 | 最大化夏普比率 | 理论最优 | 估计误差大、权重极端 |
| 层次风险平价 | 聚类后分层分配 | 稳健、可解释 | 实现复杂 |
四、再平衡规则:频率、阈值与成本控制
再平衡是组合从“静态配置”走向“动态管理”的关键。常见规则包括日历再平衡(月度、季度)、阈值再平衡(偏离目标权重超过5%触发)以及两者结合。再平衡频率越高,组合越贴近目标风险,但交易成本也越高。
设计再平衡规则时需考虑:
- 换手成本:佣金、滑点、冲击成本,尤其对小资金高频再平衡影响显著。
- 税收与摩擦:不同账户类型下资本利得税差异。
- 信号衰减:若策略信号本身更新慢,高频再平衡无意义。
- 缓冲带:设置权重偏离容忍区间,减少无效交易。
# 阈值再平衡示例
target = {'S1': 0.4, 'S2': 0.3, 'S3': 0.3}
threshold = 0.05
def rebalance(current_weights, target, threshold):
trades = {}
for k, w in target.items():
drift = current_weights.get(k, 0) - w
if abs(drift) > threshold:
trades[k] = w - current_weights.get(k, 0)
return trades
五、案例与复盘:一个三策略组合的构建过程
假设有三个策略:趋势跟踪(S1)、均值回归(S2)、跨品种套利(S3)。全样本相关系数矩阵显示 S1 与 S2 为 -0.15,S1 与 S3 为 0.10,S2 与 S3 为 0.05,整体相关性低。采用风险平价分配权重,得到 S1=0.38、S2=0.34、S3=0.28。再平衡规则为“季度+5%阈值”。回测显示组合最大回撤从单策略的 22% 降至 11%,夏普从 0.9 提升至 1.4。
复盘要点:第一,相关性低是组合有效的必要条件,但需滚动监控;第二,风险平价在协方差估计稳定时表现好,若策略数量增加,建议改用层次风险平价;第三,再平衡阈值不宜过小,否则交易成本会吞噬分散化收益。
组合构建不是一次性任务,而是持续迭代的工程。把相关性分析、权重分配与再平衡规则固化为可复用的流程,才能在策略生命周期变化时快速响应,让组合始终服务于风险预算目标。