订单簿与市场深度:数据结构、盘口逻辑与深度图构建
做市系统里,订单簿就是我们的战场地图。没有它,你就是在黑灯瞎火里做交易。今天咱们就把订单簿的里里外外聊透。
一、订单簿数据结构
订单簿说白了,就是一个实时更新的买卖挂单列表。我习惯把它想象成两个队列——买单队列和卖单队列。
每个订单条目,通常包含这几个核心字段:
| 字段 | 含义 | 示例 |
|---|---|---|
| price | 价格 | 100.50 |
| size | 数量 | 2000 |
| side | 买卖方向 | bid / ask |
| order_id | 订单唯一标识 | uuid |
| timestamp | 时间戳 | 毫秒级 |
实际项目中,我一般用红黑树或者跳表来存储。为什么?因为订单簿需要频繁的插入、删除和查询操作。普通数组根本扛不住。
核心要点:买单按价格从高到低排序,卖单按价格从低到高排序。这是盘口逻辑的基础。
二、买卖盘口逻辑
盘口,就是最优的几档买卖报价。比如「买一、卖一、买二、卖二」这些。
我遇到过不少新手,以为盘口数据就是简单的价格排序。其实没那么简单。这里有几个关键点:
- 价格优先原则:买单价格高的优先成交,卖单价格低的优先成交
- 时间优先原则:同价格下,先挂单的先成交
- 盘口深度:每个价格档位的累计挂单量
举个例子,假设当前盘口是这样的:
卖三: 101.00 500
卖二: 100.80 300
卖一: 100.50 200
-------------------
买一: 100.30 400
买二: 100.10 600
买三: 99.80 800
这时候买卖价差是 100.50 - 100.30 = 0.20。如果价差突然拉大,说明流动性出问题了。我在实盘里见过价差从0.01瞬间拉到0.5的情况,那通常是有人撤单或者大单砸盘。
实战技巧:监控盘口变化时,别只看价格。要同时看每个档位的挂单量变化。有时候价格没动,但挂单量突然减少,说明有人在偷偷撤单。
三、市场深度图的构建
市场深度图,就是把订单簿数据可视化。横轴是价格,纵轴是累计挂单量。
构建逻辑其实很简单:
- 从最优价格开始,向两侧延伸
- 每个价格点,累加该价格及更优价格的所有挂单量
- 买单侧是累计买入量,卖单侧是累计卖出量
我习惯用Python快速画一个深度图,代码大概长这样:
def build_depth(orders, side='bid'):
# orders: 按价格排序的订单列表
depth = []
cumulative = 0
for price, size in orders:
cumulative += size
depth.append((price, cumulative))
return depth
嗯,这里要注意。深度图有两种画法:一种是阶梯图,一种是平滑曲线。我个人更推荐阶梯图,因为它能真实反映每个价格档位的流动性。
避坑指南:我曾经在深度图上吃过亏。当时用平滑曲线展示深度,结果交易员误以为某个价格区间流动性很好,实际上那个区间根本没有挂单。从那以后,我坚持用阶梯图。
四、深度图的解读
深度图能告诉我们什么?说白了,就是市场在某个价格区间的承接能力。
- 深度大:说明流动性好,大单不容易造成价格滑点
- 深度小:说明市场薄,稍微大点的单子就能把价格打穿
- 深度不对称:比如买单深度远大于卖单深度,说明买方力量强
你想想看,如果卖单深度突然变薄,而买单深度不变,这意味着什么?意味着卖方在撤退。这时候如果你在做市,就要小心了——可能有人要拉盘。
我记得有一次,我在监控一个山寨币的深度图。卖一档的挂单量从1000个币突然降到200个,但价格没变。我立刻意识到有问题,赶紧调整了报价策略。果然,几分钟后一个大买单直接把卖一吃光,价格瞬间拉升了3%。
五、实战中的订单簿管理
做市系统里,订单簿的管理是个技术活。我总结了几条经验:
| 场景 | 应对策略 |
|---|---|
| 盘口深度突然变薄 | 缩小报价价差,降低风险敞口 |
| 大单出现在盘口 | 判断是真实订单还是诱单,必要时撤单 |
| 价差异常扩大 | 暂停做市,等待市场恢复 |
| 深度图出现断层 | 检查网络延迟,确认数据是否完整 |
其实做市商的核心,就是管理好订单簿上的每一笔挂单。你挂出去的单子,既是机会也是风险。挂得太近,容易被吃掉;挂得太远,又赚不到钱。
我个人习惯,每天开盘前先看一遍深度图。如果发现某个价格区间的深度异常,我会标记出来,盘中重点监控。这个习惯帮我躲过好几次黑天鹅事件。
总结一句话:订单簿是市场的脉搏,深度图是市场的呼吸。读懂它们,你就能在波动中游刃有余。
个人建议:刚开始接触订单簿的同学,可以先从模拟数据练手。自己写个程序,模拟订单簿的增删改查,再画个深度图。这个过程走一遍,比看十遍理论都管用。
好了,订单簿和深度图这块就聊到这儿。记住,数据是死的,但解读是活的。同样的深度图,在不同市场环境下,含义可能完全不同。多实战,多复盘,慢慢你就能读懂市场的语言了。