halo 的技术博客

返回

同样的价差,完全不同的含义#

两只股票,有效价差都是 3 分钱。是不是意味着交易成本一样?

不是。价差是补偿做市商的,但补偿的理由可以完全不同:

  • 理由一:逆向选择。 和你成交的对手方可能比你知道得多。做市商每次被知情交易者吃掉一笔,都在真实亏钱——他挂的价差里必须有一块用来覆盖这个”被割”的期望损失。这部分冲击是永久的:知情买单成交后,价格中枢真的上移了,回不来。
  • 理由二:订单处理与库存。 系统、清算、资本占用、库存风险的补偿。这部分冲击是暂时的:价格被一笔买单顶上去半个价差,下一笔卖单又弹回来——即所谓 bid-ask bounce。

同样 3 分钱的价差,如果一只股票 80% 是逆向选择、另一只 80% 是订单处理,对交易者的含义天差地别:前者意味着你的订单流会持续推动价格朝不利方向走(冲击不可逆),后者意味着耐心用被动单就能把大部分成本省回来(冲击会弹回)。

Madhavan、Richardson 和 Roomans 在 1997 年给出了一个可以用成交数据直接估计的结构模型,把这两块干净拆开。它至今仍是执行成本归因和微观结构研究的基准工具之一。

模型:两个方程讲完#

设定#

记第 tt 笔成交的方向为 xt{+1,1}x_t \in \{+1, -1\}(买方发起 = +1,卖方发起 = −1),订单流有自相关:E[xtxt1]=ρxt1\mathbb{E}[x_t | x_{t-1}] = \rho x_{t-1}(大单拆分、跟风交易都会让 ρ>0\rho > 0)。

方程一:有效价格(信息)

mt=mt1+θ(xtρxt1)+utm_t = m_{t-1} + \theta (x_t - \rho x_{t-1}) + u_t

有效价格 mtm_t 是做市商对真实价值的最优估计。它只对订单流中的意外部分 xtρxt1x_t - \rho x_{t-1} 反应——如果上一笔是买单、这一笔又是买单,那在 ρ>0\rho>0 的世界里这本来就是大概率事件,没什么新信息;只有偏离预期的部分才更新信念。θ\theta 就是信息成分:一笔意外买单让价格中枢永久上移 θ\thetautu_t 是公共信息(新闻、公告)带来的更新。

方程二:成交价(信息 + 流动性)

pt=mt+ϕxtp_t = m_t + \phi x_t

成交价在有效价格上叠加 ϕxt\phi x_t:买单成交在中枢上方 ϕ\phi 处,卖单在下方 ϕ\phi 处。ϕ\phi 就是流动性成分——纯粹的价差弹跳,下一笔反向成交就消失。

MRR 模型的价格分解

图里能直接看到两层结构:黑线(有效价格)平滑地随订单流意外移动,蓝色阶梯线(成交价)围绕它上下弹跳,红色三角(买)永远在黑线上方、绿色三角(卖)在下方。

两式合并得到可估计的价格变动方程

Δpt=(ϕ+θ)xt(ϕ+ρθ)xt1+ut\Delta p_t = (\phi + \theta)x_t - (\phi + \rho\theta)x_{t-1} + u_t

这条方程有个漂亮的性质:右边只有可观测量(Δpt\Delta p_txtx_txt1x_{t-1}),三个结构参数 (θ,ϕ,ρ)(\theta, \phi, \rho) 恰好被三个矩条件识别。

Python 实现:模拟 + 估计闭环#

科学的做法是先在已知真值的模拟数据上验证估计器,再谈上实盘数据。

模拟器#

矩条件估计#

对价格变动方程做两步:先用 xtx_t 的样本自相关估 ρ^\hat\rho,再把 Δpt\Delta p_t(xt,xt1)(x_t, x_{t-1}) 回归,回归系数 b1=ϕ+θb_1 = \phi + \thetab2=(ϕ+ρθ)b_2 = -(\phi + \rho\theta),两条方程解出两个未知数:

def estimate_mrr(p, x):
    dp = np.diff(p)
    rho_hat = np.corrcoef(x[1:], x[:-1])[0, 1]
    X = np.column_stack([x[1:], x[:-1]])
    (b1, b2), *_ = np.linalg.lstsq(X, dp, rcond=None)
    phi_hat = (-b2 - rho_hat * b1) / (1 - rho_hat)
    theta_hat = b1 - phi_hat
    return theta_hat, phi_hat, rho_hat

theta_hat, phi_hat, rho_hat = estimate_mrr(p, x)
# 真值 θ=0.010, φ=0.015, ρ=0.35
# 估计 θ=0.0100, φ=0.0150, ρ=0.356
python

2 万笔成交下,θ\thetaϕ\phi 的估计误差都在 1% 以内。这不是运气——蒙特卡洛显示标准误严格按 1/N1/\sqrt{N} 收敛:

