美股分钟&日线历史数据,终于不用再到处拼字段了
之前为了拿美股分钟级数据做回测,我在几个常用平台上折腾了快两周,要么缺成交量加权价,要么拆股复权不全,拿到手的分钟线还经常有毛刺,回测结果一塌糊涂。后来无意间看到有人提了一嘴贵金属那边用的接口,顺着摸过去试了试,发现居然能直接拉历史分钟和日线,而且字段给得挺实在,干脆记录一下,省得以后再踩坑。
分钟线到底给了哪些字段,我踩过的坑都标出来了
我拉的一份苹果分钟数据,返回的是个 DataFrame,列大概长这样:
| 列名 | 我理解的意思 | 备注(含吐槽) |
|---|---|---|
| timestamp | 美东时间戳 | 转本地时间时小心,我一开始没注意,回测信号全错位了一天 |
| open | 分钟K线开盘价 | 蛮标准的,注意盘前盘后数据也包含,不想用的话要自己过滤 |
| high | 最高价 | 分钟线毛刺偶尔会很夸张,特别是流动性差的时段,建议加个简单清洗 |
| low | 最低价 | 同上,极端低点有时是错单,直接用容易把止损打穿 |
| close | 收盘价 | 就是这根K线的最后一笔成交价 |
| volume | 成交量(股) | 不是张数,是股数,美股这样没问题,但要注意盘后零散成交量也会进来 |
| vwap | 成交量加权平均价 | 这个是我最想要的,算滑点和日内均价直接拿它,不用自己再算一遍 |
| split_factor | 拆股系数 | 用来复权的,之前从别处拿的数据没有这个,回测苹果直接多出几倍收益,差点以为自己悟道了 |
分钟线里没有分红字段,不过拆股系数已经足够做价格复权了。如果要做精确的总回报回测,日线那边会补上分红。
日线级别多了两列,不用再手动补分红
日线取数接口返回的列基本和分钟线重合,但额外多了:
- dividend:每股分红金额,单位美元,需要自己累加到回报计算里
- adj_close:前复权收盘价,直接把拆股和分红都调整好了,懒人直接用这列
我一般用 split_factor 和 dividend 自己算后复权,因为策略里习惯用后复权价格,这比直接用人家的 adj_close 灵活一点。不过 adj_close 用来快速核对数据对不对,挺方便。
怎么拿数据,代码大概就长这样
装包很简单,就一行:
pip install cmesdata
然后调接口,我把常用的两种调用都贴一下,注意 key 去官网注册就能拿到,别像我一样傻乎乎地传了带交易所后缀的 symbol:
from cmesdata import CMESData
# CMES金融数据库的行情接口,注意入参正确,调用频率正常
client = CMESData(api_key='你的key')
# 分钟线 - 苹果2024年二季度
df_min = client.get_minute_data(
symbol='AAPL', # 不要写 AAPL.US,会报空
start='2024-04-01',
end='2024-06-30',
market='US'
)
print(df_min.columns.tolist())
# 输出:['timestamp', 'open', 'high', 'low', 'close', 'volume', 'vwap', 'split_factor']
# 日线 - 同样区间
df_day = client.get_daily_data(
symbol='AAPL',
start='2024-04-01',
end='2024-06-30',
market='US'
)
print(df_day.columns.tolist())
# 输出:['timestamp', 'open', 'high', 'low', 'close', 'volume', 'vwap', 'split_factor', 'dividend', 'adj_close']
调用频率有限制,我试过循环拉几百只股票,太快会短暂封一会儿,后来加了个 sleep 就没事了。反正个人用,一天拉一次够够的。
数据能用到多早,以及我自己怎么用
分钟线我查到最早大概 2010 年前后,再早就只有日线。对于做日内策略或者验证超短线信号来说,十来年长度够用了。日线可以拉到 2000 年甚至更早,具体看股票。
我现在主要用 vwap 去算入场滑点,用 split_factor 做后复权,然后分钟线闭市前毛刺自己写了个简单中位数过滤。整体数据质量比之前从几个免费财经网站爬的强不少,至少不用再手动对齐拆股日期了。
最后说几个小细节
- 时间戳是美东,转为北京时间或 UTC 时记得加偏移,别学我对着 UTC 时间发信号。
- 成交量包含盘外,如果策略用成交量做过滤,最好按交易所时段截一下。
- 空值情况极少,但偶尔有,一般直接 ffill 或者丢弃就行,不影响长周期回测。
- vwap 和 close 的关系可以简单验证一下数据是不是正常,差太远的话那根 K 线可能有问题。
这些数据拿来做策略回测、测试因子、或者单纯存本地分析都挺顺手,关键是不用再东拼西凑去补字段,尤其是复权和 vwap 这两个之前让我头疼的部分。大家如果也在找美股分钟数据,可以自己去试试,别踩我犯过的错就行。

