跳到正文

逆向选择与知情交易:Glosten-Milgrom 模型

为什么有点差?不是因为 dealer 贪心,而是因为总有人比他懂。Glosten-Milgrom 模型把这个机制推成一个公式:价差正比于知情者占比。

第 3 篇 · 共 12 篇 约 8 分钟

你问一个金融本科生”为什么有买卖价差”,他会告诉你”dealer 报酬”或者”订单处理成本”。没错,但不完整。

诚实的回答是:有点差是因为知情交易者从 dealer 那里抽钱,而价差是 dealer 的保险。没知情交易者,价差可以是零点几个 tick,刚好覆盖订单路由和清算。有知情交易者,价差必须宽到让 dealer 在被毒性流(toxic flow)打穿之后还能小赚。

这就是 Glosten-Milgrom 模型(1985)。它是微观结构文献里对价差最干净的推导,Harris 也给了大量篇幅(Harris,《Trading and Exchanges》,第 10 和 13 章)。整篇文章其实只做一件事:把”dealer 怕被懂行的人收割”这句话变成一个可以计算的公式,然后看这个公式对做市和吃单分别意味着什么。

模型设定

Dealer 挂出买价 BB 和卖价 AA。两种交易者到来。

流动性交易者随机到达,对资产价值没有任何信息,出于外生原因(调仓、对冲、人生事件)买卖,买和卖各半。知情交易者到达时知道资产的真实价值 VV:如果 V>AV > A 就买(卖价低于价值),如果 V<BV < B 就卖(买价高于价值),B≤V≤AB \leq V \leq A 时不交易。

设 π\pi 为下一位交易者是知情者的概率,1−π1 - \pi 为流动性交易者的概率。Dealer 的任务是选 BB 和 AA 让期望利润为零(更现实的版本是某个目标利润率)。

简单起见,资产真实价值 VV 是二元的:V∈{VL,VH}V \in \{V_L, V_H\},各以 1/21/2 的概率出现。后面会给连续 VV 的近似。

Dealer 观察到一笔买入后学到什么

Dealer 不知道 VV,但每一笔成交都是证据。关键问题:观察到有人按卖价买入,dealer 该把信念更新到哪里?

先算两个条件概率。给定 V=VHV = V_H(并且 A<VHA < V_H,否则知情者根本不动手):知情者一定买,不知情者以 1/21/2 概率买,所以

P(buy∣VH)=π+1−π2=1+π2P(\text{buy} \mid V_H) = \pi + \frac{1-\pi}{2} = \frac{1+\pi}{2}

给定 V=VLV = V_L:知情者绝不买(卖价肯定高于 VLV_L),只有不知情者以 1/21/2 概率买,所以

P(buy∣VL)=1−π2P(\text{buy} \mid V_L) = \frac{1-\pi}{2}

无条件的买入概率,两种价值各占一半:

P(buy)=12⋅1+π2+12⋅1−π2=12P(\text{buy}) = \frac{1}{2}\cdot\frac{1+\pi}{2} + \frac{1}{2}\cdot\frac{1-\pi}{2} = \frac{1}{2}

按贝叶斯:

P(V=VH∣buy)=1+π2⋅1212=1+π2P(V = V_H \mid \text{buy}) = \frac{\frac{1+\pi}{2}\cdot\frac{1}{2}}{\frac{1}{2}} = \frac{1+\pi}{2}

所以观察到一次买入后,dealer 对 V=VHV = V_H 的信念从 1/21/2 更新到 (1+π)/2(1+\pi)/2。π=0.1\pi = 0.1 时是 0.55:一笔买入只是轻轻推了一下信念,因为这笔买入多半来自不知情者。对称地,观察到一次卖出后,dealer 对 V=VLV = V_L 的信念更新到 (1+π)/2(1+\pi)/2。

注意这个更新对每一笔成交都成立。Dealer 分不清眼前这位是谁,所以不知情者的买单同样会推高他的信念——这是逆向选择的残酷之处:无辜的流动性交易者也在替知情者”作证”。

