12、做市商最优报价策略:基于库存的报价调整、基于信息的报价策略、动态报价算法

做市商的报价,说白了就是一场「既要又要」的博弈。

你既要赚到买卖价差,又不能让库存风险把你压垮。我刚开始做结构化产品做市那会儿,总觉得报价就是算个理论价,然后加点差就完事了。结果呢?库存一堆积,市场一波动,账面浮亏能让你睡不着觉。

后来我才明白,报价策略的核心就三个字:动态调

12.1 基于库存的报价调整

库存管理是做市商的命门。你想想看,你手里攒了一堆期权,市场突然暴跌,你的Delta对冲根本来不及,那亏损就是实打实的。

所以,报价必须跟着库存走。

12.1.1 库存偏移量模型

我个人习惯用一个简单的线性模型来调整报价。假设你的目标库存是 \( I^* \),当前库存是 \( I \),那么报价偏移量可以写成:

偏移量 = -γ × (I - I*)

这里的 γ 是一个调节系数,我一般取 0.1 到 0.5 之间。γ 越大,报价对库存变化越敏感。

举个例子:

  • 你目标库存是 100 手,现在手里有 150 手(超了 50 手)
  • γ = 0.2,那么买价要下调 10 个基点,卖价要上调 10 个基点
  • 这样做的目的:压低买入价,抬高卖出价,鼓励别人从你手里买走库存

核心逻辑:库存多了就降价卖,库存少了就提价买。听起来简单,但执行起来需要精细调参。

12.1.2 库存风险厌恶系数

我曾经在项目中遇到过一个问题:市场波动率突然飙升,库存风险急剧放大。这时候线性模型就不够用了。

我改用了一个带风险厌恶系数的模型:

偏移量 = -γ × (I - I*) × (1 + λ × σ)

其中 λ 是风险厌恶系数,σ 是当前波动率。波动率越高,偏移量越大,报价调整越激进。

避坑指南:我曾经把 λ 设得太大,结果市场一波动,报价直接跳到离谱的位置,完全没人交易。后来我改成 λ = 0.5,效果就好多了。

12.2 基于信息的报价策略

做市商不是瞎子。你得从订单流里「嗅」出信息。

说白了,就是判断对手方是不是知情交易者。如果对方是知情者,你跟他做对手盘,大概率要亏。

12.2.1 订单流不平衡指标

我常用的一个指标叫「订单流不平衡度」:

OFI = (买单数量 - 卖单数量) / (买单数量 + 卖单数量)

OFI 接近 +1,说明买盘汹涌,可能有内幕消息在推动。这时候我会:

  • 提高卖价,降低买价
  • 缩小报价宽度,减少风险暴露

OFI 接近 -1,说明卖盘压境,我会反向操作。

12.2.2 信息冲击的量化

我记得有一次,某个结构化产品的标的突然传出并购消息。订单流瞬间失衡,OFI 直接飙到 0.8。

我当时用了一个简单的贝叶斯更新模型:

P(信息事件 | OFI) = P(OFI | 信息事件) × P(信息事件) / P(OFI)

虽然公式看着复杂,但实际用起来就是:

  • 如果 OFI 超过 0.6,我直接暂停做市 30 秒
  • 等市场消化信息后,再重新报价

注意:信息驱动的报价调整,一定要快。慢了就是给别人送钱。我见过有人反应慢了 2 秒,结果被高频交易者反复收割。

12.3 动态报价算法

前面讲的都是静态调整。但真正的做市商,报价是实时变化的。

动态报价算法,就是把库存、信息、市场状态全部揉在一起,算出一个最优报价。

12.3.1 多因子报价模型

我常用的一个动态报价公式长这样:

最优买价 = 理论价 - 价差/2 - α × 库存偏移 - β × 信息冲击
最优卖价 = 理论价 + 价差/2 + α × 库存偏移 + β × 信息冲击

其中:

  • α 是库存调整系数(0.1 ~ 0.3)
  • β 是信息调整系数(0.2 ~ 0.5)
  • 价差 = 基础价差 × (1 + γ × 波动率)

12.3.2 实时参数校准

参数不能死板。我习惯每 5 分钟重新校准一次 α 和 β:

# 伪代码示例
def calibrate_params(order_book, inventory):
    # 计算最近5分钟的成交数据
    recent_trades = get_recent_trades(5 * 60)
    
    # 如果成交频繁,说明报价太激进,降低α
    if len(recent_trades) > 100:
        alpha *= 0.95
    
    # 如果库存偏离目标太多,提高β
    if abs(inventory - target_inventory) > 50:
        beta *= 1.1
    
    return alpha, beta

关键点:动态报价不是一劳永逸的。你得让算法自己「学习」市场的变化。我见过最好的做市系统,参数每 30 秒就更新一次。

12.3.3 整体流程

下面这张图,是我自己总结的动态报价决策流程:

动态报价决策流程图 市场数据输入 订单流、波动率、库存 因子计算 库存偏移、信息冲击 动态报价生成 最优买/卖价 反馈循环:每30秒重新校准参数 核心参数:α(库存系数)、β(信息系数)、γ(波动率系数) 每5分钟自动校准一次,确保报价始终处于最优状态 示例:当前库存超目标30手,OFI=0.6 α=0.2, β=0.4 → 买价下调6bp, 卖价上调12bp 最终报价:买价99.94, 卖价100.12, 价差18bp

12.4 实战中的坑与经验

嗯,这里要注意几个容易翻车的地方:

  • 参数过拟合:我见过有人用历史数据调出完美参数,结果实盘一跑就崩。动态报价的参数,一定要留出「安全边际」。
  • 延迟问题:报价计算不能超过 10 毫秒。超过这个时间,你的报价就已经过时了。
  • 极端行情:我曾经在 2020 年 3 月遇到过波动率飙升到 80% 的情况。那时候所有模型都失效了,我直接切换到「手动模式」,暂停做市。

我的建议:刚开始做动态报价,别搞太复杂。先跑通库存调整,再加信息因子,最后才上动态校准。一步到位,容易翻车。

好了,关于做市商最优报价策略,核心就是这三块:库存、信息、动态。你把这三点吃透了,做市商的利润模型基本就稳了。


交易系统化学习资料 微信Strategy888888