第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来回答三个问题:

  1. 谁在主导价格?——看α的显著性
  2. 主导程度多大?——算信息份额
  3. 策略怎么用?——构建配对交易信号

举个例子。假设我们分析比特币在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工作流。每次做新项目前,我都会对着它捋一遍思路。

VECM价格发现分析流程 数据准备 价格序列、频率选择 协整检验 Johansen检验 确定滞后阶数 AIC/BIC准则 拟合VECM模型 估计α、β、Γ参数 解读α系数 谁在主导价格发现? 计算信息份额 量化主导程度 策略应用 配对交易 核心:α系数决定价格发现方向,信息份额决定价格发现程度

这张图我贴在公司工位上好几年了。每次做跨市场分析,都会先过一遍这个流程。尤其是「解读α系数」那一步,最容易翻车。

1.6 避坑指南

最后分享几个我踩过的坑:

  • 数据频率不匹配:我曾经用日线数据跑VECM,结果α不显著。换成5分钟数据后,效果立竿见影。高频数据能捕捉到更多短期调整信息。
  • 忽略结构突变:2015年股灾期间,很多配对关系的VECM参数都变了。如果样本期包含这种极端事件,建议分段建模。
  • 过度依赖p值:α的p值小于0.05当然好,但实战中我见过p=0.08却依然有效的模型。别太死板,结合业务逻辑判断。

我的习惯:每次跑完VECM,我都会画一张「误差修正图」——横轴是上一期的偏离,纵轴是本期价格变化。如果能看到明显的负相关,说明模型靠谱。如果是一团散沙,嗯,重新检查数据吧。

好了,VECM的基础就聊到这儿。下一章我们会深入信息份额的计算方法,以及如何用VECM构建实盘策略。记住一句话:价格发现的核心,不是看谁涨得快,而是看谁先动

无相订单流研究社 微信Lucian808555