核心概念:订单簿、买卖价差、市场深度、流动性、库存管理
做市商报价引擎,说白了就是一套自动买卖的机器。你让它报什么价,它就在市场上挂单。但报价不是瞎报的,背后有几个核心概念必须吃透。我刚开始搭建引擎时,就是在这几个概念上栽过跟头,今天咱们一个一个说清楚。
订单簿:市场的实时账本
订单簿(Order Book)就是交易所里所有挂单的集合。它分两边:买盘(Bid)和卖盘(Ask)。买盘是大家想买的价格和数量,卖盘是大家想卖的价格和数量。
举个例子,假设BTC/USDT的订单簿长这样:
| 买盘 (Bid) | 价格 | 卖盘 (Ask) |
|---|---|---|
| 10 BTC | 30000 | 5 BTC |
| 8 BTC | 29990 | 7 BTC |
| 12 BTC | 29980 | 6 BTC |
左边是买方,最高出价30000买10个BTC。右边是卖方,最低要价30000卖5个BTC。中间那个价差,就是买卖价差。
我个人习惯把订单簿想象成一个「价格-数量」的二维矩阵。每次行情更新,引擎都要重新扫描这个矩阵。嗯,这里要注意:订单簿是实时变化的,毫秒级都在变。你的引擎必须能快速解析并更新本地状态。
买卖价差:做市商的利润来源
买卖价差(Spread)就是买一价和卖一价的差值。做市商赚的就是这个差价。你想想看,你在30000买入,在30001卖出,每笔赚1块钱。量大了,利润就出来了。
但价差不是固定的。市场波动大时,价差会拉宽。我记得在2020年3月那次暴跌中,BTC的价差从平时的0.01%直接飙到0.5%以上。很多做市商因为没及时调整报价,被瞬间吃掉。
价差的计算公式很简单:
价差 = (卖一价 - 买一价) / 中间价 × 100%
比如卖一价30001,买一价30000,中间价30000.5,价差就是0.0033%。
市场深度:你能吃下多少单
市场深度(Market Depth)指的是在某个价格区间内,订单簿上挂单的总量。深度越大,说明市场越有「厚度」。
我曾经在搭建引擎时,只关注了买卖价差,忽略了深度。结果有一次,一个大单砸下来,直接把我的库存打穿。后来我加了一个深度监控模块,实时计算每个价格档位的累计挂单量。
深度通常用「深度图」来展示。横轴是价格,纵轴是累计数量。你可以看到在某个价格附近,有多少买单和卖单在等着。
流动性:市场的血液
流动性(Liquidity)是个更宏观的概念。它衡量的是你能否快速以合理价格成交。流动性好的市场,你卖100个BTC,价格几乎不动。流动性差的市场,你卖10个BTC,价格可能就跳了。
流动性和深度是正相关的,但不完全等同。深度是静态的挂单量,流动性是动态的成交能力。有些市场深度很厚,但成交速度慢,流动性其实一般。
我个人习惯用「滑点」来衡量流动性。滑点越小,流动性越好。比如你想买10个BTC,理想价格是30000,实际成交均价是30001,滑点就是0.003%。
滑点计算公式:
滑点 = (实际成交均价 - 理想价格) / 理想价格 × 100%
库存管理:做市商的命门
库存管理(Inventory Management)是做市商最容易被忽视、但最致命的一环。你报的价,总会有被吃掉的时候。如果库存管理不好,你可能在错误的方向上积累了大量头寸。
举个例子,你一直在BTC/USDT上做市,买一价30000,卖一价30001。突然市场暴跌,你的买单全部成交,手里全是BTC。如果BTC继续跌,你就亏大了。
库存管理的核心目标是:保持库存中性。也就是说,你的多头和空头头寸要尽量平衡。不平衡的部分,要通过对冲或者调整报价来消化。
我常用的库存管理策略有几种:
- 偏移报价:如果库存偏多,就把卖价调低一点,吸引卖出;把买价调低一点,减少买入。
- 对冲交易:在另一个交易所或合约市场做反向操作,对冲风险。
- 限价单撤单:如果库存偏离太大,直接撤掉部分订单,暂停报价。
知识体系结构图
下面这张图展示了这几个核心概念之间的关系。订单簿是基础,买卖价差和市场深度是订单簿的两个维度,流动性是市场整体表现,库存管理是做市商自身的风险控制。
这张图我画了很多遍。每次给团队新人讲,我都会指着订单簿说:「这是你的战场,其他都是你的武器和盔甲。」
好了,今天就聊到这儿。这些概念看着简单,但真正落地到代码里,坑多着呢。下次咱们聊聊如何用Python快速解析订单簿数据。