4、经典库存模型:Avellaneda-Stoikov模型、Ho-Stoll模型、库存厌恶系数
做市商的核心难题是什么?说白了就两个字:库存。
你手里囤了一堆货,价格一跌就亏钱。你手里没货,行情来了又赚不到。这个度怎么把握?经典模型给了我们答案。
今天聊三个东西:Avellaneda-Stoikov模型、Ho-Stoll模型,还有那个让人又爱又恨的库存厌恶系数。我当年刚入行时,觉得这些模型就是数学游戏。直到实盘跑起来,被市场狠狠教育了一顿,才明白——嗯,经典之所以是经典,是有道理的。
4.1 Avellaneda-Stoikov模型:动态报价的基石
这个模型是2008年提出的。说实话,它不算复杂,但思路非常巧妙。
核心思想是什么?你的报价要随着库存变化动态调整。
你手里存货多了,就降价卖。存货少了,就提价买。听起来像常识对吧?但人家用数学把这事说清楚了。
模型里有个关键公式:
δ(s, q, t) = γσ²(T-t) + (1/γ) * ln(1 + γ/κ * q)
其中:
δ = 最优报价价差的一半
s = 当前价格
q = 库存量(正数表示多头,负数表示空头)
t = 当前时间
T = 交易结束时间
γ = 风险厌恶系数
σ = 波动率
κ = 订单到达强度
这个公式看着唬人,其实就说了两件事:
- 时间因素:离收盘越近,价差越大。因为你要赶在收盘前把库存清掉。
- 库存因素:库存越多,报价越偏向于卖出。库存为负(空头),报价越偏向于买入。
我在项目中遇到过一个问题:这个模型假设订单到达是泊松过程。但实盘中,订单流有明显的聚集效应。所以直接用这个公式,报价会偏保守。我的做法是加一个动态调整因子,根据最近1秒的订单频率修正κ值。
4.2 Ho-Stoll模型:考虑对手方行为
Ho-Stoll模型比Avellaneda-Stoikov更早,1979年就提出来了。它关注的是另一个维度——对手方会怎么反应。
你想想看,你报了一个价格,对手方会不会接?接了之后,市场情绪会怎么变?Ho-Stoll模型把这些都考虑进去了。
模型的核心假设是:
- 做市商是风险厌恶的
- 订单流是随机的,但受报价影响
- 库存成本是二次函数形式
它的最优报价策略可以简化为:
最优买价 = 真实价值 - 库存成本项 - 信息不对称项
最优卖价 = 真实价值 + 库存成本项 + 信息不对称项
说白了,就是你在报价里要留出两个缓冲:一个是库存风险,一个是信息劣势。
我曾经踩过一个坑:只考虑了库存成本,忽略了信息不对称项。结果遇到大资金进场,我的报价被反复吃掉,库存瞬间爆仓。后来我学乖了,在Ho-Stoll模型基础上,加了一个订单流不平衡指标,用来动态调整信息不对称项的大小。
4.3 库存厌恶系数:量化你的恐惧
库存厌恶系数,英文叫Inventory Aversion Coefficient。说白了,就是你有多怕手里有货。
这个系数通常用γ(伽马)表示。γ越大,你越厌恶库存,报价会越激进地往清仓方向偏移。γ越小,你越不在乎库存,报价会更接近市场中间价。
怎么确定这个γ值?我总结了三种方法:
| 方法 | 原理 | 适用场景 | 我的建议 |
|---|---|---|---|
| 历史回测法 | 用历史数据跑不同γ值,选夏普比最高的 | 数据充足,市场稳定 | 最推荐,但要注意过拟合 |
| 风险预算法 | 根据最大回撤容忍度反推γ | 风控严格,有明确止损线 | 适合机构,个人用有点保守 |
| 自适应法 | 用实时波动率动态调整γ | 波动率变化大的品种 | 我目前在用的方法,效果不错 |
我个人习惯用自适应法。具体做法是:
γ_t = γ_0 * (σ_0 / σ_t)
其中:
γ_t = 当前时刻的库存厌恶系数
γ_0 = 基准系数(通过回测得到)
σ_0 = 基准波动率(过去20天的平均波动率)
σ_t = 当前波动率(最近5分钟的波动率)
这样做的逻辑很简单:波动率大的时候,库存风险更大,所以要更厌恶库存。波动率小的时候,可以稍微放松一点。
4.4 三个模型的对比与选择
说了这么多,到底该用哪个?我画了一张图,帮你理清思路:
我的建议很简单:
- 如果你做的是高频做市(毫秒级报价),优先用Avellaneda-Stoikov。它计算快,参数少,适合机器跑。
- 如果你做的是中低频做市(秒级或分钟级报价),用Ho-Stoll。它考虑得更周全,能帮你避开一些大坑。
- 不管用哪个模型,库存厌恶系数都要单独拿出来调。它就像做市策略的"油门",决定了你的激进程度。
好了,经典库存模型就聊到这里。记住,模型只是工具,关键是你怎么用它。下一章我们聊聊实战中的库存管理技巧,到时候我会分享一些踩坑经历,保证让你少走弯路。
公众号:蓝海资料掘金营,微信deep3321