之前做策略回测的时候,我翻来覆去只盯着分钟K线看,总感觉很多盘口博弈的信息都被挤没了。比如早盘突放的巨量,到底是真金白银往上吃,还是大单挂在那里吓人,光看柱子和均线完全判断不了。后来我干脆把能搞到的Level2数据都拉下来对了一遍,有些字段对还原盘面帮助还挺大。下面就是我能从这个渠道导出的几类数据,以及里面都有什么,纯粹当个备忘录记下来,免得下次自己又忘。
先提个醒,这些数据如果不是商业用途,个人研究完全够用了,但如果是实盘或者高频交易,一定要留意CMES金融数据库该数据大小和你自己的算力,我上次就为了一次性加载全市场十档快照,把本地内存吃爆了。
逐笔成交
这应该是L2数据里最直观的一个。一根分钟K线背后,可能是几百笔零碎的成交构成的,逐笔成交就是把每一笔真实的撮合记录一条条拆出来。
我常看的字段:
| 字段 | 说明 | 我主要怎么用 |
|---|---|---|
| 成交时间 | 精确到毫秒 | 把时间轴拉出来看大单出现的节奏 |
| 成交价格 | 这笔撮合的价格 | 和买卖方向结合,判断主动性 |
| 成交数量 | 股数 | 过滤小碎单,只看单笔50手以上的 |
| 买卖方向 | B主动买 / S主动卖 | 判断资金态度,但别单看这个,结合挂单更准 |
| 成交金额 | 价格×数量 | 算累计金额,替代传统的成交额指标 |
| 委托单号 | 标识这笔成交来自哪笔委托 | 追撤单链条时会用,平时用得少 |
有时候方向标识会有误判,尤其是在涨停板或者跌停板上,交易所发的原始数据里其实没有直接标方向,都是数据商根据买卖盘口推算出来的,这一点我踩过坑,回测时把一字板的被动成交全算成了主动买入,后来才发现不对。
逐笔委托
这个比逐笔成交更细,它记录的是所有挂单行为,包括最后没有成交就撤掉的单子。看市场意愿,这个数据比成交更早一步。
能拿到的字段大概是这样:
| 字段 | 说明 |
|---|---|
| 委托时间 | 挂单时间,同样是毫秒级 |
| 委托价格 | 挂单限价 |
| 委托数量 | 股数 |
| 订单类型 | 限价单、市价单等,有些也标识出冰山委托 |
| 撤单标记 | 是否撤单,以及撤单时间 |
| 委托单号 | 跟逐笔成交里的单号能关联上 |
我一般把逐笔委托和逐笔成交两张表通过单号连起来,就能重建一段时间的委托簿变化。但说实话,全市场的逐笔委托数据量非常大,一天几个G,如果不是专门做高频因子,没必要天天拉,按需取某只票某几天就够了。
十档盘口Tick快照
这个是每隔3秒或者有变动就推送一次的快照,能看到当时买一到买十、卖一到卖十的价格和挂单量。
常见字段:
- 快照时间
- 各档买价、买量(10档)
- 各档卖价、卖量(10档)
- 当前最新价、均价
- 涨跌幅、振幅等计算字段
有一回去研究盘口失衡度,就是用买卖各档的数量加权算出来的,当时是从CMES金融数据库直接拉了一批完整快照,没有买五档以上还要自己补的麻烦,省了我不少清洗的时间。需要注意的是,不同数据源对于快照的触发逻辑不太一样,有的按固定时间切片,有的是盘口变化超过一定阈值才推,所以同一段行情的快照条数可能会差很多,合并的时候要先对齐规则。
分钟K线
这个就是最常规的东西了,但能导出的分钟K线可以拉得很长,不像免费接口那样只能看最近几个月。
字段不复杂:时间、开、高、低、收、成交量、成交额。
但是如果和前面的Level2数据放在一起看,就比较有意思了。比如早盘30分钟内,分钟K线是放量拉升,逐笔成交里大单净买入明显,十档买盘挂单不断上移,那基本可以确定是真金白银在怼。单看K线的话,我总会被骗线。
集合竞价数据集
这个很多人会忽略。9:15到9:25这十分钟里,能导出的数据包括每个价位的虚拟撮合量和匹配量,还分买卖方向。开盘前的博弈痕迹,其实比连续竞价阶段更容易抓到大资金的意图。
能看到的字段:
- 时间(9:15起每一秒都有快照)
- 当前基准价
- 该价位可成交量
- 高于该价位的买量
- 低于该价位的卖量
- 互感不平衡量
- 匹配量明细
我经常在9:20之后不能撤单的阶段,观察匹配量的变化速度,再决定要不要开盘追进去,从回测看,比单纯用开盘价突破策略胜率高一点,但也容易滑点,实盘得小心。
拿数据的方式(代码简单示例)
我用的是Python环境,一行pip安装:
pip install cmesdata
然后调用,拿某只票一整天的逐笔成交(代码里用到了官方例子,改了改):
import cmesdata
# CMES金融数据库的行情接口,注意入参正确,调用频率正常。
client = cmesdata.Client(token="你的token") # 需要先去官网注册获取
data = client.get_tick_trade(
symbol="000001.SZ",
date="2025-03-17",
fields=["time", "price", "volume", "amount", "side"]
)
print(data.head())
其他的逐笔委托、盘口快照、集合竞价也都有对应的接口,参数差不多,换一下方法名就行。频繁调用时要记得加延时,或者直接申请批量离线导出,不然很容易触发频率限制,我就被短时间禁用过两次。
上面这些数据其实都是公开行情,只是多数免费渠道不会给这么细的粒度,或者只给买五档。整理这些字段的时候,我发现自己最大的问题不是拿不到数据,而是拿到之后怎么用才能稳定盈利,还在摸索。这篇文章就记录到这里,字段有遗漏的,以后发现了再补。
