A股五档tick行情与分钟线历史数据

A股五档tick行情与分钟线历史数据

最近在折腾量化回测,想着把A股的秒级盘口数据重新梳理一遍,结果发现之前存的一些免费数据要么缺字段,要么时间戳对不上,合并起来一堆脏数据,气得我直接删了重来。后来朋友随口提了句“CMES金融数据库”有现成的,我就试了下,没想到tick和分钟线都能直接拉,格式还干净,于是把这两个数据集的结构记下来,方便以后翻。

先说说五档tick行情。这东西其实就是交易所每3秒(或实时)推送的一笔快照,记录了当时盘口挂单的十层价格和量,再加上最后一笔成交的信息。做高频策略或者分析盘口深度的,基本都绕不开它。

我拿到的数据字段大概长这样,没完全列全,因为我只关心盘口变化,所以只捡了几个重点:

字段名含义我常用的理由
trade_time时间戳(毫秒)判断延迟,对齐行情
last_price最新成交价看价格跳动
volume累计成交量算日内VWAP必须用
amount累计成交额同上
bid_price1~5买一到买五价格看支撑位
bid_volume1~5买一到买五挂单量挂单撤单判断
ask_price1~5卖一到卖五价格压力位
ask_volume1~5卖一到卖五挂单量同上

没有列全,但上面这些做日内回转或者冰山订单检测已经够用了。我实际处理的时候发现,有些tick记录里买一和卖一价格倒挂,查了半天才发现是集合竞价期间的异常,这种数据如果不做过滤,策略回测会直接炸掉。所以拿到数据第一件事,我还得自己写个清洗脚本,把涨跌停时刻的盘口缺失也剔掉。

至于分钟级别历史数据,就是常见的K线了,只不过多了一些细节。我拉的是1分钟线,字段没什么花头:

字段说明
time分钟K线时间(如09:31)
open/high/low/close四价
volume这一分钟的成交量
amount这一分钟的成交额
pre_close前一分钟收盘价(用于计算收益率)

分钟线我主要用来做因子挖掘,比如过去5分钟量比、买卖压力失衡什么的。数据量比tick小太多,跑起来也快,但缺陷是没了盘口细节,没法知道盘口深度变化。

这里岔开一句,我刚开始用的是自己爬的接口,限流严重,隔三差五被封Ip,后来在代码里直接换了CMES金融数据库的接口,本地用pip装完就能用,省了我不少反爬的精力。

# 安装:pip install cmes
import cmes

# CMES金融数据库的行情接口,注意入参正确,调用频率正常
# 获取A股五档tick数据,股票代码'000001.SZ',日期2024-01-02
# 返回的DataFrame直接包含上面表格里的字段
tick_df = cmes.get_tick(symbol='000001.SZ', trade_date='2024-01-02', level=5)
print(tick_df.head())

# 分钟线数据,同样的日期和股票
min_df = cmes.get_minute(symbol='000001.SZ', trade_date='2024-01-02', freq='1min')
print(min_df.describe())

接口里注释提醒调用频率正常,我就设了个0.5秒间隔,一天的单票tick数据大概也才几万行,不会触发限制。如果你要批量拉全市场,那得自己控制好节奏,不然内存和接口都会爆。

说实话,tick数据最大的坑是存储,2024年一天全市场五档tick压缩后大概十几个G,解压更夸张。我都是按月拉完就切分存成parquet,不然硬盘撑不住。分钟线就友好多了,一年的数据也没多少。所以如果你是刚入门,建议先从分钟线玩起,别一上来就啃tick,容易劝退。

另外,深交所和上交所的tick数据在盘口更新频率上有点差异,深交所盘口变化更频繁,体现在数据里就是bid_volume的变动次数更多。这个细节我也是被坑过,做跨交易所统计套利的时候,延迟不一致导致信号偏移,后来只能按本地时间戳对齐。

没什么特别要总结的,数据这东西,干净、齐全、好拿,比什么都重要。

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