第十四章:跨品种套利实战:产业链上下游品种关系、比价与价差分析、配对交易策略

跨品种套利,说白了就是利用不同品种之间的价格关系来赚钱。我做了这么多年,发现这是最考验产业链理解深度的一种策略。你想想看,如果只看单个品种,你顶多是个技术分析选手;但如果你能把上下游品种的关系吃透,那才是真正的量化交易者。

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 配对交易策略:从统计套利到执行细节

配对交易是跨品种套利最经典的实现方式。它的核心假设是:两个相关品种的价格关系会均值回归。我把它拆成四个步骤:

  1. 筛选配对:用相关性分析、协整检验找到合适的品种对
  2. 计算价差:确定价差的计算方式(简单价差、标准化价差、回归残差)
  3. 设定阈值:用历史分位数或标准差确定开仓和平仓阈值
  4. 执行交易:确定头寸比例、止损规则、资金管理

下面是我常用的一个配对交易策略框架代码:

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 知识体系总览

下面这张图,是我做跨品种套利这么多年总结出来的知识框架。你看一眼,基本就知道该往哪个方向使劲了。

跨品种套利知识体系 产业链关系 统计基础 交易执行 原料-成品关系 替代关系 互补关系 加工利润公式 相关性分析 协整检验 均值回归检验 比价/价差分析 头寸比例计算 阈值设定 止损规则 资金管理 压榨套利 配对交易 比价回归 大豆→豆粕+豆油 螺纹钢↔热卷 铜↔铝(比价)

这张图把跨品种套利拆成了三个维度:产业链关系是底层逻辑,统计基础是分析工具,交易执行是落地手段。三者缺一不可。我见过太多人只盯着统计指标做配对交易,结果被产业链逻辑的变化打得措手不及。

最后说一句:跨品种套利不是无风险套利。它本质上是统计套利,存在模型失效的风险。我建议新手先用模拟盘跑三个月,把产业链逻辑和统计方法都摸透了再上实盘。嗯,今天就到这里,希望对你有帮助。