第四章:Avellaneda-Stoikov模型——做市商报价的经典框架

做市商报价模型里,Avellaneda-Stoikov(简称A-S模型)是我个人最推崇的入门框架。为什么?因为它把做市商的核心矛盾——赚取价差 vs 控制存货风险——用数学语言讲得清清楚楚。

我记得2018年刚接触这个模型时,团队里有人觉得它太理论化。但后来我们在比特币期权做市上跑了一版简化实现,效果出奇的好。说白了,这个模型就像做市商的“牛顿力学”——虽然现实有摩擦,但底层逻辑跑不偏。

核心思想:做市商的最优报价,取决于他对未来存货变化的预期。存货多了要降价卖,存货少了要提价买。

4.1 模型假设

A-S模型建立在几个关键假设上。嗯,这里要注意,假设越强,模型越干净,但离现实也越远。我们做工程时要心里有数。

  • 市场微观结构:订单流服从泊松过程。说白了,买卖订单到达是随机的,但到达率与报价有关。
  • 存货中性:做市商的目标是存货长期归零。他不赌方向,只赚价差。
  • 风险厌恶:做市商对存货有风险厌恶系数γ。γ越大,越怕存货积压。
  • 连续时间:报价可以随时调整,没有最小变动单位限制(现实中要取整)。
  • 对称性:买卖订单的到达率函数形式对称,只是报价偏移方向相反。

我在项目中遇到过一个问题:假设订单流是泊松过程,但实际市场有自相关性(比如大单拆单)。这时候模型会低估连续同向订单的风险。我的建议是——先用A-S模型做基准,再叠加一个“订单流冲击”修正项。

4.2 最优报价推导

推导过程其实不复杂。我们定义做市商的财富过程,然后最大化其期望效用。这里我直接给结论,因为推导细节在教材里都有。

做市商的最优买价和卖价分别为:

买价:p_b = S - (γ * σ² * q * T) / 2 - (1/γ) * ln(1 + γ/κ)
卖价:p_a = S + (γ * σ² * q * T) / 2 + (1/γ) * ln(1 + γ/κ)

其中:

  • S:当前市场中间价
  • γ:风险厌恶系数
  • σ:波动率
  • q:当前存货(正数表示多头,负数表示空头)
  • T:做市商的时间 horizon(比如一天)
  • κ:订单流到达率的弹性系数

你看,报价由三部分组成:

  1. 中间价S:基准
  2. 存货调整项:(γ * σ² * q * T) / 2 —— 存货越多,买卖价差越不对称
  3. 价差项:(1/γ) * ln(1 + γ/κ) —— 基础价差,与风险厌恶和流动性有关
个人经验:实际应用中,我通常把T设成30分钟到2小时。太短了噪声大,太长了模型跟不上市场变化。

4.3 存货对报价的影响

这是A-S模型最精彩的部分。存货q直接决定了报价的偏移方向。

举个例子:假设你持有100个ETH的多头存货(q=100)。根据公式:

  • 买价会下移:你不想再买入了,所以压低买价
  • 卖价也会下移:你想尽快卖出存货,所以降低卖价

结果就是整个报价区间向下平移。反之,空头存货会让报价区间上移。

我曾经在模拟交易中犯过一个错误:把γ设得太小,导致模型对存货不敏感。结果回测时存货越积越多,最后爆仓。嗯,从那以后我养成了一个习惯——先跑一遍存货敏感性分析

存货影响的数学本质:

存货调整项 = (γ * σ² * T) / 2 * q

这是一个线性项。q越大,调整幅度越大。但现实中,当存货接近仓位上限时,调整应该非线性加速。所以我在生产环境里加了一个tanh函数做限幅。

4.4 模型参数解读

参数调优是模型落地的关键。我整理了一个参数速查表:

参数 符号 典型范围 物理意义 调参建议
风险厌恶系数 γ 0.01 - 1.0 对存货风险的敏感度 先用回测找最优,再留20%裕度
波动率 σ 根据品种定 价格波动剧烈程度 用5分钟高频数据估算,别用日线
时间horizon T 0.5 - 4小时 做市商计划平仓的时间窗口 与流动性正相关,流动性差就设大
弹性系数 κ 0.1 - 10 订单流对报价的敏感度 用历史数据拟合,注意市场状态切换
避坑指南:我曾经把κ设成固定值,结果在低流动性时段模型疯狂报错。后来我改成动态κ——用过去N笔订单的到达率实时更新。效果立竿见影。

参数之间还有耦合关系。比如γ和κ:γ越大,基础价差越大;κ越大,基础价差越小。两者共同决定了报价的“激进程度”。

我个人习惯用网格搜索+贝叶斯优化来调参。先粗搜确定范围,再细搜找最优。但记住——参数要定期重估,市场变了参数也得变。

4.5 知识体系图

下面这张SVG图总结了A-S模型的完整逻辑链:

Avellaneda-Stoikov 模型知识体系 模型假设 • 泊松订单流 • 存货中性目标 • 风险厌恶偏好 • 连续时间报价 最优报价推导 • 最大化期望效用 • 买价 = S - 调整项 • 卖价 = S + 调整项 • 价差 = 基础价差 + 存货项 存货对报价影响 • 多头 → 报价下移 • 空头 → 报价上移 • 线性调整项 • 实际需非线性修正 模型参数解读 γ(风险厌恶)→ 控制价差宽度 σ(波动率)→ 影响存货调整幅度 T(时间horizon)→ 决定调整速度 κ(弹性系数)→ 影响基础价差 工程实践:动态参数 + 非线性修正 + 定期重估

这张图把四个模块串起来了。你从模型假设出发,推导出报价公式,再理解存货如何影响报价,最后用参数调优让模型落地。每一步都有对应的数学表达和工程考量。

总结:A-S模型不是万能药,但它提供了一个极好的起点。我建议你先在模拟环境里跑通,再逐步加入现实约束(最小变动单位、手续费、订单簿深度等)。记住——模型是骨架,工程细节才是血肉。

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