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秒就够了
做市交易本质上是一场信息战。谁先知道市场发生了什么,谁就能抢到最优的报价位置。
信息优势分三个层次:
- 市场数据优势:比别人更快获取行情数据。比如,你直接连交易所的专线,比通过第三方数据商快5毫秒。
- 订单流分析优势:从订单流中提前嗅到趋势。比如,突然有大单在买一价挂单,说明有大户在吸筹。
- 宏观信息优势:比别人更快解读政策、经济数据。比如,央行刚发布降准消息,你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