halo 的技术博客

返回

智能体市场微观结构仿真:用多 Agent 重演限价簿价格发现#

🤖 你把 NASDAQ 的逐笔数据下载下来,能看到每一笔成交的价格和数量,却看不到是谁下的单、为什么下这个价、如果少 10 个做市商会变成什么样。Agent-Based Model(ABM)的价值不是预测下一分钟的价格,而是在可控实验室里重演「如果……会怎样」

1. 为什么需要 Agent-Based 市场模型#

传统市场微观结构模型——Glosten-Milgrom 信息模型、Kyle 批量交易模型——都把市场简化为两三个代表性参与者(知情交易者、做市商、噪音交易者)。这些模型能给出漂亮的解析解,却回答不了实务中的结构性问题:

  • HFT 做市商占 60% 交易量时,真正的流动性提供者是谁
  • 如果监管禁止 1 毫秒内的撤单,价差会扩大多少
  • 2020 年 3 月的流动性枯竭,是基本面冲击还是 Agent 行为反馈

Agent-Based Model(ABM)把市场还原为异质主体的交互系统:每个 Agent 有自己的策略、风险偏好和信息集,宏观层面的价差、波动率和价格发现效率是这些微观规则涌现(emerge)出来的,而非外生假设。

2. 仿真框架:三类核心 Agent#

我们构建一个最小可运行的限价簿仿真。市场里有三类 Agent:

Agent 类型行为规则市场角色
基本面型围绕真实价值 VtV_t 下单,价偏离越远越激进价格锚定
噪音型随机买卖,无信息动机提供交易量、制造短期波动
趋势型跟随近期价格动量,追涨杀跌放大波动、制造自相关

这个框架故意简化了很多细节(没有订单取消、没有持仓限制、没有资金约束),但保留了 ABM 的核心:异质规则 → 交互 → 涌现宏观模式。

3. 仿真主循环与市场统计#

仿真运行后的限价簿深度快照如下:

仿真限价簿深度快照

典型输出:

==================================================
市场统计
==================================================
平均价差: 0.1842 (0.18% of mid)
收益率标准差 (日): 0.0012
偏度: 0.052, 峰度: 3.412
 lag-1 自相关: 0.089

Agent 成交量占比:
  fund: 31.2%
  noise: 44.8%
  trend: 24.0%
plaintext

4. 实验:逐一拆除 Agent 类型#

不同 Agent 类型对价格发现的贡献如下图所示:

多Agent价格发现:各类型Agent的价格轨迹与市场聚合价格

ABM 最有价值的分析是反事实实验:逐个关掉一类 Agent,观察市场统计如何变化。

典型输出:

基准          | 价差=0.1842 | 波动=0.0012 | 自相关=+0.089
无基本面      | 价差=0.3125 | 波动=0.0018 | 自相关=+0.156
无噪音        | 价差=0.0956 | 波动=0.0008 | 自相关=+0.045
无趋势        | 价差=0.1721 | 波动=0.0010 | 自相关=-0.012
plaintext

解读

  • 基本面 Agent 是价差压缩的主力:没有它们,价差扩大 70%。它们的「向真实价值回归」行为提供了最好的流动性。
  • 噪音 Agent 提供交易量但扩大价差:没有它们,价差压缩近 50%,但市场活跃度(成交量)也会显著下降。
  • 趋势 Agent 是正自相关的来源:没有它们,收益率 lag-1 自相关从 +0.089 降到 −0.012——趋势跟随行为是短期动量的制造者。

5. 规模效应:Agent 数量与价差的关系#

Agent 数量与平均价差的扫描结果:

Agent数量与价差的关系

# Agent 数量扫描
agent_counts = [10, 20, 50, 100, 200, 500]
spreads_by_count = []

for n in agent_counts:
    cfg = {'fund': int(n*0.25), 'noise': int(n*0.60), 'trend': int(n*0.15)}
    res = run_experiment(cfg, n_steps=3000)
    spreads_by_count.append(res['mean_spread'])

for n, s in zip(agent_counts, spreads_by_count):
    print(f"Agent 数量={n:3d} | 平均价差={s:.4f}")
python

输出趋势:价差随 Agent 数量增加而单调下降,但边际效益递减——从 10 个到 50 个改善最大,200 个以上几乎不再压缩。这与真实市场的观察一致:电子做市时代前几十个 LP 的加入极大改善了流动性,但第 500 个 HFT 的边际贡献接近于零。

6. 局限与展望#

本文的仿真框架是教学级别的简化。生产级 ABM 至少还需要:

  1. 订单生命周期管理:取消、修改、部分成交、冰山订单。
  2. 资金与持仓约束:Agent 不能无限下单,需要账户余额和仓位上限。
  3. 学习与适应:用强化学习(如 Q-Learning)替代固定规则,让 Agent 策略随市场演化。
  4. 信息结构:引入私有信号和信号传递,研究信息不对称如何定价。

但即使在这个最小框架里,我们已经能回答一些有趣的结构性问题——比如「如果监管提高做市商资本要求导致 30% 的 LP 退出,价差会恶化多少」。在真实市场里,这个问题永远只有一个事后答案;在 ABM 里,你可以跑一千次实验。

7. 结论#

Agent-Based 市场仿真把微观结构研究从「估计参数」转向「设计实验」。本文的最小框架证明:

  • 基本面 Agent 是价格发现的锚,没有它们的市场是无头苍蝇;
  • 噪音 Agent 是流动性的燃料,但过量会制造不必要的摩擦;
  • 趋势 Agent 是波动和自相关的放大器,它们的集体行为能制造出与基本面脱钩的动量。

ABM 的最大价值不在于它预测得多准,而在于它把「市场为什么会这样」变成了一个可拆解、可实验、可证伪的问题


配图说明:

  • 图 1:仿真限价簿深度快照——买单(绿色)与卖单(红色)在最优五档的分布
  • 图 2:多 Agent 价格发现——基本面型、噪音型、趋势型 Agent 各自的价格轨迹与市场聚合价格
  • 图 3:Agent 数量与价差的关系——流动性随参与者增加而改善,但边际递减
智能体市场微观结构仿真:用多 Agent 重演限价簿价格发现
https://blog.halo26812.eu.org/blog/agent-based-market-simulation
Author halo
Published at 2026年8月28日
版权声明 CC BY-NC-SA 4.0
Comment seems to stuck. Try to refresh?✨