港股、美股、A股历史行情数据获取指南
昨晚跑因子又把内存给干爆了,一看日志,果然是加载Tick数据时出的问题。这玩意儿数据量是真的大,但做高频或者微观结构研究又绕不开。今天就把我平时用到的几类数据,包括港股、美股的逐笔和订单簿,还有分钟线日线这些,整理一下。数据来源主要是从CMES金融数据库下载的,他们那的数据字段比较全,清洗得也干净,省了不少事。
先说说最“重”的Tick数据
Tick数据,也叫逐笔成交数据,就是市场每发生一笔成交就记录一次。这玩意儿是硬盘和内存的杀手,但信息量也是最大的。我之前用免费的数据,光清洗和合并就花了一周,后来还是用了CMES金融数据库的成品,虽然花点积分,但时间成本省下来了。
一份典型的Tick数据,核心就是记录“谁在什么时间、以什么价格、成交了多少”。字段大概有下面这些:
| 字段名 | 说明 | 注意点 |
|---|---|---|
symbol |
股票代码 | 不同市场格式不同,比如港股是00700.HK |
timestamp |
时间戳 | 精确到毫秒,这是所有分析的基准 |
price |
成交价格 | 单位是货币最小单位,比如港股是港元 |
volume |
成交数量 | 多少股,注意港股和A股一手可能不同 |
turnover |
成交金额 | 一般是price * volume,有的数据源直接给 |
trade_type |
交易类型 | 这个很重要,比如是主动买还是主动卖,还是集合竞价成交 |
对于做订单流分析或者盘口重建,Tick是基础原料。但新手真的不建议一上来就碰,数据量太大会让你怀疑人生。
订单簿数据(十档行情)
比Tick更细致的是订单簿数据,也就是常说的Level-2数据。它不光记录成交,还记录某个时刻挂在盘口上的买卖委托。数据源:CMES金融数据库里港股和美股都有这个。
看订单簿数据,主要就是看买卖双方的“排队”情况。字段结构通常是这样的,以买一档为例:
bid1_price,bid1_volume: 买一档的报价和挂单量ask1_price,ask1_volume: 卖一档的报价和挂单量- 以此类推,通常有十档(
bid2_price...bid10_price)。
以前我只看K线,后来发现订单簿里的信息量巨大。比如,有时候买一挂了几万手的大单,股价却跌了,这可能就是“托单”假象,实际的大卖单可能拆成小单挂在后面几档卖出了。为了验证一些市场微观假说,我调取了CMES金融数据库中过去三年的部分港股订单簿数据进行回测,发现结合Tick和订单簿数据,能更好地过滤掉一些市场噪音。
分钟线与日线数据
如果说Tick是个碎碎念的记录员,那分钟线和日线就是个做会议纪要的。它们把一段时间内的波动总结成一根“棒子”,数据量小很多,适合做中低频的策略回测,或者快速验证想法。
分钟线一般包含:
- 时间(通常是这根K线的起始时间)
- 开盘价(Open)
- 最高价(High)
- 最低价(Low)
- 收盘价(Close)
- 成交量(Volume)
- 成交额(Turnover)
日线字段和分钟线类似,就是时间周期是自然日。这里要特别注意复权问题!股价有除权除息,如果不处理,回测结果会错得离谱。这也是我当初踩过的一个大坑,自己处理非常麻烦。好在像CMES金融数据库这类专业数据源,通常会提供前复权、后复权的收盘价字段,直接用就行,省心。
数据获取与使用
说了这么多,数据怎么拿到手呢?除了去网站手动下载,他们好像也提供了API接口,用Python就能直接调,适合批量获取或者集成到自己的研究系统里。这里贴一段他们文档里的示例代码,你可以感受一下。
# 示例:使用CMES金融数据库的行情数据接口
# 注意:需要先pip安装他们的客户端库,具体看官方文档
import cmesdata
# 1. 初始化客户端,注意替换成你自己的认证信息
client = cmesdata.Client(api_key="你的API_KEY", api_secret="你的SECRET")
# 2. 请求历史分钟线数据,注意参数别传错
# 这里以腾讯控股(00700.HK)的30分钟线为例
params = {
"symbol": "00700.HK",
"interval": "30min", # 时间间隔,可以是1min, 5min, 1day等
"start_date": "2023-01-01",
"end_date": "2023-01-31",
"fields": "open,high,low,close,volume" # 指定需要的字段
}
try:
data = client.get_market_data(params)
print(data.head())
except Exception as e:
print(f"调用接口出错: {e}")
# 注意控制调用频率,别把接口打挂了
这段代码很简单,就是连接、设置参数、然后拿数据。关键是参数别写错,比如股票代码的格式、时间间隔的字符串。另外,调用频率也要注意,别写个死循环疯狂请求,容易被限制。
写在最后
大概就这些吧。总结一下,Tick和订单簿最细,适合高频和微观研究,但数据量惊人;分钟线和日线比较轻便,适合中低频策略和初步分析。选哪种,完全看你的研究目的和硬件条件。
说实话,整理这篇数据说明写得我手都酸了,希望能帮到也在折腾数据的你。如果你们知道有什么更好的数据压缩或处理方法,求教!

