4. 价差计算:实时价差计算、均值回复模型与协整检验
套利交易的核心,说白了就是盯着价差做文章。你想想看,两个高度相关的资产,价格走势本该像双胞胎一样同步,可一旦它们走散了,机会就来了。我做了这么多年量化风控,见过太多人一上来就盯着绝对价格差,结果被市场来回打脸。嗯,这里面的门道,咱们今天好好聊聊。
4.1 实时价差计算:别被表面数字骗了
实时价差计算,听起来简单吧?就是A价格减去B价格。但我在项目中遇到过一个问题:如果两个资产的价格量级差太多,比如一个几百块,一个几块钱,那价差波动就完全被高价资产主导了。这其实是个坑。
我个人习惯用两种方式处理:
- 简单价差:
spread = P_A - P_B。适用于同品种、同量级的资产,比如两个股指期货。 - 标准化价差:
spread = (P_A / P_B) - 1或者spread = ln(P_A / P_B)。适用于不同量级的资产,比如股票对。
为什么要标准化?举个例子,茅台和五粮液,价格差几百块,但它们的比值其实很稳定。你盯着绝对价差做交易,很容易被价格水平的变化误导。
4.2 均值回复模型:价差会回来吗?
均值回复,是套利策略的底层信仰。说白了,就是相信价差不会永远偏离,迟早会回到均值附近。我刚开始做套利时,总觉得这个假设太理想化,直到有一次在股指期货上验证了它的有效性——价差偏离到3个标准差后,果然在5分钟内回归了。
常用的均值回复模型有两种:
| 模型 | 公式 | 适用场景 |
|---|---|---|
| 简单移动平均 | spread - SMA(spread, n) | 短期套利,快速反应 |
| 指数加权移动平均 | spread - EWMA(spread, lambda) | 长期套利,平滑噪声 |
我个人更偏爱EWMA,因为它对近期数据更敏感,能更快捕捉到价差的异常波动。不过要注意,lambda值的选择很关键——太小了噪声多,太大了反应迟钝。我一般取0.94,这是风险管理领域常用的衰减因子。
4.3 协整检验:它们真的会一起走吗?
协整检验,是套利策略的「合法性验证」。你想想看,如果两个资产根本没有长期均衡关系,那均值回复就是空中楼阁。我曾经吃过这个亏——用两个看起来走势很像的股票做套利,结果价差越走越远,亏得我头皮发麻。
常用的协整检验方法是Engle-Granger两步法:
- 第一步:用OLS回归估计协整关系。公式:
Y = alpha + beta * X + epsilon - 第二步:对残差epsilon进行单位根检验(ADF检验)。如果残差是平稳的,说明存在协整关系。
代码实现其实不复杂,我贴一段我常用的Python代码:
import statsmodels.api as sm
from statsmodels.tsa.stattools import adfuller
# 假设price_a和price_b是两个价格序列
def cointegration_test(price_a, price_b):
# 第一步:OLS回归
X = sm.add_constant(price_b)
model = sm.OLS(price_a, X).fit()
residuals = model.resid
# 第二步:ADF检验
adf_stat, p_value, _, _, critical_values, _ = adfuller(residuals)
return {
'beta': model.params[1],
'alpha': model.params[0],
'adf_stat': adf_stat,
'p_value': p_value,
'is_cointegrated': p_value < 0.05
}
这里有个坑:ADF检验的p值阈值,我建议用1%而不是5%。为什么?因为协整检验的样本量通常不大,5%的显著性水平容易误判。我曾经用5%的阈值跑回测,结果策略在实盘时直接崩了——后来发现是伪协整。
4.4 知识体系总览
说了这么多,咱们用一张图把核心逻辑串起来。这张图是我做套利风控时必画的框架,每次看都能提醒自己别漏掉关键步骤。
这张图从左到右,其实就是一个完整的套利风控流水线。每一步都有坑,每一步都需要你用心去打磨。我做了这么多年,最大的体会就是:风控不是事后补救,而是事前设计。价差计算、均值回复、协整检验,这三板斧用好了,套利策略的胜率能提升一大截。