估计精度随样本量收敛

实务上的换算:一只日均 4000 笔成交的股票,一周数据就有 2 万笔,足够把 θ\theta 估到两位有效数字。反过来说,用一天数据估 MRR 是不够的——500 笔样本下 θ\theta 的标准误和真值同量级,估出来的数字基本是噪声。

三个可以直接落地的读法#

读法一:横截面比较——哪些股票”有毒”#

信息占比 θ/(θ+ϕ)\theta / (\theta + \phi) 是逆向选择强度的直接度量:

不同股票的价差成分分解

典型的横截面模式(与 MRR 原文对 NYSE 股票的实证一致):大盘蓝筹信息占比低(分析师覆盖充分、私有信息少),小盘股信息占比高,财报公告日信息占比进一步跳升。对执行的直接含义:信息占比高的股票,冲击成本主要是永久的,拖慢执行速度省不回来多少钱;信息占比低的股票,用被动单和耐心能实实在在把 ϕ\phi 那一块赚回来。

读法二:日内模式——什么时候市场在”学习”#

把每 30 分钟的成交切开分别估计,得到成分的日内曲线:

信息成分的日内衰减模式

θ\theta 在开盘后最高然后快速衰减——隔夜积累的私有信息在开盘后一两个小时内被交易消化掉;ϕ\phi 则近似平稳。这是 MRR 原文的标志性实证发现,也解释了为什么很多执行算法把订单往午盘挪:不是流动性更好(午盘深度往往更差),而是逆向选择更便宜

读法三:执行成本归因#

拿自己的成交回执,把每笔子单的价格冲击分解为 θ\theta(永久)和 ϕ\phi(暂时)两部分,可以回答一个 TCA 报告里最值钱的问题:我的冲击成本里有多少是”信息泄露”(订单流被市场读出来了,θ\theta 部分持续放大),有多少只是价差成本(ϕ\phi 部分,换更被动的下单方式就能压缩)。前者要改的是拆单节奏和随机化,后者要改的是订单类型选择。

诚实的边界#

第一,交易方向 xtx_t 是估计出来的,不是观测到的。 实盘数据要用 Lee-Ready 之类的算法从报价和成交推断买卖方向,A 股逐笔数据自带方向标志相对好些,但美股 TAQ 数据的标注错误率可达 10-15%。方向标错会同时把 θ\thetaϕ\phi 往下拉(衰减偏差),横截面比较时如果两组股票的标注错误率不同,结论可能整个反过来。

第二,参数不平稳。 上面日内图已经展示了 θ\theta 的系统性日内变化;财报季、指数调整日、宏观事件日的参数和平常也完全不同。用一个月数据估出一组”全局参数”然后到处用,等于把开盘的逆向选择强度平均到午盘——正确做法是分时段、分状态估计,并接受每个子样本更宽的置信区间。

第三,模型假设订单流影响是线性的、方向是 ±1 的。 真实市场里 1 万股买单和 100 股买单的信息含量不同,MRR 把它们同等对待。扩展版本用签名成交量代替方向、或按订单规模分桶估计,代价是需要更多数据。基础版 MRR 适合作为第一刀粗分解,不适合作为最后一位小数的定价工具。

收尾#

MRR 模型用两个方程回答了一个交易者天天面对却很少量化的问题:我付出的价差里,多少是在补偿对手方的成本,多少是在为自己的信息劣势买单。 模拟验证了它的估计器干净可靠(2 万笔成交、误差 1% 以内、按 1/N1/\sqrt{N} 收敛),三个落地读法——横截面毒性比较、日内逆向选择曲线、执行成本归因——都不需要任何额外数据,只要成交明细。

在微观结构的模型谱系里,它站在 Ho-Stoll(纯库存)和 Glosten-Milgrom / Kyle(纯信息)之间,是少数能用日常数据直接估计的结构模型。如果你只打算给微观结构工具箱装一件测量仪器,MRR 是性价比最高的候选之一。

参考文献#

  • Madhavan, A., Richardson, M., & Roomans, M. (1997). Why do security prices change? A transaction-level analysis of NYSE stocks. Review of Financial Studies, 10(4), 1035-1064.
  • Glosten, L. R., & Milgrom, P. R. (1985). Bid, ask and transaction prices in a specialist market with heterogeneously informed traders. Journal of Financial Economics, 14(1), 71-100.
  • Lee, C. M. C., & Ready, M. J. (1991). Inferring trade direction from intraday data. Journal of Finance, 46(2), 733-746.
Madhavan-Richardson-Roomans 微观结构模型:拆解成交价里的信息与流动性成分
https://blog.halo26812.eu.org/blog/madhavan-glosten-model
Author halo
Published at 2026年7月26日
版权声明 CC BY-NC-SA 4.0
Comment seems to stuck. Try to refresh?✨