跨品种套利基础:从原理到实战

各位同学,今天我们来聊聊跨品种套利。说实话,这是我最喜欢的交易策略之一。为什么?因为它不像单边交易那样靠天吃饭,而是利用品种之间的“亲戚关系”来赚钱。

我在刚入行时,有次看到螺纹钢和热卷的价差突然拉大,手痒做了个单边多螺纹。结果呢?被市场狠狠教育了一顿。后来我才明白,与其赌方向,不如做套利——赚的是价差回归的钱,稳得多。

什么是跨品种套利

跨品种套利,说白了就是同时买入一个品种、卖出另一个相关品种。这两个品种之间必须有经济上的关联性,比如:

  • 原料与成品:大豆→豆粕+豆油(压榨套利)
  • 替代关系:螺纹钢 vs 热卷(都可以用来盖楼)
  • 产业链上下游:焦煤→焦炭→螺纹钢

你想想看,如果螺纹钢突然暴涨,但热卷没动,这合理吗?不合理。因为钢厂可以随时调整生产线,把产能从热卷切换到螺纹钢。这种不合理,就是我们的机会。

套利原理:价差与比价关系

套利的核心就两个概念:价差比价

价差 = 品种A价格 - 品种B价格
比价 = 品种A价格 / 品种B价格

我个人习惯用价差来做统计套利,因为价差更直观。比如豆粕和豆油,我一般看价差的历史分布。但有些品种,比如黄金和白银,用比价更合适——毕竟它们价格差了好几个数量级。

核心原则:价差或比价会围绕一个均值波动。当偏离均值过大时,就是入场时机。

为什么会这样?因为产业链的利润会自我调节。举个例子:

  • 如果螺纹钢利润太高,钢厂会增产,供给增加→价格回落
  • 如果热卷利润太低,钢厂会减产,供给减少→价格回升

这种调节机制,保证了价差不会永远偏离。嗯,这里要注意:这个“均值”不是固定的,它会随着基本面变化而漂移。我见过不少新手死扛一个固定价差,结果被趋势行情打爆。

套利机会识别:实战框架

怎么识别套利机会?我总结了一个三步法:

  1. 筛选品种对:相关性要够高(通常要求相关系数 > 0.8)
  2. 计算价差/比价:用历史数据算出均值、标准差
  3. 设定阈值:一般用 ±2 倍标准差作为入场信号

下面这张图是我自己画的套利机会识别流程,你一看就明白:

跨品种套利机会识别流程 1. 筛选品种对 2. 计算价差/比价 3. 设定阈值 价差偏离 阈值? 执行套利 继续等待

实战案例:螺纹钢与热卷套利

拿螺纹钢和热卷举个例子。这两个品种都是钢材,生产工艺几乎一样,只是用途不同。螺纹钢盖楼用,热卷做汽车、家电。

我曾在2020年做过一次螺纹钢-热卷套利。当时螺纹钢因为基建刺激涨得飞快,热卷却因为汽车销量下滑没跟上。价差从正常的100元/吨拉大到300元/吨。

我的操作很简单:

  • 卖出螺纹钢期货
  • 买入热卷期货
  • 等两者价差回归到150元附近平仓

结果呢?两周后价差回到了120元,每手赚了180点。嗯,这种机会不是天天有,但一旦出现,胜率很高。

我的小技巧:别只看价格,还要看持仓量。如果价差拉大但持仓量没变化,说明是情绪驱动,回归概率大。如果持仓量暴增,可能是基本面变了,要小心。

避坑指南

我曾经犯过一个低级错误:在价差偏离时直接入场,没考虑交易成本。结果呢?价差确实回归了,但扣除手续费和滑点,基本没赚钱。

所以你要记住:

  • 计算成本:双边手续费 + 滑点(一般按1-2个tick算)
  • 留足安全边际:价差至少要超过成本的2倍才值得做
  • 别扛单:如果价差继续扩大,该止损就止损

警告:跨品种套利不是无风险套利!价差可能因为基本面变化而永久性偏离。比如2021年煤炭限产,动力煤和焦煤的比价关系彻底变了。如果你还按历史均值做,会亏得很惨。

代码示例:价差计算与信号生成

下面是我常用的Python代码,用来计算价差并生成交易信号:

import pandas as pd
import numpy as np

def calculate_spread(price_a, price_b):
    """计算价差和z-score"""
    spread = price_a - price_b
    mean = spread.rolling(60).mean()  # 60日均值
    std = spread.rolling(60).std()    # 60日标准差
    z_score = (spread - mean) / std
    
    return spread, z_score

def generate_signals(z_score, entry_threshold=2.0, exit_threshold=0.5):
    """生成交易信号"""
    signals = pd.Series(index=z_score.index, dtype='float64')
    
    # 入场信号
    signals[z_score > entry_threshold] = -1  # 做空价差
    signals[z_score < -entry_threshold] = 1  # 做多价差
    
    # 出场信号
    signals[abs(z_score) < exit_threshold] = 0
    
    # 向前填充,保持持仓状态
    signals = signals.fillna(method='ffill')
    
    return signals

# 使用示例
# spread, z_score = calculate_spread(rb_price, hc_price)
# signals = generate_signals(z_score)

这段代码的核心逻辑:当z-score超过2时入场,低于0.5时出场。我个人习惯用60日均值,但你可以根据品种特性调整。比如波动大的品种,用30日均值更灵敏。

总结一下

跨品种套利的核心就三件事:

  • 找对品种对:相关性高、产业链关联强
  • 算准价差:用统计方法找出均值回归区间
  • 管住手:等信号出现再动手,别凭感觉交易

记住,套利不是印钞机。它只是让你在市场上活得久一点、稳一点。我见过太多人把套利做成单边,最后爆仓离场。嗯,希望你能避开这些坑。


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