报价:把后验直接挂出来

Dealer 选 BB 和 AA 让期望盈亏平衡。这里有个容易想歪的地方:卖价不是挂在”当前的期望价值”上,而是挂在”假如下一笔是买入、成交之后我对价值的期望”上。因为一旦有人在卖价成交,dealer 已经处在”观察到买入”的世界里了。

卖价。 有人在 AA 买入时,dealer 每股期望利润是 A−E[V∣buy]A - E[V \mid \text{buy}]。盈亏平衡要求:

A=E[V∣buy]=1+π2VH+1−π2VLA = E[V \mid \text{buy}] = \frac{1+\pi}{2} V_H + \frac{1-\pi}{2} V_L

买价。 对称地,有人在 BB 卖出时盈亏平衡要求:

B=E[V∣sell]=1−π2VH+1+π2VLB = E[V \mid \text{sell}] = \frac{1-\pi}{2} V_H + \frac{1+\pi}{2} V_L

这类报价在文献里叫 regret-free:无论成交发生在哪一侧,dealer 事后都不后悔。

价差

两式相减,VHV_H 和 VLV_L 的系数各差 π\pi:

s=A−B=π(VH−VL)s = A - B = \pi (V_H - V_L)

这就是 Glosten-Milgrom 的核心结果:价差对知情者概率是线性的,对 dealer 的价值不确定性(VH−VLV_H - V_L)成正比。只要 π>0\pi > 0,价差就严格为正。

用极端值检验一下。π=0\pi = 0(没有知情者):A=B=(VH+VL)/2A = B = (V_H+V_L)/2,价差为零,dealer 用无条件期望值同时当买卖价,平均下来不赚不亏。π=1\pi = 1(全是知情者):A=VHA = V_H、B=VLB = V_L,dealer 报出所有可能值的全区间——每一笔成交都必然是被收割,只有把价差撑满才能自保。中间的 π\pi 就在这两个端点之间线性滑动。

代入具体数字。设 VL=99V_L = 99,VH=101V_H = 101,π=0.1\pi = 0.1:

A=0.55⋅101+0.45⋅99=100.10A = 0.55 \cdot 101 + 0.45 \cdot 99 = 100.10 B=0.45⋅101+0.55⋅99=99.90B = 0.45 \cdot 101 + 0.55 \cdot 99 = 99.90

价差 =0.20=0.1×2=π(VH−VL)= 0.20 = 0.1 \times 2 = \pi(V_H - V_L)。知情者占一成流量,dealer 就要把价值区间的一成宽度做成价差。

价差存在的原因就摆在这个公式里:不是订单处理,不是库存,是 dealer 跟比自己懂得多的人交易时索取的补偿。

经验量级

真实市场里 π\pi 不能直接观测,但可以从价差反推。如果 VV 是连续的,dealer 的先验是均值为 MM、标准差为 σV\sigma_V 的分布,Glosten-Milgrom 结果近似推广为:

s≈2πσVs \approx 2 \pi \sigma_V

(跟二元情形对得上:VH−VL=2σVV_H - V_L = 2\sigma_V 时两式一致。)半点差等于 π\pi 乘以 dealer 对价值的不确定性。假设 dealer 水平期上基本面价值标准差是 1.001.00、π=0.005\pi = 0.005(知情者占流量 0.5%),半点差就是 0.0050.005,对 100 美元的股票是 5 bp——跟流动股票的观测量级对得上。倒过来用更常见:给定观测到的价差和一个对 σV\sigma_V 的估计,解出隐含的 π\pi。流动市场里这样反推出来的 π\pi 很小(量级上千分之一到百分之一),但从来不是零,而且价差确实跟着它走。具体数字随样本、市场和估计方法漂移,量级判断比小数点更可靠。

多笔成交:信念的滚雪球

上面的模型只有一笔交易,真实市场有很多笔,而 dealer 的贝叶斯更新是可以迭代的。这是模型最有意思的延伸。

