一、订单簿基础概念
做量化交易这些年,我见过不少新手一上来就盯着K线图猛看,却忽略了最底层的数据结构——订单簿。说实话,这就像开车只看仪表盘不看路况,迟早要出事。
订单簿是什么?说白了,它就是交易所维护的一个实时账本,记录着所有未成交的买卖委托。你想想看,每一笔交易背后,都是有人在某个价位上挂单等着成交。订单簿就是这些挂单的集合。
核心定义:订单簿(Order Book)是交易所用于记录所有未成交限价订单的电子列表,按价格优先、时间优先的原则排序。
买卖盘口
买卖盘口,也叫Level 2数据,是订单簿最直观的呈现方式。我习惯把它分成两部分看:
- 买盘(Bid):买方愿意出的最高价格,以及对应的挂单量
- 卖盘(Ask):卖方愿意接受的最低价格,以及对应的挂单量
这里有个关键概念叫「价差」(Spread),就是卖一价减去买一价。价差越小,说明市场流动性越好。我在做高频策略时,价差是我第一个关注的指标——价差太大,策略基本没法跑。
实战经验:我曾经在某个山寨币上跑策略,价差动不动就0.5%以上。后来发现是交易所深度不够,挂单稀疏。这种情况下,市价单的滑点会让你亏到怀疑人生。
深度图
深度图就是把订单簿可视化。横轴是价格,纵轴是累计挂单量。你会看到两条曲线:
- 左侧红色曲线:买盘深度,从买一价向左延伸
- 右侧绿色曲线:卖盘深度,从卖一价向右延伸
两条曲线之间的缺口,就是当前价差。曲线越陡峭,说明该价位附近流动性越集中。曲线越平缓,说明挂单分散,深度不足。
嗯,这里要注意一点:深度图展示的是「市场深度」,不是「成交量」。很多人搞混这两个概念。深度是静态的挂单量,成交量是动态的已成交数据。
市场微观结构
市场微观结构,这个词听起来高大上,其实研究的就是「订单是怎么成交的」。我个人的理解是:它研究的是市场运行的底层机制。
主要包括这几个方面:
- 订单类型:限价单、市价单、冰山订单、止损单等
- 撮合规则:价格优先、时间优先,还是按比例分配?
- 信息透明度:能看到多少档挂单?是否有隐藏订单?
- 交易成本:手续费结构、返佣机制
避坑指南:我曾经在某个交易所做套利,发现订单簿数据跟实际成交对不上。后来才发现,那个交易所支持「隐藏订单」——挂单量只显示一部分,实际深度比看到的要大。如果你不考虑这个因素,策略参数全都会算错。
知识体系总览
下面这张图是我整理的订单簿知识结构,你可以快速了解整个体系:
为什么订单簿这么重要?
我举个例子你就明白了。假设你想买入1个BTC,当前卖一价是50000 USDT,挂单量只有0.5个。如果你下市价单买1个,系统会先吃掉卖一的0.5个,然后继续吃卖二的0.3个,最后吃卖三的0.2个。最终成交均价可能变成50010 USDT。
这就是滑点的来源。如果你只看K线,根本看不到这些细节。但订单簿数据能让你提前知道:
- 当前市场深度够不够
- 大单会不会造成价格冲击
- 有没有人在关键价位挂大单托底或压盘
个人习惯:我每次接入一个新市场,第一件事就是拉取订单簿快照,看看前10档的挂单分布。如果发现某个价位挂单量异常大,我会标记出来——这往往是主力资金在「画线」。
数据结构的核心要素
从技术实现角度看,订单簿需要维护这几个关键字段:
| 字段 | 说明 | 数据类型 |
|---|---|---|
| price | 委托价格 | 浮点数/定点数 |
| size | 委托数量 | 浮点数 |
| side | 买卖方向(bid/ask) | 枚举 |
| order_id | 订单唯一标识 | 字符串/整数 |
| timestamp | 委托时间戳 | 整数(纳秒级) |
这里有个坑:价格字段用浮点数存储,在比较时容易出精度问题。我建议用整数存储,比如把价格乘以10000再存。这样比较和排序都更快,还不会出现0.0000001这种诡异误差。
小结
订单簿是量化交易的基石。不理解订单簿,你做的策略就像在黑暗中摸索。买卖盘口告诉你当前博弈的焦点,深度图告诉你市场的承压能力,微观结构则揭示了规则层面的细节。
下一章我们会深入订单簿的数据结构实现,看看红黑树、跳表这些数据结构在实战中怎么用。嗯,到时候我会分享一些踩过的坑,比如内存占用爆炸、排序性能瓶颈这些真实案例。