第十四章:跨品种套利实战:产业链上下游品种关系、比价与价差分析、配对交易策略
跨品种套利,说白了就是利用不同品种之间的价格关系来赚钱。我做了这么多年,发现这是最考验产业链理解深度的一种策略。你想想看,如果只看单个品种,你顶多是个技术分析选手;但如果你能把上下游品种的关系吃透,那才是真正的量化交易者。
14.1 产业链上下游品种关系:从物理逻辑到金融映射
跨品种套利的核心,在于理解品种之间的「物理关系」。我习惯把产业链分成三类:
- 原料-成品关系:比如大豆→豆粕+豆油,铁矿石→螺纹钢
- 替代关系:比如玉米和豆粕在饲料中的替代,热卷和螺纹钢在某些场景下的替代
- 互补关系:比如焦炭和铁矿石在炼钢中的固定配比
我在项目中遇到过最典型的案例是「大豆压榨套利」。大豆、豆粕、豆油三者之间存在一个固定的压榨利润公式:
压榨利润 = 豆粕价格 × 出粕率 + 豆油价格 × 出油率 - 大豆价格 - 加工成本
这个公式就是套利的基础。当压榨利润偏离历史均值时,就出现了套利机会。嗯,这里要注意,出粕率和出油率不是固定的,不同产地的大豆会有差异。我一般用美国大豆的标准:出粕率78%,出油率19%。
核心逻辑:产业链上下游品种的价格,最终会回归到「加工利润」的合理区间。偏离就是机会。
14.2 比价与价差分析:两种不同的分析框架
做跨品种套利,你首先要搞清楚自己在看「比价」还是「价差」。这两个东西,很多人混为一谈,其实完全不同。
| 维度 | 比价分析 | 价差分析 |
|---|---|---|
| 定义 | 价格比值(A/B) | 价格差值(A-B) |
| 适用场景 | 价格水平差异大、单位不同 | 价格水平接近、单位相同 |
| 统计特性 | 通常有均值回归特征 | 可能存在趋势性 |
| 例子 | 铜铝比价、油粕比 | 热卷-螺纹价差、焦炭-焦煤价差 |
我个人习惯,对于价格水平差异大的品种(比如铜6万/吨,铝1.8万/吨),用比价分析更稳定。对于价格水平接近的品种(比如热卷和螺纹都在4000左右),用价差分析更直观。
举个例子,油粕比(豆油价格/豆粕价格)历史上通常在1.5-2.5之间波动。当油粕比低于1.5时,说明豆油相对便宜,可以买豆油卖豆粕;高于2.5时则反向操作。我曾经用这个策略在2019年做了三波,年化收益大概在18%左右。
实战技巧:比价分析一定要用对数坐标。因为价格水平会随时间变化,但比值的波动范围相对稳定。用对数坐标可以消除价格水平变化带来的干扰。
14.3 配对交易策略:从统计套利到执行细节
配对交易是跨品种套利最经典的实现方式。它的核心假设是:两个相关品种的价格关系会均值回归。我把它拆成四个步骤:
- 筛选配对:用相关性分析、协整检验找到合适的品种对
- 计算价差:确定价差的计算方式(简单价差、标准化价差、回归残差)
- 设定阈值:用历史分位数或标准差确定开仓和平仓阈值
- 执行交易:确定头寸比例、止损规则、资金管理
下面是我常用的一个配对交易策略框架代码:
import numpy as np
import pandas as pd
from statsmodels.tsa.stattools import coint
def find_cointegrated_pairs(data, p_value_threshold=0.05):
"""
寻找协整关系的品种对
data: DataFrame, 列名为品种代码
"""
n = data.shape[1]
pairs = []
for i in range(n):
for j in range(i+1, n):
score, pvalue, _ = coint(data.iloc[:, i], data.iloc[:, j])
if pvalue < p_value_threshold:
pairs.append((data.columns[i], data.columns[j], pvalue))
return pairs
def calculate_spread(price_a, price_b, hedge_ratio):
"""
计算价差序列
hedge_ratio: 对冲比率,通常用OLS回归得到
"""
spread = price_a - hedge_ratio * price_b
return spread
def generate_signals(spread, entry_z=2.0, exit_z=0.5):
"""
生成交易信号
"""
mean = spread.mean()
std = spread.std()
z_score = (spread - mean) / std
signals = pd.Series(index=spread.index, data=0)
signals[z_score > entry_z] = -1 # 做空价差
signals[z_score < -entry_z] = 1 # 做多价差
signals[abs(z_score) < exit_z] = 0 # 平仓
return signals
这段代码看起来简单,但实际执行中坑很多。我曾经在2018年用这个框架做螺纹钢和热卷的配对交易,回测曲线漂亮得不行,一上实盘就亏钱。后来发现是忽略了两个问题:
避坑指南:
- 协整关系会随时间变化,需要定期重新检验。我一般每周跑一次协整检验。
- 价差的均值回归速度不是恒定的。市场波动率大的时候,回归速度会加快,阈值需要动态调整。
- 交易成本是配对交易的杀手。双边交易的手续费和滑点,很容易吃掉利润。
14.4 实战案例:螺纹钢与热卷的跨品种套利
螺纹钢和热卷,都是钢材,但用途不同。螺纹主要用于建筑,热卷主要用于制造业。它们共享相同的原料(铁矿石、焦炭),但下游需求不同。
我习惯用「热卷-螺纹价差」来做配对交易。历史数据显示,这个价差通常在-200到+200之间波动。当价差超过+200时,说明热卷相对螺纹太贵了,可以做空热卷、做多螺纹;当价差低于-200时,反向操作。
但这里有个细节:价差的波动区间不是固定的。2016年供给侧改革后,价差的均值从-50上移到了+50。如果你还用旧参数,就会一直亏。所以我建议用滚动窗口计算均值和标准差,窗口长度我一般选60个交易日。
关键参数设置:
- 滚动窗口:60个交易日
- 开仓阈值:2倍标准差
- 平仓阈值:0.5倍标准差
- 止损阈值:3倍标准差
- 头寸比例:按波动率调整,确保每笔风险敞口一致
14.5 知识体系总览
下面这张图,是我做跨品种套利这么多年总结出来的知识框架。你看一眼,基本就知道该往哪个方向使劲了。
这张图把跨品种套利拆成了三个维度:产业链关系是底层逻辑,统计基础是分析工具,交易执行是落地手段。三者缺一不可。我见过太多人只盯着统计指标做配对交易,结果被产业链逻辑的变化打得措手不及。
最后说一句:跨品种套利不是无风险套利。它本质上是统计套利,存在模型失效的风险。我建议新手先用模拟盘跑三个月,把产业链逻辑和统计方法都摸透了再上实盘。嗯,今天就到这里,希望对你有帮助。