1. 订单簿基础:限价单与市价单、买卖盘口、深度图概念
做量化交易这些年,我见过不少新手一上来就盯着K线猛看,却忽略了最底层的东西——订单簿。说白了,订单簿才是市场的「实时心电图」。今天咱们就把这块地基打扎实。
1.1 限价单 vs 市价单:两种核心指令
先问个问题:你下单时,到底是在跟谁做对手盘?
限价单(Limit Order),就是你说「我只愿意在这个价买/卖,高了/低了我不要」。比如BTC当前价格30000,你挂个29900的买单,那就得等价格跌下来才能成交。我在做高频做市时,大部分仓位都是用限价单挂的——说白了,你在给市场提供流动性。
市价单(Market Order),就是「不管什么价,我现在就要成交」。你点一下买入,系统直接吃掉当前卖一、卖二、卖三……直到你的数量满足为止。我记得有一次在币安做套利,市价单滑点直接吃掉了我0.3%的利润——嗯,从那以后我养成了习惯:大单必拆,小单看深度。
1.2 买卖盘口:订单簿的骨架
打开任何一个交易平台的深度图,你会看到左右两列数字:左边是买盘(Bid),右边是卖盘(Ask)。每一行就是一个价格档位,后面跟着挂单数量。
举个例子,假设ETH/USDT的盘口长这样:
| 买盘(Bid) | 价格 | 卖盘(Ask) |
|---|---|---|
| 120.5 ETH | 1800.00 | 85.2 ETH |
| 230.1 ETH | 1799.50 | 156.7 ETH |
| 89.3 ETH | 1799.00 | 210.4 ETH |
这里有个关键概念叫价差(Spread)——就是卖一价减去买一价。价差越小,说明市场流动性越好。我在做跨市场套利时,价差就是我的「利润空间」和「风险敞口」。你想想看,如果价差只有0.01%,那你的手续费稍微高点就白干了。
1.3 深度图:把订单簿画出来
深度图就是把买卖盘口的数据可视化。横轴是价格,纵轴是累计挂单量。买盘从当前价往左延伸(价格越低,累计量越大),卖盘从当前价往右延伸(价格越高,累计量越大)。
我个人习惯把深度图分成三个区域看:
- 浅层(0-5档):这是「即时战场」,市价单主要在这里消耗。如果浅层挂单稀薄,一个大单就能把价格打穿好几个点。
- 中层(5-20档):这是「支撑/阻力区」。我在做趋势跟踪时,经常看这里有没有「厚墙」——比如卖盘在某个价位突然堆了上千个BTC,那价格大概率会在这里震荡一下。
- 深层(20档以上):这是「心理防线」。说实话,很多交易所的深层挂单是虚的——有人故意挂大单吓唬人,临成交前又撤掉。我曾经吃过这种亏,后来加了撤单检测逻辑。
1.4 多市场订单簿合并:为什么需要?
做单一交易所的订单簿,其实不难。但如果你做跨市场套利、做市或者统计套利,你就得同时盯着好几个交易所的订单簿。这时候问题来了——每个交易所的订单簿结构、价格精度、时间戳都不一样。
我画了一张图,帮你理解多市场订单簿合并的核心逻辑:
你看,整个流程分三步:
- 数据采集:同时订阅多个交易所的订单簿增量数据。这里要注意,每个交易所的WebSocket推送频率不一样——有的100ms,有的500ms。我一般会加一个本地时钟,强制对齐到同一个时间基准。
- 数据清洗:把价格精度统一到同一个小数点位数。比如Binance的ETH价格是2位小数,OKX是4位,那你就得决定以哪个为准。我个人习惯取最高精度,然后向下取整。
- 合并输出:按价格档位聚合所有交易所的挂单量。比如在1800.00这个价位,Binance有50个ETH,OKX有30个,Bybit有20个,那合并后的买一就是100个ETH。
1.5 深度图的实战解读
有了合并后的深度图,你能看到什么?
- 流动性分布:哪个价位挂单最厚?如果买盘在某个价位突然堆起一堵墙,那可能是「护盘」行为。我在做空时看到这种墙,会先等等,看它是不是真的能撑住。
- 买卖力量对比:累计买盘总量 vs 累计卖盘总量。如果买盘总量是卖盘的2倍,那短期偏多。但要注意——有些挂单是「钓鱼单」,挂在那里不成交,专门等人来吃。
- 深度斜率:深度图越陡峭,说明流动性越集中;越平缓,说明流动性分散。做市商最喜欢陡峭的深度图——价差小,容易做。
好了,订单簿的基础概念就这些。下一节咱们会深入代码层面,手撸一个多市场订单簿合并器。到时候你会看到,理论跟实践之间,其实就差那么几行关键的代码。