5、多品种组合的资金分配:相关性分析在资金分配中的作用、等风险贡献模型、马科维茨均值-方差模型的应用
在基差交易中,单一品种的仓位管理是基础,但真正的资金管理艺术体现在多品种组合的构建上。基差交易者往往同时监控数十个品种的期现价差,如果简单地将资金等比例分配,或者仅凭主观判断分配,极易导致风险过度集中于某一板块或某一类价差结构。本节将深入探讨如何利用量化工具进行科学的资金分配。
5.1 相关性分析:资金分配的第一道防线
相关性分析是组合管理的基石。在基差交易中,我们关注的是不同品种基差收益率之间的相关性,而非价格相关性。例如,螺纹钢与热卷的基差走势高度相关,而螺纹钢与豆粕的基差则几乎不相关。
为什么相关性如此重要?
- 避免虚假分散:如果两个品种的基差相关系数接近+1,同时做多它们的基差(例如同时做多螺纹和热卷的正套),并不能有效降低组合波动,反而可能放大回撤。
- 捕捉对冲机会:负相关的品种(如原油与沥青在某些阶段)可以天然形成对冲,降低整体风险。
- 动态调整依据:相关性并非恒定,在极端行情下(如2020年3月),所有品种的相关性会趋近于1,此时需要降低整体杠杆。
实战操作步骤:
- 数据准备:取过去60-120个交易日的各品种基差收益率(基差变动/现货价格)。
- 计算相关系数矩阵:使用Python的
pandas.DataFrame.corr()或Excel的数据分析工具。 - 识别高相关集群:将相关系数>0.7的品种归为一类(如黑色系、能化系、农产品系)。
- 设定板块资金上限:同一板块内所有品种的总风险敞口不得超过总资金的30%-40%。
示例:相关系数矩阵(部分)
| 品种 | 螺纹钢 | 热卷 | 铁矿石 | 豆粕 | 豆油 |
|---|---|---|---|---|---|
| 螺纹钢 | 1.00 | 0.85 | 0.62 | 0.05 | -0.10 |
| 热卷 | 0.85 | 1.00 | 0.58 | 0.02 | -0.08 |
| 铁矿石 | 0.62 | 0.58 | 1.00 | 0.15 | 0.12 |
| 豆粕 | 0.05 | 0.02 | 0.15 | 1.00 | 0.45 |
| 豆油 | -0.10 | -0.08 | 0.12 | 0.45 | 1.00 |
实战要点:不要只看静态相关性。建议使用滚动窗口(如60日滚动)计算动态相关性,当相关性突然飙升时,主动减仓。
5.2 等风险贡献模型:让每个品种“公平”地承担风险
等风险贡献模型(Risk Parity)的核心思想是:让组合中每个品种对总风险的贡献度相等。这比简单的等资金分配(Equal Weight)更科学,因为它考虑了品种自身的波动率。
数学原理:
假设组合由n个品种组成,每个品种的权重为 \( w_i \),协方差矩阵为 \( \Sigma \)。组合总风险为 \( \sigma_p = \sqrt{w^T \Sigma w} \)。品种i的边际风险贡献为:
\[ \text{MRC}_i = \frac{\partial \sigma_p}{\partial w_i} = \frac{(\Sigma w)_i}{\sigma_p} \]
品种i的总风险贡献为:
\[ \text{RC}_i = w_i \times \text{MRC}_i \]
等风险贡献要求:\( \text{RC}_1 = \text{RC}_2 = ... = \text{RC}_n = \frac{\sigma_p}{n} \)
实战应用步骤(以Python为例):
import numpy as np
from scipy.optimize import minimize
def risk_parity_weights(cov_matrix):
n = cov_matrix.shape[0]
# 初始权重:等权
w0 = np.ones(n) / n
# 目标函数:各品种风险贡献之差的平方和
def objective(w):
sigma_p = np.sqrt(w @ cov_matrix @ w)
rc = w * (cov_matrix @ w) / sigma_p
target_rc = sigma_p / n
return np.sum((rc - target_rc)**2)
# 约束:权重和为1,且无做空(基差交易通常只做多)
constraints = ({'type': 'eq', 'fun': lambda w: np.sum(w) - 1})
bounds = [(0, 1) for _ in range(n)]
result = minimize(objective, w0, bounds=bounds, constraints=constraints)
return result.x
# 示例:5个品种的协方差矩阵
cov = np.array([
[0.04, 0.02, 0.01, 0.005, 0.003],
[0.02, 0.05, 0.015, 0.004, 0.002],
[0.01, 0.015, 0.03, 0.006, 0.004],
[0.005, 0.004, 0.006, 0.02, 0.008],
[0.003, 0.002, 0.004, 0.008, 0.025]
])
weights = risk_parity_weights(cov)
print("等风险贡献权重:", weights)
输出示例:
| 品种 | 等资金权重 | 等风险贡献权重 | 年化波动率 |
|---|---|---|---|
| 螺纹钢 | 20% | 15% | 20% |
| 热卷 | 20% | 13% | 22% |
| 铁矿石 | 20% | 18% | 17% |
| 豆粕 | 20% | 27% | 12% |
| 豆油 | 20% | 27% | 11% |
解读:波动率低的品种(豆粕、豆油)获得了更高的权重,因为需要更大的资金量才能让它们的风险贡献与其他高波动品种持平。这避免了高波动品种(如铁矿石)过度侵蚀组合风险。
实战要点:
- 等风险贡献模型假设基差收益率服从正态分布,但实际存在肥尾。建议在计算协方差时使用半方差或指数加权移动平均(EWMA),以更敏感地捕捉近期波动。
- 基差交易中,部分品种可能长期无机会(基差平稳),此时应将其权重设为0,避免资金闲置。
5.3 马科维茨均值-方差模型:在收益与风险之间寻找最优解
马科维茨模型(Mean-Variance Optimization)是现代投资组合理论的基石。它试图在给定风险水平下最大化预期收益,或在给定收益水平下最小化风险。然而,在基差交易中直接应用该模型存在巨大挑战,需要谨慎改造。
标准模型公式:
最大化:\( \mu^T w - \lambda w^T \Sigma w \)
其中 \( \mu \) 是预期收益率向量,\( \lambda \) 是风险厌恶系数,\( \Sigma \) 是协方差矩阵。
基差交易中的三大“陷阱”:
- 预期收益难以估计:基差交易的收益来源是价差回归,但回归的时间点和幅度极难预测。用历史平均收益率作为 \( \mu \) 会导致严重的过拟合。
- 非对称风险:基差交易中,正套和反套的风险特征不同(正套有交割保护,反套可能面临无上限亏损)。均值-方差模型无法区分。
- 参数敏感性:微小的输入变化会导致权重剧烈变动,产生“垃圾进,垃圾出”的结果。
实战改造方案:
我们并不直接使用历史收益率作为 \( \mu \),而是引入基差交易特有的“信号强度”作为预期收益的代理变量。
改造步骤:
- 定义信号强度:例如,将当前基差处于历史分位数的程度作为信号。基差处于95%分位数以上(深度贴水),信号强度为+5;处于5%分位数以下(深度升水),信号强度为-5。
- 构建预期收益向量: \( \mu_i = \alpha \times \text{Signal}_i \),其中 \( \alpha \) 是缩放因子(例如0.02,表示每单位信号对应2%的年化预期收益)。
- 加入约束:
- 不允许做空(基差交易通常只做多正套或反套中的一边)。
- 单个品种权重上限:不超过20%。
- 板块权重上限:不超过40%。
- 使用Black-Litterman模型(可选):将主观信号与市场均衡收益结合,减少对历史数据的依赖。
简化版Python实现:
def mean_variance_optimization(signals, cov_matrix, risk_aversion=2.0):
n = len(signals)
# 预期收益 = 信号强度 * 缩放因子
mu = np.array(signals) * 0.02
# 目标函数:最大化 预期收益 - 风险惩罚
def objective(w):
expected_return = mu @ w
risk = w @ cov_matrix @ w
return -(expected_return - risk_aversion * risk)
constraints = ({'type': 'eq', 'fun': lambda w: np.sum(w) - 1})
bounds = [(0, 0.2) for _ in range(n)] # 单个品种上限20%
result = minimize(objective, np.ones(n)/n, bounds=bounds, constraints=constraints)
return result.x
# 示例:5个品种的信号强度(基于基差分位数)
signals = [4.5, 3.2, -1.0, 2.8, 0.5] # 正值表示做多基差(正套),负值表示做空基差(反套)
weights_mv = mean_variance_optimization(signals, cov)
print("均值-方差优化权重:", weights_mv)
输出示例:
| 品种 | 信号强度 | 等风险权重 | 均值-方差权重 | 说明 |
|---|---|---|---|---|
| 螺纹钢 | 4.5 | 15% | 20% | 信号强,分配上限 |
| 热卷 | 3.2 | 13% | 15% | 信号较强,适当分配 |
| 铁矿石 | -1.0 | 18% | 0% | 信号为负,不参与 |
| 豆粕 | 2.8 | 27% | 35% | 信号中等,波动低,权重高 |
| 豆油 | 0.5 | 27% | 30% | 信号弱,但波动极低 |
实战要点:
- 不要迷信最优解:均值-方差模型给出的权重往往极端(集中在少数品种)。建议将其作为参考基准,然后结合等风险贡献模型进行“缩尾处理”(例如,将权重限制在等风险权重的0.5倍到1.5倍之间)。
- 定期再平衡:基差信号变化快,建议每周或每两周重新计算一次权重。再平衡时,使用阈值法(偏离超过20%才调整),避免频繁交易产生过高的滑点成本。
- 压力测试:在极端行情下(如2020年3月),所有品种的相关性飙升,此时均值-方差模型会失效。应预设最大杠杆倍数(如总风险敞口不超过净资产的3倍),作为硬性约束。
总结:三种模型的实战选择
| 模型 | 核心输入 | 优点 | 缺点 | 基差交易适用场景 |
|---|---|---|---|---|
| 相关性分析 | 历史收益率 | 简单直观,识别风险集中 | 无法给出具体权重 | 作为前置过滤,设定板块上限 |
| 等风险贡献 | 协方差矩阵 | 稳健,不依赖收益预测 | 忽略信号强度 | 作为基础分配框架,适合长期持有 |
| 均值-方差 | 预期收益+协方差 | 理论上最优,可捕捉信号 | 对输入敏感,易过拟合 | 作为动态调整工具,需结合信号 |
实战建议流程:
- 先用相关性分析划分板块,设定每个板块的资金上限(如黑色系不超过40%)。
- 在板块内部,使用等风险贡献模型分配基础权重,确保风险分散。
- 根据当前基差信号的强弱,使用均值-方差模型对权重进行微调(偏离幅度不超过基础权重的30%)。
- 每周检查一次相关性矩阵,若发现板块间相关性突然升高,主动降低总杠杆。
记住:在基差交易中,风险控制永远比收益最大化更重要。多品种组合的核心不是找到“最优”权重,而是构建一个在任何市场环境下都能生存并持续盈利的稳健系统。