实战案例一:股指期货基差套利(IF/IC/IH与沪深300/中证500/上证50)
各位同学,今天咱们来啃一块硬骨头——股指期货基差套利。说实话,这个案例是我在量化交易生涯中最早接触的实战策略之一。记得2015年那会儿,我刚入行,看着IF合约动不动就贴水上百点,心里直痒痒。后来踩了不少坑,才慢慢摸清门道。
基差套利,说白了就是吃「期货价格」和「现货价格」之间的差价。你想想看,股指期货本质上是对未来指数的预期。如果预期太悲观,期货就比现货便宜(贴水);太乐观,期货就贵(升水)。我们要做的,就是在价差偏离到离谱的时候,反向开仓,等它回归。
一、核心逻辑:基差为什么会回归?
很多人问我:「基差会不会越走越远?」嗯,这个问题问得好。我个人的理解是:基差最终会收敛到零附近,因为期货到期时,价格必须等于现货指数。这是制度决定的,不是市场情绪能改变的。
举个例子:IF当月合约贴水50点,你买入期货、卖出等市值的沪深300ETF。到期那天,期货价格和现货价格强制相等,你赚的就是这50点(扣除成本后)。
核心公式:
基差 = 期货价格 - 现货价格
套利收益 ≈ 基差 - 交易成本 - 冲击成本 - 资金成本
这里要注意,基差回归不是线性的。我在项目中遇到过,有时候基差在最后几天才突然收敛,前面一直扛着浮亏。所以,仓位管理比选方向更重要。
二、实战品种:IF / IC / IH 的脾气
三大股指期货,各有各的性子。我整理了一张表,方便大家对比:
| 品种 | 现货标的 | 合约乘数 | 典型基差波动范围 | 流动性 |
|---|---|---|---|---|
| IF | 沪深300 | 300元/点 | -30 ~ +20点 | 极高 |
| IC | 中证500 | 200元/点 | -80 ~ +40点 | 高 |
| IH | 上证50 | 300元/点 | -15 ~ +15点 | 较高 |
你看,IC的基差波动最大,经常出现深度贴水。为什么?因为中证500成分股里中小盘股多,市场恐慌时跌得狠,期货贴水就深。IH最稳,毕竟上证50是大蓝筹,情绪波动小。
我个人习惯:做贴水套利首选IC,做升水套利首选IF。IH波动太小,利润空间不够,除非资金量特别大,否则性价比不高。
三、策略框架:从信号到执行
下面这张图是我自己总结的套利流程,大家先看个全貌:
这个流程看起来简单,但每个环节都有坑。下面我挑几个关键点详细说。
四、信号生成:阈值怎么定?
阈值设定是套利策略的灵魂。定太宽,一年开不了几次仓;定太窄,频繁交易全交了手续费。
我常用的方法有两种:
- 历史分位数法:取过去60个交易日的基差数据,计算95%分位数和5%分位数。超过上界做空基差(卖期货买现货),低于下界做多基差(买期货卖现货)。
- 滚动标准差法:计算过去20个交易日的基差均值和标准差,阈值 = 均值 ± 2倍标准差。这个方法对市场变化更敏感。
我的经验: 对于IC,我习惯用2.5倍标准差作为阈值。因为IC波动大,2倍标准差太容易触发,交易成本扛不住。IF和IH用2倍就够了。
五、代码实现:核心逻辑
下面这段代码是我实际跑过的策略框架,去掉了风控和仓位管理部分,保留核心逻辑:
import pandas as pd
import numpy as np
from datetime import datetime, timedelta
def basis_spread_strategy(future_price, spot_price, lookback=20, z_threshold=2.0):
"""
基差套利信号生成
future_price: 期货价格序列
spot_price: 现货价格序列
"""
# 计算基差
basis = future_price - spot_price
# 滚动均值和标准差
basis_mean = basis.rolling(window=lookback).mean()
basis_std = basis.rolling(window=lookback).std()
# 计算Z-score
z_score = (basis - basis_mean) / basis_std
# 生成信号
signals = pd.Series(0, index=basis.index)
signals[z_score > z_threshold] = -1 # 做空基差
signals[z_score < -z_threshold] = 1 # 做多基差
return signals, z_score
# 使用示例
# signals, z = basis_spread_strategy(if_futures, csi300, lookback=20, z_threshold=2.0)
这段代码看着简单,但实际跑起来要注意几个点:
- 期货和现货的数据要对齐时间戳,别用错数据
- 滚动窗口长度要跟合约剩余天数匹配,临近交割日要缩短窗口
- Z-score阈值不是固定的,要根据品种和行情动态调整
六、避坑指南:我踩过的雷
做基差套利这些年,我交了不少学费。下面这几个坑,希望大家别再踩:
我曾经犯过的错:
- 忽视展期成本:有一次我持有了IC的贴水套利仓位,结果临近交割日基差还没回归。我被迫展期到下月合约,结果下月合约贴水更深,一展期就亏了十几个点。后来我学乖了,只做当月合约,到期前3天必须平仓。
- 现货跟踪误差:用ETF代替现货时,ETF的净值跟指数有偏差。我记得有次用500ETF做对冲,结果ETF折价了0.3%,套利利润全被吃掉了。现在我都用一篮子股票或者股指期权来对冲。
- 流动性陷阱:IC在2018年那会儿,深度贴水时买盘很少。我挂单买期货,结果成交价滑了5个点。嗯,从那以后我开仓都用限价单,不追单。
七、绩效评估:别只看收益率
很多人做回测只看年化收益率,其实基差套利更看重的是:
| 指标 | 说明 | 我的经验值 |
|---|---|---|
| 夏普比率 | 风险调整后收益 | 2.0以上算合格 |
| 最大回撤 | 策略最惨的时候亏多少 | 控制在3%以内 |
| 胜率 | 赚钱的交易占比 | 60%-70%正常 |
| 盈亏比 | 平均盈利/平均亏损 | 1.5以上 |
你想想看,基差套利本质上是赚「均值回归」的钱。胜率不会太高,但盈亏比一定要好。如果胜率超过80%,反而要警惕——是不是阈值设得太保守了?
八、实战要点总结
最后,我把核心要点再捋一遍:
- 选品种:贴水套利首选IC,升水套利首选IF。IH适合大资金做底仓。
- 定阈值:IC用2.5倍标准差,IF/IH用2倍。动态调整比固定阈值好。
- 控仓位:单笔仓位不超过总资金的20%。基差可能持续偏离,要留足保证金。
- 管风险:到期前3天平仓,不展期。用限价单,不追单。
说实话,基差套利不是暴利策略。年化10%-15%已经算不错了。但它胜在稳定,跟股票多头策略相关性低,是组合里很好的「压舱石」。我自己的实盘账户里,一直保留着20%的仓位做这个策略。
好了,这一章的内容就到这里。代码和数据我已经整理好了,大家回去跑一跑,有问题随时交流。