日内反转的买卖价差跳动 (Intraday Reversal and Bid-Ask Bounce)

大白话:价格在高抛低吸,成交价本身就在"来回跳"。 你看到的"涨了又跌",可能不是市场在反转,而是同一笔买卖在两个报价之间来回成交。做因子时如果不把这一层剥掉,信号里一大半是假的。

本页作用:给出判别方法——如何用"换成买价/卖价/中间价重算"这三步,把真反转和假反转分开。

跳动从哪来

来源 机制
Roll (1984) 成交价在买卖报价间等概率跳动,本身就诱导价格变动的一阶负自相关
时间不对称 成交落在卖价还是买价的概率随时间变化(Keim 1989 的年末效应就是这么来的)
流动性恢复不足 大单吃完深度后,新的限价单需要时间补回来

Roll 模型的一个关键性质:在他的假设下,k=1 之外的滞后不该有反转。所以——

凡是 k>1 还存在的反转,都不是 Roll 跳动。 这是判别的逻辑起点。

判别方法:三种价格重算

做法:把收益的计价方式从成交价换成三种,分别重算 \hat{\gamma}_k。

收益算法 若反转来自跳动 若反转来自流动性恢复不足
成交价对成交价 看到反转 看到反转
买价对买价 反转消失 看到反转
卖价对卖价 反转消失 看到反转
中间价对中间价 反转消失 看到反转
flowchart TD
    A["观察到 k>1 的反转"] --> B["换成买价/卖价/中价重算"]
    B --> C{"反转还在吗?"}
    C -->|"消失"| D["是买卖价差跳动<br/>→ 剔除,不当作 alpha"]
    C -->|"还在"| E["是流动性恢复不足<br/>→ 真实成本,可建模"]
    C -->|"只有 k=1 还在"| F["混合:k=1 有恢复效应<br/>k&gt;1 全是跳动"]

Heston 等人 (2010) 的实测结果

样本:NYSE 全部上市股,2001–2005(小数化报价之后),1,715 只股票,13 个半小时时段。

滞后 成交价口径 买价/卖价/中价口径 判定
k = 1 反转显著 反转显著 流动性恢复效应
k = 2 至 12 反转显著 消失 买卖价差跳动
13 的倍数 延续显著 延续显著 真实延续

结论:市场恢复流动性需要大于 30 分钟、小于 60 分钟;除 k=1 外的所有反转都是跳动造成的假象。

副产品:剔除跳动后,用买价和卖价算的收益里出现了正的动量——即跳动不但制造假反转,还掩盖了真实动量。

跳动污染的量级:低价股被严重放大

Heston 等人的样本剔除检验(这是本文最该抄的操作):

样本 日内延续(bp) 非日内反转(bp)
全样本 3.01 −4.67
剔除股价 < $5 1.93(t=10.34) −1.77(t=-8.07)
日均成交 < 10 笔 2.45(t=18.44) −3.17(t=-19.44)

注意反转的衰减幅度远大于延续:−4.67 → −1.77(掉了 62%),而延续只从 3.01 → 1.93(掉了 36%)。

这是自洽的:低价薄交易股票价差占比更高,跳动本来就更大;而延续效应是真实的,对样本筛选不那么敏感。

日频上的对应处理

Chordia-Subrahmanyam (2004 给出日频版本的做法:

"高买入不平衡意味着大量成交发生在卖价一侧,这会污染用成交价算的次日收益。"

做法:遍历逐笔数据库,取每天第一笔和最后一笔成交对应的买卖报价中点,用中点价算开盘到收盘收益,全部实证都用这个序列。

这是一个比"用收盘价"更严谨的做法,本 wiki 建议 A 股的日频因子也照此处理。

A 股的三个额外放大因素

因素 影响方向 说明
低价小盘股价差占比高 放大 A 股低价股占比远高于美股,跳动污染预计更严重
涨跌停 双向 封板时价格不动而成交额骤降 → 收益被压平(假反转或假延续)
集合竞价 改变开盘时段性质 沪市 9:15–9:25 开盘集合竞价,开盘半小时的成交价序列与连续竞价不同质

落到操作上:三条检查

  1. 报任何日内反转因子之前,用买价/卖价/中价重算一遍。 如果反转消失,你算出来的是价差不是信号。
  2. 同时报告 k=1 与 k>1。 k=1 是流动性恢复的真实成本,k>1 大概率是跳动。
  3. 剔除低价股与薄交易股后再报一次。 如果效应大幅衰减,先问是不是跳动。

与本 wiki 其他页面的区分

概念 说的是
本页 怎么把跳动从收益里剥掉
永久与临时冲击的实证判别 冲击是永久的还是临时的
Trading-Session Return Decomposition 收益怎么按时段拆分
订单流的归一化 订单流除以什么

Cross-ref