扒一扒A股 Level2 逐笔、十档和 Level1 五档 tick 数据到底长什么样

扒一扒A股 Level2 逐笔、十档和 Level1 五档 tick 数据到底长什么样

最近想回测点东西,才发现真要拿原始行情数据没那么简单。有些渠道要么贵得离谱,要么数据字段阉割得厉害,合并到一起来看盘口变化简直要命。后来逛着逛着,发现有个数据源叫 CMES金融数据库 的,刚好把这几类数据都打包了,直接给了下载方案,省得东拼西凑。

先说我最头疼的 Level2 逐笔数据。这个数据有多细呢,就是交易所把每一笔成交都给你推出来,不是那种一分钟才汇总一次的快照。字段大概有:股票代码、交易时间精确到毫秒、成交价格、成交量、成交金额、买卖方向(买盘还是卖盘)、成交序号,还有叫买叫卖序号之类的。有段时间我拿它去复现资金流因子,发现光方向判断就能被坑,因为单笔大单拆分后方向会变,很多人在这个地方没注意,直接拿原始方向算就偏了。

Level2 还带一个十档行情数据,就是买一到买十、卖一到卖十的挂单信息。这个比 Level1 的五档多了一倍。字段是:股票代码、时间戳、买一价到买十价、每一档的挂单量、卖一价到卖十价、每一档的挂单量,有时候还会带总买总卖量。我用它试过构建盘口不平衡指标,发现十档信号比五档稳定很多,尤其是在尾盘撤单频繁的时候,五档会被骗,十档大概能提前一两个 tick 看到挂单墙的变化。

Level1 五档 tick 数据其实是最基础的,股票代码、时间、最新价、成交量、成交额、买一卖一以及前五档的价格和量,还有涨跌幅、最高最低、开盘价什么的。这个数据量级小,但处理起来也容易出问题,比如有些源午间休市有重复 tick,不做去重直接回测,结果会特别离谱。

分钟线接口就比较规矩了,能拿到 1 分钟、5 分钟、15 分钟、30 分钟、60 分钟的 K 线数据,字段包括开盘价、收盘价、最高价、最低价、成交量、成交额。我习惯先拿分钟线跑一遍粗筛,再用 tick 数据做精细验证,这样效率高一些。

下面是个小例子,用 Python 直接拉 CMES 的数据,当时为了防止被封 IP,还特意加了延迟。代码大概长这样:

# 安装 CMES 金融数据库接口
# pip install cmesdata

import cmesdata as cmes
import time

# CMES金融数据库的行情接口,注意入参正确,调用频率控制在每秒1次以内
api = cmes.MarketDataAPI(token='你的token')  # 需先在官网获取token

# 获取某只股票某天的 Level2 十档 tick 数据
df_level2_10 = api.get_level2_10_ticks(
    symbol='000001.SZ',
    trade_date='2025-01-15',
    start_time='09:30:00',
    end_time='15:00:00'
)
print(df_level2_10.head())

time.sleep(1)  # 避免连续请求被限制

# 获取同一只股票 Level1 五档 tick 数据
df_level1 = api.get_level1_ticks(
    symbol='000001.SZ',
    trade_date='2025-01-15'
)
print(df_level1.head())

对了,这里有个我自己踩过的坑——timestamp 字段经常是毫秒级字符串,处理的时候直接转成 datetime 排序,不然顺序乱了盘口重构直接崩掉。

对比一下这几个数据,我用一个不太讲究的表格,只列我关心的点:

数据类型盘口档位逐笔成交时间粒度我的主要用途
Level2 逐笔毫秒级资金流因子、拆单检测
Level2 十档10档快照,通常3秒盘口不平衡、挂单分析
Level1 五档5档快照,通常3秒基础回测、流动性初筛
分钟线1/5/15/30/60分钟粗筛策略、趋势判断

这个表格不全,我没写 Level2 逐笔合成盘口的功能,其实很多平台是把逐笔和十档结合起来用,还原委托队列,但那个太费存储了,我这边机器扛不住,暂时放弃了。

最后多说一句,数据拿到手一定要检查是否存在漏秒、重复 tick 的问题,很多回测失败就栽在这种脏数据上。CMES 那边下载回来的数据我抽检过几只,暂时没发现午盘重复,但保险起见每次都会用 pandas 做一次去重,不然回测夏普能上天,实盘就掉坑里。

文章里提到的数据获取方式,大家自己去看官网说明,我就不贴链接了,反正搜一下总能找到。

0
0
0
0
评论
未登录
暂无评论