实战案例一:股指期货基差套利(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波动太小,利润空间不够,除非资金量特别大,否则性价比不高。

三、策略框架:从信号到执行

下面这张图是我自己总结的套利流程,大家先看个全貌:

股指期货基差套利核心流程 1. 数据获取 期货/现货实时行情 2. 基差计算 实时基差 = F - S 3. 信号判断 基差 > 阈值? 4. 开仓 反向对冲 5. 持仓监控 基差回归? 6. 平仓止盈/止损 基差回归到阈值内 7. 绩效统计 夏普、最大回撤 8. 策略优化 调整阈值/仓位 循环迭代

这个流程看起来简单,但每个环节都有坑。下面我挑几个关键点详细说。

四、信号生成:阈值怎么定?

阈值设定是套利策略的灵魂。定太宽,一年开不了几次仓;定太窄,频繁交易全交了手续费。

我常用的方法有两种:

  1. 历史分位数法:取过去60个交易日的基差数据,计算95%分位数和5%分位数。超过上界做空基差(卖期货买现货),低于下界做多基差(买期货卖现货)。
  2. 滚动标准差法:计算过去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%的仓位做这个策略。

好了,这一章的内容就到这里。代码和数据我已经整理好了,大家回去跑一跑,有问题随时交流。

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