第1章:配对交易入门
各位同学,欢迎来到《统计套利配对交易实战精讲》。我是你们这门课的主讲。
做量化这些年,我见过太多人一上来就搞复杂的机器学习模型,结果亏得一塌糊涂。其实,很多赚钱的策略,底层逻辑并不复杂。今天我们要聊的配对交易,就是这么一个经典又实用的策略。
说白了,配对交易就是找两个“长得像”的股票,做它们的价差回归。听起来简单?嗯,但里面的门道可不少。咱们一步步来。
1.1 价差序列的构建
先问大家一个问题:怎么判断两个股票是不是“长得像”?
我个人习惯,第一步就是看它们的价格走势图。比如,我拿招商银行和兴业银行来举例。你会发现,这两只银行股,长期走势几乎是一个模子刻出来的。但短期呢?总会有那么几天,一个涨得多,一个跌得多。
这时候,价差就出现了。
价差怎么算?很简单。假设我们有两支股票,A和B。它们的价格分别是P_A和P_B。那么价差Spread就是:
Spread = P_A - β * P_B
这里的β,是一个关键系数。它代表A和B之间的“比例关系”。
我在项目中遇到过一个问题:直接用价格相减,结果发现价差序列根本不平稳。后来才意识到,β没选对。β通常通过线性回归来估计,也就是我们常说的“对冲比率”。
举个例子:
import numpy as np
import pandas as pd
import statsmodels.api as sm
# 假设我们有两支股票的历史价格
prices_a = np.array([100, 102, 101, 105, 107])
prices_b = np.array([50, 51, 50.5, 52.5, 53.5])
# 用OLS回归估计β
X = sm.add_constant(prices_b)
model = sm.OLS(prices_a, X).fit()
beta = model.params[1]
# 计算价差
spread = prices_a - beta * prices_b
print("估计的β值:", beta)
print("价差序列:", spread)
你看,这样算出来的价差,才是有意义的。它剔除了市场共同波动的影响,只留下两个股票之间的“相对强弱”。
核心要点:价差不是简单的价格相减,而是经过β调整后的“残差”。这个残差,才是我们交易的对象。
1.2 平稳性概念
好,价差序列有了。接下来,我们要判断这个价差是不是“靠谱”。
什么叫“靠谱”?说白了,就是价差能不能回到均值附近。如果能,那我们就敢在价差偏离均值时开仓,等它回归时平仓。
这就引出了一个核心概念:平稳性。
平稳性,听起来很学术。其实你想想看,一个平稳的时间序列,它的均值、方差是稳定的,不会随着时间漂移。就像一个人的体重,虽然每天有波动,但长期来看是稳定的。如果体重一直往上飙,那就不平稳了。
在配对交易里,我们希望价差序列是平稳的。为什么呢?因为只有平稳,我们才能用历史均值作为“锚点”。
怎么判断平稳性?最常用的方法是ADF检验(Augmented Dickey-Fuller test)。
from statsmodels.tsa.stattools import adfuller
# 对价差序列进行ADF检验
result = adfuller(spread)
print('ADF统计量:', result[0])
print('p值:', result[1])
if result[1] < 0.05:
print("价差序列是平稳的,可以继续!")
else:
print("价差不平稳,需要重新选股或调整参数。")
p值小于0.05,说明有95%以上的把握认为价差是平稳的。嗯,这里要注意,p值不是越小越好,但小于0.05基本就够用了。
避坑指南:我曾经遇到过p值刚好0.049的情况,结果实盘时价差就是不回归。后来我学乖了,一般要求p值小于0.01才敢放心交易。宁可错过,不要做错。
1.3 协整关系初步理解
讲完平稳性,咱们再聊聊协整。这两个概念是孪生兄弟。
协整是什么?简单说,就是两个非平稳的时间序列,它们的线性组合是平稳的。
举个例子:一个醉汉牵着一条狗。醉汉走路东倒西歪(非平稳),狗也跑来跑去(非平稳)。但狗和醉汉之间的绳子长度(价差),是相对稳定的(平稳)。这就是协整。
在配对交易里,我们找的就是这种“醉汉和狗”的关系。两个股票各自可能都是随机游走的(非平稳),但它们之间的价差是平稳的。
检验协整关系,常用的方法是Engle-Granger两步法:
- 第一步:用OLS回归估计β(我们刚才已经做了)
- 第二步:对残差(价差)进行ADF检验
如果残差是平稳的,就说明两个股票存在协整关系。
from statsmodels.tsa.stattools import coint
# 直接检验协整关系
score, pvalue, _ = coint(prices_a, prices_b)
print('协整检验p值:', pvalue)
if pvalue < 0.05:
print("存在协整关系,可以构建配对交易策略!")
else:
print("不存在协整关系,换个股票组合试试。")
重要提醒:协整关系不是一成不变的。我见过一些组合,过去3年协整得很好,但突然有一天就失效了。所以,定期重新检验协整关系,是必须的功课。
本章知识体系
为了让大家更直观地理解本章的知识结构,我画了一张图:
这张图把本章的三个核心知识点串起来了。你看,从价差构建到平稳性检验,再到协整关系确认,每一步都是环环相扣的。
小结
今天咱们聊了三件事:
- 价差构建:不是简单相减,要用β调整
- 平稳性:价差要能回归均值,用ADF检验
- 协整关系:两个非平稳序列的线性组合平稳,用Engle-Granger检验
这些概念,是配对交易的基石。我个人觉得,理解它们比背代码重要得多。代码可以复制,但逻辑必须吃透。
好了,今天就到这儿。记住,做交易不是比谁跑得快,而是比谁活得久。稳扎稳打,才能笑到最后。