8. 统计套利与做市:协整关系与配对交易、均值回归策略、Delta中性做市、跨期套利

各位同学,欢迎来到第八章。这一章我们聊点实战的东西——统计套利。

说实话,做市商赚的钱,很大一部分来自于市场的不完美。价格不会永远合理,价差不会永远稳定。我们的工作,就是找到这些“不合理”,然后悄悄地把钱赚走。

我个人习惯把统计套利看作是做市策略的“进阶版”。做市商赚的是买卖价差,而统计套利赚的是价格关系的回归。两者结合,就是一台印钞机。

8.1 协整关系与配对交易

先问一个问题:为什么两只股票的价格会一起涨跌?

不是因为它们“长得像”,而是因为它们背后有共同的驱动因素。比如,可口可乐和百事可乐,它们的原材料成本、销售渠道、甚至广告投放节奏都很相似。这种关系,在统计学上就叫协整

协整的核心思想很简单:两个时间序列,虽然各自都是随机游走的(非平稳),但它们之间的线性组合却是平稳的。说白了,就是它们会“绑在一起”走,不会越跑越远。

我在项目中遇到过这样一个案例:某两只银行股,价差长期在±2个标准差内波动。一旦超出这个范围,就会迅速回归。这就是典型的协整关系。

关键点:协整 ≠ 相关性。相关性高不代表协整,协整也不要求高相关性。协整关注的是长期均衡关系,相关性只看短期同步性。

怎么检验协整?最常用的方法是Engle-Granger两步法

  1. 对两个序列做OLS回归,得到残差
  2. 对残差做ADF检验,看是否平稳

代码实现也不复杂:

import numpy as np
import pandas as pd
import statsmodels.api as sm
from statsmodels.tsa.stattools import adfuller

def check_cointegration(price_a, price_b):
    # 第一步:OLS回归
    X = sm.add_constant(price_a)
    model = sm.OLS(price_b, X).fit()
    residuals = model.resid
    
    # 第二步:ADF检验
    adf_stat, p_value, _, _, critical_values, _ = adfuller(residuals)
    
    return {
        'adf_stat': adf_stat,
        'p_value': p_value,
        'is_cointegrated': p_value < 0.05,
        'hedge_ratio': model.params[1]
    }

# 使用示例
result = check_cointegration(stock_a['close'], stock_b['close'])
print(f"协整检验p值: {result['p_value']:.4f}")
print(f"对冲比率: {result['hedge_ratio']:.4f}")

嗯,这里要注意:ADF检验的滞后阶数选择会影响结果。我一般用AIC准则自动选择,但有时候也会手动调整。曾经有一次,我因为滞后阶数选错了,差点错过一个很好的交易机会。

8.2 均值回归策略

找到协整关系后,下一步就是设计交易策略。均值回归策略,说白了就是“价差大了就做反向,价差小了就平仓”。

具体怎么做?我一般用Z-score来标准化价差:

def zscore_strategy(spread, entry_threshold=2.0, exit_threshold=0.5):
    """
    均值回归策略信号生成
    """
    zscore = (spread - spread.rolling(60).mean()) / spread.rolling(60).std()
    
    signals = pd.Series(index=spread.index, data=0)
    
    # 开仓信号
    signals[zscore > entry_threshold] = -1  # 做空价差
    signals[zscore < -entry_threshold] = 1  # 做多价差
    
    # 平仓信号
    signals[abs(zscore) < exit_threshold] = 0
    
    return signals, zscore

你想想看,为什么用2倍标准差作为阈值?这不是拍脑袋定的。在正态分布假设下,价差超出2倍标准差的概率只有5%左右。也就是说,95%的情况下价差会在范围内波动。这个胜率,做市商很喜欢。

我的经验:阈值不是固定的。波动率高的市场,我会把阈值设到2.5甚至3.0。波动率低的时候,1.5就够了。动态调整阈值,比死守一个值强得多。

曾经有一次,我在某商品期货上做配对交易,价差一直不回归,亏了不少。后来发现,是因为市场结构发生了变化——两个品种的基本面出现了分化。从那以后,我每次开仓前都会检查一下基本面,避免“刻舟求剑”。

8.3 Delta中性做市

Delta中性做市,听起来很高大上,其实原理很简单:让持仓对标的资产的价格变动不敏感

