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图来展示:
这三个模型虽然年代久远,但它们的核心思想至今仍在影响着做市商策略的设计。我个人建议:不要觉得这些模型「过时」就跳过。我见过太多人一上来就搞深度学习做市策略,结果连最基本的存货风险都没控制好,亏得一塌糊涂。
嗯,经典之所以是经典,是因为它们抓住了问题的本质。先把这三个模型吃透,后面再学更复杂的模型时,你会发现——万变不离其宗。
公众号:蓝海资料掘金营,微信deep3321