一、期货套利基础:套利概念、价差原理、跨期套利与跨品种套利简介
1.1 套利到底是什么?
说实话,我刚入行那会儿,觉得套利就是「低买高卖」的升级版。后来做多了才发现,套利的本质是「吃价差」,而不是赌单边方向。
举个例子。你发现螺纹钢和热卷,这两个品种价格走势高度相关。突然有一天,螺纹涨了2%,热卷只涨了0.5%。这时候你买螺纹、卖热卷,等它们价差回归正常,你就赚了。这就是套利。
我个人习惯把套利分成三类:
- 跨期套利:同一个品种,不同月份合约之间
- 跨品种套利:不同品种,但有关联性
- 跨市场套利:同一个品种,不同交易所之间
嗯,这节课我们先讲前两种。跨市场套利涉及汇率、时差等问题,后面单独开一章。
核心要点:套利不是预测价格涨跌,而是预测价差回归。你赚的是「价差收敛」的钱,不是「方向判断」的钱。
1.2 价差原理——套利的底层逻辑
价差,说白了就是两个价格之间的差值。但这里有个坑——价差不是随便减一减就完事的。
我见过不少新手,直接拿A合约价格减去B合约价格,然后画个图就开始交易。结果呢?亏得莫名其妙。
为什么会这样?因为价差计算要考虑几个关键因素:
- 合约乘数:不同品种的每手吨数可能不同
- 报价单位:有的按吨报价,有的按千克
- 最小变动价位:直接影响价差精度
举个例子,螺纹钢和热卷:
| 品种 | 合约乘数 | 报价单位 | 最小变动 |
|---|---|---|---|
| 螺纹钢 | 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