1. 订单簿基础:限价单与市价单、买卖盘口深度、订单簿动态更新机制

做量化这些年,我见过太多人一上来就研究各种高阶策略,结果连订单簿都没搞明白。说实话,这就像还没学会走路就想跑马拉松。订单簿是市场的骨架,你所有的交易决策,最终都要落在这个结构上。今天我们就把它彻底讲透。

1.1 限价单与市价单:两种最基础的武器

先问个问题:你下单的时候,到底是在跟谁做对手盘?

答案很简单——要么你挂单等着别人来吃,要么你直接吃掉别人的挂单。这就是限价单和市价单的本质区别。

限价单(Limit Order),说白了就是「我出这个价,爱卖不卖」。你指定一个价格,挂到订单簿上等着。有人愿意按你的价格成交,那就成交;没人愿意,那就等着。我个人习惯把限价单叫做「被动单」,因为你是在提供流动性。

市价单(Market Order),就是「不管多少钱,我现在就要成交」。你直接跟当前最优的对手盘成交,吃掉订单簿上最前面的单子。我管它叫「主动单」,因为你是在消耗流动性。

嗯,这里要注意一个关键点:市价单没有价格限制,只有数量限制。你下100个BTC的市价买单,系统就会从卖一、卖二、卖三……一路吃下去,直到吃够100个BTC为止。这就会产生滑点。

核心区别总结:

  • 限价单:指定价格,等待成交,提供流动性
  • 市价单:立即成交,吃掉对手盘,消耗流动性
  • 限价单可能不成交,市价单一定成交(除非市场深度不够)

我在项目中遇到过一件事:有个策略在流动性极差的币对上用了市价单,结果一笔交易直接把价格打穿了3%。从那以后,我对市价单的使用就格外谨慎了。

1.2 买卖盘口深度:读懂市场的「供需地图」

订单簿的买卖盘口,其实就是一张实时的供需地图。买盘(Bid)是所有人愿意买入的价格和数量,卖盘(Ask)是所有人愿意卖出的价格和数量。

我习惯把买盘叫做「支撑区」,卖盘叫做「压力区」。你想想看,如果买盘堆积如山,价格想跌都难;如果卖盘层层叠叠,价格想涨也费劲。

盘口深度通常用「深度图」来展示。横轴是价格,纵轴是累计挂单量。买盘在左侧,卖盘在右侧,中间就是当前的最新成交价。

我的个人经验:

看盘口深度时,别只看第一档。我习惯看前10档甚至前20档的累计深度。有时候第一档只有几个BTC,但第二档突然堆了几百个BTC,那才是真正的「墙」。

举个例子,假设当前BTC价格是30000 USDT:

档位 买盘价格 买盘数量 卖盘价格 卖盘数量
1 29990 5.2 BTC 30010 3.8 BTC
2 29980 12.1 BTC 30020 8.5 BTC
3 29970 45.0 BTC 30030 22.3 BTC
4 29960 8.7 BTC 30040 6.1 BTC
5 29950 3.2 BTC 30050 4.9 BTC

看到没?买盘在29970这个位置有45个BTC的堆积,这就是一个明显的支撑位。如果价格跌到29970,这45个BTC会形成很强的买盘支撑。卖盘在30030也有22.3个BTC的压力。

我曾经靠这个判断躲过一次暴跌。当时看到卖盘在某个价位突然堆了上千个BTC,而买盘却稀稀拉拉,我果断减仓。半小时后价格果然崩了。

1.3 订单簿动态更新机制:市场在「呼吸」

订单簿不是静止的,它每时每刻都在变化。每一次下单、撤单、成交,都会改变订单簿的形态。我把它比作市场的「呼吸」——有节奏,有规律,但偶尔也会剧烈波动。

订单簿的更新机制其实很简单,就三种操作:

  1. 新增订单:有人挂了新的限价单,订单簿上多了一笔记录
  2. 撤销订单:有人撤回了未成交的限价单,订单簿上少了一笔记录
  3. 成交订单:市价单吃掉了限价单,或者两个限价单相遇了,订单簿上的数量减少或消失

交易所会通过WebSocket实时推送这些变化。我建议你关注的是「增量更新」而不是「全量快照」。全量快照每次推送整个订单簿,数据量大、延迟高;增量更新只推送变化的部分,效率高得多。

避坑指南:

我曾经在对接某个交易所API时,只订阅了全量快照,结果每次更新都要解析几千条数据,延迟直接飙到500ms以上。后来改成增量更新,延迟降到了10ms以内。记住:做高频交易,增量更新是标配。

订单簿的动态更新还有一个重要概念——订单簿不平衡(Order Book Imbalance)。简单说就是买盘和卖盘的力量对比。如果买盘总量远大于卖盘总量,说明买方力量强,价格大概率要涨。反之亦然。

我常用的一个指标是:

// 订单簿不平衡指标
imbalance = (bid_volume - ask_volume) / (bid_volume + ask_volume)

// 取值在 -1 到 1 之间
// 正值表示买方占优,负值表示卖方占优
// 绝对值越大,力量越悬殊

嗯,这个指标虽然简单,但非常实用。我见过很多策略就是靠这个指标做高频交易的。

下面这张图展示了订单簿的核心结构和工作流程:

订单簿核心结构图 买盘 (Bid Side) 价格从高到低排列 Bid 1: 29990 @ 5.2 BTC Bid 2: 29980 @ 12.1 BTC Bid 3: 29970 @ 45.0 BTC 卖盘 (Ask Side) 价格从低到高排列 Ask 1: 30010 @ 3.8 BTC Ask 2: 30020 @ 8.5 BTC Ask 3: 30030 @ 22.3 BTC 价差 (Spread) 30010 - 29990 = 20 USDT 订单簿动态更新流程 新增订单 撤销订单 成交订单 三种操作实时更新订单簿,交易所通过WebSocket推送增量数据 不平衡指标 = (买盘总量 - 卖盘总量) / (买盘总量 + 卖盘总量)

最后说一个实战技巧。我每次看订单簿,都会关注「挂单撤单比」。如果某个价位频繁出现挂单又撤单,那很可能是有人在「钓鱼」——挂个假单诱导市场,然后迅速撤掉。遇到这种情况,我一般会多留个心眼,不轻易跟单。

实战小技巧:

用WebSocket订阅订单簿增量更新时,记得维护一个本地订单簿副本。每次收到增量数据,更新本地副本即可。这样你随时可以查询任意价位的挂单情况,而不需要每次都请求全量数据。

订单簿这东西,看着简单,但里面的门道其实不少。你花时间把基础打牢了,后面学什么策略都会顺手很多。