22. 统计套利的陷阱:伪回归、过拟合、样本外失效、流动性危机
统计套利听起来很美,对吧?用历史数据跑个回归,找两个品种的价差,低买高卖,躺着赚钱。但我要泼一盆冷水——这条路坑太多了。我做了这么多年量化,见过太多人在这四个陷阱上栽跟头:伪回归、过拟合、样本外失效、流动性危机。今天咱们一个一个拆开聊。
22.1 伪回归:看着相关,其实无关
伪回归是统计套利里最隐蔽的坑。说白了,就是两个完全不相关的序列,因为都带趋势,跑出来的回归系数显著,R² 也很高。你以为是发现了黄金搭档,其实只是两个醉汉在街上晃悠,碰巧步调一致而已。
我记得有一次,一个朋友兴奋地跟我说他发现螺纹钢和某只小盘股的价差有稳定关系。我一看数据,两个序列都是单边上涨,跑个回归 R² 0.85。但做差分后,相关性直接掉到 0.1。这就是典型的伪回归。
怎么判断?用 ADF 检验看残差是否平稳。如果残差是平稳的,那才是真协整。否则,赶紧收手。
import statsmodels.api as sm
from statsmodels.tsa.stattools import adfuller
# 假设 price_a 和 price_b 是两个价格序列
# 先做回归
model = sm.OLS(price_a, sm.add_constant(price_b)).fit()
residuals = model.resid
# 对残差做 ADF 检验
adf_result = adfuller(residuals)
if adf_result[1] < 0.05:
print("残差平稳,存在协整关系")
else:
print("伪回归警告!残差不平稳")
你想想看,如果残差不平稳,价差会越走越远,你的套利仓位就会一直亏。嗯,这里要注意,协整检验的滞后阶数也要选对,不然容易误判。
22.2 过拟合:历史回测漂亮,实盘就崩
过拟合是量化交易的老大难问题。统计套利里尤其严重,因为参数太多了——回归窗口选多长?开仓阈值设多少?止损线怎么定?每个参数都能调出漂亮的回测曲线。
我个人习惯是,先定一个简单的策略框架,比如固定窗口的 OLS 回归,然后只调 1-2 个核心参数。调得越多,越容易过拟合。说白了,你是在拟合历史数据的噪声,而不是信号。
怎么防过拟合?我建议做三件事:
- 交叉验证:把数据分成多段,每段独立回测,看参数是否稳定
- 参数敏感性分析:微调参数,看收益是否剧烈波动。如果波动大,说明过拟合
- 简单模型优先:能用 2 个参数解决的问题,别用 5 个
还有一个技巧——故意留一段数据不参与优化,最后用这段数据做验证。如果结果还行,那模型才靠谱。
22.3 样本外失效:历史规律说变就变
样本外失效,说白了就是策略在历史数据上跑得挺好,一放到新数据上就拉胯。这跟过拟合有点像,但又不完全一样。过拟合是参数调得太细,样本外失效可能是市场结构变了。
举个例子,2015 年之前,股指期货和 ETF 的价差关系很稳定。但股灾之后,监管政策变了,套利空间大幅收窄。如果你还用 2014 年的参数做 2016 年的策略,那肯定亏。
为什么会这样?因为统计套利依赖的是统计规律,不是因果规律。统计规律是会变的。你想想看,市场参与者在变,交易规则在变,资金流向在变,凭什么价差关系不变?
还有一个更激进的做法——用滚动窗口训练模型。比如用过去 60 天的数据训练,然后预测未来 5 天的价差。这样模型能自适应市场变化,但缺点是参数波动大,交易信号不稳定。
22.4 流动性危机:能赚钱,但出不来
流动性危机是统计套利里最容易被忽视的陷阱。很多人只盯着价差和收益,忘了问一句:我能不能在合理价格上成交?
我记得有一次做螺纹钢和热卷的套利,价差到了 3 倍标准差,理论上是个绝佳的开仓机会。但我一挂单,发现买一卖一价差有 5 个 tick,而且深度只有几十手。我要是开 500 手,直接就把价差打穿了。这就是流动性问题。
流动性危机有几个典型表现:
- 买卖价差大:交易成本高,吃掉套利利润
- 深度不足:大单无法成交,或者成交价格滑点大
- 冲击成本高:你的订单本身会影响价格,导致实际成交价偏离预期
- 检查近 30 天的平均买卖价差,是否超过预期收益的 10%
- 检查近 30 天的平均深度,看你的目标仓位能否在 1 分钟内完成
- 做滑点测试:假设每次成交都滑 1 个 tick,策略是否还盈利
说白了,流动性好的品种,套利机会少但稳定;流动性差的品种,机会多但风险大。我个人更倾向于做流动性好的品种,比如股指期货、国债期货、主流商品期货。小众品种虽然偶尔有暴利,但出不来的时候真的很痛苦。
22.5 知识体系总览
下面这张图总结了统计套利的四大陷阱及其应对思路。你可以把它当作一个检查清单,每次上线新策略之前,逐条过一遍。
这四个陷阱,每一个都能让你的统计套利策略从天堂掉到地狱。伪回归让你误以为有关系,过拟合让你回测漂亮,样本外失效让你实盘崩溃,流动性危机让你有利润也出不来。嗯,做量化就是这样,每一步都得小心。
我个人习惯是,每上线一个新策略,先跑 3 个月的模拟盘,同时做流动性压力测试。如果模拟盘能稳定盈利,再上小仓位实盘。别一上来就全仓干,那是赌徒,不是交易员。