一、期货套利基础:套利概念、价差原理、跨期套利与跨品种套利简介

1.1 套利到底是什么?

说实话,我刚入行那会儿,觉得套利就是「低买高卖」的升级版。后来做多了才发现,套利的本质是「吃价差」,而不是赌单边方向。

举个例子。你发现螺纹钢和热卷,这两个品种价格走势高度相关。突然有一天,螺纹涨了2%,热卷只涨了0.5%。这时候你买螺纹、卖热卷,等它们价差回归正常,你就赚了。这就是套利。

我个人习惯把套利分成三类:

  • 跨期套利:同一个品种,不同月份合约之间
  • 跨品种套利:不同品种,但有关联性
  • 跨市场套利:同一个品种,不同交易所之间

嗯,这节课我们先讲前两种。跨市场套利涉及汇率、时差等问题,后面单独开一章。

核心要点:套利不是预测价格涨跌,而是预测价差回归。你赚的是「价差收敛」的钱,不是「方向判断」的钱。

1.2 价差原理——套利的底层逻辑

价差,说白了就是两个价格之间的差值。但这里有个坑——价差不是随便减一减就完事的

我见过不少新手,直接拿A合约价格减去B合约价格,然后画个图就开始交易。结果呢?亏得莫名其妙。

为什么会这样?因为价差计算要考虑几个关键因素:

  1. 合约乘数:不同品种的每手吨数可能不同
  2. 报价单位:有的按吨报价,有的按千克
  3. 最小变动价位:直接影响价差精度

举个例子,螺纹钢和热卷:

品种 合约乘数 报价单位 最小变动
螺纹钢 10吨/手 元/吨 1元/吨
热卷 10吨/手 元/吨 1元/吨

你看,这两个品种参数完全一致,所以价差可以直接用价格相减。但如果是豆粕和豆油呢?合约乘数不一样,就得先做归一化处理。

我的经验:做价差分析前,先把两个品种的合约参数对齐。我习惯写一个标准化函数,把价格统一转换成「每吨价格」,这样后续计算才不会出错。

1.3 跨期套利——同一个品种,不同月份

跨期套利,说白了就是「近月合约」和「远月合约」之间的博弈。

你想想看,同一个品种,为什么不同月份的价格会不一样?

  • 仓储成本:持有现货到远月,需要付仓储费
  • 资金成本:占用资金有利息
  • 季节性因素:比如农产品收获季,近月压力大
  • 市场情绪:远月合约容易受预期影响

我记得有一次做甲醇的跨期套利。当时近月合约因为港口库存高企,价格被压得很低。远月合约却因为冬季取暖需求预期,价格坚挺。价差拉到了历史极值。

我当时判断:库存高是短期因素,取暖需求是确定性事件。所以做了「买近月、卖远月」的反向套利。结果呢?价差果然在两周内回归了。

避坑指南:我曾经在跨期套利上栽过跟头——忽略了交割规则。有些品种临近交割月,保证金会大幅提高,持仓限额也会收紧。如果你做的是实物交割品种,还要考虑仓单注册问题。这些细节,做策略前一定要查清楚。

1.4 跨品种套利——找关联,吃回归

跨品种套利,比跨期复杂一些。你得找到两个逻辑上有关联的品种。

常见的配对有:

  • 螺纹钢 vs 热卷:同属钢材,生产工艺相近
  • 豆粕 vs 豆油:同属大豆压榨产业链
  • 焦煤 vs 焦炭:上下游关系
  • 黄金 vs 白银:同为贵金属,走势高度相关

但这里有个关键问题:相关性不等于因果关系

我见过有人拿「螺纹钢和鸡蛋」做套利,理由是两者价格都受CPI影响。这逻辑就太牵强了。套利的核心是「价差回归」,而回归的前提是两者之间有经济上的内在联系

做跨品种套利,我一般会先画一张产业链图:

跨品种套利产业链示例(大豆压榨) 大豆(原料) 压榨环节 豆粕(副产品) 豆油(副产品) 豆粕和豆油同属压榨产业链,价差存在内在约束

你看,豆粕和豆油都来自大豆压榨。压榨利润 = 豆粕价格 × 出粕率 + 豆油价格 × 出油率 - 大豆价格。这个利润会围绕一个均衡值波动。当利润过高或过低时,套利机会就出现了。

实战要点:做跨品种套利,一定要理解两个品种之间的「定价公式」。比如螺纹钢和热卷,价差主要受「热轧成本溢价」影响。这个溢价通常在100-300元/吨之间波动。超出这个范围,就是套利机会。

1.5 数据清洗的起点——价差计算

说了这么多理论,咱们来点实际的。做套利策略,第一步就是算价差。但原始数据往往很脏,需要清洗。

我一般用Python处理,代码大概长这样:

import pandas as pd
import numpy as np

def calculate_spread(df1, df2, multiplier1=1, multiplier2=1):
    """
    计算标准化价差
    df1, df2: 包含'close'列的DataFrame
    multiplier1, multiplier2: 合约乘数调整因子
    """
    # 对齐时间索引
    merged = pd.merge(df1[['close']], df2[['close']], 
                      left_index=True, right_index=True, 
                      suffixes=('_1', '_2'))
    
    # 标准化处理
    merged['price1_norm'] = merged['close_1'] * multiplier1
    merged['price2_norm'] = merged['close_2'] * multiplier2
    
    # 计算价差
    merged['spread'] = merged['price1_norm'] - merged['price2_norm']
    
    # 清洗:去除异常值(3倍标准差)
    mean = merged['spread'].mean()
    std = merged['spread'].std()
    merged['spread_clean'] = merged['spread'].clip(mean - 3*std, mean + 3*std)
    
    return merged[['spread', 'spread_clean']]

小技巧:我习惯在计算价差前,先检查两个品种的交易时间是否一致。比如夜盘品种和日盘品种,时间戳对不上,直接merge会出问题。我的做法是:先resample到相同频率,再计算价差。

1.6 本章小结

嗯,这一章我们讲了套利的基础框架。说白了就三件事:

  • 套利是吃价差,不是赌方向
  • 价差计算要标准化,注意合约参数
  • 跨期和跨品种,逻辑不同,方法也不同

我个人觉得,套利最难的不是策略本身,而是数据清洗。很多新手拿着漂亮的理论模型,一跑实盘就亏钱,为什么?因为数据有坑。下一章我们会专门讲数据清洗的实战技巧,包括如何处理缺失值、异常值、时间对齐等问题。

记住一句话:数据干净了,策略就成功了一半


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