一、统计套利基础:从一次实战教训说起

各位同学好,我是老张。在量化圈摸爬滚打十几年,今天咱们聊聊统计套利。

先讲个故事。2015年那会儿,我刚开始做跨市场套利。看到A股和H股的同股同权标的,价差动不动就10%以上。我心想,这不就是捡钱吗?结果呢?价差不仅没收敛,反而越拉越大。亏了钱不说,还被风控叫去喝茶。

后来我才明白——那不是无风险套利,那是统计套利。两者有本质区别。

1.1 什么是统计套利?

统计套利,说白了就是利用统计规律赚钱。它不保证每次都对,但长期来看,胜率能让你盈利。

举个例子。茅台和五粮液,都是白酒龙头。历史上它们的价格走势高度相关。如果某天茅台突然大涨,五粮液没动,价差拉大了。这时候我可能会做多五粮液、做空茅台,赌价差回归。

注意,这不是无风险的。万一茅台继续涨,五粮液继续跌呢?有可能。但统计上,这种偏离大概率会修复。这就是统计套利的核心逻辑。

统计套利的定义:基于历史统计规律,利用资产价格偏离均值的机会,构建多空组合,期望价格回归而获利。

1.2 统计套利 vs 无风险套利

这两者经常被混淆。我当年就吃过这个亏。咱们用表格对比一下:

对比维度 无风险套利 统计套利
确定性 100%确定 概率性(70%-80%胜率)
风险 几乎为零 存在模型风险、尾部风险
机会频率 极低(秒级甚至更低) 较高(分钟级到日级)
资金容量
典型例子 股指期货期现套利 配对交易、ETF套利

无风险套利,比如股指期货和现货之间的价差。理论上,价差超过交易成本就能套。但现实中,这种机会转瞬即逝,而且资金容量有限。

统计套利呢?机会多,容量大,但你要承担风险。我个人的经验是:统计套利赚的是概率的钱,不是确定的钱。你想想看,如果每次都能赚,那市场早就被套平了。

1.3 统计套利的数学基础

搞统计套利,离不开两个核心概念:均值回归协整性

1.3.1 均值回归

均值回归,就是价格会围绕某个均值上下波动。高了会跌,低了会涨。听起来简单,但实际应用时坑很多。

我曾经犯过一个错误。2017年做螺纹钢和热卷的套利,看到价差偏离历史均值两个标准差,直接开仓。结果呢?价差继续偏离,最后止损出局。后来复盘发现——均值不是一成不变的。市场结构变了,均值也会变。

判断均值回归,常用的方法有:

  • 布林带:价格触及上下轨时,回归概率大
  • RSI指标:超买超卖区域
  • Z-score:标准化后的偏离程度

这里给个简单的Z-score计算代码:

import numpy as np
import pandas as pd

def calculate_zscore(spread, window=20):
    """
    计算价差的Z-score
    spread: 价差序列
    window: 滚动窗口
    """
    mean = spread.rolling(window).mean()
    std = spread.rolling(window).std()
    zscore = (spread - mean) / std
    return zscore

# 使用示例
# zscore = calculate_zscore(spread, window=20)
# 当zscore > 2 或 zscore < -2 时,考虑开仓

个人建议:Z-score阈值不要死板地用2。我一般会根据品种特性调整,比如波动大的品种用2.5,波动小的用1.5。多回测,找到最适合的阈值。

1.3.2 协整性

协整性,是统计套利的灵魂。它描述的是两个或多个时间序列之间是否存在长期稳定的关系。

举个例子。上证50和沪深300,长期来看走势高度一致。但短期可能有偏离。如果它们存在协整关系,那么偏离后大概率会回归。

检验协整性,最常用的是Engle-Granger两步法

  1. 对两个序列做线性回归,得到残差
  2. 对残差做单位根检验(ADF检验)

如果残差是平稳的,说明存在协整关系。

from statsmodels.tsa.stattools import adfuller
import statsmodels.api as sm

def check_cointegration(price1, price2):
    """
    检验两个价格序列的协整性
    返回: (是否协整, p值)
    """
    # 第一步:回归
    X = sm.add_constant(price2)
    model = sm.OLS(price1, X).fit()
    residuals = model.resid
    
    # 第二步:ADF检验
    adf_result = adfuller(residuals, maxlag=1)
    p_value = adf_result[1]
    
    # p值小于0.05,认为存在协整关系
    is_cointegrated = p_value < 0.05
    return is_cointegrated, p_value

# 使用示例
# is_coint, p = check_cointegration(price_a, price_b)
# print(f"是否协整: {is_coint}, p值: {p:.4f}")

避坑指南:我曾经遇到过两个序列ADF检验通过,但实际套利效果很差的情况。后来发现,协整关系会随时间变化。建议每3-6个月重新检验一次,或者用滚动窗口检验。

1.4 统计套利的市场逻辑

为什么统计套利能赚钱?这背后有深刻的市场逻辑。

第一,市场不是完全有效的。 如果市场完全有效,价格永远合理,就没有套利空间。但现实中,信息传递有延迟,投资者情绪会波动,导致价格短期偏离。

第二,套利力量的存在。 当价差偏离时,套利者会入场,推动价格回归。这本身就是一种自我实现的预言。你想想看,如果所有人都相信价差会回归,那它真的会回归。

第三,基本面约束。 很多资产之间存在天然的比价关系。比如豆粕和菜粕,都是蛋白饲料,可以相互替代。如果价差过大,饲料厂会调整配方,从而推动价差回归。

下面这张图,展示了统计套利的完整逻辑框架:

统计套利核心逻辑框架 市场非完全有效 信息延迟、情绪波动 数学基础 均值回归 + 协整性 构建套利策略 多空组合、仓位管理 核心步骤:发现偏离 → 开仓 → 等待回归 → 平仓 风险控制:止损、仓位管理、模型监控 盈利来源 概率优势(长期胜率 > 50%)+ 风险溢价

这张图把统计套利的逻辑串起来了。从市场非有效出发,到数学基础,再到策略构建和风险控制,最后落到盈利来源。每个环节都不可或缺。

1.5 小结

统计套利不是无风险套利,它赚的是概率的钱。核心在于找到稳定的统计关系,然后耐心等待价格回归。

我个人觉得,做统计套利最难的,不是数学,不是代码,而是心态。当价差持续偏离时,你能不能扛住?当连续亏损时,你还相不相信模型?这些才是真正的考验。

好了,这一章就到这里。记住:统计套利是科学,也是艺术。科学的部分可以量化,艺术的部分需要经验积累。

本章核心要点:

  • 统计套利基于概率,不是确定性
  • 均值回归和协整性是两大数学基础
  • 市场非有效是套利存在的根本原因
  • 风险控制比盈利更重要

蓝海数据掘金营,专注资料整理