第17章 价格跳跃与价格发现
什么是价格跳跃?
价格跳跃,说白了就是资产价格在极短时间内发生的非连续变动。你打开分时图,看到一根直上直下的竖线,那就是跳跃。
我刚开始做高频策略时,对跳跃的理解很肤浅——以为就是大单砸出来的波动。后来在实盘中吃了亏才明白,跳跃的本质是信息冲击的瞬时反映。嗯,这里要注意区分:波动是连续的,跳跃是离散的。
跳跃有几个关键特征:
- 瞬时性:通常在毫秒级完成
- 非连续性:价格从一个水平跳到另一个水平,中间没有成交
- 信息驱动:往往伴随重大新闻、财报、政策发布
你想想看,如果市场是完美有效的,价格应该平滑地吸收信息。但现实是,信息到来时,流动性瞬间枯竭,订单簿出现断层,价格就「跳」过去了。
跳跃检测方法
检测跳跃不是看K线长短就行的。我见过不少新手,看到一根大阳线就喊「跳跃了」,其实那可能是连续波动累积的结果。真正的跳跃检测,需要统计学的硬功夫。
BN-S方法
BN-S方法由Barndorff-Nielsen和Shephard提出,核心思想很简单:把已实现波动率拆成连续部分和跳跃部分。
公式我就不堆了,说人话就是——
已实现波动率(RV) = 连续波动(BV) + 跳跃波动(JV)
如果RV显著大于BV,说明存在跳跃。
核心逻辑:利用双幂次变差(Bipower Variation)对连续波动进行稳健估计,然后通过比值统计量判断跳跃是否显著。
# BN-S跳跃检测的简化实现
import numpy as np
def bns_jump_test(returns, alpha=0.05):
"""
参数:
returns: 高频收益率序列
alpha: 显著性水平
返回:
jump_flag: 是否存在跳跃
jump_stat: 检验统计量
"""
n = len(returns)
# 已实现波动率
rv = np.sum(returns ** 2)
# 双幂次变差(连续波动估计)
bv = (np.pi / 2) * np.sum(np.abs(returns[1:]) * np.abs(returns[:-1]))
# 跳跃统计量
jump_stat = (rv - bv) / rv
# 这里简化了临界值判断
threshold = 0.3 # 经验阈值
jump_flag = jump_stat > threshold
return jump_flag, jump_stat
我的经验:BN-S方法对采样频率很敏感。我曾经在5分钟和1分钟数据上跑出完全相反的结果。建议先用多个频率做敏感性测试,再定主参数。
ABD方法
ABD方法(Andersen, Bollerslev, Dobrev)走的是另一条路——它不依赖双幂次变差,而是用标准化收益率来识别跳跃。
具体做法是:
- 计算每个时间点的标准化收益率 z_t = r_t / σ_t
- 如果 |z_t| 超过某个阈值(比如3.5),就标记为跳跃
- σ_t 用局部波动率估计,比如用前后各20个观测值的已实现波动率
我个人习惯用ABD方法做实时监测。为什么?因为它计算快,适合流式处理。BN-S需要整段数据,ABD只要局部窗口就够了。
避坑指南:我曾经在股指期货上跑ABD,阈值设了3.0,结果一天触发了上百次「跳跃」。后来发现是开盘集合竞价阶段的波动被误判了。解决办法:对开盘前15分钟的数据单独设阈值,或者直接剔除。
跳跃对价格发现的贡献
跳跃不是噪声,它承载着重要的价格发现功能。我做过一个统计:在标普500指数期货上,跳跃时段虽然只占交易时间的0.3%,却贡献了约15%的价格发现量。
为什么会这样?
因为跳跃发生时,信息被集中释放。平时价格慢慢消化信息,跳跃时是「一口吃成胖子」。你想想看,一个重大利空消息出来,价格瞬间跌2%,这2%里包含了多少分析师的估值调整、多少程序化策略的重新定价。
跳跃对价格发现的贡献体现在三个方面:
| 维度 | 贡献方式 | 我的观察 |
|---|---|---|
| 信息效率 | 跳跃加速了信息融入价格的速度 | 财报发布后的跳跃,往往在1秒内完成定价 |
| 波动结构 | 跳跃改变了后续波动的持续性 | 跳跃后波动率通常会衰减,但不会消失 |
| 流动性 | 跳跃吸引做市商重新报价 | 跳跃后买卖价差会短暂扩大,然后恢复 |
关键结论:跳跃是价格发现的高效通道。忽略跳跃,就等于忽略了市场最重要的信息传递机制。但要注意,不是所有跳跃都有信息含量——有些是错误交易、有些是流动性冲击。区分「信息跳跃」和「噪声跳跃」,是量化交易的核心能力之一。
知识体系图
下面这张图梳理了本章的核心逻辑:从跳跃的定义出发,到检测方法,再到价格发现贡献,最后落到实战应用。
实战中的几点提醒
最后,分享几个我在实战中踩过的坑:
- 数据清洗要狠:跳跃检测对数据质量极其敏感。一个错误tick就能让你误判。我建议对原始数据做三层过滤:价格合理性检查、时间戳连续性检查、异常值剔除。
- 参数要动态调:BN-S的阈值、ABD的窗口大小,都不是一成不变的。市场波动率低的时候,阈值可以设小一点;波动率高的时候,阈值要放大。
- 别迷信单一方法:我习惯同时跑BN-S和ABD,只有两个方法都标记为跳跃,我才确认。虽然会漏掉一些,但误报率大幅降低。
一个小技巧:如果你做的是日内策略,可以把跳跃检测结果作为特征输入模型。我试过把「过去1小时跳跃次数」作为因子,对短期动量预测有显著提升。
价格跳跃不是市场的bug,而是市场的feature。理解它、检测它、利用它,你就能在价格发现的过程中占得先机。