第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才可用 |
这里有个坑——很多人只看均值回归,不看平稳性。你想想看,如果价差序列本身就不平稳,那均值回归策略就是刻舟求剑。
我个人习惯,拿到价差数据后先做三件事:
- 画价差图,肉眼看看有没有明显趋势
- 算ADF检验,确认平稳性
- 算滚动均值和标准差,确定开仓阈值
这三步走完,心里就有底了。剩下的就是执行和风控。
避坑指南:我曾经在橡胶和20号胶的价差上吃过亏。当时ADF检验显示平稳,但实际交易中价差突然跳空,原因是两个品种的合约规则不一样。所以,统计特征只是参考,还得结合基本面。
好了,价差计算和图表分析就讲到这里。记住,工具是死的,人是活的。多看图,多算数,慢慢你就会有感觉。
公众号:蓝海资料掘金营,微信deep3321