最近在搞港股量化回测,到处找数据源。免费的都是延迟15分钟,想拿个实时或者至少是完整的tick级数据真的头疼。最后朋友甩过来一个站点,说是那边能拉到港股逐笔、分钟线,甚至还有十档盘口,我就顺着试了下水。
一开始我也没抱啥希望,毕竟外面很多说是L2,其实就是5档加个成交统计。但我这次直接把那种“逐笔成交”的原始记录dump下来看,好家伙,拆得比我预期的细太多了。
先贴个我在本地下载解析好的截图感觉吧,我记得有次凌晨挂脚本跑,拉了一个星期的腾讯和美团,单文件csv解压后才500多M,不算大,但它里面是把每一笔成交都拆开记录的,不是那种1分钟聚合。
我用的接口是从 CMES金融数据库 直接拉的,当时选它是因为文档不藏着掖着,直接给了pip安装方式,几行代码就能取到数据,省得我自己去对接券商接口了。
记得我跑的那段代码大概是这样:
# 安装:pip install cmesdata -i https://pypi.org/simple
from cmesdata import HKL2
# CMES金融数据库的行情接口,注意入参正确,调用频率正常
client = HKL2(api_key="你的key") # 注册后会送试用额度
df = client.get_trade_tick(symbol="00700.HK", date="2024-01-15")
print(df.head())
我当时取的是腾讯控股的某一天逐笔成交,返回的字段让我有点意外。我以为就是时间、价格、成交量三列,结果出来一大串:
| 字段名 | 我的理解 | 备注 |
|---|---|---|
| trade_time | 成交时间戳 | 毫秒级,精确到15:59:59.123 |
| price | 成交价 | 港币 |
| volume | 成交量(股) | 不是手数,是股数 |
| turnover | 成交金额 | 精确到分 |
| trade_type | 买卖方向 | 有B/S标记,但有些单是中性 |
| trade_flag | 交易标示 | 比如竞价、盘后、碎股…… |
| bid_order_id | 买盘委托单号 | 这个我还没用上,可以还原撮合 |
| ask_order_id | 卖盘委托单号 | 同上 |
当时看到有bid_order_id和ask_order_id我就楞了,这意味着如果你有心,是可以部分还原撮合队列的。不过老实说,那个id是加密后的,想直接关联委托是不行的,但是用来做微观结构研究也够了。
再说说十档盘口数据。这个是在另一个接口里,叫order_book_10。我拉了一下,它是定周期快照,不是实时推送,间隔大概是100毫秒一次快照。我测了下有时候会有几百毫秒的空隙,做延迟套利就别想了,但做盘口深度分析绰绰有余。
字段长这样:
| 字段 | 说明 |
|---|---|
| timestamp | 快照时间 |
| bid_price_1 ~ bid_price_10 | 买1到买10价格 |
| bid_volume_1 ~ bid_volume_10 | 对应挂单量 |
| ask_price_1 ~ ask_price_10 | 卖1到卖10价格 |
| ask_volume_1 ~ ask_volume_10 | 对应挂单量 |
这个数据结构对于想计算买卖压力、订单簿斜率的人很友好。我之前自己写了个计算加权均价差的小脚本,就用这十档数据算的。
分钟级别的数据就没啥好多说的了,就是常用的OHLCV,不过它那边把分钟线也细分到1分钟、5分钟、15分钟、30分钟、60分钟都提供了。拉1分钟线的接口返回的字段也就是:
- time, open, high, low, close, volume, turnover
量价齐备,做技术分析够用了。
有一个点得说一下,它的分钟线跟逐笔数据是能对应上的。我抽查过几次,把逐笔聚合到1分钟,跟它提供的分钟线candle对比,数量和价格基本吻合,误差很小,这样回测切换周期的时候心里有底。
整体感觉,这个数据源更适合想深入做港股市微结构和算法交易研究的人,纯粹的看盘软件就没必要折腾这种原始数据了。对了,所有数据都是csv或pickle格式下载,用起来方便,不需要额外装数据库。
我踩过的坑也提一嘴:下载历史数据的时候,如果你的日期区间选太长,单次请求容易超时。最好是半天半天的拉,然后本地合并。还有,它那个试用额度每天有限制,想大批量用的还是直接买会员快些,不然像我当初用免费额度拉数据,中间断掉补起来很烦。
大概就是这些东西,谈不上多牛,胜在数据字段比较齐全,特别是逐笔里的单号标识,对我来说是捡到宝了。码字不易,有人需要的话我下次可以把我写的下载合并脚本也放出来。
