一、订单簿基础概念:什么是订单簿?买卖盘口、深度、价差的基本定义

说实话,我刚入行做量化交易那会儿,第一次看到订单簿界面,脑子里就俩字——「乱码」。满屏的数字跳来跳去,红红绿绿的,根本不知道在看什么。后来带我的老工程师丢给我一句话:「订单簿就是市场的实时记账本,谁想买、谁想卖,全记在上面。」

嗯,这句话我记到现在。今天咱们就把这个「记账本」彻底拆开,看看它到底长什么样。

1.1 订单簿的本质

订单簿(Order Book),说白了就是交易所用来记录所有未成交买卖订单的电子列表。它实时更新,动态变化。每一笔成交,背后都是订单簿上的一次「配对」。

我个人习惯把订单簿想象成一个「双向排队系统」:

  • 买方在左边排队,喊出自己想买的价格和数量
  • 卖方在右边排队,喊出自己想卖的价格和数量
  • 价格最高的买方和价格最低的卖方,最先成交

为什么会这样?因为交易所的规则很简单——价格优先,时间优先。你出价高,你就排在买方最前面;你出价低,你就排在卖方最前面。

核心要点:订单簿不是历史数据,它是「当前时刻」所有未成交订单的快照。每一秒都在变。

1.2 买卖盘口:Bid 和 Ask

订单簿上最核心的两个概念,就是 Bid(买盘)Ask(卖盘)

  • Bid(买盘):所有买方挂出的买单,按价格从高到低排列
  • Ask(卖盘):所有卖方挂出的卖单,按价格从低到高排列

我举个例子你就明白了。假设现在 BTC/USDT 的订单簿长这样:

买盘 (Bid) 价格 卖盘 (Ask)
10 BTC 30,000 5 BTC
8 BTC 29,990 7 BTC
12 BTC 29,980 3 BTC
6 BTC 29,970 9 BTC

注意看,买盘的最高价是 30,000,卖盘的最低价也是 30,000。这时候如果两边数量匹配,就会立刻成交。但现实中,往往买一和卖一之间会有一个「缺口」——这就是我们接下来要说的价差。

我的经验:我在做高频策略回测时,发现很多新手只盯着「最新成交价」,完全忽略买卖盘口的变化。结果策略在实盘里一跑,滑点大得吓人。记住:成交价是过去,盘口才是未来

1.3 深度:市场的「厚度」

深度(Depth),指的是在某个价格水平上,订单簿中累积的买卖订单总量。深度越大,说明这个价格附近「接盘」或「砸盘」的力量越强。

我个人习惯把深度理解为「市场的承重墙」:

  • 深度厚:大单砸进去,价格波动小,流动性好
  • 深度薄:小单就能把价格打飞,流动性差

举个例子,假设卖一价 30,000 只有 0.1 BTC,卖二价 30,010 也只有 0.2 BTC。这时候你想买 1 BTC,不好意思,你得把卖一到卖十全吃掉,价格可能被推到 30,100 以上。这就是深度不足带来的滑点。

避坑指南:我曾经在某个小交易所跑策略,看订单簿深度挺漂亮,结果一实盘,发现那些深度全是「虚假挂单」——撤单率超过 80%。后来我养成了一个习惯:先统计挂单的存活时间,再决定要不要参考这个深度数据

1.4 价差:买卖之间的「缝隙」

价差(Spread),就是 卖一价 - 买一价。它是衡量市场流动性的最直观指标。

  • 价差小:买卖双方博弈激烈,流动性好,交易成本低
  • 价差大:市场冷清,或者波动剧烈,交易成本高

你想想看,如果 BTC 的买一是 30,000,卖一是 30,001,价差只有 1 美元。这意味着你几乎可以「无成本」地进出。但如果价差是 100 美元,你一买一卖就亏了 100 美元——这还没算手续费。

实战技巧:我个人做市策略的核心逻辑,其实就是「吃价差」。在价差大的时候挂单,在价差小的时候撤单。价差的变化,往往比价格本身更能反映市场的微观结构。

1.5 知识体系总览

为了让你更直观地理解这些概念之间的关系,我画了一张结构图:

订单簿知识体系 订单簿 (Order Book) 买卖盘口 Bid(买盘) vs Ask(卖盘) 价格优先 · 时间优先 深度 (Depth) 累积挂单量 流动性 · 滑点评估 价差 (Spread) 卖一价 - 买一价 交易成本 · 市场热度 三者共同决定:市场微观结构与交易策略

1.6 一个简单的订单簿快照示例

最后,我写一段伪代码,帮你理解订单簿在程序里长什么样。这是我从一个实际项目中简化出来的:

// 订单簿数据结构(简化版)
struct OrderBook {
    // 买盘:按价格降序排列
    vector<Level> bids;
    // 卖盘:按价格升序排列
    vector<Level> asks;
};

struct Level {
    double price;    // 价格
    double volume;   // 挂单量
    int    count;    // 挂单笔数
};

// 获取买卖盘口
double best_bid = order_book.bids[0].price;  // 买一
double best_ask = order_book.asks[0].price;  // 卖一

// 计算价差
double spread = best_ask - best_bid;

// 计算深度(前5档)
double bid_depth = 0;
for (int i = 0; i < 5; i++) {
    bid_depth += order_book.bids[i].volume;
}

double ask_depth = 0;
for (int i = 0; i < 5; i++) {
    ask_depth += order_book.asks[i].volume;
}
小提示:实际生产环境中,订单簿的更新频率是毫秒级的。我见过最快的订单簿,每秒推送超过 10 万次增量更新。所以千万别用「轮询」的方式去读订单簿——要用「事件驱动」。

好了,订单簿的基础概念就讲到这里。买卖盘口、深度、价差,这三个东西是后续所有高级分析的地基。你想想看,如果连买一卖一都搞不清楚,后面谈什么订单簿重建、什么实时分析?

嗯,下一章咱们会深入聊「如何从原始数据流重建订单簿」——那才是真正考验工程能力的地方。


公众号:蓝海资料掘金营,微信deep3321