信息模型基础:Glosten-Milgrom模型的核心思想与推导
好,咱们今天聊聊Glosten-Milgrom模型。说实话,这个模型是我入行做算法交易时啃的第一块硬骨头。当时我还在做期权做市,每天被信息不对称搞得焦头烂额。后来读到这篇1985年的论文,才恍然大悟——原来做市商面临的困境,早就有数学模型讲得清清楚楚了。
为什么需要序贯交易模型?
你想想看,传统的有效市场假说假设所有信息都反映在价格里。但现实呢?我举个例子:你在盘口挂单,突然来了一笔大单砸盘。你慌不慌?你不知道对方是看到了什么坏消息,还是单纯想止损。这就是信息不对称。
Glosten-Milgrom模型(简称GM模型)要解决的核心问题就是:做市商如何在不知道交易者身份的情况下,动态调整报价。说白了,就是跟市场博弈。
核心思想:交易本身会传递信息。每一笔成交都在更新做市商对资产真实价值的信念。
模型的基本设定
GM模型其实很简洁。我习惯把它拆成四个要素:
- 一个风险中性的做市商——就是我,负责报出买价和卖价
- 两类交易者:知情交易者(知道真实价值)和不知情交易者(纯粹流动性需求)
- 一个二元资产价值:真实价值V要么是高值V_H,要么是低值V_L
- 序贯交易:交易者一个一个来,做市商根据历史交易更新报价
嗯,这里要注意:模型假设做市商是贝叶斯更新者。什么意思?就是每次有人来交易,做市商都会重新算一遍:“现在资产是高值的概率是多少?”
核心推导:贝叶斯更新下的报价公式
咱们一步步来。假设做市商当前认为资产是高值的概率为π。那么资产的期望价值就是:
E[V] = π × V_H + (1-π) × V_L
但做市商不能直接按这个价格交易。为什么?因为要防范知情交易者。我曾经在实盘里吃过这个亏——按理论价值报价,结果被知情交易者反复收割。后来才明白,报价必须包含一个“逆向选择”的价差。
具体推导是这样的:
- 卖价(Ask)的确定:做市商卖出股票,意味着买方可能是知情者(知道价值高)。所以卖价要高于当前期望价值。
- 买价(Bid)的确定:做市商买入股票,意味着卖方可能是知情者(知道价值低)。所以买价要低于当前期望价值。
用数学表达就是:
Ask = E[V | 买方发起交易]
Bid = E[V | 卖方发起交易]
这里的关键是条件概率。假设知情交易者出现的概率为μ,不知情交易者出现的概率为1-μ。那么:
- 买方发起交易的概率 = μ × P(价值为高) + (1-μ) × 0.5
- 卖方发起交易的概率 = μ × P(价值为低) + (1-μ) × 0.5
我当年推导到这里时,卡了很久。后来画了个决策树才搞明白。咱们用SVG画一下这个逻辑:
报价公式的最终形式
经过贝叶斯更新,我们可以得到做市商的报价公式:
| 报价类型 | 公式 | 直观解释 |
|---|---|---|
| 卖价 (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模型最大的价值不是直接拿来用,而是提供了思考框架。我总结几个实际落地点:
- 做市商报价引擎:作为基准模型,结合其他因子调整价差
- 信息冲击评估:通过交易序列反推μ值,判断当前市场的信息不对称程度
- 最优执行策略:大单拆单时,避开信息不对称高的时段
嗯,最后说一句。GM模型是1985年的东西,快40年了。但每次我遇到新的市场环境,还是会回到这个模型重新思考。因为信息不对称这个问题,永远不会过时。
公众号:蓝海资料掘金营,微信deep3321