第3章:Level2数据解密:数据结构总览
说实话,刚接触Level2数据的时候,我也挺懵的。
一堆字段、几种不同的数据类型、还有各种存储格式……说白了,就像给你一堆乐高零件,但没给图纸。这一章,我就带你把这堆零件理清楚,看看它们到底长什么样、怎么拼在一起。
3.1 核心字段解析:四个关键数据流
Level2数据里,最核心的其实是四个东西:逐笔成交、逐笔委托、委托队列、资金流向。我当年在搭建实盘回测系统时,就是靠这四个字段把盘口逻辑串起来的。
3.1.1 逐笔成交
这个最简单,也最直观。每一笔真实的成交记录,都会生成一条数据。它告诉你:什么时间、什么价格、成交了多少手、是主动买还是主动卖。
| 字段 | 含义 | 示例 |
|---|---|---|
| 时间 | 精确到毫秒 | 09:30:01.250 |
| 价格 | 成交价 | 10.25 |
| 数量 | 成交手数 | 200 |
| 方向 | 主动买/主动卖 | B / S |
3.1.2 逐笔委托
这个比成交更早一步。它记录的是每一笔挂单的提交和撤销。说白了,就是「谁想买、谁想卖、挂了多少、后来撤了没」。
- 委托时间:挂单进入交易所的时间
- 委托价格:挂单价格
- 委托数量:挂单手数
- 委托方向:买 / 卖
- 委托状态:已成交 / 已撤销 / 部分成交
3.1.3 委托队列
这个字段很多人容易忽略,但它其实特别有用。委托队列展示的是买一和卖一的前50档挂单明细。你可以看到:谁在排队、排了多少、有没有大单在顶。
举个例子:如果卖一位置突然出现一笔5000手的卖单,但价格没变,那大概率是有人在压盘。我曾在一次量化策略中,利用委托队列的「撤单率」来识别虚假挂单,效果还不错。
3.1.4 资金流向
资金流向其实是基于逐笔成交计算出来的。它把成交按「主动买」和「主动卖」分类,然后统计净流入/流出。
- 主力净流入:大单主动买入 - 大单主动卖出
- 散户净流入:小单主动买入 - 小单主动卖出
- 超大单:单笔成交 >= 500手
3.2 数据存储格式:CSV vs Parquet
数据拿到了,怎么存?这是个现实问题。我个人习惯用两种格式:CSV 和 Parquet。各有各的适用场景。
3.2.1 CSV:简单但慢
CSV 的好处是通用、可读性强。随便一个文本编辑器就能打开。但缺点也很明显:
- 文件体积大(尤其是逐笔委托这种高频数据)
- 读取慢(没有索引,必须全量扫描)
- 不支持复杂数据类型(比如时间戳只能存字符串)
我一般只在调试阶段用 CSV,或者数据量小于 100MB 的时候。
3.2.2 Parquet:高效但需要工具
Parquet 是列式存储格式,压缩率高、读取快。同样是100万条逐笔成交数据,CSV 可能要 50MB,Parquet 只要 10MB 左右。
- 支持按列读取(只读你需要的字段)
- 内置压缩(snappy、gzip 等)
- 支持复杂数据类型(时间戳、嵌套结构)
3.3 读取方法:Python 实战
下面给两个简单的读取示例。你直接复制就能用。
3.3.1 读取 CSV
import pandas as pd
# 读取逐笔成交CSV
df = pd.read_csv('trade.csv', parse_dates=['time'])
print(df.head())
3.3.2 读取 Parquet
import pandas as pd
# 读取逐笔委托Parquet
df = pd.read_parquet('order.parquet')
print(df.info())
3.4 知识体系总览
下面这张图,是我自己画的数据结构总览。你可以把它当作本章的「地图」。
嗯,这张图基本把本章的内容串起来了。你从中心往外看,先理解四个核心字段,再决定用什么格式存,最后用对应的工具读出来。