一、双边报价模型概述

什么是双边报价

双边报价,说白了就是同时挂出买单和卖单。

你想想看,普通交易者一般只挂一个方向的单子——要么买,要么卖。但做市商不一样,他两边都挂。比如某只股票当前市价100元,做市商可能挂99.9元买入,同时挂100.1元卖出。中间的差价,就是他的利润来源。

我在项目中遇到过不少新手,以为双边报价就是简单挂两个单子。其实没那么简单。真正的双边报价,要考虑库存管理、风险对冲、订单簿深度等一系列问题。嗯,这里要注意,双边报价的核心是「同时存在」——你必须在市场上同时提供流动性,而不是今天挂买单明天挂卖单。

核心定义:双边报价是指做市商在同一时间、同一交易品种上,同时报出买入价格(Bid)和卖出价格(Ask),并承诺以该价格成交一定数量的行为。

做市商制度起源

做市商制度最早可以追溯到18世纪的伦敦证券交易所。那时候没有电子交易,交易员们在交易所大厅里喊价。有些交易员发现,与其等着客户来找自己,不如主动报出价格,吸引客户成交。

我记得读文献时看到过一个有趣的细节:早期做市商被称为「jobbers」,他们专门负责维持某几只股票的流动性。你想想看,那时候没有电脑,全靠人脑计算风险,难度比现在大多了。

现代做市商制度的发展,主要经历了三个阶段:

阶段 时间 特点
人工喊价时代 18世纪-1980年代 交易员现场喊价,效率低但灵活
电子化初期 1980年代-2000年 NASDAQ等电子市场兴起,报价自动化
高频做市时代 2000年至今 算法交易主导,毫秒级报价更新

为什么会从人工转向电子化?说白了,就是效率问题。人工喊价一天能处理几百笔交易就不错了,而现在的算法做市商,一秒钟就能处理上千笔。我刚开始做量化时,用的还是半自动化的报价系统,现在回头看,那速度简直像蜗牛爬。

双边报价的核心价值

双边报价的价值,我总结为三点:

  1. 提供流动性——这是最核心的价值。没有做市商,很多冷门股票可能一天都成交不了一笔。做市商的存在,让投资者随时可以买卖。
  2. 缩小买卖价差——竞争会压缩价差。多个做市商竞争报价,最终受益的是普通投资者。
  3. 稳定市场价格——做市商在价格波动时提供缓冲。比如某只股票突然暴跌,做市商可能会加大买入力度,防止价格过度偏离。

个人经验:我在做加密货币做市时发现,流动性越差的市场,做市商的利润空间越大。但风险也成正比——你可能一天赚了3%的价差,结果库存方向错了,一天亏掉10%。

双边报价的风险

做市商不是稳赚不赔的。我见过太多人以为做市就是「低买高卖赚差价」,结果亏得底裤都不剩。真实情况是,做市商面临的风险相当复杂:

  • 库存风险——你买入的资产价格可能下跌。比如你挂了100元的买单,结果价格跌到90元,你的库存就亏了10%。
  • 逆向选择风险——你可能被信息优势方「吃掉」。比如某只股票有内幕消息要暴跌,知情者会疯狂卖给你,而你还在傻傻地挂买单。
  • 执行风险——你的报价可能被瞬间吃掉,但来不及调整。高频交易中,这种风险尤其突出。
  • 竞争风险——其他做市商可能用更低的价格抢走你的客户。

避坑指南:我曾经犯过一个低级错误——在波动率极高的时段,没有及时调整报价宽度。结果市场剧烈波动,我的买单和卖单同时被触发,两边都亏了。后来我学乖了,波动率上升时,必须扩大价差,或者干脆暂停报价。

知识体系总览

下面这张图,是我个人习惯用来梳理双边报价知识体系的。你可以看到,整个模型围绕「报价生成-风险管理-执行优化」三个核心环节展开:

双边报价模型 报价生成 风险管理 执行优化 Bid/Ask定价 价差设置 订单簿深度 库存管理 对冲策略 VaR控制 延迟优化 算法选择 回测验证

这张图其实是我自己复盘时画的。你看,报价生成是基础,风险管理是底线,执行优化是竞争力。三者缺一不可。我见过不少团队,报价模型做得漂亮,但风控一塌糊涂,最后被市场教训得很惨。

一个简单的报价示例

为了让你更直观地理解,我写个简单的Python示例。这不是生产级代码,但能说明双边报价的基本逻辑:

class BidAskQuote:
    def __init__(self, mid_price, spread, quantity):
        self.mid_price = mid_price      # 中间价
        self.spread = spread            # 价差
        self.quantity = quantity        # 报价数量
    
    def generate_quotes(self):
        bid_price = self.mid_price - self.spread / 2
        ask_price = self.mid_price + self.spread / 2
        return {
            'bid': {'price': bid_price, 'qty': self.quantity},
            'ask': {'price': ask_price, 'qty': self.quantity}
        }

# 使用示例
quote = BidAskQuote(mid_price=100.0, spread=0.2, quantity=1000)
quotes = quote.generate_quotes()
print(f"买单: {quotes['bid']['price']:.2f} x {quotes['bid']['qty']}")
print(f"卖单: {quotes['ask']['price']:.2f} x {quotes['ask']['qty']}")

输出结果:

买单: 99.90 x 1000
卖单: 100.10 x 1000

你看,这就是最基础的双边报价。中间价100元,价差0.2元,所以买99.9卖100.1。当然,实际项目中要考虑的因素远不止这些——比如库存变化后要调整报价、市场波动时要动态调整价差等等。这些我们后面章节会详细讲。

一个小建议:刚开始学双边报价,别急着搞复杂模型。先把最基础的逻辑跑通,理解「为什么报价会变化」比「怎么报价更精确」更重要。我当年就是太着急,一上来就搞机器学习定价,结果基础概念都没吃透,浪费了不少时间。

专注资料整理