第1章:价格发现模型(三):向量误差修正模型(VECM)基础
各位好,欢迎来到价格发现系列的第三讲。前两讲我们聊了协整关系,聊了如何判断两个市场是不是「同频共振」。但有个问题一直悬着——如果它们确实同频了,那到底是谁在领着谁跑?
这就是VECM要干的事。说白了,VECM就是协整关系的「动态版」。它能告诉我们:当价格偏离均衡时,谁在主动回归,谁在被动跟随。
1.1 为什么需要VECM?
先讲个我自己的经历。几年前我做过一个跨市场套利策略,用沪深300股指期货和ETF现货做配对。协整检验通过了,相关性也很漂亮。但实盘跑起来,老是亏钱。
后来一查才发现:期货和现货虽然长期绑定,但短期偏离时,修复速度完全不一样。期货几分钟就拉回来了,现货却慢吞吞的。我那个策略却假设两者修复速度相同——嗯,这就是没搞懂VECM的代价。
VECM的核心思想其实很简单:
- 长期关系:两个价格序列存在协整,即长期均衡
- 短期偏离:某个时刻价格跑偏了,产生误差项
- 误差修正:下一时刻,价格会朝着均衡方向回调
你想想看,这不就是「犯错-纠偏」的循环吗?
1.2 VECM的数学形式
别怕公式,我尽量讲得直白些。一个标准的VECM(p)模型长这样:
ΔY_t = αβ'Y_{t-1} + Γ₁ΔY_{t-1} + ... + Γ_{p-1}ΔY_{t-p+1} + ε_t
拆开来看:
| 符号 | 含义 | 我的理解 |
|---|---|---|
| ΔY_t | 当前价格的变化量 | 今天比昨天涨了多少 |
| β'Y_{t-1} | 上一期的均衡偏离 | 昨天跑偏了多少 |
| α | 调整速度系数 | 纠偏的力度有多大 |
| Γ | 短期动态系数 | 过去几天的惯性影响 |
这里最关键的,就是α系数。它的大小和正负,直接决定了价格发现的主导权在谁手里。
核心要点:α的绝对值越大,说明该市场对偏离越敏感,纠偏速度越快。在价格发现中,它往往是「跟随者」而非「引领者」。
1.3 VECM在价格发现中的应用
我在做高频交易时,经常用VECM来回答三个问题:
- 谁在主导价格?——看α的显著性
- 主导程度多大?——算信息份额
- 策略怎么用?——构建配对交易信号
举个例子。假设我们分析比特币在Binance和Coinbase两个交易所的价格关系。VECM跑出来:
- Binance的α = -0.35(显著)
- Coinbase的α = -0.08(不显著)
这说明什么?当价格偏离均衡时,Binance在主动回调,Coinbase基本不动。换句话说,价格发现主要发生在Coinbase,Binance在跟跑。
实战技巧:我一般会同时看α的t统计量和信息份额指标。如果两者结论一致,那这个发现就比较可靠。如果矛盾,嗯,可能是数据有问题,或者模型阶数选错了。
1.4 Python实战:从数据到结论
光说不练假把式。我们直接用Python跑一个完整的VECM流程。
第一步:准备数据
import pandas as pd
import numpy as np
from statsmodels.tsa.vector_ar.vecm import VECM, select_order
import yfinance as yf
# 下载两只股票数据
spy = yf.download('SPY', start='2023-01-01', end='2024-01-01')['Close']
ivv = yf.download('IVV', start='2023-01-01', end='2024-01-01')['Close']
data = pd.DataFrame({'SPY': spy, 'IVV': ivv}).dropna()
第二步:确定滞后阶数
# 选择最优滞后阶数
order = select_order(data, maxlags=10, deterministic='ci')
print(f"最优滞后阶数: {order.aic}")
# 我一般用AIC准则,但也会看看BIC
# 如果两者打架,选小的那个
第三步:拟合VECM模型
# 拟合VECM
model = VECM(data, k_ar_diff=order.aic, coint_rank=1, deterministic='ci')
results = model.fit()
# 查看α系数
alpha = results.alpha
print("调整速度系数α:")
print(alpha)
第四步:解读结果
# 输出α的p值
print("\nα的p值:")
print(results.alpha_pvalues)
# 如果p值小于0.05,说明该变量对偏离有显著反应
注意:VECM对数据频率很敏感。我用日线数据和5分钟数据跑出来的结果,有时候α的符号都是反的。建议先用日线做探索,再用高频数据做验证。
1.5 一张图看懂VECM逻辑
下面这张SVG图,是我自己画的一个VECM工作流。每次做新项目前,我都会对着它捋一遍思路。
这张图我贴在公司工位上好几年了。每次做跨市场分析,都会先过一遍这个流程。尤其是「解读α系数」那一步,最容易翻车。
1.6 避坑指南
最后分享几个我踩过的坑:
- 数据频率不匹配:我曾经用日线数据跑VECM,结果α不显著。换成5分钟数据后,效果立竿见影。高频数据能捕捉到更多短期调整信息。
- 忽略结构突变:2015年股灾期间,很多配对关系的VECM参数都变了。如果样本期包含这种极端事件,建议分段建模。
- 过度依赖p值:α的p值小于0.05当然好,但实战中我见过p=0.08却依然有效的模型。别太死板,结合业务逻辑判断。
我的习惯:每次跑完VECM,我都会画一张「误差修正图」——横轴是上一期的偏离,纵轴是本期价格变化。如果能看到明显的负相关,说明模型靠谱。如果是一团散沙,嗯,重新检查数据吧。
好了,VECM的基础就聊到这儿。下一章我们会深入信息份额的计算方法,以及如何用VECM构建实盘策略。记住一句话:价格发现的核心,不是看谁涨得快,而是看谁先动。