价差定义:价差的计算方式、标准化处理与统计特征

做套利交易,说白了就是在玩「价差」这个核心变量。

你想想看,无论你是做跨期套利、跨品种套利,还是期现套利,最终盯着的都是那个价差。价差怎么算?怎么让它变得干净、可用?它的统计特征又告诉我们什么?

这一节,我把这些基础但关键的东西掰开揉碎了讲清楚。

一、价差的计算方式

价差的计算,听起来简单——两个价格相减嘛。但实际项目中,我见过太多人在这里栽跟头。

1. 简单价差(绝对价差)

最直观的方式:

价差 = P1 - P2

比如螺纹钢RB2301和RB2305,当前价格分别是4200和4150,价差就是50。

但这里有个坑:价格尺度不同。你拿黄金和白银做价差,黄金1800美元,白银25美元,直接相减?那价差几乎被黄金价格完全主导。这就不合理了。

⚠ 注意: 当两个品种价格量级差异较大时,简单价差会失去意义。我曾在做跨品种套利时,用简单价差回测出漂亮的曲线,实盘一跑就崩——就是因为忽略了价格尺度问题。

2. 标准化价差(Z-score)

为了解决尺度问题,我们通常对价差做标准化处理:

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

Z-score告诉我们:当前价差偏离均值多少个标准差。Z=2,意味着价差处于历史高位,可能回归。

我个人习惯用滚动窗口计算均值和标准差,比如60期滚动窗口。为什么?因为市场结构会变,固定窗口容易过时。

3. 对数价差

对于价格序列存在趋势或波动率随时间变化的情况,对数价差更合适:

对数价差 = ln(P1) - ln(P2) = ln(P1/P2)

这实际上就是价格比的对数。它的好处是:消除了绝对价格水平的影响,而且更容易处理波动率非平稳的问题。

💡 我的经验: 做股指期货跨期套利时,我常用对数价差。因为股指价格长期上涨,简单价差会呈现趋势性,而对数价差更平稳,统计特征更稳定。

二、标准化处理:让价差变得「干净」

原始价差往往包含噪声、异常值、非平稳成分。直接用它做交易信号,你会被假突破坑死。

1. 去异常值处理

我常用的方法:

  • MAD(中位数绝对偏差)法:比标准差更稳健,不受极端值影响
  • 分位数截断法:去掉上下1%或0.5%的极端值
# MAD去异常值示例
import numpy as np

def remove_outliers_mad(series, threshold=3):
    median = np.median(series)
    mad = np.median(np.abs(series - median))
    modified_z_scores = 0.6745 * (series - median) / mad
    return series[np.abs(modified_z_scores) < threshold]

2. 去趋势处理

如果价差存在明显趋势,说明两个品种的价差关系在漂移。这时候需要:

  • 差分处理:一阶差分后做平稳性检验
  • HP滤波:分离趋势成分和周期成分
  • 回归残差法:用P1对P2做回归,取残差作为调整后的价差

我记得有一次做豆粕和菜粕的套利,简单价差看起来有趋势,但用回归残差法处理后,发现其实是两个品种的供需基本面在变化,价差关系本身是稳定的。这个发现让我避免了错误开仓。

3. 波动率标准化

不同时间段的波动率不同。2015年股灾期间和2020年疫情期间,价差的波动幅度完全不是一个量级。所以:

标准化价差 = 原始价差 / 近期波动率(如ATR或滚动标准差)

这样处理后,交易信号的阈值可以统一设置,不用频繁调整参数。

三、统计特征:读懂价差的「脾气」

价差处理干净了,接下来要摸清它的脾气。我一般从以下几个维度分析:

1. 平稳性检验

这是套利交易的前提。如果价差不平稳,说明两个品种没有长期均衡关系,套利逻辑不成立。

检验方法 适用场景 我的建议
ADF检验 最常用,适合大多数情况 默认使用,p值<0.05认为平稳
PP检验 存在异方差时更稳健 作为ADF的补充验证
KPSS检验 原假设为平稳(与ADF相反) 交叉验证,避免单一检验的偏差
🔑 关键点: 我建议同时做ADF和KPSS检验。如果ADF说平稳、KPSS也说平稳,那基本稳了。如果两者矛盾,需要进一步分析。

2. 自相关结构

价差序列的自相关函数(ACF)告诉我们:价差偏离后,需要多久回归

  • ACF快速衰减 → 价差均值回归速度快,适合短线套利
  • ACF缓慢衰减 → 价差有记忆性,回归需要时间,适合中线持仓

我一般看ACF的1阶和5阶系数。如果1阶系数大于0.8,说明价差有很强的趋势性,做均值回归策略要小心——你可能在逆势交易。

3. 分布特征

价差的分布形态直接影响交易信号的设置:

  • 偏度:正偏态说明价差更容易出现极端正值,做空价差时要更谨慎
  • 峰度:高峰度说明价差有厚尾特征,极端行情比正态分布更频繁

我曾经在原油跨期套利中,发现价差的峰度高达8(正态分布是3)。这意味着用2倍标准差作为开仓阈值,一年会被假突破坑好几次。后来我把阈值调整到2.5倍标准差,效果好了很多。

4. 半衰期

半衰期是量化均值回归速度的指标。它告诉我们:价差偏离后,平均需要多长时间回归一半

# 计算半衰期
import statsmodels.api as sm

def half_life(series):
    lag_series = series.shift(1).dropna()
    diff_series = series.diff().dropna()
    # 对齐数据
    y = diff_series.values
    x = lag_series.values
    x = sm.add_constant(x)
    model = sm.OLS(y, x).fit()
    theta = model.params[1]
    half_life = -np.log(2) / theta
    return half_life

半衰期短(比如1-2小时),适合高频套利;半衰期长(比如5-10天),适合低频、大仓位套利。

💡 实用技巧: 我一般用半衰期来设置持仓周期。比如半衰期是3小时,那持仓时间控制在6-9小时(2-3个半衰期)比较合理。超过这个时间还没回归,说明价差关系可能变了。

四、知识体系总览

下面这张图,把价差定义、计算、标准化、统计特征串起来了。你可以把它当作一个检查清单:

价差分析知识体系 价差定义与计算 计算方式 简单价差 Z-score标准化 对数价差 标准化处理 去异常值 去趋势 波动率标准化 统计特征 平稳性检验 自相关结构 分布特征 核心目标:构建可交易的价差信号

嗯,价差这块内容就这些。说白了,计算方式选对、标准化做干净、统计特征摸透,你的套利策略就成功了一半。剩下的,就是执行和风控了。

专注资料整理