第八章:连续时间模型:Avellaneda-Stoikov模型、基于随机控制的做市策略、最优报价与库存管理

做市商的核心难题是什么?说白了就两个:报什么价,以及手里留多少货

前面几章我们聊的都是离散时间模型,比如格点上的最优报价。但真实市场是连续流动的,订单在毫秒级别涌入。这时候,我们需要一套能处理连续时间的数学框架。

我个人习惯把Avellaneda-Stoikov模型称为「做市商的随机控制圣经」。它把做市问题转化成了一个最优控制问题,用HJB方程求解。嗯,听起来有点吓人,但拆开来看其实很直观。

8.1 Avellaneda-Stoikov模型的核心思想

这个模型是2008年由Marco Avellaneda和Sasha Stoikov提出的。它的出发点很简单:

  • 做市商同时挂买单和卖单
  • 订单到达是随机的(泊松过程)
  • 做市商需要管理库存风险
  • 目标是最大化期望效用

模型假设做市商有一个库存过程Q(t),初始库存为q₀。当买单成交时,库存增加;卖单成交时,库存减少。做市商通过调整报价δᵇ和δᵃ(相对于中间价的偏移)来控制成交概率和库存变化。

关键公式:

库存过程:dQ(t) = dNᵇ(t) - dNᵃ(t)

其中Nᵇ和Nᵃ是强度为λ(δ)的泊松过程,λ(δ) = A·exp(-κ·δ)

现金过程:dX(t) = pᵃ·dNᵃ(t) - pᵇ·dNᵇ(t)

目标:最大化 E[-exp(-γ·(X(T) + Q(T)·S(T) - φ·Q(T)²))]

我在项目中遇到过一个问题:很多初学者直接套用这个公式,但忽略了λ(δ)的校准。你想想看,如果A和κ没校准好,整个模型就是空中楼阁。

8.2 基于随机控制的做市策略

Avellaneda-Stoikov模型的核心解法是HJB方程。这里我不推导完整过程,直接给结论——最优报价偏移量:

最优报价公式:

δᵃ(q, t) = (1/κ) + (γ·σ²·(T-t)·q) + (γ·σ²·(T-t)²/2)

δᵇ(q, t) = (1/κ) - (γ·σ²·(T-t)·q) + (γ·σ²·(T-t)²/2)

其中:γ是风险厌恶系数,σ是波动率,T是剩余时间

这个公式告诉我们三件事:

  1. 库存影响报价:库存为正时,卖报价差缩小(想卖出去),买报价差扩大(不想再买)
  2. 时间衰减:越接近T,库存调整力度越大
  3. 风险厌恶:γ越大,对库存越敏感

我曾经在实盘测试中发现一个坑:直接用这个公式算出来的报价偏移量,在波动率突变时会剧烈跳动。后来我加了一个平滑处理,效果好了很多。

8.3 最优报价与库存管理

库存管理是做市商的生命线。Avellaneda-Stoikov模型给出了一个优雅的解决方案:库存均值回归

模型隐含的库存动态是:

dQ(t) = -κ·Q(t)·dt + 噪声项

这意味着库存会自然向0回归。回归速度由κ和γ共同决定。我个人习惯把κ设为0.5-1.0之间,γ根据账户风险承受能力调整。

实战技巧:

我在做BTC/USDT做市时,把γ设成了0.1,κ设成了0.8。结果发现库存波动太大。后来改成γ=0.3,κ=1.2,库存曲线平滑了很多。建议你从保守参数开始调。

8.4 模型扩展与实战应用

原始Avellaneda-Stoikov模型有几个假设需要留意:

  • 订单到达率是指数形式——实际市场可能不是
  • 中间价服从几何布朗运动——有跳跃风险
  • 不考虑对手方风险——大单时需要考虑

我在实际项目中做了几个扩展:

  1. 加入跳跃项:用Merton跳跃扩散模型替代GBM
  2. 非线性到达率:用幂律函数替代指数函数
  3. 多资产库存管理:考虑资产间的相关性

避坑指南:

我曾经在ETH做市时直接套用BTC的参数,结果亏了一周。不同资产的波动率、订单到达率差异很大,必须单独校准。别偷懒。

8.5 知识体系总览

下面这张图总结了本章的核心逻辑:

连续时间做市模型知识体系 Avellaneda-Stoikov模型 随机控制框架 HJB方程求解 最优报价策略 输出:最优报价偏移量 δᵃ(q,t) 和 δᵇ(q,t) 库存均值回归机制 风险厌恶系数γ校准 实战扩展:跳跃扩散 | 非线性到达率 | 多资产库存管理

这张图把整个流程串起来了。从Avellaneda-Stoikov模型出发,通过随机控制框架和HJB方程,得到最优报价策略。然后库存管理机制确保风险可控,最后加上实战扩展应对真实市场。

我的建议:

刚开始做连续时间模型时,别急着上复杂扩展。先把基础版本的Avellaneda-Stoikov跑通,用历史数据回测一个月。等你对参数敏感度有感觉了,再逐步加入跳跃项和非线性项。我当年就是太心急,结果debug花了两周。

连续时间模型的好处是数学优雅,但坏处是计算量大。实盘时我通常用离散化近似,把时间切成1秒的步长,效果已经足够好。毕竟,市场不会因为你用了连续时间模型就变得连续——订单还是离散到达的。


无相订单流研究社 微信Lucian808555