一、订单簿基础:什么是订单簿、限价单与市价单、买卖盘口与价差、订单簿数据结构
做量化交易这些年,我见过不少新手一上来就盯着K线猛看,却忽略了最底层的东西——订单簿。说实话,订单簿才是市场的真实脉搏。K线是加工过的二手信息,而订单簿是赤裸裸的原始数据。
今天我们就来把这层窗户纸捅破。我会从最基础的概念讲起,结合我踩过的坑,帮你把订单簿这块硬骨头啃下来。
1.1 什么是订单簿?
订单簿,说白了就是一个电子账本。它记录了所有交易者挂出来的、还没成交的买卖意愿。
你想想看,你去菜市场买菜,有人喊价5块,有人还价4块。这些喊价和还价,如果没成交,就相当于挂在订单簿上。交易所的订单簿,就是把这些买卖意愿按价格排好队,一目了然。
核心要点:订单簿是市场微观结构的核心载体。它反映了当前时刻所有市场参与者的供需博弈状态。
我个人习惯把订单簿比作一个「价格-数量」的二维矩阵。买方在左边,卖方在右边,中间是当前的最新成交价。这个结构虽然简单,但信息量巨大。
1.2 限价单 vs 市价单
这两种订单类型,是交易系统里最基础的操作单元。我刚开始做策略时,就因为没搞清楚它们的区别,吃过不少亏。
限价单(Limit Order)
限价单,就是你指定一个价格,告诉交易所:「我只在这个价格或更好的价格成交,否则拉倒。」
举个例子:BTC当前价格30000,你挂一个29900的买单。那你就得等价格跌到29900,或者有人愿意以29900卖给你,才能成交。
限价单的特点是:价格可控,但成交时间不确定。它提供了流动性,是订单簿上那些挂单的主要来源。
我的经验:做高频策略时,限价单的挂单位置很讲究。我曾经在盘口附近挂单太密集,结果被做市商盯上,反复被吃。后来我学会了随机化挂单价格,才解决了这个问题。
市价单(Market Order)
市价单就简单粗暴了——你不管价格,直接按当前市场上最好的价格成交。说白了就是「我要买,多少钱都行,赶紧给我成交」。
市价单的特点是:成交速度快,但价格不可控。它消耗流动性,是订单簿上那些「吃掉」挂单的力量。
| 对比维度 | 限价单 | 市价单 |
|---|---|---|
| 价格控制 | 完全可控 | 不可控 |
| 成交速度 | 慢(需等待) | 快(立即成交) |
| 流动性贡献 | 提供流动性 | 消耗流动性 |
| 滑点风险 | 低 | 高(大单尤其明显) |
| 适用场景 | 做市、低频策略 | 抢单、止损、高频 |
避坑指南:我曾经在回测时忽略了市价单的滑点,结果实盘跑起来直接亏了3%。记住,市价单的成交价永远比你看到的盘口价格要差,尤其是大单。回测时一定要加上滑点模型。
1.3 买卖盘口与价差
盘口,就是订单簿上最靠近当前价格的那几档数据。买一、买二、买三...卖一、卖二、卖三...这些构成了我们常说的「五档盘口」或「十档盘口」。
价差(Spread),就是卖一价减去买一价。这个数字越小,说明市场流动性越好,交易成本越低。
举个例子:
卖一:30005 数量:1.2 BTC
卖二:30010 数量:0.8 BTC
卖三:30015 数量:2.0 BTC
买一:30000 数量:1.5 BTC
买二:29995 数量:1.0 BTC
买三:29990 数量:2.5 BTC
当前价差 = 30005 - 30000 = 5 USDT
嗯,这里要注意:价差不是固定的。市场波动大的时候,价差会迅速扩大。我记得有一次做ETH的统计套利,突然遇到新闻事件,价差从0.1直接跳到2.0,我的策略瞬间失效。
1.4 订单簿数据结构
搞清楚了概念,我们来看看订单簿在代码里长什么样。这是做量化交易必须掌握的基础。
常见的订单簿数据结构有两种:
1. 快照型(Snapshot)
交易所每隔一段时间(比如100ms)推送一次完整的订单簿数据。这种结构简单,但数据量大,带宽消耗高。
{
"bids": [
[29990, 2.5], // [价格, 数量]
[29985, 1.8],
[29980, 3.2]
],
"asks": [
[30010, 1.2],
[30015, 0.9],
[30020, 2.1]
],
"timestamp": 1695000000000
}
2. 增量型(Incremental / Delta)
交易所只推送发生变化的部分。比如有人撤单了,或者新挂了一个单。这种结构数据量小,但需要本地维护一个完整的订单簿副本。
{
"type": "snapshot", // 首次推送全量
"bids": [...],
"asks": [...]
}
// 后续推送增量
{
"type": "update",
"changes": [
["buy", 29990, 0], // 价格29990的买单被撤单(数量为0表示删除)
["sell", 30015, 1.5] // 价格30015新增卖单1.5
]
}
我的建议:做高频策略时,尽量用增量型数据。带宽占用小,延迟也低。但要注意本地维护的订单簿一定要和交易所保持同步,否则数据一乱,策略全废。我曾经因为网络丢包导致本地订单簿和交易所不一致,排查了整整两天。
知识体系总览
下面这张图,是我自己总结的订单簿知识体系。你可以把它当作一个地图,随时回来对照。
这张图把订单簿的核心知识点串起来了。你从根节点出发,沿着三条主线往下走,就能把整个知识体系装进脑子里。
总结一下:订单簿是市场的底层数据,限价单和市价单是两种最基本的交易指令,盘口和价差反映了当前的流动性状况,而数据结构决定了我们怎么去获取和处理这些数据。这四个点,是后续所有特征工程的基础。
好了,这一章的内容就到这里。记住,订单簿数据是量化交易的「原油」,怎么提炼成高价值的特征,后面我们会一步步展开。