Abdi-Ranaldo 价差估计:用收盘价与中间价的关系改良 Roll 估计
Roll 估计量的命门是虚数价差——自协方差为正时直接失效,蓝筹股失效率可达 40%。Abdi & Ranaldo (2017) 的解法优雅得过分:日高低价中点 η 几乎不带买卖弹跳,而收盘价带满 ±s/2 的弹跳,于是 (c−η_t)(c−η_{t+1}) 的期望恰好等于 s²/4。本文用日内路径级模拟验证 AR 估计的无偏性(价差 0.2%~4% 全区间贴 45° 线),与 Roll 同台对比失效率与精度(σ=5% 时 Roll 失效近半、AR 的 RMSE 只有 Roll 的一半),并用 60 日滚动窗口复现危机温度计。诚实拆穿隔夜跳空、离散报价、负 s² 处理三类真实陷阱(中阶)。
Roll (1984) 只用收盘价就能反推有效价差,是个漂亮的魔术——但它有个致命缺陷:样本自协方差一旦为正,根号下负数,估计直接失效。我们上篇实测过:大盘蓝筹信噪比低,给足 1000 天数据失效率仍有 30%,而且越流动的股票越容易失效,截面上丢弃失效样本就是选择偏差。
Corwin-Schultz (2012) 换了条路,用高低价区间,但被隔夜跳空和截零规则折磨得不轻。
结论先放这:
Abdi & Ranaldo (2017) 把两条路合成一条:收盘价 C 带满 ±s/2 的买卖弹跳,而日高低价中点 η=(H+L)/2 几乎不带弹跳(最高价几乎总在 ask 成交、最低价总在 bid 成交,中点恰好把 ±s/2 对消掉)。于是
一行公式,三列日线数据(C/H/L),无偏、失效率远低于 Roll、不需要 CS 那套二元方程和截零补丁。 这是目前低频价差估计的事实标准——Ardia 等人 2024 年的大样本赛马研究里,AR 和它的推广版 EDGE 稳定压过 Roll 和 CS。
一、核心洞察:中点是「无弹跳的有效价代理」#
回顾观测价的结构。有效价(半价差中点)记作 m,观测成交价:
买单打在 ask(+s/2),卖单打在 bid(−s/2)。Roll 的做法是用相邻收盘价变化的自协方差把 q 的贡献「拧」出来——但这要求两天的 q 独立且各占一半,噪声一大就翻车。
AR 的观察是:日内最高价几乎必然是一笔买单造成的(在 ask 成交),最低价几乎必然是卖单(在 bid 成交)。所以:
取中点,±s/2 恰好对消:
η 是一个不含价差弹跳的有效价代理。而收盘价 c_t 依然带着满额弹跳 q_t·s/2。
于是考察收盘价对前后两天中点的偏离的乘积:
两个因子共享同一个 q_t·s/2 项,交叉相乘后期望里存活下来的恰好是 s²/4(q_t²=1);有效价随机游走部分因为 η_t、η_{t+1} 分居 c_t 两侧而在期望中消掉。整理得 s² = 4·E[(c−η_t)(c−η_{t+1})]。
对比 Roll:Roll 靠两天的弹跳互相打架产生负自协方差,信号强度 s²/4 要从两天的波动噪声里捞;AR 让弹跳和「干净的自己」比对,噪声少了一半来源。这就是它失效率低的根本原因。
先看几何直觉:

绿线是 η(高低价中点),红点是收盘价——红点绕着绿线上下弹跳,弹跳幅度就是 ±s/2。AR 做的事情,本质是测量红点离绿线的系统性距离。
二、路径级模拟:验证无偏性#
和前两篇一样,不从公式反推数据,而是老老实实模拟日内路径——每天 390 个日内步的有效价随机游走 + 独立买卖方向,再取出 C/H/L 三列日线:
import numpy as np
rng = np.random.default_rng(7)
def simulate_day(m0, sigma_day, s, n_intra=390):
"""一日日内路径,返回观测的 (close, high, low) 和期末有效价"""
steps = rng.normal(0, sigma_day / np.sqrt(n_intra), n_intra)
m = m0 + np.cumsum(steps) # 有效价路径
q = rng.choice([-1, 1], n_intra) # 每笔成交的买卖方向
p = m + q * s / 2 # 观测价 = 有效价 ± 半价差
return p[-1], p.max(), p.min(), m[-1]
def ar_estimate(closes, highs, lows):
"""Abdi-Ranaldo (2017)"""
eta = (highs + lows) / 2
c = closes[:-1]
s2 = 4 * np.mean((c - eta[:-1]) * (c - eta[1:]))
return np.sqrt(max(s2, 0)), s2pythonT=252 日、日波动率 2%,真实价差从 0.2% 扫到 4%,每档 400 次蒙特卡洛:
| 真实价差 | AR 估计均值 | 相对偏差 |
|---|---|---|
| 0.20% | 0.266% | +33%(低信噪区,截零抬升) |
| 0.50% | 0.433% | −13% |
| 1.00% | 0.973% | −3% |
| 2.00% | 1.990% | −0.5% |
| 4.00% | 3.996% | −0.1% |

