4、价差计算与标准化:价差公式、Z-Score计算、阈值设定

各位同学,欢迎来到第四讲。前面我们聊了价差交易的基本逻辑,说白了就是「买强卖弱」赚回归的钱。但问题来了——你怎么量化「强」和「弱」?怎么判断价差是「该回归了」还是「趋势变了」?

这一章,我们就来解决这个核心问题。我会把价差计算、标准化处理、以及阈值设定这三个环节拆开揉碎了讲。嗯,这里面的坑不少,我当年刚入行时就吃过亏。

4.1 价差公式:从原始数据到价差序列

先看最基础的东西。价差公式其实很简单,但不同品种、不同策略,用的公式略有差异。

最常见的价差公式:

Spread = P1 - k * P2

其中 P1 和 P2 是两种资产的价格,k 是配比系数。这个 k 怎么定?我习惯用两种方法:

  • 固定比例法:比如 1:1 或 1:10,适用于同品种不同到期日的合约(比如近月 vs 远月)。
  • 回归系数法:用历史数据做 OLS 回归,P1 = α + β * P2 + ε,那么 k = β。这个方法更科学,但要注意——回归系数会随时间漂移。
我的经验:做股指期货跨期价差时,我一般用固定比例 1:1。但做商品期货跨品种价差(比如螺纹钢 vs 热卷),我建议用回归系数。因为两个品种的波动率不同,固定比例容易失真。

还有一种情况——对数价差。有些品种价格跨度大,比如比特币和以太坊,直接用价格差会受绝对价格影响。这时候我会用:

Log_Spread = ln(P1) - ln(P2)

说白了,对数价差就是看两个资产的相对强弱,而不是绝对差值。我个人更偏爱这种方式,尤其在加密货币市场。

4.2 Z-Score 计算:把价差变成标准分

有了价差序列,下一步就是标准化。为什么要标准化?因为价差的绝对值没有意义——100 块的价差在股票市场可能很大,在期货市场可能很小。我们需要一个统一的标尺。

Z-Score 公式:

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

嗯,这里有个关键点:均值和标准差用多少周期的数据?我建议:

  • 短期策略(持仓 1-3 天):用 20-30 个交易日的滚动窗口。
  • 中期策略(持仓 1-2 周):用 60-90 个交易日。
  • 长期策略(持仓 1 个月以上):用 120-250 个交易日。

你可能会问:窗口太短会不会不稳定?窗口太长会不会反应迟钝?

答案是——都会。所以我在实际项目中,会同时跑多个窗口的 Z-Score,然后取加权平均。比如 20 日均线权重 0.3,60 日均线权重 0.7。这样既灵敏又稳定。

避坑指南:我曾经犯过一个错误——直接用全量历史数据算均值和标准差。结果呢?价差序列发生了结构性变化(比如政策调整),旧数据完全失效,Z-Score 一直偏离,策略亏得一塌糊涂。后来我改用滚动窗口,才解决了这个问题。

来看一个 Python 代码示例:

import pandas as pd
import numpy as np

def calculate_zscore(spread, window=60):
    mean = spread.rolling(window=window).mean()
    std = spread.rolling(window=window).std()
    zscore = (spread - mean) / std
    return zscore

这段代码很简单,但实际使用中要注意:当 std 接近 0 时(比如市场极度平静),Z-Score 会变得非常大,容易触发假信号。我一般会加一个最小标准差阈值,比如 0.01。

4.3 阈值设定:开仓、平仓、止损

有了 Z-Score,我们就可以设定交易阈值了。这是整个策略的灵魂——阈值设得太宽,交易机会少;设得太窄,频繁交易被手续费吃掉。

我常用的阈值体系:

信号类型 Z-Score 阈值 说明
开仓(做空价差) Z > 2.0 价差过高,预期回归
开仓(做多价差) Z < -2.0 价差过低,预期回归
平仓 |Z| < 0.5 价差回归到均值附近
止损 |Z| > 3.0 价差极端偏离,可能趋势变了

这个表格是经典设置,但别死板套用。我见过有人用 1.5 倍标准差开仓,也有人用 2.5 倍。关键要看品种的波动特性。

核心逻辑:阈值本质上是在「交易机会」和「信号质量」之间做权衡。2.0 倍标准差意味着只有约 5% 的时间会触发开仓——这个频率对大多数品种来说比较合适。

关于止损,我想多说两句。

止损不是用来「扛亏损」的,而是用来「认错」的。当 Z-Score 突破 3.0 时,说明价差已经进入了极端区域。这时候有两种可能:

  1. 价差确实会回归——但你可能已经被打止损了。
  2. 价差发生了结构性变化——比如两个品种的基本面关系变了。

我个人更倾向于第二种。因为如果价差真的能回归,它通常不会突破 3.0 还继续跑。一旦突破,说明市场在告诉你:「兄弟,你的模型错了。」

我曾经在螺纹钢和铁矿石的价差上吃过这个亏。当时 Z-Score 到了 2.8,我没止损,想着「再扛一扛」。结果呢?政策限产,价差直接飙到 4.5,亏了 15%。从那以后,我的止损线就设得死死的。

4.4 知识体系总览

为了让你更直观地理解这一章的内容,我画了一张流程图:

价差计算与标准化流程 原始价格数据 P1, P2 时间序列 价差计算 Spread = P1 - k*P2 Z-Score 标准化 Z = (Spread - μ) / σ 阈值判断 |Z| > 2.0 → 开仓 |Z| < 0.5 → 平仓 | |Z| > 3.0 → 止损 交易执行 开仓 / 平仓 / 止损

这张图把整个流程串起来了。从原始价格到价差计算,再到 Z-Score 标准化,最后通过阈值判断触发交易。每一步都有坑,每一步都需要你根据实际品种去调参。

4.5 本章小结

好,我们来捋一下这一章的核心要点:

  • 价差公式:固定比例 vs 回归系数,选哪个要看品种特性。
  • Z-Score 计算:滚动窗口是关键,别用全量历史数据。
  • 阈值设定:开仓 2.0,平仓 0.5,止损 3.0——这是起点,不是终点。

记住一句话:标准化是价差交易的基石,阈值是策略的灵魂。没有标准化的价差,就像没有刻度的尺子——你根本不知道什么时候该动手。

一个小技巧:如果你刚开始做回测,建议先用 2.0/0.5/3.0 这套阈值跑一遍。然后观察 Z-Score 的分布,再根据实际情况微调。别一上来就搞复杂模型,简单的东西往往最有效。

专注资料整理