第2章:价差计算与图表分析

各位同学,今天我们来聊聊价差交易中最核心的两个动作——怎么算价差,怎么看图。我做了这么多年量化,发现很多人一上来就搞复杂模型,结果连最基本的价差图都画不对。嗯,咱们先把地基打牢。

2.1 价差的计算公式

价差,说白了就是两个品种价格之间的差值。但这里有个坑——你选哪个减哪个?

我个人习惯用这个公式:

价差 = 品种A价格 - 品种B价格 × 合约乘数比

为什么要乘合约乘数比?举个例子,螺纹钢和热卷,一手都是10吨,那乘数比就是1:1。但如果是股指期货IF和IC,乘数就不一样了,得调整。

我在项目中遇到过最典型的错误:有人直接拿价格相减,结果价差序列看起来有趋势,其实只是合约乘数没对齐。你想想看,这会导致什么后果?均值回归策略直接失效。

核心公式:

标准化价差 = (P_A - β × P_B) / σ

其中β是协整系数,σ是标准差。这个公式能帮你把不同量纲的品种拉到同一尺度上比较。

2.2 价差图的绘制方法

画价差图,我建议用两种方式:

  • 简单价差图:直接画价差的时间序列,适合肉眼观察
  • 滚动价差图:用过去N天的均值做基准,画偏离程度

这里我给大家画一张知识结构图,把价差分析的整个逻辑串起来:

价差分析知识体系 价差计算与图表分析 计算公式 图表绘制方法 统计特征 简单价差 标准化价差 协整调整 时间序列图 滚动均值图 布林带图 均值与标准差 自相关性 平稳性检验

画图的时候,我建议用Python的matplotlib,代码大概长这样:

import matplotlib.pyplot as plt
import numpy as np

# 计算滚动均值
window = 20
spread = price_a - beta * price_b
rolling_mean = spread.rolling(window).mean()
rolling_std = spread.rolling(window).std()

# 画图
plt.figure(figsize=(12, 6))
plt.plot(spread, label='价差', color='blue')
plt.plot(rolling_mean, label='滚动均值', color='red', linestyle='--')
plt.fill_between(range(len(spread)), 
                 rolling_mean - 2*rolling_std,
                 rolling_mean + 2*rolling_std,
                 alpha=0.2, color='gray')
plt.legend()
plt.title('价差与布林带')
plt.show()

我的小技巧:画图时把均值线和上下两倍标准差线都标出来。这样一眼就能看出价差是否偏离到了极端位置。我曾经靠这个图抓到了一波螺纹钢和热卷的套利机会,三天赚了2.3%。

2.3 均值回归与趋势跟踪

价差交易有两种主流思路:

  • 均值回归:价差偏离均值后,预期它会回来。适合波动率稳定的品种对。
  • 趋势跟踪:价差走出趋势后,预期它会继续。适合有基本面驱动的品种对。

怎么判断用哪种?我一般看价差的自相关函数。如果自相关衰减很快,说明是均值回归;如果自相关持续为正,说明有趋势。

注意:千万别在趋势行情里做均值回归!我见过有人看到价差偏离了2个标准差就进场,结果趋势持续了两个月,亏得底裤都不剩。嗯,那个人就是我早期带的一个实习生。

2.4 价差统计特征

做价差交易前,我建议先算清楚这几个统计量:

统计量 含义 阈值参考
均值 价差的长期均衡水平 随时间变化,需滚动计算
标准差 价差的波动幅度 2倍标准差作为开仓阈值
偏度 价差分布是否对称 绝对值大于1需警惕
峰度 价差是否有厚尾 大于3说明极端值多
ADF检验 价差是否平稳 p值小于0.05才可用

这里有个坑——很多人只看均值回归,不看平稳性。你想想看,如果价差序列本身就不平稳,那均值回归策略就是刻舟求剑。

我个人习惯,拿到价差数据后先做三件事:

  1. 画价差图,肉眼看看有没有明显趋势
  2. 算ADF检验,确认平稳性
  3. 算滚动均值和标准差,确定开仓阈值

这三步走完,心里就有底了。剩下的就是执行和风控。

避坑指南:我曾经在橡胶和20号胶的价差上吃过亏。当时ADF检验显示平稳,但实际交易中价差突然跳空,原因是两个品种的合约规则不一样。所以,统计特征只是参考,还得结合基本面。

好了,价差计算和图表分析就讲到这里。记住,工具是死的,人是活的。多看图,多算数,慢慢你就会有感觉。


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