价差 ≥ 1% 的区间几乎完美贴住 45° 线。0.2% 的极低价差区仍有截零偏差(负 s² 被 max(·,0) 砍掉左尾)——这是所有矩估计类价差估计器的通病,但注意幅度:AR 在真值 0.2% 时估出 0.27%,同样条件下 CS 估出的是 0.83%(4 倍高估)。AR 的截零偏差温和一个数量级。
三、与 Roll 同台:失效率和精度双杀#
固定真实价差 0.5%,把日波动率从 0.5% 扫到 5%(信噪比 s/σ 从 1.0 恶化到 0.1),每档 300 次 MC:
| 日波动率 σ | 信噪比 | Roll 失效率 | AR 负 s² 比例 | Roll 相对RMSE | AR 相对RMSE |
|---|---|---|---|---|---|
| 0.5% | 1.00 | 0% | 0% | 0.11 | 0.06 |
| 1.0% | 0.50 | 20% | 0% | 0.42 | 0.18 |
| 2.0% | 0.25 | 41% | 24% | 1.1 | 0.55 |
| 3.0% | 0.17 | 42% | 35% | 1.7 | 0.83 |
| 5.0% | 0.10 | 49% | 45% | 2.9 | 1.4 |

三个要点:
- 中信噪区的碾压最有实战意义(σ=1%~2%,对应多数 A 股与美股中盘):Roll 已经开始大面积失效(20%~41%),AR 在 σ=1% 时失效率还是零;
- AR 的 RMSE 全程只有 Roll 的一半左右——而且 Roll 的 RMSE 只统计了「存活样本」,把失效样本算上差距更大;
- 极端低信噪区(σ=5%)两者都难看,但 AR 至少还能给出可用于截面排序的数字,Roll 一半样本直接弃赛。
还记得 Roll 篇的辛辣反讽吗——Roll 恰恰在最流动(最不需要估价差)的股票上最容易失效。AR 把这个反讽消解了大半:它把可用范围从「非流动资产」扩展到了「正常股票」。这也是 AR 在实证文献里成为默认选择的原因。
四、滚动 AR:危机温度计#
照例做压力测试:750 天路径,中段模拟危机——价差从 0.4% 抬到 2.5%、波动率同步从 1.2% 抬到 4.5%(价差和波动同涨,这是对估计器最恶劣的组合,因为信噪比在危机中反而恶化):
win = 60
roll_ar = np.full(T, np.nan)
for t in range(win, T):
e, _ = ar_estimate(closes[t-win:t], highs[t-win:t], lows[t-win:t])
roll_ar[t] = epython
60 日滚动 AR 把危机段价差抬升的形状完整还原:平静期贴着 0.4% 真值,危机峰值爬到 2.5% 附近,回落段跟随下行。窗口平滑带来的滞后与削峰依然存在(和 Roll/CS 篇一致的代价),但曲线没有 CS 那种因隔夜跳空导致的系统性下压,也没有 Roll 那种整段窗口失效开天窗的问题。
五、工程落地清单#
- 数据要求:C/H/L 三列日线,任何行情源都有。A 股注意统一复权口径(前复权或不复权,H/L/C 必须同口径),除权日的假跳变会污染 (c−η) 项;
- 负 s² 处理:单窗口估计用 max(s²,0) 截零可以,但做截面因子时建议保留负值直接排序(Ardia et al. 2024 的建议),截零会把左尾信息全部抹掉、人为制造大量并列零;
- 月度估计:AR 原文推荐两级做法——先按日算 (c−η_t)(c−η_{t+1}),月内取均值再开方,比整月一把梭的方差更小;
- 涨跌停日剔除:与 CS 同理,A 股涨跌停日 H=L 或区间被压缩,η 退化,直接剔除;
- 和 Roll/CS/Zeros 拼流动性画像:AR 估价差精度最高,Zeros 补活跃度维度,Amihud 补深度维度——三个低频指标正交拼接,不要只用一个。
已知偏差与诚实边界#
- 「最高价在 ask、最低价在 bid」不是恒真。日内如果某个方向长时间无成交(单边行情),极值可能来自同一侧报价,η 的弹跳对消不完全,AR 会低估。实证中这个效应在极端趋势日最明显。
- 隔夜跳空的污染比 CS 温和但存在。跳空进入 c_t 与 η_{t+1} 的关系项,大跳空日会注入噪声(不是系统性偏差,是方差放大)。AR 原文提供了用相邻两日 η 平均的修正版,跳空严重的市场(A 股、加密之外的隔夜停盘市场)建议使用。
- 离散报价单位未建模。本文模拟是连续价格;真实市场 tick size 会给所有低频估计器加一层向上的偏差地板,对低价股(tick/价格比高)尤其明显。
- 模拟的买卖方向独立同分布。真实订单流有持续性(买单后更可能还是买单),会削弱弹跳的对消与交叉项,方向与 Roll 一致——把 AR 读作有效价差的温和下界更稳妥。
- 信噪比 0.1 以下不要读点估计。σ=5% 档 AR 的相对 RMSE 已达 1.4,此时只有截面排名有意义,绝对值不可信——这条红线对所有低频价差估计器一视同仁。
结语#
AR 估计是低频价差估计二十年演进的收官之作:Roll 出了「自协方差反推」的题,CS 发现了「高低价极值统计量」这条富矿,AR 把两者拼在一起——用不带弹跳的高低价中点当参照物,直接测量收盘价的弹跳幅度。一行公式,失效率砍半,RMSE 砍半,还不需要 CS 那堆补丁。
低频「只要日线」的流动性工具箱到此集齐:价差用 AR,活跃度用 Zeros,深度用 Amihud,母单总账单用平方根律。这四件套覆盖了没有逐笔数据时你能对交易成本说的几乎所有诚实的话。
下次要估价差,别再从 Roll 开始了——直接上 AR,把 Roll 留给只有收盘价一列数据的场合。