4. 经典存货模型(一):Garman模型、Stoll模型、Ho-Stoll模型

做市商的核心难题是什么?说白了就两个字:存货

你手里拿着100万股某只股票,心里慌不慌?当然慌。价格一跌,账面亏损就来了。但如果你手里一股都没有,客户要买的时候你拿什么卖?又得去市场上高价买回来,同样亏。

所以,做市商本质上是在跟「存货风险」打交道。今天我们要聊的三个经典模型——Garman、Stoll、Ho-Stoll,就是最早一批用数学语言描述这个问题的框架。

我个人习惯把这三个模型看作「三代产品」:Garman是原型机,Stoll是升级版,Ho-Stoll则是集大成者。咱们一个一个来看。

4.1 Garman模型:存货模型的起点

1976年,Garman发表了一篇论文,第一次把做市商的存货问题放到了数学框架里。说实话,这个模型在今天看来有点「粗糙」,但它的思想影响了后面所有人。

核心思想是什么?

Garman把做市商看作一个「中间商」:

  • 客户下单是随机的——有人买,有人卖
  • 做市商报出两个价格:买价(bid)和卖价(ask)
  • 做市商手里有现金和存货,不能无限买卖

关键来了:Garman假设客户的买单和卖单到达是两个独立的泊松过程。什么意思?就是买单和卖单各自随机出现,互不影响。

Garman模型的核心结论:

做市商必须设置买卖价差(spread),才能避免存货无限累积或耗尽。价差的大小取决于订单流的波动性和做市商的风险承受能力。

我记得第一次看到这个结论时,觉得这不是废话吗?但后来在实盘交易中才体会到——价差不是随便设的。你设小了,存货风险扛不住;设大了,客户都跑竞争对手那边去了。

Garman模型还给出了一个关键公式:

最优价差 ≈ 常数 × √(订单流方差 / 时间)

嗯,这个公式虽然简单,但它揭示了一个重要规律:市场越波动,价差应该越大。我在做期权做市时,每次VIX指数飙升,第一件事就是手动调宽所有价差——这就是Garman模型在实战中的体现。

实战小技巧:

Garman模型假设买单和卖单独立,但现实中它们往往是相关的。比如一个利好消息出来,买单瞬间暴增,卖单骤减。所以用Garman模型时,记得加一个「相关性修正项」。

4.2 Stoll模型:引入做市商的风险偏好

1978年,Stoll在Garman的基础上往前走了一步。他问了一个很实际的问题:做市商不是机器,他是有风险偏好的

Stoll模型的核心假设是:做市商是风险厌恶的。他持有存货会感到「不舒服」,这种不舒服可以用效用函数来量化。

我个人觉得Stoll模型最大的贡献是引入了存货持有成本的概念。你想想看:

  • 你手里有100万股票,相当于承担了100万的市场风险
  • 如果你把100万存银行,至少有利息收入
  • 所以持有存货是有「机会成本」的

Stoll把这个成本量化了:

存货持有成本 = 存货价值 × 无风险利率 × 持有时间

然后他推导出:做市商的价差必须覆盖这个持有成本,否则长期来看必亏。

Stoll模型的核心结论:

价差 = 存货持有成本 + 风险溢价 + 交易成本

其中风险溢价取决于做市商的风险厌恶程度和存货的波动性。

我曾经在实盘里犯过一个错误:某只股票流动性很好,我觉得价差设小一点也没关系。结果那天突然出了个黑天鹅事件,股价暴跌,我手里囤了50万股的存货,一天亏了上百万。后来复盘时发现——我完全忽略了Stoll模型里的风险溢价

避坑指南:

我曾经以为「流动性好的股票可以设小价差」,但Stoll模型告诉我:价差不仅要看流动性,还要看你的风险承受能力。如果你资金量小,哪怕股票流动性再好,价差也不能太小——因为你扛不住一次黑天鹅。

4.3 Ho-Stoll模型:动态存货管理

1981年,Ho和Stoll合作,把模型又往前推了一大步。之前的Garman和Stoll模型都是「静态」的——假设做市商只做一次报价。但现实中,做市商是持续报价的,价格会随着存货变化而动态调整。

Ho-Stoll模型的核心思想是:做市商应该根据当前存货水平动态调整报价

具体来说:

  • 存货多了 → 降低卖价(鼓励卖出),提高买价(抑制买入)
  • 存货少了 → 提高卖价(抑制卖出),降低买价(鼓励买入)

这个逻辑听起来很直观,但Ho和Stoll用数学证明了:最优报价策略是一个关于存货水平的线性函数

最优买价 = 基准价格 - α × 存货水平 - β
最优卖价 = 基准价格 - α × 存货水平 + β

其中α是存货调整系数,β是基础半价差。

这个公式在实战中非常有用。我写过一个自动化做市策略,核心逻辑就是Ho-Stoll模型:

def calculate_quote(inventory, base_price, alpha, beta):
    """
    基于Ho-Stoll模型计算最优报价
    inventory: 当前存货(正数表示多头,负数表示空头)
    base_price: 基准价格
    alpha: 存货调整系数
    beta: 基础半价差
    """
    bid = base_price - alpha * inventory - beta
    ask = base_price - alpha * inventory + beta
    return bid, ask

这个策略跑下来效果不错,但有个坑——α参数怎么设?设大了,报价变动太剧烈,客户体验差;设小了,存货风险控制不住。我后来用历史数据做了回测,发现α的最优值跟股票的日均成交量高度相关。

参数调优建议:

α ≈ 0.1 × (日均成交量 / 10000)^(-0.5)

这个公式是我自己总结的经验公式,不一定通用,但可以作为初始值参考。

4.4 三个模型的对比与总结

说了这么多,咱们来做个对比。我整理了一个表格,方便你快速理解:

模型 核心假设 主要贡献 局限性
Garman (1976) 订单流为独立泊松过程 首次用数学建模存货问题 忽略做市商风险偏好
Stoll (1978) 做市商风险厌恶 引入存货持有成本 静态模型,不随时间变化
Ho-Stoll (1981) 动态报价调整 存货水平影响报价 假设线性关系,实际可能非线性

这三个模型的关系,我用一张SVG图来展示:

存货模型演进关系图 Garman 模型 1976年 订单流独立泊松过程 引入风险偏好 Stoll 模型 1978年 存货持有成本 动态调整 Ho-Stoll 模型 1981年 存货水平动态报价 核心演进逻辑 Garman: 从无到有,建立存货问题的数学框架 Stoll: 加入做市商风险偏好,量化存货持有成本 Ho-Stoll: 实现动态报价,存货水平影响买卖价差 三个模型层层递进,构成了现代做市商定价理论的基础

这三个模型虽然年代久远,但它们的核心思想至今仍在影响着做市商策略的设计。我个人建议:不要觉得这些模型「过时」就跳过。我见过太多人一上来就搞深度学习做市策略,结果连最基本的存货风险都没控制好,亏得一塌糊涂。

嗯,经典之所以是经典,是因为它们抓住了问题的本质。先把这三个模型吃透,后面再学更复杂的模型时,你会发现——万变不离其宗。


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