一、订单簿基础:什么是订单簿、限价单与市价单、买卖盘口与价差、订单簿数据结构

做量化交易这些年,我见过不少新手一上来就盯着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
  ]
}

我的建议:做高频策略时,尽量用增量型数据。带宽占用小,延迟也低。但要注意本地维护的订单簿一定要和交易所保持同步,否则数据一乱,策略全废。我曾经因为网络丢包导致本地订单簿和交易所不一致,排查了整整两天。

知识体系总览

下面这张图,是我自己总结的订单簿知识体系。你可以把它当作一个地图,随时回来对照。

订单簿知识体系 订单簿 (Order Book) 限价单 vs 市价单 限价单:价格可控,成交慢 市价单:成交快,滑点高 流动性提供 vs 消耗 买卖盘口与价差 买一/卖一:最优价格 价差 = 卖一 - 买一 价差越小,流动性越好 订单簿数据结构 快照型:全量推送 增量型:只推送变化 本地维护 vs 远程同步 核心:订单簿是市场微观结构的基石 理解它,才能理解价格的形成与流动性的本质

这张图把订单簿的核心知识点串起来了。你从根节点出发,沿着三条主线往下走,就能把整个知识体系装进脑子里。

总结一下:订单簿是市场的底层数据,限价单和市价单是两种最基本的交易指令,盘口和价差反映了当前的流动性状况,而数据结构决定了我们怎么去获取和处理这些数据。这四个点,是后续所有特征工程的基础。

好了,这一章的内容就到这里。记住,订单簿数据是量化交易的「原油」,怎么提炼成高价值的特征,后面我们会一步步展开。

专注资料整理