逆向选择与知情交易:Glosten-Milgrom 模型
为什么有点差?不是因为 dealer 贪心,而是因为总有人比他懂。Glosten-Milgrom 模型把这个机制推成一个公式:价差正比于知情者占比。
你问一个金融本科生”为什么有买卖价差”,他会告诉你”dealer 报酬”或者”订单处理成本”。没错,但不完整。
诚实的回答是:有点差是因为知情交易者从 dealer 那里抽钱,而价差是 dealer 的保险。没知情交易者,价差可以是零点几个 tick,刚好覆盖订单路由和清算。有知情交易者,价差必须宽到让 dealer 在被毒性流(toxic flow)打穿之后还能小赚。
这就是 Glosten-Milgrom 模型(1985)。它是微观结构文献里对价差最干净的推导,Harris 也给了大量篇幅(Harris,《Trading and Exchanges》,第 10 和 13 章)。整篇文章其实只做一件事:把”dealer 怕被懂行的人收割”这句话变成一个可以计算的公式,然后看这个公式对做市和吃单分别意味着什么。
模型设定
Dealer 挂出买价 和卖价 。两种交易者到来。
流动性交易者随机到达,对资产价值没有任何信息,出于外生原因(调仓、对冲、人生事件)买卖,买和卖各半。知情交易者到达时知道资产的真实价值 :如果 就买(卖价低于价值),如果 就卖(买价高于价值), 时不交易。
设 为下一位交易者是知情者的概率, 为流动性交易者的概率。Dealer 的任务是选 和 让期望利润为零(更现实的版本是某个目标利润率)。
简单起见,资产真实价值 是二元的:,各以 的概率出现。后面会给连续 的近似。
Dealer 观察到一笔买入后学到什么
Dealer 不知道 ,但每一笔成交都是证据。关键问题:观察到有人按卖价买入,dealer 该把信念更新到哪里?
先算两个条件概率。给定 (并且 ,否则知情者根本不动手):知情者一定买,不知情者以 概率买,所以
给定 :知情者绝不买(卖价肯定高于 ),只有不知情者以 概率买,所以
无条件的买入概率,两种价值各占一半:
按贝叶斯:
所以观察到一次买入后,dealer 对 的信念从 更新到 。 时是 0.55:一笔买入只是轻轻推了一下信念,因为这笔买入多半来自不知情者。对称地,观察到一次卖出后,dealer 对 的信念更新到 。
注意这个更新对每一笔成交都成立。Dealer 分不清眼前这位是谁,所以不知情者的买单同样会推高他的信念——这是逆向选择的残酷之处:无辜的流动性交易者也在替知情者”作证”。
报价:把后验直接挂出来
Dealer 选 和 让期望盈亏平衡。这里有个容易想歪的地方:卖价不是挂在”当前的期望价值”上,而是挂在”假如下一笔是买入、成交之后我对价值的期望”上。因为一旦有人在卖价成交,dealer 已经处在”观察到买入”的世界里了。
卖价。 有人在 买入时,dealer 每股期望利润是 。盈亏平衡要求:
买价。 对称地,有人在 卖出时盈亏平衡要求:
这类报价在文献里叫 regret-free:无论成交发生在哪一侧,dealer 事后都不后悔。
价差
两式相减, 和 的系数各差 :
这就是 Glosten-Milgrom 的核心结果:价差对知情者概率是线性的,对 dealer 的价值不确定性()成正比。只要 ,价差就严格为正。
用极端值检验一下。(没有知情者):,价差为零,dealer 用无条件期望值同时当买卖价,平均下来不赚不亏。(全是知情者):、,dealer 报出所有可能值的全区间——每一笔成交都必然是被收割,只有把价差撑满才能自保。中间的 就在这两个端点之间线性滑动。
代入具体数字。设 ,,:
价差 。知情者占一成流量,dealer 就要把价值区间的一成宽度做成价差。
价差存在的原因就摆在这个公式里:不是订单处理,不是库存,是 dealer 跟比自己懂得多的人交易时索取的补偿。
经验量级
真实市场里 不能直接观测,但可以从价差反推。如果 是连续的,dealer 的先验是均值为 、标准差为 的分布,Glosten-Milgrom 结果近似推广为:
(跟二元情形对得上: 时两式一致。)半点差等于 乘以 dealer 对价值的不确定性。假设 dealer 水平期上基本面价值标准差是 、(知情者占流量 0.5%),半点差就是 ,对 100 美元的股票是 5 bp——跟流动股票的观测量级对得上。倒过来用更常见:给定观测到的价差和一个对 的估计,解出隐含的 。流动市场里这样反推出来的 很小(量级上千分之一到百分之一),但从来不是零,而且价差确实跟着它走。具体数字随样本、市场和估计方法漂移,量级判断比小数点更可靠。
多笔成交:信念的滚雪球
上面的模型只有一笔交易,真实市场有很多笔,而 dealer 的贝叶斯更新是可以迭代的。这是模型最有意思的延伸。
每观察到一次买入, 对 的后验比(odds)就乘上一个似然比:
连续 笔买入(没有卖出)之后:
只要 ,似然比就大于 1,这一项在 时趋向 1。 越小收敛越慢,但方向不变:足够多的单边买入之后,dealer 就确信价值是高的,买卖价一起上移。
这就是微观结构形式下的价格发现,也是它的阴暗面——信息级联:价格顺着成交流方向走,即便你自己知道这串买入全是不知情的巧合。这同时是订单流毒性(order-flow toxicity)的基础:你用市价单硬吃一侧,就在推动 dealer 的信念、也就是他的报价。市场冲击在这个极限意义下是永久的。Harris 在第 10 和 13 章对这条线有展开。
库存模型这个对照组
Glosten-Milgrom 是点差的信息模型:价差存在是因为信息不对称。更老的一支是库存模型(Stoll, 1978; Ho and Stoll, 1981):dealer 累积了不想要的库存,价差是承担库存风险的补偿。两个模型不互斥,经验上两种效应都在。Harris 第 10 章两个都讨论了,结论是信息不对称是更大的驱动,近代微观结构研究基本同意:价差首先补偿信息风险,其次才是库存风险。这个排序对做市者的直觉很重要——你持 10000 股多仓本身不是问题,你持 10000 股而下一笔是知情者的卖单才是问题。
对策略的意义
做市方向,这个模型给的教训都能从公式直接读出来。你的价差必须够宽,宽到覆盖被知情者收割的期望损失——如果一笔往返的 edge 抵不上毒性流的价格冲击,你在慢性失血。而 不是常数:开盘时、重大新闻前后,知情者占比飙升, 里两个因子(知情者更多、价值不确定性更大)同时变大,这时候还挂着平时宽度的紧单,等于把自己端上桌。正确动作是拉宽价差或干脆撤单。
吃单方向,结论反过来读。你付的点差大部分时候不冤——那是 dealer 为”不知道你知不知道什么”收的保费。你的市场冲击本质上是信息性的:大额但无信息地交易,dealer 信念基本不动,你拿到 touch 附近的价;带着信息交易,信念就会动,你为自己的信息付费。还有一条容易被忽略:毒性是会被识别的。你每次都在利好前按卖价买,dealer 迟早针对你的流量报更宽的价——逆向选择是双向学习的游戏。
一个 Python 仿真
下面的仿真展示 Glosten-Milgrom dealer 的信念和报价怎么随成交流演化。注意两个实现细节,都直接来自上面的推导:报价用的是”假如成交”的条件期望(不是当前期望值),而且每一笔成交都更新信念——dealer 分不清对手是谁,不知情者的单子同样移动报价。
import numpy as np
def _posterior(p, pi, side):
"""观察到一笔 buy/sell 后 dealer 的后验 P(V = V_H)。"""
l_h = pi + (1 - pi) / 2 # P(buy | V_H)
l_l = (1 - pi) / 2 # P(buy | V_L)
if side == "buy":
num, den = p * l_h, p * l_h + (1 - p) * l_l
else: # sell:似然对调
num, den = p * l_l, p * l_l + (1 - p) * l_h
return num / den
def glosten_milgrom_path(pi, V_L, V_H, n_trades, rng):
"""
模拟 Glosten-Milgrom dealer 面对一串成交。
返回每个时刻的 (belief, bid, ask) 数组。
"""
true_V = V_H if rng.random() < 0.5 else V_L
p = 0.5 # dealer 的 P(V = V_H)
beliefs, bids, asks = [], [], []
for _ in range(n_trades):
p_buy, p_sell = _posterior(p, pi, "buy"), _posterior(p, pi, "sell")
ask = p_buy * V_H + (1 - p_buy) * V_L # E[V | buy]
bid = p_sell * V_H + (1 - p_sell) * V_L # E[V | sell]
beliefs.append(p); bids.append(bid); asks.append(ask)
if rng.random() < pi: # 知情者
side = "buy" if true_V == V_H else "sell"
else: # 流动性交易者
side = "buy" if rng.random() < 0.5 else "sell"
p = _posterior(p, pi, side) # 每笔成交都更新
return np.array(beliefs), np.array(bids), np.array(asks)
跑一下你会看到:真实价值是 时,买入在成交流里略占多数(知情者全在买),信念一路收敛到 1,卖价爬向 。知情买方在早期成交、卖价还低的时候赚得最多;晚来的买方付更多。价格发现就是知情者的租金被逐笔摊薄的过程。
Arithmion 的逆向选择模块
arithmion.microstructure 里的 AdverseSelectionModel 把这一套变成可用的工具:用 Glosten-Milgrom 似然从历史报价和成交数据估计 ,在不同 情景下模拟价格路径,并对任何执行算法估计”对知情人的期望损失”。它也是第 3 篇 SpreadAnalyzer 的上游之一:从观测价差里减去 Roll 风格的估计,残差就是逆向选择分量。
接下来:从静态到动态
Glosten-Milgrom 给了价差一个经济学解释,但它是静态、单期的:一笔成交、一次更新。Hasbrouck (1991) 问的是动态版本的问题——一串成交下来,价格方差里有多大比例是信息?他用成交方向和价格变化的 VAR 把”dealer 信念的创新”测出来,这就是第 5 篇要推的信息份额。两个模型度量的是同一件事的两面:市场认为订单流有多大信息含量。读完这两篇你会发现,做市商的价差和执行算法的冲击成本,根子上是同一个 。
参考文献
- Harris, L. Trading and Exchanges: Market Microstructure for Practitioners. Oxford University Press, 2003. 第 10 章(基于信息的交易),第 13 章(dealer 与库存)。ISBN: 978-0-19-514470-3.
- Glosten, L., Milgrom, P. “Bid, Ask and Transaction Prices in a Specialist Market with Heterogeneously Informed Traders.” Journal of Financial Economics, 1985.
- Hasbrouck, J. “Measuring the Information Content of Stock Trades.” Journal of Finance, 1991.
- Stoll, H. “The Supply of Dealer Services in Securities Markets.” Journal of Finance, 1978.
- Ho, T., Stoll, H. “Optimal Dealer Pricing Under Transactions and Return Uncertainty.” Journal of Financial Economics, 1981.