每观察到一次买入,VHV_H 对 VLV_L 的后验比(odds)就乘上一个似然比:

P(buy∣VH)P(buy∣VL)=(1+π)/2(1−π)/2=1+π1−π\frac{P(\text{buy} \mid V_H)}{P(\text{buy} \mid V_L)} = \frac{(1+\pi)/2}{(1-\pi)/2} = \frac{1+\pi}{1-\pi}

连续 nn 笔买入(没有卖出)之后:

P(VH∣n buys)=(1+π)n(1+π)n+(1−π)nP(V_H \mid n \text{ buys}) = \frac{(1+\pi)^n}{(1+\pi)^n + (1-\pi)^n}

只要 π>0\pi > 0,似然比就大于 1,这一项在 n→∞n \to \infty 时趋向 1。π\pi 越小收敛越慢,但方向不变:足够多的单边买入之后,dealer 就确信价值是高的,买卖价一起上移。

这就是微观结构形式下的价格发现,也是它的阴暗面——信息级联:价格顺着成交流方向走,即便你自己知道这串买入全是不知情的巧合。这同时是订单流毒性(order-flow toxicity)的基础:你用市价单硬吃一侧,就在推动 dealer 的信念、也就是他的报价。市场冲击在这个极限意义下是永久的。Harris 在第 10 和 13 章对这条线有展开。

库存模型这个对照组

Glosten-Milgrom 是点差的信息模型:价差存在是因为信息不对称。更老的一支是库存模型(Stoll, 1978; Ho and Stoll, 1981):dealer 累积了不想要的库存,价差是承担库存风险的补偿。两个模型不互斥,经验上两种效应都在。Harris 第 10 章两个都讨论了,结论是信息不对称是更大的驱动,近代微观结构研究基本同意:价差首先补偿信息风险,其次才是库存风险。这个排序对做市者的直觉很重要——你持 10000 股多仓本身不是问题,你持 10000 股而下一笔是知情者的卖单才是问题。

对策略的意义

做市方向,这个模型给的教训都能从公式直接读出来。你的价差必须够宽,宽到覆盖被知情者收割的期望损失——如果一笔往返的 edge 抵不上毒性流的价格冲击,你在慢性失血。而 π\pi 不是常数:开盘时、重大新闻前后,知情者占比飙升,s=π(VH−VL)s = \pi(V_H - V_L) 里两个因子(知情者更多、价值不确定性更大)同时变大,这时候还挂着平时宽度的紧单,等于把自己端上桌。正确动作是拉宽价差或干脆撤单。

吃单方向,结论反过来读。你付的点差大部分时候不冤——那是 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)

跑一下你会看到:真实价值是 VHV_H 时,买入在成交流里略占多数(知情者全在买),信念一路收敛到 1,卖价爬向 VHV_H。知情买方在早期成交、卖价还低的时候赚得最多;晚来的买方付更多。价格发现就是知情者的租金被逐笔摊薄的过程。

Arithmion 的逆向选择模块

arithmion.microstructure 里的 AdverseSelectionModel 把这一套变成可用的工具:用 Glosten-Milgrom 似然从历史报价和成交数据估计 π\pi,在不同 π\pi 情景下模拟价格路径,并对任何执行算法估计”对知情人的期望损失”。它也是第 3 篇 SpreadAnalyzer 的上游之一:从观测价差里减去 Roll 风格的估计,残差就是逆向选择分量。

接下来:从静态到动态

Glosten-Milgrom 给了价差一个经济学解释,但它是静态、单期的:一笔成交、一次更新。Hasbrouck (1991) 问的是动态版本的问题——一串成交下来,价格方差里有多大比例是信息?他用成交方向和价格变化的 VAR 把”dealer 信念的创新”测出来,这就是第 5 篇要推的信息份额。两个模型度量的是同一件事的两面:市场认为订单流有多大信息含量。读完这两篇你会发现,做市商的价差和执行算法的冲击成本,根子上是同一个 π\pi。

参考文献

  • 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.