一、订单簿基础:读懂市场的“挂单墙”

做量化交易这些年,我越来越觉得——订单簿就是市场的X光片。你盯着K线看,看到的是价格走过的路;你盯着订单簿看,看到的是市场参与者正在想什么。

说白了,订单簿就是交易所维护的一个实时挂单列表。谁想买、谁想卖、出什么价、挂多少量,全在上面。我刚开始做高频策略时,第一件事就是学会“读”订单簿。不夸张地说,读懂它,你才算真正进了量化交易的门。

什么是订单簿?

订单簿(Order Book),就是交易所用来记录所有未成交订单的电子账本。它分两边:

  • 买单侧(Bid Side)——想买的人,出价从高到低排列
  • 卖单侧(Ask Side)——想卖的人,出价从低到高排列

中间那个空隙,就是买卖双方的心理差距。嗯,这个差距有个专门的名字——价差(Spread)。

核心理解:订单簿不是历史数据,它是“此时此刻”的市场意愿集合。每一笔挂单背后,都是一个真实的人在决策。

限价单 vs 市价单

这两种订单类型,是订单簿的“建筑材料”。

限价单(Limit Order)——你指定价格,挂上去等成交。比如“我出100块买,不到这个价我不买”。这种单子会进入订单簿,成为流动性。

市价单(Market Order)——你不指定价格,直接按当前最优价成交。比如“我现在就要买,不管什么价”。这种单子会吃掉订单簿上的挂单,消耗流动性。

我在项目中遇到过一件事:有个策略用市价单频繁交易,结果在流动性差的时段,滑点直接吃掉了一半利润。从那以后,我对市价单的使用变得非常谨慎。

我的习惯:做高频策略时,我倾向于用限价单提供流动性,赚交易所的返佣。做中低频策略时,市价单更省心,但要算好滑点成本。

买卖盘口与价差

盘口(Order Book Depth),就是订单簿上各个价位的挂单量分布。你打开任何一个交易软件,看到的“买一、买二、买三”和“卖一、卖二、卖三”,就是盘口数据。

价差(Spread) = 卖一价 - 买一价

价差越小,说明市场流动性越好,交易成本越低。我记得有一次做比特币策略,价差在正常时段只有0.01%,但到了凌晨三点,价差能扩大到0.5%——这差距,足够让一个高频策略从盈利变成亏损。

盘口层级 含义 典型用途
买一 / 卖一 最优买入/卖出价 计算价差、判断即时流动性
买二~买五 / 卖二~卖五 次优价位挂单 分析支撑/阻力、判断深度
更深层级 远离当前价的挂单 大单分析、订单簿重构

订单簿的L1/L2/L3数据层级

交易所提供的数据,按详细程度分为三个层级。我刚开始做研究时,以为L1就够了,后来发现——远远不够。

L1(Level 1)——只给最优买卖价和成交量。说白了就是“买一、卖一”。适合看个大概,做不了精细分析。

L2(Level 2)——给出多个价位的挂单量。通常是前5档、10档甚至50档。这是大多数量化策略的标配数据。你可以看到价格上方的卖单压力,下方的买单支撑。

L3(Level 3)——全量数据,包含每一笔挂单的详细信息。谁挂的、什么时候挂的、有没有隐藏单。这是做市场微观结构分析的“核武器”。

注意:L3数据不是所有交易所都提供,而且费用极高。我建议初学者先从L2数据入手,把盘口分析做扎实了,再考虑升级。

你想想看,L1就像看天气预报只告诉你“今天30度”,L2告诉你“上午28度、下午32度、晚上25度”,L3则告诉你“每小时的湿度、风速、气压变化”。数据越细,你能看到的规律就越多。

知识体系总览

下面这张图,是我自己整理订单簿知识时画的框架。它帮你把本章内容串起来:

订单簿知识体系 订单簿 (Order Book) 订单类型 盘口与价差 数据层级 限价单 市价单 买盘口 卖盘口 L1 L2 L3 提供流动性 vs 消耗流动性 价差 = 卖一价 - 买一价 数据粒度决定分析深度 读懂订单簿 = 读懂市场参与者的意图

一个简单的订单簿快照

为了让你更直观地理解,我写了一段Python代码,模拟一个订单簿的快照:

# 模拟订单簿快照
order_book = {
    'bids': [  # 买单侧,从高到低
        (100.50, 200),   # 买一:100.50,挂200股
        (100.40, 150),   # 买二:100.40,挂150股
        (100.30, 300),   # 买三:100.30,挂300股
        (100.20, 100),   # 买四:100.20,挂100股
        (100.10, 250),   # 买五:100.10,挂250股
    ],
    'asks': [  # 卖单侧,从低到高
        (100.60, 180),   # 卖一:100.60,挂180股
        (100.70, 220),   # 卖二:100.70,挂220股
        (100.80, 150),   # 卖三:100.80,挂150股
        (100.90, 300),   # 卖四:100.90,挂300股
        (101.00, 200),   # 卖五:101.00,挂200股
    ]
}

# 计算价差
bid_price = order_book['bids'][0][0]  # 100.50
ask_price = order_book['asks'][0][0]  # 100.60
spread = ask_price - bid_price
print(f"当前价差: {spread:.2f}")  # 输出: 0.10

这段代码虽然简单,但它就是订单簿的“原子结构”。你想想看,如果我能实时拿到这样的数据,再结合时间戳,就能分析出很多有意思的东西——比如大单在哪个价位堆积、谁在偷偷撤单、市场深度在变化。

一个小技巧:我习惯把订单簿数据存成DataFrame格式,方便做时间序列分析。每100毫秒拍一张快照,一天下来就是86万张“市场照片”。

好了,订单簿的基础就讲到这里。记住一句话:订单簿是市场的“实时心电图”,学会看它,你就能感知到市场的呼吸和脉搏。


专注资料整理