一、订单簿基础:什么是订单簿、限价单与市价单、买卖盘口与价差、深度图解读

大家好,我是你们的老朋友。今天咱们聊聊订单簿——这个在量化交易里最基础、也最核心的东西。

说实话,我刚开始做交易系统那会儿,觉得订单簿不就是个买卖列表嘛,有啥好研究的?后来踩了不少坑才明白,订单簿就是市场的“心电图”。你想想看,所有交易者的意图、情绪、博弈,最后都浓缩在这张表里。

1.1 什么是订单簿?

订单簿,说白了就是交易所用来记录所有未成交订单的电子账本。它分两边:

  • 买单(Bids):大家想买,但还没买到的单子
  • 卖单(Asks):大家想卖,但还没卖掉的单子

每一笔订单都包含两个关键信息:价格数量。交易所按价格优先、时间优先的原则排序。

核心要点:订单簿不是静态的。每一秒都在变化。有人下单、有人撤单、有人成交——这些事件会不断“重建”订单簿的状态。

我在做高频交易系统时,最头疼的就是订单簿的同步问题。你想想看,如果本地订单簿和交易所的不一致,那你的策略就是瞎搞。嗯,这里要注意,事件驱动架构就是为了解决这个问题的。

1.2 限价单与市价单

这两种订单类型,是交易世界里的“阴阳两极”。

限价单(Limit Order)

你指定一个价格,只有市场达到这个价格时才会成交。比如你挂一个“买BTC,限价30000”,那只有价格跌到30000或以下时才会成交。

  • 优点:你可以控制成交价格
  • 缺点:可能永远成交不了

我个人习惯用限价单做做市策略。挂单在盘口两边,赚点价差。但有一次我挂得太远,结果行情直接跳空,单子没成交,白白错过了机会。所以限价单的“挂单距离”是个技术活。

市价单(Market Order)

你不管价格,直接按当前最优价成交。比如你下“买BTC,市价1个”,系统会立刻吃掉盘口上最便宜的卖单。

  • 优点:保证成交
  • 缺点:价格可能不理想(滑点)

避坑指南:我曾经在流动性差的币种上用过市价单,结果滑点高达2%。那感觉就像你急着买瓶水,结果被宰了一刀。所以市价单一定要设滑点保护。

1.3 买卖盘口与价差

盘口就是订单簿的“第一梯队”。

  • 买一:最高价的买单
  • 卖一:最低价的卖单

价差(Spread)就是卖一价减去买一价。比如买一是100,卖一是101,价差就是1。

盘口 价格 数量
卖三 103 200
卖二 102 150
卖一 101 100
--- --- ---
买一 100 80
买二 99 120
买三 98 300

价差越小,说明市场流动性越好。比特币这种主流币,价差通常只有几个tick。但一些小币种,价差能大到让你怀疑人生。

小技巧:我一般用价差来判断市场情绪。价差突然扩大,往往意味着有大消息要来了。这时候我会暂停策略,先观察一下。

1.4 深度图解读

深度图就是把订单簿可视化。横轴是价格,纵轴是累计数量。

你会看到两条曲线:

  • 红色曲线(卖单):从卖一往右,价格越高,累计卖单越多
  • 绿色曲线(买单):从买一向左,价格越低,累计买单越多

两条曲线之间的“缺口”就是价差区域。缺口越窄,说明市场越活跃。

订单簿深度图示例 98 99 100 101 102 ← 价差区域 → 当前价 100 买单深度 卖单深度

这张图里,绿色区域代表买单的“支撑”,红色区域代表卖单的“压力”。如果绿色区域又厚又宽,说明下方买盘强劲,价格不容易跌。反之,红色区域厚,说明上方抛压重。

实战经验:我经常用深度图来判断“假突破”。比如价格突然冲上去,但卖单深度很厚,那很可能是诱多。真正的突破,往往伴随着深度图的“断层”——也就是某个价位突然没有挂单了。

1.5 事件驱动重建的核心思想

好了,讲了这么多基础,咱们回到正题。为什么订单簿需要“事件驱动重建”?

因为订单簿是动态的。每一笔新订单、每一次撤单、每一笔成交,都是一个事件。这些事件会改变订单簿的状态。

传统做法是:每次变化都重新拉取整个订单簿。但这样效率太低,尤其是高频场景下,一秒可能有上千次变化。

事件驱动重建的思路是:只处理变化的部分

  • 收到“新增订单”事件 → 在对应位置插入一条记录
  • 收到“撤单”事件 → 删除对应记录
  • 收到“成交”事件 → 减少对应记录的数量

这样,你的本地订单簿始终和交易所保持同步,而且只处理增量数据,性能大幅提升。

我的建议:刚开始做订单簿系统时,别急着优化。先用全量快照的方式跑通,再逐步改成增量更新。我当年就是太着急,结果bug一堆,调试了整整一周。

嗯,这一章的内容就到这儿。订单簿的基础概念,是后面所有章节的基石。你把这些搞懂了,后面的架构设计、性能优化,才能听得明白。


专注资料整理