2、订单簿数据结构:深度图解析、Level 1/2/3 数据区别、Tick级数据存储

订单簿这东西,说白了就是交易所的「挂单账本」。谁想买、谁想卖,价格多少、量多大,全记在上面。我刚开始做量化那会儿,觉得订单簿就是个价格列表,后来被市场狠狠教育了几次,才明白这里面门道深着呢。

今天咱们就把订单簿的数据结构拆开揉碎了讲。你想想看,如果你连对手盘的底牌都看不清楚,怎么敢说自己懂交易?

2.1 深度图解析:一眼看穿市场情绪

深度图,其实就是订单簿的可视化版本。我个人习惯把它叫做「市场情绪的X光片」。为什么这么说?因为买卖双方的挂单分布,直接反映了当前市场的供需博弈。

核心概念:深度图由两条曲线组成——红色代表卖单(Ask),绿色代表买单(Bid)。横轴是价格,纵轴是累计挂单量。

我在项目中遇到过这样一个场景:某币种深度图突然出现一个巨大的卖单墙,价格刚好卡在关键阻力位。很多散户一看就慌了,赶紧跟着砸盘。结果呢?那堵墙其实是做市商挂的假单,等价格砸下来,他们立马撤单反手做多。嗯,这就是典型的「挂单陷阱」。

深度图有几个关键特征值得关注:

  • 深度斜率:斜率越陡,说明该价格区间流动性越差,价格容易滑点
  • 缺口(Gap):买卖价差突然拉大,往往是重大消息发布前的征兆
  • 厚薄分布:买单厚实说明下方支撑强,卖单厚实说明上方压力大

说白了,深度图就是告诉你——现在市场上谁是「纸老虎」,谁是「真金白银」。

订单簿深度图结构 100 101 102 103 104 买单堆积区 卖单堆积区 当前市价 ← 低价区 高价区 → 累计挂单量

2.2 Level 1/2/3 数据区别:你的数据到底有多「深」?

很多新手问我:「老师,为什么不同平台看到的深度不一样?」其实原因很简单——你买的数据套餐不同。交易所把数据分成了三个等级,我管它叫「数据三兄弟」。

数据等级 包含内容 典型用途 数据量级
Level 1 最优买卖价(Top of Book) 散户看盘、简单策略 极低,每秒几次
Level 2 多档位挂单(通常5-20档) 专业交易、趋势判断 中等,每秒几十次
Level 3 全量订单簿 + 逐笔委托 高频做市、量化建模 极高,每秒上千次

我个人习惯这样理解:Level 1 就像你看海面,只知道浪花多高;Level 2 能让你看到水面下几米有什么鱼群;Level 3 则是直接给你一张海底全息地图,连每颗沙砾的位置都标得清清楚楚。

我的经验:如果你做的是分钟级别的策略,Level 1 其实够用了。但如果你玩的是高频或者做市,没有 Level 3 数据,基本等于闭着眼睛开车。我曾经为了省点数据费,用 Level 2 跑做市策略,结果被对手盘精准狙击——人家能看到我的每一笔挂单,我却只能看到个大概。

2.3 Tick级数据存储:每一笔交易都是金子

Tick数据,就是市场最原始的「呼吸记录」。每一笔成交、每一次挂单变动,都算一个Tick。我见过最夸张的存储方案,一天就能产生几个GB的数据。

为什么会这样?因为Tick数据包含的信息太细了:

  • 成交Tick:价格、数量、方向(买/卖)、时间戳(精确到微秒)
  • 挂单Tick:挂单ID、价格、数量、操作类型(新增/撤销/成交)
  • 深度Tick:当前所有档位的买卖挂单快照

嗯,这里要注意——存储Tick数据,最头疼的不是数据量,而是「时序对齐」。不同交易所的时间戳精度不一样,有的给毫秒,有的给微秒,甚至还有纳秒的。我踩过最大的坑,就是把两个交易所的Tick数据直接合并回测,结果发现信号延迟了整整200毫秒,策略收益直接从正变负。

避坑指南:我曾经用CSV存Tick数据,结果一个月的BTC数据就跑了30GB。后来改用列式存储(Parquet格式),压缩比直接干到10:1。另外,时间戳一定要用UTC,别用本地时间——别问我怎么知道的。

下面是一个简单的Tick数据存储结构示例,我一般用Python的字典来模拟:

# Tick数据存储结构(伪代码)
tick_data = {
    "timestamp": 1700000000123456,  # 微秒级时间戳
    "symbol": "BTCUSDT",
    "type": "trade",                # trade / order / depth
    "price": 50000.00,
    "volume": 0.5,
    "side": "buy",                  # buy / sell
    "order_id": "abc123",
    "exchange": "binance"
}

# 实际存储建议用 DataFrame
import pandas as pd
df = pd.DataFrame([tick_data])
df.to_parquet("tick_20240101.parquet", compression="snappy")

你想想看,如果你能完整记录一个月的Tick数据,就等于拥有了市场的「完整记忆」。很多量化团队花大价钱买历史Tick数据,就是为了从中挖掘出那些肉眼看不到的规律——比如某只股票每次在Tick数据中出现「大单吃小单」的模式后,接下来5秒内大概率会反转。

核心总结:订单簿数据是量化交易的「原材料」。Level 1 让你看到结果,Level 2 让你看到过程,Level 3 让你看到每一个动作。而Tick数据,就是把这些动作一帧一帧地记录下来。没有这些数据,再牛逼的策略也是空中楼阁。

好了,这一章的内容就到这里。记住一句话:数据深度决定策略高度。你愿意花多少功夫在数据上,市场就会给你多少回报。


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