第六章:跨期套利策略

跨期套利,说白了就是吃「时间差」的饭。

同一个品种,近月合约和远月合约,价格不会完全同步。有时候近月涨得快,远月跟不上;有时候远月跌得狠,近月反而坚挺。这种价差波动,就是我们套利的机会。

我个人习惯把跨期套利分成三类:价差分析、统计套利、展期管理。咱们一个一个来拆。

6.1 近远月合约价差分析

先搞清楚一个概念:价差 = 近月价格 - 远月价格。

这个值可以是正数,也可以是负数。正数叫「backwardation」(现货溢价),负数叫「contango」(期货溢价)。

为什么会这样?说白了就是供需关系在时间轴上的投影。

  • Backwardation:近月紧缺,远月宽松。比如豆粕,现在缺货,价格高;未来预期到货,价格低。
  • Contango:近月宽松,远月有溢价。比如原油,库存高,近月便宜;远月因为存储成本,价格更高。

我在项目中遇到过一种情况:某品种明明库存很高,但近月合约突然拉涨。后来一查,是交割库出了问题,仓单注册不了。嗯,这种「伪价差」不能碰。

核心要点:价差分析不是看绝对值,而是看相对位置。你要问自己三个问题:

  1. 当前价差处于历史什么分位?
  2. 驱动价差变化的因素是什么?
  3. 这个驱动因素可持续吗?

6.2 日历价差的统计套利

统计套利,说白了就是赌「均值回归」。

你想想看,价差不可能永远偏离。当它偏离到极端位置时,大概率会往回拉。我们要做的,就是在偏离时入场,等回归时平仓。

具体怎么做?我一般用Z-score来判断。

import numpy as np
import pandas as pd

def zscore_calendar_spread(near_price, far_price, window=20):
    spread = near_price - far_price
    mean = spread.rolling(window).mean()
    std = spread.rolling(window).std()
    z = (spread - mean) / std
    return z

# 示例:当Z-score > 2 时做空价差,< -2 时做多价差
z = zscore_calendar_spread(near, far, 20)
signal = np.where(z > 2, -1, np.where(z < -2, 1, 0))

这里有个坑,我曾经踩过:统计套利的前提是价差序列要平稳。如果不平稳,Z-score就是假的。所以入场前一定要做ADF检验。

我的经验:窗口期别选太短,20天以下噪音太大。我一般用30-60天,具体看品种的波动特性。

6.3 展期收益与滚动成本

做跨期套利,你不能只看价差,还得算展期收益和滚动成本。

展期收益,就是你从近月换到远月时,价差变化带来的收益。滚动成本,就是换仓时的手续费、滑点、冲击成本。

举个例子:

项目 数值
近月价格 5000
远月价格 4950
价差 50
展期天数 30
年化展期收益 50/4950 * 365/30 ≈ 12.3%

看起来不错对吧?但别忘了滚动成本。如果每次换仓滑点2个点,一年换12次,就是24个点的成本。年化下来,收益可能只剩一半。

注意:展期收益不是白拿的。它本质上是对你承担「基差风险」的补偿。如果价差走势跟你预期相反,展期收益会变成展期亏损。

我建议你把展期收益和滚动成本做成一张表,每次交易前都算一遍。别嫌麻烦,这步省了,后面亏钱的就是你。

知识体系总览

下面这张图,是我自己梳理的跨期套利核心逻辑。你照着这个框架去思考,基本不会跑偏。

跨期套利知识体系 价差分析 统计套利 展期管理 Backwardation / Contango 历史分位、驱动因素 供需关系、交割逻辑 Z-score / 均值回归 ADF平稳性检验 入场/出场阈值 展期收益 / 滚动成本 年化收益率计算 滑点、手续费、冲击 三者结合:完整的跨期套利策略

你看,价差分析是基础,统计套利是工具,展期管理是风控。三者缺一不可。

我见过太多人只盯着Z-score,忽略了展期成本,结果赚的还不够手续费。也见过有人只分析价差,不懂统计套利,入场点抓得稀烂。

一句话总结:跨期套利不是无风险套利,它是「有管理的风险暴露」。你赚的是信息差、执行差、耐心差。

好了,这一章就到这里。下一章咱们聊聊「跨品种套利」,那个更有意思。


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