3、价差计算与标准化:价差公式、Z-Score标准化、滚动窗口计算

好,咱们进入第三章。这一章可以说是配对交易的「数学内核」了。

前面两章我们聊了什么是配对交易,也讲了怎么选一对股票。但选好了之后呢?你得盯着它们的价差看。价差怎么算?怎么判断价差是「大了」还是「小了」?什么时候该进场,什么时候该跑?

嗯,这些问题的答案,都藏在这一章里。

3.1 价差公式:不只是简单的减法

很多人一上来就说:「价差?不就是A股价格减去B股价格吗?」

我刚开始做配对交易时也这么想。结果呢?亏了一笔。为什么?因为两只股票的价格量级可能差很多。比如茅台一股两千多,另一只银行股才几块钱。直接相减,价差波动全被茅台带走了,银行股那点变化根本看不出来。

所以,真正的价差公式要考虑对冲比率(Hedge Ratio)。

核心公式:

价差 = 股票A价格 - β × 股票B价格

其中β就是对冲比率,通常通过线性回归(OLS)来估计。

说白了,β告诉你:股票A涨1块钱,股票B平均涨多少?把这个比例关系去掉,剩下的才是真正的「价差」。

举个例子:

股票 价格 β系数
贵州茅台 1800 1.0(基准)
五粮液 150 0.083

价差 = 1800 - 0.083 × 150 = 1800 - 12.45 = 1787.55

你看,这样算出来的价差,才真正反映了两个资产之间的「偏离度」。

我的小技巧:

我个人习惯用滚动窗口来估计β,而不是用全样本。因为市场结构会变,去年的关系不一定适用于今天。滚动窗口一般用60个交易日,我觉得比较稳。

3.2 Z-Score标准化:把价差变成「标准尺子」

价差算出来了,但问题来了——价差是1787.55,这个数是大还是小?

你没法直接说。因为不同的股票对,价差的绝对数值天差地别。有的对价差在0.5附近波动,有的在1000附近波动。

这时候就需要Z-Score了。

Z-Score公式:

Z = (当前价差 - 价差均值) / 价差标准差

Z-Score说白了就是:当前价差偏离均值多少个标准差。

Z=2,意味着价差比均值高了两个标准差。这在统计学上属于「小概率事件」,大概率会回归。

我一般这样用:

  • Z > 2:做空价差(卖A买B)
  • Z < -2:做多价差(买A卖B)
  • |Z| < 0.5:平仓离场

避坑指南:

我曾经吃过一次大亏——用了全样本的均值和标准差。结果呢?价差一直在缓慢漂移,均值早就变了,但我的Z-Score还在用老数据算。信号全错了。

所以,均值和标准差一定要用滚动窗口来算!

3.3 滚动窗口计算:让指标「活」起来

滚动窗口,说白了就是只取最近N天的数据来计算。比如用过去60天的数据算均值和标准差,然后每天更新。

为什么必须用滚动窗口?

  • 市场风格会变,去年的关系今年可能不成立
  • 价差可能有趋势性漂移(比如一只股票长期跑赢另一只)
  • 极端行情后,全样本的均值和标准差会被拉偏

代码实现其实不复杂:

import pandas as pd
import numpy as np

def calculate_zscore(spread, window=60):
    # 滚动均值
    rolling_mean = spread.rolling(window=window).mean()
    # 滚动标准差
    rolling_std = spread.rolling(window=window).std()
    # Z-Score
    zscore = (spread - rolling_mean) / rolling_std
    return zscore

# 示例用法
spread = pd.Series([...])  # 你的价差数据
z = calculate_zscore(spread, window=60)
print(z.tail())

嗯,这里要注意:窗口大小怎么选?

窗口大小 特点 适用场景
20天 反应快,但噪音多 高频配对交易
60天 平衡,我常用 日频配对交易
120天 稳定,但滞后 长周期配对

我个人习惯用60天。为什么?因为一个季度大概有60个交易日,刚好能反映近期的市场结构变化,又不会太敏感。

3.4 知识体系总览

来,我画了一张图,把这一章的核心逻辑串起来:

价差计算与标准化流程 步骤1:价差计算 价差 = A - β × B 步骤2:滚动统计 滚动均值 + 滚动标准差 步骤3:Z-Score 标准化信号 Z > 2:做空价差 卖A买B Z < -2:做多价差 买A卖B |Z| < 0.5:平仓 回归均值,离场 窗口大小建议:日频用60天,高频用20天

你看,整个流程其实就三步:算价差 → 滚动统计 → 标准化。但每一步都有坑,踩一个就可能亏钱。

我的经验总结:

1. β系数一定要用滚动窗口估计,别偷懒用全样本。

2. Z-Score的阈值(2和-2)不是死的。波动率大的时候,我有时会放宽到2.5。

3. 滚动窗口大小要跟你的交易频率匹配。做日频交易,60天是个不错的起点。

好了,这一章的内容就这些。价差计算和标准化是配对交易的「眼睛」,看不清楚,后面的止损止盈设计就无从谈起。下一章我们聊止损——嗯,到时候再细说。


公众号:蓝海资料掘金营,微信deep3321