2. 报价模型基础框架:做市报价模型的核心要素与输入输出

做市报价模型,说白了就是解决一个核心问题:我该用什么价格买,用什么价格卖?

很多人一上来就搞复杂的数学公式,结果模型跑出来根本没法用。我个人习惯是,先搭好骨架,再填血肉。骨架是什么?就是今天要讲的三个核心要素:买卖价差、库存管理、信息优势。

2.1 买卖价差:你的第一道护城河

买卖价差(Bid-Ask Spread)是做市商最直接的收入来源。你低价买、高价卖,中间的差价就是利润。

但问题来了:价差设多大才合适?

设小了,赚不到钱,还容易被高频交易者收割。设大了,客户都跑隔壁去了。

我在项目中遇到过一家做市商,把国债的价差压到0.5个基点,结果一个月下来,交易量是上去了,但净利润是负的。为什么?因为每次成交都在给交易所交手续费,价差根本覆盖不了成本。

核心公式: 最优价差 = 固定成本 + 风险溢价 + 信息不对称补偿

具体来说,价差由三部分构成:

  • 固定成本:交易所手续费、清算费、系统维护费等。这部分是硬成本,必须覆盖。
  • 风险溢价:你持有一段时间债券,价格可能波动。这部分是对你承担风险的补偿。
  • 信息不对称补偿:你担心对手方知道你不知道的信息。比如,有人突然大量买入,他是不是知道什么内幕?

嗯,这里要注意:不同债券的价差差异很大。比如活跃券(如10年期国债新券)流动性好,价差可以压到1-2个基点。但一些老券、冷门券,价差可能要到10个基点以上。

2.2 库存管理:别让债券砸手里

做市商最怕什么?不是价格跌,而是库存失衡。

你想想看,如果市场突然大跌,你手里全是多头仓位,那损失是实打实的。反过来,如果市场大涨,你手里全是空头仓位,那更惨——你每天都在亏钱。

库存管理的核心目标只有一个:把库存控制在安全范围内

我建议用两个指标来监控库存风险:

指标 定义 阈值建议
库存敞口 当前持仓市值 / 总资本 不超过总资本的20%
库存久期 持仓的加权平均久期 与基准久期偏差不超过0.5年

我曾经吃过一次亏。有一年债市突然暴跌,我手里囤了一堆10年期国债,库存敞口到了35%。结果一天之内亏了200多万。从那以后,我给自己定了个死规矩:任何单只债券的持仓,不超过总资本的5%

避坑指南: 库存管理不是静态的。市场波动大的时候,要动态调整阈值。比如,当市场波动率翻倍时,库存上限应该自动减半。

2.3 信息优势:比别人快0.1秒就够了

做市交易本质上是一场信息战。谁先知道市场发生了什么,谁就能抢到最优的报价位置。

信息优势分三个层次:

  1. 市场数据优势:比别人更快获取行情数据。比如,你直接连交易所的专线,比通过第三方数据商快5毫秒。
  2. 订单流分析优势:从订单流中提前嗅到趋势。比如,突然有大单在买一价挂单,说明有大户在吸筹。
  3. 宏观信息优势:比别人更快解读政策、经济数据。比如,央行刚发布降准消息,你3秒内就调整了报价模型。

我个人习惯是,把信息优势量化成模型参数。比如,当检测到异常订单流时,我会把价差临时扩大20%,同时调整库存目标。

小技巧: 信息优势不是越大越好。你想想看,如果你每次都比别人快,市场会怀疑你。适当让利,反而能吸引更多流动性。

2.4 模型输入与输出:把抽象变成数字

好了,三个核心要素讲完了。现在的问题是:怎么把它们塞进一个模型里?

我习惯把模型分成三层:输入层、处理层、输出层。

输入层:你需要哪些数据?

  • 市场数据:实时行情(买一、卖一、最新价)、成交量、波动率
  • 订单流数据:逐笔成交、挂单深度、大单预警
  • 库存数据:当前持仓、持仓成本、库存久期
  • 宏观数据:利率、汇率、信用利差、政策事件

输出层:模型给你什么?

  • 最优买价:你愿意买入的最高价格
  • 最优卖价:你愿意卖出的最低价格
  • 报价数量:每个价格上挂多少量
  • 报价有效期:这个报价多久刷新一次

下面这张图,是我自己项目里用的报价模型框架。你可以参考一下:

做市报价模型基础框架 输入层 市场数据 订单流数据 库存数据 宏观数据 处理层(核心模型) 买卖价差计算 固定成本 + 风险溢价 库存管理引擎 敞口监控 + 动态调整 信息优势模块 订单流分析 + 事件驱动 输出层 最优买价/卖价 报价数量 报价有效期 风险预警信号

这张图看起来简单,但每个模块背后都有大量细节。比如处理层里的「库存管理引擎」,我实际项目中用了三个子模块:库存监控、库存调整、库存对冲。每个子模块又有不同的触发条件和执行逻辑。

关键点: 模型的输入和输出不是固定的。不同市场环境,要动态调整输入权重。比如,市场剧烈波动时,库存数据的权重应该远大于市场数据。

2.5 一个简单的报价模型示例

说了这么多理论,我们来点实际的。下面是一个极简的报价模型伪代码:

# 报价模型核心逻辑(伪代码)
def calculate_quote(bond_id, market_data, inventory_data):
    # 1. 计算基础价差
    base_spread = fixed_cost + risk_premium(bond_id)
    
    # 2. 库存调整
    if inventory_data['exposure'] > 0.2:
        # 库存过高,降低买价,提高卖价
        spread_adjustment = 0.05 * inventory_data['exposure']
    else:
        spread_adjustment = 0
    
    # 3. 信息优势调整
    if detect_abnormal_orderflow(bond_id):
        info_adjustment = 0.1  # 扩大价差
    else:
        info_adjustment = 0
    
    # 4. 最终报价
    mid_price = market_data['mid']
    final_spread = base_spread + spread_adjustment + info_adjustment
    
    bid_price = mid_price - final_spread / 2
    ask_price = mid_price + final_spread / 2
    
    return bid_price, ask_price

这个代码虽然简单,但已经包含了三个核心要素。你在实际项目中,只需要把每个模块的细节填进去就行。

我的建议: 刚开始做模型时,别追求完美。先跑通这个最简单的版本,然后逐步加功能。我见过太多人一开始就想搞机器学习、深度学习,结果连基础框架都没搭好。

好了,这一章的内容就到这里。记住三个核心要素:买卖价差是你的利润来源,库存管理是你的风控底线,信息优势是你的竞争壁垒。把这三件事想清楚,报价模型的骨架就有了。


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