一、统计套利基础:从一次失败的交易说起

我记得刚入行那会儿,做过一个自以为很聪明的策略。发现茅台和五粮液的股价走势几乎一模一样,于是果断做多茅台、做空五粮液。结果呢?一周后茅台跌了3%,五粮液涨了2%,两边打脸。后来我才明白——这不叫统计套利,这叫「看着像就上了」。

统计套利,说白了就是利用历史数据找到两个或多个资产之间的统计关系,当这种关系暂时偏离时入场,赌它迟早会回归。嗯,这里要注意:不是所有「长得像」的股票都能做配对。

1.1 什么是统计套利?

统计套利(Statistical Arbitrage,简称Stat Arb)是一种基于数学模型和统计方法的交易策略。它不追求无风险收益,而是寻找高概率的价差回归机会

核心思想: 资产价格之间长期存在某种统计关系,短期偏离是暂时的,最终会回归均值。

我个人习惯把统计套利分成三个层次:

  • 第一层: 找关系——哪些资产之间存在稳定的统计关联?
  • 第二层: 度量偏离——当前价差偏离了多少个标准差?
  • 第三层: 执行交易——什么时候入场?什么时候止损?

你想想看,如果两个资产完全无关,那谈何套利?所以第一步永远是相关性检验协整检验

1.2 配对交易 vs 统计套利

很多人把这两个概念混为一谈。我在项目中遇到过不少面试者,一上来就说「我做过配对交易,就是统计套利」。其实不然。

维度 配对交易 统计套利
资产数量 通常2个 2个或多个(可扩展到篮子)
关系假设 价差平稳 残差平稳(协整关系)
交易信号 价差突破阈值 Z-score、回归残差等
风险控制 简单止损 多因子风险拆解
适用场景 同行业、同板块 跨行业、跨市场、跨品种

配对交易是统计套利的一种特例。说白了,配对交易是「两个人跳舞」,统计套利是「一群人合唱」。你如果只盯着两个股票,那叫配对;如果你用PCA、因子模型去分析一篮子资产,那才是真正的统计套利。

避坑指南: 我曾经犯过一个错误——看到两只股票相关性高达0.95就直接上配对。结果发现它们只是同涨同跌,根本没有协整关系。相关性高 ≠ 可套利,切记。

1.3 统计套利的数学基础

搞统计套利,数学绕不开。但别怕,我尽量用大白话讲清楚。

1.3.1 平稳性

一个时间序列是平稳的,意味着它的均值、方差、自协方差不随时间变化。为什么重要?因为统计套利本质上是在赌「偏离会回归」,如果序列本身就不平稳,那回归到哪去?

常用的检验方法是ADF检验(Augmented Dickey-Fuller Test)。

# Python示例:ADF检验
from statsmodels.tsa.stattools import adfuller

# 假设price_A和price_B是两个价格序列
spread = price_A - price_B
result = adfuller(spread)

if result[1] < 0.05:
    print("价差序列平稳,可以做配对")
else:
    print("不平稳,别急着上")

1.3.2 协整关系

两个非平稳序列,如果它们的线性组合是平稳的,就称它们具有协整关系。这是统计套利的核心数学基础

举个例子:

  • 股票A和股票B各自的价格都是随机游走(非平稳)
  • 但A - 2×B 这个组合是平稳的
  • 那么A和B就存在协整关系

我个人习惯用Engle-Granger两步法来检验协整:

  1. 第一步:用OLS回归 A = α + β×B + ε
  2. 第二步:对残差ε做ADF检验
# 协整检验示例
import statsmodels.api as sm

# 第一步:回归
X = sm.add_constant(price_B)
model = sm.OLS(price_A, X).fit()
residuals = model.resid

# 第二步:检验残差平稳性
result = adfuller(residuals)
print(f"协整检验p值: {result[1]:.4f}")

小技巧: 我建议用Johansen检验替代Engle-Granger,尤其是当你处理3个以上资产时。Johansen能一次性检验多个协整向量,效率高得多。

1.3.3 均值回归与Ornstein-Uhlenbeck过程

统计套利中,价差的运动通常用Ornstein-Uhlenbeck(OU)过程来建模:

dXt = θ(μ - Xt)dt + σdWt

这个公式看着吓人,其实意思很简单:

  • θ:回归速度(越大越快)
  • μ:长期均值
  • σ:波动率
  • dWt:随机扰动

说白了,价差就像一根被弹簧拉着的球——偏离越远,拉回来的力越大。θ就是弹簧的弹性系数。

1.3.4 交易信号的生成

有了模型,怎么生成信号?我常用的方法是Z-score

# Z-score计算
import numpy as np

def zscore(series, window=20):
    mean = series.rolling(window).mean()
    std = series.rolling(window).std()
    return (series - mean) / std

# 当Z-score > 2时做空价差,< -2时做多价差
z = zscore(spread, window=60)
long_signal = z < -2
short_signal = z > 2

关键点: 阈值的选择直接影响策略表现。2倍标准差是经典值,但我建议根据历史回测调整。我在一个商品期货策略中试过1.5倍标准差,夏普比率反而更高——因为市场没那么快回归。

知识体系总览

下面这张图是我自己整理的统计套利知识框架,你可以把它当作本章的「地图」:

统计套利知识体系 统计套利 配对交易(特例) 多资产篮子套利 因子模型套利 价差平稳性 协整检验 PCA降维 聚类分析 Barra模型 统计风险模型 ADF检验 Johansen检验 特征值分解 K-means/DBSCAN 行业/风格因子 协方差估计 核心:均值回归 + 协整关系 + 风险因子拆解

这张图把本章的核心内容串起来了。从最上层的统计套利,往下拆成三种主要形式,再到具体的数学工具和检验方法。你学完这一章,应该能看懂这张图的每一个节点。

我的建议: 初学者先从配对交易入手,跑通一个完整的回测流程。等理解了价差回归的逻辑,再扩展到多资产和因子模型。别一上来就想搞PCA,容易把自己绕晕。


公众号:蓝海数据掘金营,微信deep3321