做市商在提供期权流动性时,会面临方向性风险。比如你卖出了一个看涨期权,如果标的资产大涨,你就亏大了。Delta中性策略就是通过买卖标的资产来对冲这个风险。

具体做法:

  1. 计算期权持仓的Delta值
  2. 买入或卖出相应数量的标的资产
  3. 定期调整,保持Delta接近0

举个例子:你卖出了10手看涨期权,每手Delta是0.6。那么总Delta就是-6(卖出期权是负Delta)。为了对冲,你需要买入6手标的资产。

def delta_hedge(option_position, option_delta, underlying_price):
    """
    Delta中性对冲计算
    """
    total_delta = option_position * option_delta
    hedge_quantity = -total_delta  # 反向对冲
    
    hedge_value = hedge_quantity * underlying_price
    
    return {
        'total_delta': total_delta,
        'hedge_quantity': hedge_quantity,
        'hedge_value': hedge_value
    }

# 示例
result = delta_hedge(option_position=-10, option_delta=0.6, underlying_price=100)
print(f"需要对冲 {result['hedge_quantity']} 手标的")
print(f"对冲金额: {result['hedge_value']:.2f}")
注意:Delta不是一成不变的。随着标的资产价格变化、时间流逝、波动率变化,Delta都会变。所以需要持续调整,这就是所谓的“Gamma风险”。我见过有人一天调整几十次,也有人一周才调一次。频率取决于你的风险承受能力和交易成本。

我个人习惯用阈值触发的方式:当Delta偏离0超过某个阈值(比如0.1)时,才进行调整。这样既能控制风险,又不会因为频繁交易而亏掉手续费。

8.4 跨期套利

跨期套利,就是利用同一品种不同月份合约之间的价差波动来获利。这是做市商最常用的套利方式之一。

为什么会有价差?因为不同月份的合约,反映了市场对未来不同时间点的预期。比如,近月合约受现货影响大,远月合约更多反映供需预期。

跨期套利的核心逻辑:

  • 正向市场:远月价格 > 近月价格,价差为正
  • 反向市场:远月价格 < 近月价格,价差为负
  • 价差回归:价差偏离均值后,会向均值回归

我常用的跨期套利策略:

def calendar_spread_strategy(near_price, far_price, lookback=20):
    """
    跨期套利信号生成
    """
    spread = far_price - near_price
    spread_mean = spread.rolling(lookback).mean()
    spread_std = spread.rolling(lookback).std()
    
    zscore = (spread - spread_mean) / spread_std
    
    signals = pd.Series(index=spread.index, data=0)
    
    # 价差过大,做空价差(卖远买近)
    signals[zscore > 2] = -1
    # 价差过小,做多价差(买远卖近)
    signals[zscore < -2] = 1
    
    return signals, spread, zscore

记得有一次,我在做原油跨期套利时,发现价差突然大幅偏离。我以为是机会,果断开仓。结果第二天,交易所出了新政策,导致价差结构彻底改变。那次亏得我肉疼。

避坑指南:跨期套利最大的风险不是价差不回归,而是交割规则变化流动性枯竭。我曾经因为没注意交割月规则,被迫实物交割,那叫一个惨。

做跨期套利,有几点要牢记:

  • 关注合约的流动性,别选成交量太小的合约
  • 注意交割月临近时的波动加剧
  • 考虑仓储成本、资金成本等持有成本因素
  • 设置止损,别死扛

知识体系总览

说了这么多,我们来画个图,把这一章的内容串起来:

统计套利与做市:知识体系 统计套利与做市 协整与配对交易 均值回归策略 Delta中性做市 跨期套利 Engle-Granger检验 对冲比率计算 残差平稳性 Z-score标准化 阈值设定 动态调整 Delta计算 对冲头寸管理 Gamma风险控制 价差结构分析 持有成本模型 交割规则风险 核心:找到不合理的价差,赌它回归 风险控制永远是第一位的

这张图把这一章的核心内容都串起来了。你看,从协整关系出发,到配对交易、均值回归,再到Delta中性做市和跨期套利,其实都是在做同一件事——找到价格关系中的“错误”,然后利用做市商的优势去纠正它

最后说一句:统计套利不是无风险套利。它只是概率上占优,不是100%赚钱。我见过太多人因为回测曲线好看就all in,结果实盘亏得底裤都不剩。记住,任何策略都有失效的时候,做好风控,活下去,比什么都重要。