第二十一章:曲面套利组合管理:多策略组合的权重分配、风险预算、相关性管理

说实话,做曲面套利做到一定程度,你会发现一个尴尬的事实——单一策略的夏普再高,也扛不住市场风格的突然切换。我见过太多交易员,某个策略回测漂亮得不行,实盘三个月就崩了。为什么?因为曲面上的机会不是均匀分布的,不同区域、不同期限的套利逻辑,往往会在特定行情下同时失效。

所以这一章,咱们聊聊组合管理。说白了,就是怎么把多个曲面套利策略捏在一起,让它们互相补位,而不是一起翻车。

21.1 多策略组合的权重分配:别靠感觉,靠数学

权重分配这件事,我早期吃过亏。那时候我同时跑着蝶式套利、日历价差和斜率回归三个策略,觉得每个都赚钱,就平均分配资金。结果呢?三个月后一看,蝶式套利赚的钱全被日历价差的亏损吃掉了,整体收益还不如只做蝶式。

后来我学乖了。权重分配不能拍脑袋,得用点正经方法。我个人比较推荐两种:

  • 等风险贡献(ERC):让每个策略对组合总风险的贡献相等。比如你有三个策略,调整权重使得每个策略的边际VaR一样大。
  • 均值-方差优化(MVO):在给定目标收益下,最小化组合方差。但要注意,这东西对输入参数特别敏感,我建议用收缩估计或者贝叶斯方法做协方差矩阵。

嗯,这里有个坑。MVO优化出来的权重经常很极端,比如某个策略权重直接干到80%。这时候我会加一个约束——单个策略权重不超过40%,不低于10%。别问为什么,问就是吃过亏。

核心公式:等风险贡献的权重满足 w_i × ∂σ_p/∂w_i = 常数,其中 σ_p 是组合波动率。

# 一个简单的等风险贡献权重计算示例
import numpy as np
from scipy.optimize import minimize

def erc_weights(cov_matrix):
    n = cov_matrix.shape[0]
    def risk_contribution(w):
        port_vol = np.sqrt(w @ cov_matrix @ w)
        mrc = cov_matrix @ w / port_vol  # 边际风险贡献
        rc = w * mrc
        target = port_vol / n
        return np.sum((rc - target)**2)
    
    constraints = ({'type': 'eq', 'fun': lambda w: np.sum(w) - 1})
    bounds = [(0.1, 0.4)] * n  # 单个权重限制
    result = minimize(risk_contribution, 
                      x0=np.ones(n)/n, 
                      bounds=bounds, 
                      constraints=constraints)
    return result.x

# 假设三个策略的协方差矩阵
cov = np.array([[0.04, 0.01, 0.005],
                [0.01, 0.09, 0.02],
                [0.005, 0.02, 0.16]])
weights = erc_weights(cov)
print(f"ERC权重: {weights}")

21.2 风险预算:给每个策略划好"亏损额度"

权重分配解决的是"投多少钱",风险预算解决的是"亏多少钱"。这两个概念容易混淆,我简单区分一下:

  • 权重分配:基于预期收益和风险,决定资金分配比例。
  • 风险预算:基于最大可承受亏损,设定每个策略的止损线和仓位上限。

举个例子。假设你的总资金是1000万,最大回撤容忍度是15%,也就是最多亏150万。那么风险预算就是把这150万分配到各个策略上。我个人习惯的做法是:

  1. 先定总风险预算(比如总资金的15%)
  2. 按策略的历史VaR(95%置信度,1天)分配预算
  3. 每个策略的止损线 = 该策略分配到的预算 × 1.5(留点缓冲)

我曾经犯过一个错误——把风险预算设得太紧,结果一个策略刚触发止损,市场就反转了,白白亏了手续费。所以现在我会给每个策略设两层止损:

层级 触发条件 操作
预警线 亏损达到预算的80% 减仓50%,暂停开新仓
硬止损 亏损达到预算的100% 清仓,当日不再交易

注意:风险预算不是一成不变的。当组合整体盈利时,可以适当提高预算;连续亏损时,要主动压缩。我一般用"浮盈加仓、浮亏减仓"的逻辑,动态调整每个策略的预算上限。

21.3 相关性管理:别让策略"抱团"亏钱

相关性管理,说白了就是防止你的策略在关键时刻一起崩。你想想看,如果蝶式套利和日历价差在波动率飙升时都亏钱,那组合还有什么意义?

