
统计套利的核心逻辑
统计套利策略基于资产价格之间的长期均衡关系,当价格偏离均衡时入场,期待回归均衡后获利。其数学基础是协整理论,而非简单的相关性。相关性高不代表价格差会收敛,协整则保证价差序列是平稳的,即均值回归属性。运行统计套利需要找到一对或多只具有协整关系的标的,构建价差序列,并计算其标准差。
第一步:筛选协整对
协整检验常用Engle-Granger两步法或Johansen检验。以股票对为例,若A和B的价格序列分别为P_A和P_B,先做回归:P_A = α + β P_B + ε。若残差ε是平稳序列,则A和B协整。平稳性检验用ADF检验,p值小于0.05拒绝非平稳原假设。实际应用中,可对同行业股票、ETF与一篮子股票、期货跨期合约等进行全组合扫描,选择ADF p值最低且经济逻辑合理的配对。
关键参数是β值,反映对冲比例。若β=1.5,则每买入1单位A,需卖出1.5单位B。注意β需定期重估,因为协整关系可能随时间漂移。

第二步:构建价差与波动带
得到协整对后,定义价差S = P_A - β P_B。计算历史价差的移动平均MA和标准差σ。常用长度60至120个周期。设定入场阈值:当Z-score = (S - MA) / σ 超过+2时,做空价差(卖出A,买入B);当Z-score低于-2时,做多价差(买入A,卖出B)。出场阈值通常设为0.5或0,即价差回归均值附近。
对于灵活的统计套利,阈值可动态调整。比如使用布林带通道,当价差突破2σ并回落时开仓。止损设置可基于最大偏离,如超过3σ强行平仓,防止协整关系崩溃带来的大规模亏损。
第三步:动态调仓与半衰期
统计套利并非一劳永逸。需监控价差的均值回归速度,用半衰期衡量。半衰期是价差偏离后回到均衡所需时间的一半。计算半衰期可通过对数价差序列的一阶自回归:ΔS_t = λ S_{t-1} + ε_t,半衰期 = -log(2) / λ。λ为负值,若λ接近0,说明均值回归极慢,不适合做统计套利。一般选择半衰期在3至10个交易日内的配对。
调仓频率与半衰期相关。若半衰期较短,则持仓周期短,可提高交易频次;若较长,则需耐心持有。合理设置再平衡间隔,例如每日收盘前检查价差是否触发信号。β值每月滚动回归更新一次,避免参数过时。
第四步:风险管理与成本控制
统计套利的风险主要来自三方面:协整关系破坏、交易成本侵蚀利润、极端市场波动。协整关系可能因公司基本面变化而瓦解,因此每季度重新检验协整性。止损必须果断,当价差突破3σ且无回归迹象时离场。
交易成本包括佣金、滑点和冲击成本。高频统计套利需选择流动性好的品种,并估算价差回归的盈利空间能否覆盖成本。例如,若价差均值回归期望盈利为每单位0.5元,双边交易成本为0.1元,则仍可执行。注意设置最小开仓价差阈值,如Z-score必须大于2.2才触发,避免噪声交易。
第五步:python实现简易统计套利
以下代码演示了协整检验和交易信号生成的基本框架,用于股票对数。实际使用需接入数据源和下单接口。
import numpy as np
import pandas as pd
from statsmodels.tsa.stattools import coint, adfuller
# 假设有价格数据df,包含列 'A', 'B'
df = pd.read_csv('prices.csv', index_col=0, parse_dates=True)
# 1. 协整检验
coint_t, pvalue, _ = coint(df['A'], df['B'])
print(f'coint p-value: {pvalue:.4f}') # p<0.05则协整
# 2. 计算价差和zscore
# 用滚动窗口估计beta(简单OLS)(实际可用滚动回归)
window = 60
spread = df['A'] - df['B'] # 假设beta=1
mean = spread.rolling(window).mean()
std = spread.rolling(window).std()
z = (spread - mean) / std
# 3. 信号生成
entry_threshold = 2.0
exit_threshold = 0.5
positions = pd.Series(0, index=df.index)
for i in range(1, len(z)):
if positions.iloc[i-1] == 0:
if z.iloc[i] > entry_threshold:
positions.iloc[i] = -1 # 做空价差
elif z.iloc[i] < -entry_threshold:
positions.iloc[i] = 1 # 做多价差
else:
if positions.iloc[i-1] == -1 and z.iloc[i] < exit_threshold:
positions.iloc[i] = 0
elif positions.iloc[i-1] == 1 and z.iloc[i] > -exit_threshold:
positions.iloc[i] = 0
else:
positions.iloc[i] = positions.iloc[i-1]
第六步:扩展与优化
统计套利可拓展至多品种组合,如三只股票配对,用线性回归构造残差。也可结合机器学习方法,如卡尔曼滤波动态估计beta和价差均值。高频市场中,使用tick数据能捕捉更短周期回归,但成本控制更严格。
回测时注意避免前视偏差,使用walk-forward验证。统计套利策略的收益分布通常表现为稳定的小赢小亏,但偶尔会在协整崩溃时出现大额亏损,因此仓位管理显得尤为重要。建议单策略风险敞口不超过总资金的5%,并搭配其他低相关策略。
实践统计套利需持续监控经济环境和行业动态。当标的公司发生并购、重组或政策变化时,协整关系可能永久改变,及时剔除相关配对。量化交易中,计算与使用统计套利策略是动态优化过程,需要模型迭代和实盘修正。