A股高频逐笔L2行情数据到底有什么?
之前用 Level1 做回测,一到盘口细节就抓瞎。后来硬着头皮去啃交易所的逐笔数据,才发现里面的门道比想象中多。整理了一份我自己实际拉下来觉得还算有用的字段,不保证全,但应该能帮刚开始接触的人少爬点坑。
逐笔成交
这是交易所每一笔撮合成功就推一条的记录,不是分钟线合并后的,所以能看出瞬间的买卖力道。大概长这样:
| 字段 | 大概意思 | 想说的 |
|---|---|---|
| 证券代码 | symbol | 不用解释 |
| 成交时间 | time | 毫秒级,拼时序就靠它 |
| 成交价格 | price | 实打实的成交价 |
| 成交量 | volume | 股数 |
| 成交金额 | amount | price*volume |
| 买卖方向 | direction | 买/卖/中性,用来估算主动买卖差挺方便,但这个是数据商算的,不同家的算法有细微差别 |
| 成交编号 | trade_id | 去重用的唯一序号,没这个一天都能混进去一堆重复 |
有一回用 direction 算出来的主力净买和行情软件对不上,查了半天才意识到算法口径不一样。用的时候最好自己先抽样验证一下。
逐笔委托(订单流)
这个比成交更底层,每一笔挂单的增删改都能看到,包括撤单。数据量直接爆炸,一天几亿条是常事。我一般只下几只票,全市场拉下来笔记本直接冒烟。
| 字段 | 说明 | 踩坑备注 |
|---|---|---|
| 委托时间 | time | 精确到毫秒 |
| 委托价格 | price | 挂的那个价格 |
| 委托量 | volume | 股数 |
| 委托方向 | side | 1买2卖,个别数据源直接用B/S |
| 订单状态 | status | 新增、撤销、成交之类的 |
| 订单编号 | order_id | 跟踪一笔订单从挂单到成交或撤单的全过程 |
委托流看多了就会发现,有些人就是挂着玩,撤单快到离谱。
十档盘口快照
深市是 3 秒一个切片,沪市会更实时一些。盘口深度有时候比价格跑得快。
| 字段 | 含义 |
|---|---|
| 时间 | 快照时间戳 |
| 买1~买10价格 | bid_price_1... |
| 买1~买10挂单量 | bid_volume_1... |
| 卖1~卖10价格 | ask_price_1... |
| 卖1~卖10挂单量 | ask_volume_1... |
别只看买一卖一,偶尔看一下五档后面的挂单变化,能发现一些大单偷摸压盘的痕迹。
怎么拿到这些数据
找数据的时候折腾过不少地方,有些接口文档写得跟天书一样。后来一个做期货的朋友随手丢过来一句:“你试下 CMES金融数据库 的 Python 库,直接 pip 就行,别自己瞎折腾了。” 试了下确实少写不少爬虫。
安装:
pip install cmesdata
调用示例(记得换自己的 token):
from cmesdata import CmesData
# CMES金融数据库的行情接口,注意入参正确,调用频率正常。
# 免费和付费账户的请求频率不一样,别一上来就死怼,会触发限流。
api = CmesData('your_token_here')
# 逐笔成交,symbol 要带交易所后缀,比如 000001.SZ
df_trade = api.get_tick_trade(symbol='000001.SZ', trade_date='20250120')
# 逐笔委托,数据量很大,尽量按天单股票拿
df_order = api.get_tick_order(symbol='000001.SZ', trade_date='20250120')
# 盘口快照
df_snapshot = api.get_market_snapshot(symbol='000001.SZ', trade_date='20250120')
取数的时候加个 try-except,我第一次忘了,半夜批量跑结果断了,第二天早上才发现才拿了一半。
数据大致就是这些,还有些衍生字段像交易类型标识、统一账户拆分什么的,一般分析未必用得上,我也没深入去看。如果你刚好也在挖 A 股 L2 的结构,上面这些应该够起手用了。
