配对交易基础:协整理论入门、平稳性检验(ADF检验)、如何挑选交易对
做量化交易这些年,我见过太多人一上来就搞配对交易,结果亏得底裤都不剩。为啥?说白了,连两个品种之间到底有没有「真关系」都没搞清楚,就敢往里冲。今天咱们就把这块地基打扎实了。
一、协整理论:别被名字吓到
协整(Cointegration)这个词,听起来很高大上对吧?其实没那么玄乎。
我习惯这么理解:两个价格序列,各自都在随机游走,但它们的某种线性组合却是平稳的。就像两个人喝醉了,各自东倒西歪,但手拉着手一起走,相对位置反而很稳定。
举个例子。你想想看,贵州茅台和五粮液,它们的股价走势长期看是不是差不多?短期可能一个涨得多一个涨得少,但不会一个上天一个入地。这就是协整关系在起作用。
核心要点:协整 ≠ 相关性高。两个高度相关的品种,可能根本没有协整关系。我踩过这个坑,后面会细说。
二、平稳性检验:ADF检验怎么用
做配对交易,第一步就是检验价差是否平稳。最常用的工具就是ADF检验(Augmented Dickey-Fuller test)。
嗯,这里要注意:ADF检验的原假设是「序列存在单位根,即非平稳」。所以p值越小,我们越有底气说它是平稳的。
我个人习惯用0.05作为阈值。p值小于0.05,就认为价差是平稳的,可以做配对交易。大于0.05?那趁早放弃,别浪费时间。
来看一段Python代码,这是我实际项目中用过的:
from statsmodels.tsa.stattools import adfuller
import numpy as np
def check_stationarity(spread, significance=0.05):
"""
检验价差序列的平稳性
spread: 价差序列
"""
result = adfuller(spread)
p_value = result[1]
print(f'ADF统计量: {result[0]:.4f}')
print(f'p值: {p_value:.4f}')
if p_value < significance:
print('✅ 价差平稳,可以做配对交易')
return True
else:
print('❌ 价差不平稳,换个品种试试')
return False
# 假设spread是计算好的价差
# check_stationarity(spread)
我曾经遇到过一个案例,某两个能源股看起来走势高度一致,相关性高达0.95。结果ADF检验一跑,p值0.23,根本不平稳。幸亏没真金白银往里砸,不然就惨了。
小技巧:ADF检验对滞后阶数敏感。我一般用AIC准则自动选择最优滞后阶数,别手动瞎设。
三、如何挑选交易对:实战经验
挑选交易对,是配对交易里最考验功力的环节。我总结了一套筛选流程,分享给你:
- 行业逻辑先行:同行业、同产业链的品种优先。比如银行股配银行股,钢铁股配钢铁股。跨行业配对?不是不行,但风险大得多。
- 相关性初步筛选:计算滚动相关系数,至少0.7以上。但记住,这只是敲门砖,不是最终标准。
- 协整检验定生死:用Engle-Granger两步法或Johansen检验,确认协整关系存在。
- 样本外验证:我习惯把数据分成两段,前70%做训练,后30%做验证。训练集上协整关系成立,验证集上也要能赚钱才行。
这里有个表格,是我常用的筛选标准:
| 筛选维度 | 具体指标 | 合格标准 |
|---|---|---|
| 行业相关性 | 是否同行业 | 优先同行业 |
| 价格相关性 | 滚动相关系数 | ≥ 0.7 |
| 协整关系 | ADF检验p值 | < 0.05 |
| 样本外表现 | 夏普比率 | ≥ 1.0 |
你可能会问,为什么相关性高还不够?我举个例子你就明白了。两个品种可能因为大盘涨跌而同时上涨,但它们的价差可能越拉越大,根本不回归。这就是伪相关,协整检验就是用来揪出这种伪装的。
避坑指南:我曾经用两个同板块的股票做配对,训练集上协整关系完美,实盘却亏得一塌糊涂。后来发现,是因为其中一只股票发生了重大资产重组,基本面变了。所以,定期重新检验协整关系,别一套参数用到底。
四、知识体系总览
为了让你更直观地理解本章的知识结构,我画了一张图:
这张图把本章的三个核心模块串起来了。从左到右,从理论到实践,每一步都不能跳过。
最后说一句,配对交易不是万能钥匙。我见过太多人把精力花在优化参数上,却忽略了最基础的协整检验。地基不牢,楼盖得再高也是白搭。
公众号:蓝海资料掘金营,微信deep3321