配对交易入门:从零搭建你的第一套统计套利系统
大家好,我是老李。今天咱们聊聊配对交易的基本流程。
说实话,我刚入行那会儿,觉得配对交易特别神秘。两个股票之间还能有稳定关系?后来做多了才发现,这玩意儿说白了就是「找亲戚」——找到两个走势相似的股票,利用它们之间的价差波动来赚钱。
嗯,咱们先看一张整体流程图,心里有个谱。
第一步:筛选配对——别乱点鸳鸯谱
配对交易的第一步,就是找到合适的「一对」。不是随便拉两个股票就能做的。
我个人习惯先看行业。同行业的股票,业务模式相似,受同样的宏观因素影响,天然容易产生稳定关系。比如茅台和五粮液,招行和兴业银行。
然后做相关性分析。我一般用滚动窗口计算相关系数,窗口取60个交易日。低于0.7的,直接pass。
核心筛选标准:
- 同行业或同板块
- 日收益率相关系数 > 0.7
- 市值规模相近(避免流动性差异)
- 交易量活跃(日均成交额 > 1亿)
你想想看,如果两个股票市值差10倍,一个轻轻松松被拉涨,另一个纹丝不动,这配对能稳定吗?我在项目中遇到过这种情况,当时选了茅台和某小酒企,结果小酒企一天波动10%,茅台才动1%,价差根本没法做。
第二步:建模——给关系画个框
筛选出候选对之后,就要建模了。说白了,就是找到两个价格之间的数学关系。
最经典的方法是协整检验。嗯,这里要注意,协整不等于相关。两个股票可能相关系数很高,但长期看价差越走越远,那就没法做配对。
我一般用Engle-Granger两步法:
import statsmodels.api as sm
import numpy as np
# 假设 price_a, price_b 是两个股票的价格序列
# 第一步:回归
X = sm.add_constant(price_b)
model = sm.OLS(price_a, X).fit()
residuals = model.resid
# 第二步:对残差做ADF检验
adf_result = sm.tsa.stattools.adfuller(residuals)
print(f'ADF统计量: {adf_result[0]:.4f}')
print(f'p值: {adf_result[1]:.4f}')
# p值小于0.05,说明残差平稳,可以配对
if adf_result[1] < 0.05:
print('恭喜,这对可以搞!')
else:
print('这对不行,换一对吧')
我的小技巧: 除了ADF检验,我还会看残差的自相关图。如果残差有明显的季节性模式,说明模型没捕捉全,可能需要加入滞后项。
建模完成后,我们会得到两个关键参数:对冲比率(hedge ratio)和价差序列。对冲比率就是回归系数,告诉你买1份A需要卖多少份B。
第三步:交易执行——什么时候动手?
模型建好了,接下来就是执行。说白了,就是等机会。
价差序列会围绕均值上下波动。当价差偏离均值超过某个阈值时,我们就开仓。当价差回归均值时,我们就平仓。
阈值怎么设?我一般用标准差。比如:
- 价差 > 2倍标准差 → 做空价差(卖A买B)
- 价差 < -2倍标准差 → 做多价差(买A卖B)
- 价差回归到0.5倍标准差以内 → 平仓
避坑指南: 我曾经把阈值设得太小(1倍标准差),结果频繁开平仓,手续费吃掉了大部分利润。后来改成2倍标准差,虽然交易次数少了,但每笔的胜率和盈亏比都上来了。
执行时还要注意滑点。尤其是小市值股票,你挂单可能吃不到货。我建议用限价单,别用市价单。
第四步:风险管理——活着比赚钱重要
这一步,很多人会忽略。但我告诉你,这是整个流程里最重要的环节。
配对交易不是无风险的。万一两个股票的基本面发生根本性变化(比如一个被收购、一个暴雷),价差可能永远回不来。
我的风控三板斧:
- 硬止损: 价差超过3倍标准差,无条件平仓。别犹豫,犹豫就会败北。
- 仓位控制: 单笔配对不超过总资金的5%。分散到5-10个配对,一个炸了还有别的。
- 动态监控: 每周重新跑一次协整检验。如果p值变大了,说明关系在变弱,考虑退出。
记住一句话: 配对交易赚的是均值回归的钱,但均值不回归才是常态。风控就是你的安全带。
嗯,说到这,基本流程就讲完了。筛选配对、建模、交易执行、风险管理,四个步骤环环相扣。我个人觉得,新手最容易栽在第一步和第四步——要么选错了对,要么忘了止损。
你想想看,如果连配对都没选好,后面建模再漂亮也是白搭。如果忘了止损,一次黑天鹅就能让你回到解放前。
好了,这一章就到这里。下一章咱们深入聊聊「筛选配对」的具体方法,包括怎么用Python批量跑相关性分析和协整检验。
公众号:蓝海资料掘金营,微信deep3321