第一章:配对交易基础:统计套利与市场中性策略概述
各位同学,欢迎来到《高频配对交易信号捕捉技术》的第一课。
今天咱们聊点实在的——配对交易到底是个什么东西?
说白了,它就是一种「买一个、卖一个」的对冲玩法。你同时持有两只股票,一多一空,大盘涨跌跟你关系不大,你赚的是它们俩之间价差波动的钱。嗯,这就是市场中性策略的核心思想。
1.1 统计套利:从「价差」里找机会
统计套利,英文叫 Statistical Arbitrage,简称 Stat Arb。它不是无风险套利,而是基于概率和统计的套利。
我刚开始做量化那会儿,总觉得套利就是「低买高卖」这么简单。后来发现,真正的难点在于——你怎么定义「低」和「高」?
举个例子:
贵州茅台和五粮液,都是白酒龙头。它们的历史价格走势高度相关。如果某天茅台突然涨了5%,五粮液只涨了1%,你会怎么想?
我个人习惯是:先看它们的历史价差分布。如果价差偏离了均值两个标准差以上,那大概率会回归。这时候我就做多五粮液、做空茅台,赌价差收窄。
1.2 市场中性策略:把大盘「屏蔽」掉
市场中性策略,说白了就是让组合的 Beta 接近零。大盘涨跌跟你没关系,你只赚 Alpha 的钱。
你想想看,2020年疫情暴跌那会儿,如果你只做多股票,那真是欲哭无泪。但如果你同时做空了指数或者另一只相关股票,情况就完全不一样了。
配对交易天然就是市场中性的。因为你是多空一对,方向相反,大盘的系统性风险被对冲掉了。
1.3 配对交易的完整流程
我一般把配对交易分成四个步骤:
- 选对子——找相关性高、同行业、同风格的股票
- 建模型——用协整检验、回归分析确定价差关系
- 定阈值——设定开仓、平仓、止损的价差水平
- 执行交易——实时监控价差,触发信号就下单
嗯,这里要注意:选对子是最关键的一步。选错了,后面全白搭。
1.4 协整检验:别被「伪相关」骗了
很多新手会犯一个错误:看到两只股票走势图长得像,就以为它们能配对。
其实,那可能是伪相关。比如,茅台和腾讯,走势都涨了十年,但它们的价差根本没有稳定关系。你拿它们做配对,迟早出事。
协整检验就是用来解决这个问题的。它检验的是:两只股票的价格差,是不是一个平稳序列。
我常用的方法是 Engle-Granger 两步法。代码很简单:
import statsmodels.api as sm
import numpy as np
# 假设 price_a 和 price_b 是两只股票的价格序列
def cointegration_test(price_a, price_b):
# 第一步:回归
model = sm.OLS(price_a, sm.add_constant(price_b))
result = model.fit()
residuals = result.resid
# 第二步:对残差做单位根检验
adf_stat, p_value, _, _, critical_values, _ = sm.tsa.stattools.adfuller(residuals)
return p_value < 0.05 # p值小于0.05,说明残差平稳,存在协整关系
如果 p 值小于 0.05,说明残差是平稳的,两只股票存在长期均衡关系。这时候做配对交易,心里就有底了。
1.5 知识体系总览
下面这张图,是我自己画的配对交易知识体系框架。你可以把它当作整个课程的地图:
1.6 配对交易的数学基础
配对交易的数学模型其实不复杂。假设两只股票的价格分别为 P₁ 和 P₂,它们的关系可以写成:
P₁ = α + β · P₂ + ε
其中,ε 是残差,也就是我们说的价差。如果 ε 是平稳的,那就可以做配对交易。
实际操作中,我一般用滚动窗口来估计 β 和 α。因为股票的关系会随时间变化,不能一劳永逸。
1.7 一个简单的配对交易策略示例
下面是一个最简单的配对交易策略框架。它只做两件事:计算价差,然后根据阈值开平仓。
import numpy as np
import pandas as pd
class PairTradingStrategy:
def __init__(self, entry_z=2.0, exit_z=0.5, stop_z=3.0):
self.entry_z = entry_z # 开仓阈值(标准差倍数)
self.exit_z = exit_z # 平仓阈值
self.stop_z = stop_z # 止损阈值
self.position = 0 # 持仓状态:1=多头价差,-1=空头价差,0=空仓
def calculate_spread(self, price_a, price_b, hedge_ratio):
"""计算价差"""
return price_a - hedge_ratio * price_b
def generate_signal(self, spread, spread_mean, spread_std):
"""生成交易信号"""
z_score = (spread - spread_mean) / spread_std
if self.position == 0:
if z_score > self.entry_z:
return -1 # 做空价差
elif z_score < -self.entry_z:
return 1 # 做多价差
elif self.position == 1:
if z_score < self.exit_z:
return 0 # 平仓
elif z_score < -self.stop_z:
return 0 # 止损
elif self.position == -1:
if z_score > -self.exit_z:
return 0 # 平仓
elif z_score > self.stop_z:
return 0 # 止损
return None # 保持不动
这个代码虽然简单,但已经包含了配对交易的核心逻辑。后面几章,我们会逐步把它升级成高频版本。
1.8 本章小结
好了,第一课就讲到这里。总结一下:
- 配对交易是统计套利的一种,核心是「买一个、卖一个」
- 市场中性策略帮你屏蔽大盘风险,只赚价差的钱
- 协整检验是配对交易的前提,别被伪相关骗了
- 完整的流程包括:选对子、建模型、定阈值、执行交易
我个人觉得,配对交易是量化入门最好的策略之一。它逻辑清晰,风险可控,而且非常适合高频化改造。后面的课程,我们会一步步深入进去。
嗯,今天就到这儿。记住:别急着写代码,先把基础打牢。