信息模型基础:Glosten-Milgrom模型的核心思想与推导

好,咱们今天聊聊Glosten-Milgrom模型。说实话,这个模型是我入行做算法交易时啃的第一块硬骨头。当时我还在做期权做市,每天被信息不对称搞得焦头烂额。后来读到这篇1985年的论文,才恍然大悟——原来做市商面临的困境,早就有数学模型讲得清清楚楚了。

为什么需要序贯交易模型?

你想想看,传统的有效市场假说假设所有信息都反映在价格里。但现实呢?我举个例子:你在盘口挂单,突然来了一笔大单砸盘。你慌不慌?你不知道对方是看到了什么坏消息,还是单纯想止损。这就是信息不对称。

Glosten-Milgrom模型(简称GM模型)要解决的核心问题就是:做市商如何在不知道交易者身份的情况下,动态调整报价。说白了,就是跟市场博弈。

核心思想:交易本身会传递信息。每一笔成交都在更新做市商对资产真实价值的信念。

模型的基本设定

GM模型其实很简洁。我习惯把它拆成四个要素:

  • 一个风险中性的做市商——就是我,负责报出买价和卖价
  • 两类交易者:知情交易者(知道真实价值)和不知情交易者(纯粹流动性需求)
  • 一个二元资产价值:真实价值V要么是高值V_H,要么是低值V_L
  • 序贯交易:交易者一个一个来,做市商根据历史交易更新报价

嗯,这里要注意:模型假设做市商是贝叶斯更新者。什么意思?就是每次有人来交易,做市商都会重新算一遍:“现在资产是高值的概率是多少?”

核心推导:贝叶斯更新下的报价公式

咱们一步步来。假设做市商当前认为资产是高值的概率为π。那么资产的期望价值就是:

E[V] = π × V_H + (1-π) × V_L

但做市商不能直接按这个价格交易。为什么?因为要防范知情交易者。我曾经在实盘里吃过这个亏——按理论价值报价,结果被知情交易者反复收割。后来才明白,报价必须包含一个“逆向选择”的价差。

具体推导是这样的:

  1. 卖价(Ask)的确定:做市商卖出股票,意味着买方可能是知情者(知道价值高)。所以卖价要高于当前期望价值。
  2. 买价(Bid)的确定:做市商买入股票,意味着卖方可能是知情者(知道价值低)。所以买价要低于当前期望价值。

用数学表达就是:

Ask = E[V | 买方发起交易]
Bid = E[V | 卖方发起交易]

这里的关键是条件概率。假设知情交易者出现的概率为μ,不知情交易者出现的概率为1-μ。那么:

  • 买方发起交易的概率 = μ × P(价值为高) + (1-μ) × 0.5
  • 卖方发起交易的概率 = μ × P(价值为低) + (1-μ) × 0.5

我当年推导到这里时,卡了很久。后来画了个决策树才搞明白。咱们用SVG画一下这个逻辑:

GM模型序贯交易决策树 做市商 V = V_H V = V_L 知情(μ) 不知情(1-μ) 知情(μ) 不知情(1-μ) 买入 买入 卖出 卖出 买入 卖出 知情交易者 不知情交易者

报价公式的最终形式

经过贝叶斯更新,我们可以得到做市商的报价公式:

报价类型 公式 直观解释
卖价 (Ask) Ask = V_L + (V_H - V_L) × [π(1-μ) + 0.5(1-μ)] / [μ + (1-μ)] 买方可能是知情者,所以加价
买价 (Bid) Bid = V_L + (V_H - V_L) × [0.5(1-μ)] / [μ + (1-μ)] 卖方可能是知情者,所以折价
价差 (Spread) Spread = Ask - Bid = μ × (V_H - V_L) 价差完全由信息不对称程度决定

关键洞察:价差与知情交易者比例μ成正比。μ越大,做市商面临的逆向选择风险越大,价差就越宽。

动态更新:交易如何改变信念

模型最精彩的部分来了——每一笔交易后,做市商都会更新对资产价值的信念。我习惯用Python模拟这个过程:

def update_belief(pi, mu, trade_type):
    """
    pi: 当前认为资产是高值的概率
    mu: 知情交易者比例
    trade_type: 'buy' 或 'sell'
    """
    if trade_type == 'buy':
        # 买方发起交易后,更新概率
        numerator = pi * (mu + 0.5*(1-mu))
        denominator = pi * (mu + 0.5*(1-mu)) + (1-pi) * 0.5*(1-mu)
    else:  # sell
        numerator = pi * 0.5*(1-mu)
        denominator = pi * 0.5*(1-mu) + (1-pi) * (mu + 0.5*(1-mu))
    
    return numerator / denominator

# 模拟连续交易
pi = 0.5  # 初始信念
mu = 0.3  # 30%知情交易者
trades = ['buy', 'buy', 'sell', 'buy', 'sell']

print("交易序列信念更新:")
for i, t in enumerate(trades):
    pi = update_belief(pi, mu, t)
    print(f"第{i+1}笔{t.upper()}后,P(V=V_H) = {pi:.4f}")

个人经验:我在做高频做市策略时,就用这个逻辑实时更新报价。连续三笔买单后,我会自动调高卖价——因为很可能有知情交易者在买入。

模型的局限与我的思考

GM模型虽然优雅,但有几个地方在实际中需要小心:

  • 二元价值假设太强:真实资产价值是连续的。我曾在股指期货上试过,效果还行,但个股就不太准。
  • 忽略订单规模:模型假设每笔交易都是1单位。现实中,大单和小单的信息含量完全不同。
  • 没有考虑时间因素:交易间隔本身也传递信息。我记得有次做回测,发现隔夜跳空后的第一笔交易,信息含量特别高。

避坑指南:我曾经直接把GM模型套在A股市场上,结果亏了一周。后来发现,A股的散户比例高,μ值波动极大。早盘和尾盘的μ值能差3倍。所以,参数估计一定要做滚动窗口。

模型的实际应用场景

说实话,GM模型最大的价值不是直接拿来用,而是提供了思考框架。我总结几个实际落地点:

  1. 做市商报价引擎:作为基准模型,结合其他因子调整价差
  2. 信息冲击评估:通过交易序列反推μ值,判断当前市场的信息不对称程度
  3. 最优执行策略:大单拆单时,避开信息不对称高的时段

嗯,最后说一句。GM模型是1985年的东西,快40年了。但每次我遇到新的市场环境,还是会回到这个模型重新思考。因为信息不对称这个问题,永远不会过时。


公众号:蓝海资料掘金营,微信deep3321