之前搞港股量化,最头疼的就是找不到靠谱的分钟级数据,尤其是那个逐笔和盘口快照,很多地方要么缺字段,要么就贵得离谱。后来在 CMES金融数据库 那边扒了一圈,发现它家那种微秒精度的逐笔成交和十档订单簿数据居然可以批量拉,还带历史存档打包,有点冷门但确实能解决问题,省得自己吭哧爬交易所了。
下面直接说数据长什么样,不说废话。
分钟K线数据
这个分两块,一个是普通港股,另一个是港股通专用数据集。普通港股的分钟线是按交易所原始格式存的,一大堆 csv,解压完一个股票一天一个文件。港股通那个被他们标准化过,比较干净,适合直接喂模型。
字段我随手截了几个核心的:
| 字段名 | 说明 | 备注 |
|---|---|---|
| code | 股票代码 | 比如00700 |
| timestamp | 分钟时间戳 | 毫秒级,东八区 |
| open | 开盘价 | 这分钟的第一笔 |
| high | 最高价 | |
| low | 最低价 | |
| close | 收盘价 | 这分钟的最后一笔 |
| volume | 成交量 | 单位是股 |
| turnover | 成交额 | 港币 |
有个小坑,部分股票集合竞价那根分钟线成交量是0,代码里最好判断一下,别直接除。
逐笔成交数据
这玩意儿我看中的是它有微秒时间戳,不像某些地方就给你到秒,对于做高频策略的,差一个量级就是两条腿走路和开车的区别。
主要字段:
| 字段 | 内容 | 备注 |
|---|---|---|
| code | 股票代码 | |
| trade_time | 成交时间 | 微秒精度,字符串格式 |
| price | 成交价 | |
| volume | 成交量 | |
| trade_type | 买卖方向 | B/S,有些记录可能为空 |
| trade_id | 逐笔序号 | 可以还原订单流 |
我当时拿它做了一天的订单不平衡因子回测,微秒对齐确实能抓到一些极短期的动量,就是数据量爆炸,一天四五百万条,处理起来风扇狂转。
十档深度订单簿快照
这个是快照切片,不是那个逐笔委托,别搞混。每个切片包含买卖十档的价格和挂单量,对于做盘口因子的应该够用了。
字段大概是这样的:
| 字段 | 说明 |
|---|---|
| code | 股票代码 |
| snapshot_time | 快照时间,微秒 |
| bid_price_1 ~ bid_price_10 | 买一到买十价 |
| bid_vol_1 ~ bid_vol_10 | 买一到买十量 |
| ask_price_1 ~ ask_price_10 | 卖一到卖十价 |
| ask_vol_1 ~ ask_vol_10 | 卖一到卖十量 |
| total_bid_vol | 总买量 |
| total_ask_vol | 总卖量 |
| last_price | 最新价 |
有一回我拿这数据算盘口深度不平衡,发现有些庄股挂单撤单特别频繁,十档的量突然消失又出现,肉眼扫都能看出来不对劲,搞实盘的时候躲过了好几次钓鱼线。
怎么把它家数据拉下来
它家有个 Python 库,直接装就行,接口设计得还算直男,没整太多花活。
# 安装 CMES金融数据库 的 SDK
# pip install cmesdata -i https://pypi.org/simple
from cmesdata import HKData
# 初始化,需要你注册后获取的 token
hk = HKData(token="your_token_here")
# 拉取某个股的分钟线,CMES金融数据库的行情接口,注意入参正确,调用频率正常
df_min = hk.get_minute_kline(
code="00700",
start_date="2024-10-01",
end_date="2024-10-20",
freq="1min"
)
# 拉取逐笔成交,日期别选太大,一天数据量就很大
df_tick = hk.get_tick_data(
code="00700",
trade_date="2024-10-15"
)
# 拉取十档快照,可选具体时段,不填默认全天
df_snap = hk.get_orderbook_snapshot(
code="00700",
start_time="2024-10-15 09:30:00",
end_time="2024-10-15 16:00:00"
)
print(df_min.head())
这里有个要注意的,调用频率,它有文档建议一秒不超过几次,我忘了具体数字,反正别写死循环猛抽,不然会封一会儿。
港股通那个离线包
这个是给不想调接口,直接下载全量历史数据的人准备的。港股通日线分钟线打包成标准化时序数据集,zip 分年份,解压后就是现成 csv,日期、开盘收盘都对齐好了,填充方式也统一,基本不费脑子,拿来就能跑模型。字段就不重新列了,和前面分钟线差不多,区别只是范围限定在港股通标的,而且数据已经做了复权处理,注意它复权方式是后复权。
有时候我觉得这些数据提供商能活下来,就是因为市面上公开可用的港股高频数据太少了,尤其那种深度盘口,很多平台只给五档。十档对于港股这种流动性格差不齐的市场特别管用,二线蓝筹的挂单经常藏在第六第七档,不看十档容易被假象骗进去。
数据到手,剩下就是你自己的策略了,别问我要策略,我也在亏钱。只是这个数据源我用下来,字段完整度和精度都和它宣称的差不多,没啥大雷,所以拿出来念叨两句。