我一般会关注两个层面的相关性:

  • 收益相关性:策略日收益率的相关系数。理想情况是0.3以下。
  • 尾部相关性:极端行情下(比如波动率跳升3个标准差),策略是否同时大幅亏损。这个用条件相关系数或者Copula来度量。

嗯,这里有个实战技巧。我发现很多交易员只看收益相关性,忽略了尾部相关性。结果呢?平时看着策略之间确实不相关,一遇到"黑天鹅"全跪了。我建议每个月做一次尾部相关性分析,用历史极值数据或者蒙特卡洛模拟。

我的经验:如果两个策略的尾部相关性超过0.6,即使它们收益相关性只有0.2,我也会考虑只保留其中一个。因为极端行情才是真正考验组合的时候,平时那点分散化没什么用。

# 尾部相关性计算示例(基于条件相关系数)
def tail_correlation(returns1, returns2, quantile=0.05):
    """
    计算尾部相关性:当returns1处于最低5%分位时,returns2的表现
    """
    threshold = np.quantile(returns1, quantile)
    tail_idx = returns1 <= threshold
    if np.sum(tail_idx) < 5:
        return np.nan  # 样本太少,不计算
    tail_returns1 = returns1[tail_idx]
    tail_returns2 = returns2[tail_idx]
    return np.corrcoef(tail_returns1, tail_returns2)[0, 1]

# 假设三个策略的日收益率数据
np.random.seed(42)
strat1 = np.random.normal(0.001, 0.02, 1000)
strat2 = np.random.normal(0.0005, 0.03, 1000)
strat3 = np.random.normal(0.001, 0.015, 1000)

# 计算尾部相关性矩阵
strategies = {'蝶式套利': strat1, '日历价差': strat2, '斜率回归': strat3}
names = list(strategies.keys())
tail_corr_matrix = np.zeros((3, 3))
for i in range(3):
    for j in range(3):
        tail_corr_matrix[i, j] = tail_correlation(
            strategies[names[i]], strategies[names[j]]
        )

print("尾部相关性矩阵(5%分位):")
print(tail_corr_matrix)

21.4 组合管理的动态调整:别设完就不管了

权重分配、风险预算、相关性管理,这三件事不是做完一次就完事了。市场在变,策略的表现也在变。我一般按以下频率做调整:

  • 每日:检查每个策略是否触发预警线或硬止损
  • 每周:重新计算收益相关性和尾部相关性,看有没有异常
  • 每月:用最新数据重新做一次ERC权重分配
  • 每季度:全面复盘,评估是否需要引入新策略或淘汰旧策略

说实话,动态调整最怕的就是"过度优化"。我曾经一个月调了三次权重,结果手续费和滑点把收益全吃掉了。后来我给自己定了个规矩——除非某个策略的夏普比连续两周低于0.5,否则不轻易动权重。

核心原则:组合管理不是追求每个策略都赚钱,而是追求整体曲线平滑、回撤可控。你想想看,一个年化15%、最大回撤8%的组合,比一个年化25%、最大回撤30%的组合,长期下来谁更舒服?

21.5 知识体系总览

下面这张图,是我自己整理的多策略组合管理框架。每次做调整前,我都会对照着看一遍,确保没有遗漏。

曲面套利组合管理框架 多策略组合管理 权重分配 ERC / MVO / 约束优化 风险预算 VaR分配 / 双层止损 相关性管理 收益/尾部相关性 等风险贡献 均值-方差优化 权重约束 VaR分配 预警线/硬止损 动态调整 收益相关性 尾部相关性 Copula分析 目标:平滑收益曲线,控制最大回撤 每日检查 → 每周分析 → 每月优化 → 每季度复盘

这张图把整个组合管理的逻辑串起来了。你看,从最上层的"多策略组合管理"出发,分成三个核心模块——权重分配、风险预算、相关性管理。每个模块下面又有具体的实现方法。最下面那条"每日检查→每周分析→每月优化→每季度复盘",是我自己踩坑踩出来的节奏。

说实话,组合管理这件事,没有标准答案。不同资金规模、不同风险偏好、不同交易频率,适合的方法都不一样。但有一点是共通的——你得有一套系统化的框架,而不是凭感觉拍脑袋。我见过太多人,策略赚钱时觉得"老子天下第一",亏钱时又慌慌张张乱调参数。嗯,这样搞,迟早要出事。

最后一个小建议:刚开始做组合管理时,别追求太复杂的模型。先跑通ERC权重分配+双层止损+月度相关性检查,这个组合已经能干掉80%的散户了。等跑顺了,再慢慢加Copula、动态预算这些高阶玩法。


公众号:蓝海资料掘金营,微信deep3321