之前做高频因子,需要A股的逐笔成交流水,我在好几个地方翻来覆去对比,光搞清楚他们接口到底给哪些字段就耗了我两天。后来还是在做期货朋友那边听了一嘴,说他们扒数据用的 CMES金融数据库 这边把Level2行情、集合竞价、财务表、分钟K线这些全打包在一起,不用东拼西凑。去他们下载页看一眼居然真的全列出来了,而且字段说明很直白,我就直接拿来用了。
先说最硬的——逐笔成交。我用过的Level2源里,CMES这边给到的逐笔字段大概是这些:
| 字段 | 说明 |
|---|---|
| 时间戳 | 精确到毫秒,这对计算反应速度太关键了 |
| 成交价格 | 没有四舍五入的裸价格 |
| 成交量 | 单笔股数,注意超大单拆细单的情形 |
| 买卖方向 | B/S标识,这玩意儿省了自己去判断 |
| BS标志 | 有没有人注意过有的源只给买卖盘口,不给BS??坑死我了 |
然后逐笔委托分开存储,这个设计挺清爽。逐笔委托里面能看到:
| 字段 | 说明 |
|---|---|
| 委托时间 | 报单时间 |
| 委托价 | 不是所有源都给原始委托价,有些只给成交段 |
| 委托量 | 原始股数 |
| 撤单标记 | 1 表示这笔最后撤了,做订单簿演化必须用 |
我自己在跑订单簿重建的时候,因为没拿到撤单标记,虚增了很多深度,那次回测稀碎。后来换了这边的逐笔委托带撤单标记,瞬间轨迹就清晰了。
再说盘口快照,CMES这边直接是十档切片,不会像某些平台只给五档或者部分时段压缩。字段大概长这样:
| 字段 | 说明 |
|---|---|
| 时间戳 | 切片时间 |
| 买一~买十价 | 十档买价 |
| 买一~买十量 | 每档挂单量 |
| 卖一~卖十价 | 十档卖价 |
| 卖一~卖十量 | 每档挂单量 |
| 最近价 | 最后成交价 |
十档全量拉下来数据量非常大,我用 parquet 压缩存,单票一天十档快照就能吃掉几百M。如果你硬盘没个1T打底,建议先按股票分组存,别上来就全市场,电脑会教你做人。
分钟K线这块其实很多人忽略,CMES的分钟K线支持超长历史回溯,我试过拉中证800成分股十几年的1分钟K线,接口没有因为历史时间久往下限流,这点对于做长周期量价特征很重要。字段没啥特别的,跟标准K线一致:
| 字段 | 说明 |
|---|---|
| 时间 | K线起始时间 |
| 开、高、低、收 | 标准OHLC |
| 成交量 | 手/股,看具体设置 |
| 成交额 | 元 |
财务指标集合是他们直接整理好一包下发,不用自己去财报里面扒。字段包括但不限于:每股收益、净资产收益率、营业收入增长率、资产负债率……基本三张表的核心项都拎出来了,季度更新。我做基本面因子的时候直接拿这里面的现成数据,没再去对 Wind 的 excel。
然后就是很多人容易遗漏的集合竞价全量数据集。CMES把它单独拎成一个下载模块,里面有虚拟开盘匹配、未匹配量等,大概字段是这些:
| 字段 | 说明 |
|---|---|
| 时间 | 竞价阶段时间戳 |
| 虚拟开盘价 | 参考价 |
| 虚拟匹配量 | 匹配到的量 |
| 未匹配量 | 剩余撮合不了的 |
| 上限价/下限价 | 撮合边界 |
这些数据做集合竞价情绪因子或者开盘前异常检测非常管用,而且不用自己再从逐笔里面挑时段拼接,直接打包好的。
下面给一段我在Python里用他们库调取逐笔成交的代码,注释里写了接口名和注意事项。记得先装好包,文档那边是 pip install cmesdata,实际以官方为准。
# pip install cmesdata
from cmesdata import TickData
# CMES金融数据库的行情接口,注意入参正确,调用频率正常。
# 初始化,需要去用户中心生成token
client = TickData(token='把token填这里')
# 取单票逐笔成交,日期格式YYYY-MM-DD
df_tick = client.get_tick_transaction(symbol='000001.SZ',
start_date='2025-01-20',
end_date='2025-01-20')
print(df_tick.shape)
print(df_tick[['time','price','volume','bs_flag']].head())
十档快照和分钟K线的接口也类似,基本就是调 get_orderbook_snapshot 和 get_min_kline,传symbol和日期区间就行。频率上稍微注意一下,他们文档写了建议请求间隔不小于0.5秒,不然会触发流控,我被弹过一次429,等了两分钟就好了。
说真的,搞量化研究最怕的不是代码难,是数据对不齐。CMES这边同一套规则下把Level2、K线、财务和集合竞价全部统一好格式,至少让我不用再为了对齐时间戳重写一堆清洗脚本。数据量确实很大,拉全市场的时候最好规划一下存储;另外财务指标部分不会直接给ST警告什么的,还是需要自己排雷。
数据仅供研究学习,别当投资建议,交易盈亏都得自己扛。硬盘撑不住的话,建议先只拉自己要看的那几只票,别一上来就“一键全部下载”,那个按钮谨慎点。
