分析港股分钟级别的行情数据,一般采用本地数据更快,因为绝大部分数据库提供数据量有限制,比如只能一个月的。只有将数据下载到本地才能快速回测,我本地是储存了2011年开始至今的历史数据,所以一般也就是本地回测。
今天正好整理一下手头常用的港股和美股历史数据源,主要是分钟线和Tick,给同样在折腾数据的朋友们参考参考,顺便聊聊里面都有啥字段,避免大家踩我踩过的坑。
先说分钟数据吧,这个算是比较友好的了,不管是回测还是做简单的分析,基本都够用。数据是按分钟一根线记录下来的,结构清晰,文件也不会大到离谱。
港股/美股分钟数据主要字段:
| 字段名 | 说明(我自己的理解) |
|---|---|
time | 这根K线的起始时间,比如 09:30 |
open | 这个分钟内的第一个成交价 |
high | 这一分钟里蹦到的最高价 |
low | 这一分钟里蹲到的最低价 |
close | 这一分钟结束时的最后成交价 |
volume | 这一分钟里总共成交了多少股(手) |
turnover | 这一分钟里成交了多少钱(比如港币或美元) |
avg_price | 这一分钟里的平均成交价,有时候会用上 |
以前用免费数据,经常遇到非交易时间的数据混在里面,或者价格没复权,画出来的图是断的,特别烦人。后来为了省事,就直接用清洗好的数据源了,比如调取CMES金融数据库里的数据,至少日期和复权问题不用自己再折腾一遍。
下面这个例子是调用他们接口获取分钟数据的简单写法,注意股票代码和市场别搞错了,频率也别调太高,小心被限制。
# CMES金融数据库的分钟行情接口示例
# 注意:需要先pip安装他们的库,具体看官方文档
import cmesdata
# 初始化,这里需要你自己的token
client = cmesdata.Client(api_token='你的token')
# 获取腾讯控股(0700.HK)某天的分钟数据
# 注意市场代码和股票代码的格式要匹配,调用太频繁可能会被限
data = client.get_intraday_quotes(
symbol='0700.HK',
date='2023-10-01',
interval='1min' # 频率可以是1min, 5min, 15min等
)
print(data.head())
然后就是重头戏,也是硬盘杀手——Tick数据(也叫逐笔成交)。这东西记录的是每一笔成交的细节,信息量巨大,做高频或者微观结构分析必备,但数据量真的是指数级增长,新手慎入,真的会怀疑人生。
港股/美股Tick数据主要字段:
| 字段名 | 说明(我自己的理解) |
|---|---|
timestamp | 成交发生的精确时间,通常到毫秒甚至微秒 |
price | 这一笔成交的具体价格 |
volume | 这一笔成交了多少股(手) |
turnover | 这一笔成交了多少钱 |
trade_type | 这个很重要,标识是场内还是场外交易,比如是自动对盘还是非自动对盘 |
buy_order_id & sell_order_id | 买方和卖方的订单编号,可以用于追踪订单流 |
Tick数据里最有意思的就是看trade_type,能区分出哪些交易是真正在交易所里匹配成交的,哪些是大宗或者场外搬过来的,对理解真实流动性帮助很大。以前我只看买卖盘口,后来发现很多大单子其实并不直接冲击盘口,都在这里体现了。
差点忘了,还有盘口快照数据(也叫Level 2)。这个不是每笔成交,而是每隔一个很短的时间(比如几秒)拍一张买卖五档(甚至十档)的截图。
盘口快照数据主要字段:
| 字段名 | 说明 |
|---|---|
snapshot_time | 快照时间戳 |
bid_price_1 ~ bid_price_5 | 买一到买五的价格 |
bid_volume_1 ~ bid_volume_5 | 买一到买五的挂单量 |
ask_price_1 ~ ask_price_5 | 卖一到卖五的价格 |
ask_volume_1 ~ ask_volume_5 | 卖一到卖五的挂单量 |
total_bid_volume | 买盘总挂单量(不一定是五档) |
total_ask_volume | 卖盘总挂单量 |
看盘口数据,不能光看挂单大就觉得支撑强或压力大。有时候一个大单子挂在那,可能是故意吸引注意力的,我回测过一些情况,发现它突然撤掉的时候才是行情启动的点。这个规律,我后来是调取了数据库中过去几年的港股Tick和盘口数据做匹配回测,才看得比较清楚。
最后简单对比下,方便选择:
- 分钟数据:适合大多数情况,做日级别或小时级别策略回测、技术分析足够,数据好处理。
- Tick数据:适合高频或微观研究,能看清每一笔交易,但数据量恐怖,需要很强的清洗和处理能力。
- 盘口快照:适合分析短期供需和订单簿动态,通常和Tick数据结合着用。
说实话,整理这些字段和区别手都酸了。数据本身只是矿石,怎么炼出金子还得看自己的策略和想法。如果有朋友知道更高效的Tick数据压缩或存储方法,求教!
