2. 订单簿结构:订单簿的组成(买盘/卖盘)、价格优先与时间优先原则、限价单与市价单、订单簿的深度与宽度
好,咱们直接进入正题。订单簿这东西,说白了就是交易所用来记录所有挂单的「大账本」。你想想看,如果没有它,市场就乱套了——谁想买、谁想卖,价格怎么撮合,全凭这个结构来管。
我个人习惯把订单簿想象成一个「双向队列」。左边是买盘,右边是卖盘。中间那条线,就是当前的最新成交价。嗯,咱们一个一个拆开看。
2.1 买盘与卖盘:订单簿的两大阵营
订单簿最核心的组成,就是买盘和卖盘。
- 买盘(Bid Side):所有想买入的人,挂出的买单。价格从高到低排列。最高价在最上面,叫「最高买价」。
- 卖盘(Ask Side):所有想卖出的人,挂出的卖单。价格从低到高排列。最低价在最上面,叫「最低卖价」。
我在项目中遇到过一种情况:有些新手会把买盘和卖盘搞反,以为买盘就是价格低的。其实不是。你想想看,你想买,肯定希望价格越低越好,但别人想卖,肯定希望价格越高越好。所以买盘是「抢着买」,价格高的优先成交;卖盘是「抢着卖」,价格低的优先成交。
关键点:买盘按价格降序排列,卖盘按价格升序排列。这是订单簿的「骨架」。
2.2 价格优先与时间优先:撮合的铁律
交易所怎么决定谁先成交?就两条规则:价格优先,然后时间优先。
价格优先:买单中,出价高的优先;卖单中,出价低的优先。说白了,谁出的价更「激进」,谁就先成交。
时间优先:如果价格一样,那就看谁先挂单。先到先得。
我曾经踩过一个坑:有一次做策略,我同时挂了两个买单,价格一样,但一个早挂了几毫秒。结果行情剧烈波动时,早挂的那个全成交了,晚挂的那个一笔都没吃到。嗯,时间优先在毫秒级别上,真的能决定生死。
小技巧:做高频交易时,你的订单到达交易所的时间,比价格本身还重要。所以很多人会花钱买「机房托管」,就是为了快那几微秒。
2.3 限价单与市价单:两种最基本的订单类型
订单类型很多,但最核心的就两种:限价单和市价单。
| 订单类型 | 含义 | 特点 | 风险 |
|---|---|---|---|
| 限价单 | 指定一个价格,只有达到或更好时才成交 | 价格可控,但可能不成交 | 行情快速变化时,可能永远成交不了 |
| 市价单 | 不指定价格,按当前最优价立即成交 | 保证成交,但价格不可控 | 滑点风险,尤其在流动性差时 |
我建议做市商策略里,限价单是主力。为什么?因为你要提供流动性,赚的是买卖价差。市价单是吃流动性,适合做趋势交易或者紧急平仓。
举个例子:
# 限价单示例:在买一价挂单
order = client.place_order(
symbol='BTCUSDT',
side='buy',
type='limit',
price=50000.00,
quantity=0.1
)
# 市价单示例:立即按市场价买入
order = client.place_order(
symbol='BTCUSDT',
side='buy',
type='market',
quantity=0.1
)
注意:市价单在流动性不足时,可能会吃掉多个档位的订单,导致成交价格远低于预期。我见过有人用市价单在低流动性币种上,直接滑了2%。
2.4 订单簿的深度与宽度:衡量流动性的两个维度
订单簿的「深度」和「宽度」,是衡量市场流动性的两个核心指标。
- 深度(Depth):指在某个价格水平上,有多少挂单量。深度越大,说明这个价格附近有大量资金在等待成交。
- 宽度(Width):指买一价和卖一价之间的价差。宽度越小,说明市场越活跃,交易成本越低。
你想想看,如果一个订单簿的买一和卖一之间只差0.01元,而且每个价位都有几百手的挂单,那这个市场流动性就很好。反过来,如果价差很大,或者某个价位只有几手挂单,那就要小心了——大单进来可能直接打穿。
我记得有一次做回测,发现某个币种在凌晨3点的订单簿宽度突然从0.01扩大到0.5,深度也急剧下降。我当时就觉得不对劲,果然,几分钟后出现了一波剧烈波动。嗯,订单簿的深度和宽度,就是市场的「体温计」。
实战建议:做高频做市时,我一般会监控订单簿的前5档深度和宽度变化。如果宽度突然扩大,或者深度骤降,我会立刻降低挂单量,甚至暂停策略。
2.5 小结
订单簿的结构,看似简单,但里面门道很多。买盘卖盘是骨架,价格时间优先是规则,限价市价是工具,深度宽度是信号。把这些搞清楚了,你才算真正入了高频做市的大门。
下一章,咱们聊聊订单簿数据怎么实时获取和解析。到时候我会分享一些我在数据清洗上踩过的坑,保证有用。