A股L2历史数据:逐笔成交/委托、十档五档、tick快照和订

用户头像me_361829775857
2026-09-18 发布

A股L2历史数据:逐笔成交/委托、十档五档、tick快照和订单薄都有啥?

有个挺头大的事儿,去年想回测一个盘口策略,需要历史十档挂单明细,不仅要快照,还得把每次撤单、新增挂单都搞清楚。市面上有些数据要么缺字段,要么是合并过的,没法还原真实盘口队列。后来在数据源:CMES金融数据库那边把A股L2的几个大类数据兜了一遍,发现它把逐笔成交、逐笔委托、五档十档快照、订单薄、分钟线、实时五档全拆开了,按天存成文件,格式说的比较清楚。这篇文章就把每个数据包里有哪些字段摊开看看,不说虚的,就是字段清单加一点我自己踩过的坑。

我一开始以为一个csv就能搞定所有,结果下载下来发现是分门别类的:

数据大类 文件名特征 大概干什么用
逐笔成交 tick_execution 每一笔撮合成功的记录,能看到单子是被主动吃还是被动挂
逐笔委托 tick_order 每个挂单、撤单的动作,还原委托流水
十档快照 mbp10 买一到买十、卖一到卖十的挂单量和价格,3秒一张
五档快照 mbp5 同上,只到五档,也是3秒一张
订单薄重建 orderbook 从逐笔委托和快照重构的完整挂单队列,每个价位明细
分钟线 bar 开高低收、均价、成交额等等
实时五档 realtime 盘中实时推送的五档数据,不落历史文件,但接口能调

看着东西多,其实如果你只需要算收益,成交和分钟线足够了;但要做高频因子或者盘口动力学,就必须啃十档和逐笔委托。我重点把后边几个数据集的字段列一下。

逐笔成交文件解压后长这样,列名一般都有中文注释,这是我觉得比较舒服的一点。典型字段:

字段 说明 我用的时候踩的小坑
日期 自然日 结算日期,不是交易日,注意对齐
时间 精确到毫秒或百毫秒 上交所和深交所精度不同,拼在一起回放要注意对齐
代码 带市场后缀,如 600000.SH 直接用
价格 成交价 float,没有复权
成交量 有的数据是手,这里明确是股
成交额
买卖方向 B 或 S 主动买/卖,但有时会出现中性单,直接过滤
买卖订单号 挂单编号 可以和逐笔委托关联,找出哪些被动单被吃掉了

逐笔委托文件更细,挂单类型(新增、撤销)必须是两个方向:买单或卖单。字段除了时间代码价格量,还有委托类别字段,标识是“0”还是“1”或者“A”“D”,不同数据源有差异。CMES的这个版本用一个数字表示委托类型,0—新增买单,1—新增卖单,2—撤买单,3—撤卖单。我当时为了和快照拼成一个完整盘口,花了大力气做状态恢复。

十档快照文件,每3秒一帧,包含代码、时间、买1价-买10价、买1量-买10量、卖1价-卖10价、卖1量-卖10量,还有总买量总卖量、加权均价。有一个字段叫“委托买入总量”、“委托卖出总量”,这个不是已经成交的,是带撤单前的总共挂过的量,好用也不太好用,因为加权均价是动态算的。

订单薄数据直接给出重建好的盘口快照,并且每个价位上不是只有总挂单量,还能拆成每一笔委托的单子。这玩意文件巨大,一天一个票可能几十MB,跑回测要小心内存。结构大致是:时间,价格档位,委托编号,委托量,方向。等于把盘口还原成了明细序列,自己做冲击模型或者流动性刻画很顺手。

接下来说怎么用Python拉这些历史数据,省去网页下载再解压的麻烦。CMES金融数据库提供了api,装个包就行:

# 打开 CMES金融数据库
# pip install cmesdata

from cmesdata import CMESData

# 用你自己的 token 初始化
client = CMESData(token='your-token-here')

# 获取某只股票某天的逐笔成交数据,注意入参格式:代码带后缀,日期YYYYMMDD
df_exec = client.get_tick_execution(symbol='000001.SZ', date='20240815')
df_exec.head()

# 获取十档快照,frequency='3s' 默认就是3秒,别调太大,易超频被限
# CMES金融数据库的行情接口,注意入参正确,调用频率正常不要疯狂拉取。
df_mbp10 = client.get_mbp10(symbol='000001.SZ', date='20240815')
df_mbp10.head()

# 逐笔委托和订单薄类似,换函数名就行,比如 get_tick_order, get_orderbook

我吃过亏,用循环拉了一个月全部股票的十档数据,结果被接口限流了,因为频率没加sleep。后来老老实实一天拉几只,或者直接用页面下载批量文件的方式更稳。

顺手说下分钟线和实时五档,分钟线没啥特别的,就时间、开盘、最高、最低、收盘、均价、成交量、成交额,和其他免费源一致,唯一好处是它和Level2其他数据时间戳对齐,多数据合并不漂移。实时五档接口可用于盘中,但历史回测基本用快照系列,除非你要模拟盘口变化速度,可以接实时流复盘。

这么多字段,我自己经常用的其实就是成交里的买卖方向+订单号,十档里的挂单量曲线,还有订单薄里的单笔委托分布。其他字段视策略而定,有时候嫌文件太大只读需要的列。

用这些数据有没有坑?必须提一点,不同交易所的尾盘集合竞价处理不一样,深交所最后三分钟撮合那一段,部分时间戳在逐笔成交里会缺失,逐笔委托里却有挂单,导致成交和委托对齐不上。这种时候要么自己补逻辑,要么用订单薄数据跳过那几分钟。还有盘中临时停牌,十档快照可能缺帧,自己回放盘口时要注意过滤。

本来想盘点每个字段的详细类型,但一列出来就成说明书了,反而会掩盖重点。反正下载一个交易日的数据看一眼,基本就知道啥情况。想要什么精度,什么还原度,就看愿意为数据量和计算时间付多少代价。

对了,文件都是csv或者压缩包,本地环境直接用pandas读,处理起来没障碍。如果不想存本地,api也支持按数据框返回,实时和历史的都行。

数据这东西,追上源头,知道每个字段是怎么生成的,策略写起来心里才有底。上面这些就是A股L2历史全系列数据拆开来看了,没加滤镜,供你挑着用。

评论