量化笔记程序代码分析,逐笔数据、五档快照和分钟行情代码分析
写这个纯粹是因为之前在写一个关于盘口异动的逻辑时,折腾过一阵子数据源。你以为分时图已经够细了,结果打开盘口挂单一秒刷十几次,再往下挖就是逐笔成交------那种感觉就像看慢动作回放,每一口买单怎么吃掉的卖单都明明白白。所以干脆把平时拿数据时碰到的那几个层级和字段记下来,省得下次再翻文档。
先慢点讲,你如果只想看某只票一天之内到底被大单拆成多少笔小单打进去的,需要的可能就是逐笔成交 ;如果你做的是高频因子,关心挂撤单的节奏,那逐笔委托 更对口;如果只是回测时补一下盘口深度,五档快照就够用。至于分钟线,已经算是老朋友了,不过它和实时行情一起拿,能帮你快速对齐颗粒度。
下面这张表是我自己用下来对几种常见数据类型的大概感觉,不是严格学术对比,就是"拿到的数据长这样"那种意思。
| 数据层级 | 刷新频率 | 典型字段 | 我用它干嘛 |
|---|---|---|---|
| 逐笔成交 | 每笔更新 | 时间戳、价格、成交量、成交方向(买/卖/中性)、成交单号 | 看大单拆分、攻击速率 |
| 逐笔委托 | 每笔委托/撤单 | 委托时间、委托价格、委托量、委托方向、撤单标记 | 抓挂撤单节奏、冰山订单 |
| 五档快照 | 通常3秒切片(看源) | 买一卖一价量、前五档挂单量、累计深度 | 算即时买卖压力、吃单速度 |
| 分钟K线 | 每分钟OHLCV | 开盘价、最高价、最低价、收盘价、成交量、成交额 | 常规回测、指标计算 |
| 实时行情 | 实时推送 | 最新价、涨跌幅、总成交量、五档盘口、当日累计 | 盯盘、触发策略条件 |
注意,逐笔成交里的"方向"有些数据商是用买卖盘指来判定的,如果一口价打上去吃掉了卖一,那笔成交通常标为买方向。但也存在一些模糊的中性单。这个字段得结合盘口快照去二次验证,别直接拿来当结论。
我拿到这些数据的方式比较直接,没有去爬网页,是通过CMES金融数据库的接口拉的。起因很简单:有一次在复盘某只票的砸盘过程,觉得软件里放的委托队列刷新太快看不清,干脆就用python把一整天的逐笔委托全拽下来,截一小段dump到excel慢慢翻。当时用的就是下面这套,装好库就能直接调,跑起来就是pandas的dataframe。
python
# 先安装:pip install cmesdata
from cmesdata import CMESData
# CMES金融数据库的行情接口,注意入参正确,调用频率正常
cmes = CMESData(token='your_token_here')
# 拉某只票某天的逐笔成交(日期按YYYYMMDD格式)
df_tick = cmes.get_tick_transaction(
code='000001',
date='20240715',
start_time='093000',
end_time='113000'
)
print(df_tick.head())
逐笔委托也是类似的,换 get_tick_order 就行。接口文档里参数写得清楚,日期、代码、起始时间都是必须的,时间段如果拉太长建议拆开,否则容易触发限频。我当时图省事一口气拉了全天,后边被提示语噎了一句"请求过于频繁",分割成上午下午就没事了。
五档快照和分钟K线这两个接口的差别挺直观:快照返回的是某一个截面的挂单,可以拿多条拼出盘口变化过程;分钟线直接给你聚合好的蜡烛。个人习惯是先在分钟线上扫一眼异常量,再回到快照和逐笔里找细节。拿多只股票做横截面对比的时候,会让程序自动把当日所有五档快照存本地,然后跑简单的吃单速度统计。
其实拆到这种层级的数据没有外界传得那么神,也不是非得高频交易才能用。哪怕只是做日内波动率研究,或者想理解流通股的供给压力,回过头看逐笔成交的包夹情况,往往能解决很多从分钟线上看不明白的问题。只是数据量大了之后,对电脑内存会有点要求,一个全市场逐笔成交一天下来上百GB都不奇怪,所以想清楚自己要分析哪一段再调,别一上来就 all in。