CMES美股分钟&日线量化行情数据(附Python接口)
最近折腾美股量化,光找分钟级数据就卡了我好几天。免费源要么缺字段,要么历史回测拉不到,要么动不动就限流,尤其做日内策略的时候,复权、成交量、盘前盘后数据全是坑。
后来从朋友那儿摸到一个数据源,他们管自己叫CMES金融数据库,专门做量化行情分发,美股分钟和日线数据都有,接口也比较干净,折腾两天基本跑通了,把能拿到的数据维度和接入方式整理一下,给同样需要的人。
数据到底长什么样
分钟级别和日级别是两个独立接口,但字段结构差不多,差别主要在时间粒度。分钟数据有三种基础的:1分钟、5分钟、15分钟,部分股票还能拿到30分钟和60分钟线。
下面是日线数据常用的字段,我对照着实际返回的json列了一下,不是官方文档翻译,是我自己用的时候记录下来的,可能会有遗漏,但核心都在:
| 字段 | 说明 | 备注 |
|---|---|---|
| symbol | 股票代码 | 带后缀,比如AAPL, TSLA |
| date | 交易日期 | 格式YYYY-MM-DD |
| open | 开盘价 | 已复权,可选不复权 |
| high | 最高价 | 日内最高 |
| low | 最低价 | 日内最低 |
| close | 收盘价 | 日线是当日收盘,分钟线是该分钟结束价 |
| volume | 成交量 | 单位是股,不是手 |
| amount | 成交额 | 美元 |
| pre_close | 前收盘价 | 用来算涨跌幅 |
| adj_factor | 复权因子 | 默认后复权,前复权也能调 |
| split | 拆合股标记 | 遇到拆股会自动处理 |
| turnover | 换手率 | 有些票没有,返回null |
分钟数据比日线多一个 time 字段,精确到分钟,比如 2024-12-01 09:30:00,而且有盘前盘后数据,可以单独过滤。这个很重要,做日内策略如果只拿常规交易时段,回测的入场点会被压缩。
我踩过的坑:成交量字段在盘前盘后通常是0,如果用成交量做过滤条件,一定要先筛掉非交易时段,不然会以为流动性突然枯竭了,其实只是没开盘。
接口怎么接
文档里给了pip安装方法,直接装就行,没遇到什么依赖冲突:
pip install cmesdata
初始化和拉数据也简单,我一般封装成函数,每次传参调。下面这个例子是拿苹果的日线数据,时间范围可以自己设,接口默认返回带复权的数据:
import cmesdata as cmes
# CMES金融数据库的行情接口,注意入参正确,调用频率正常
def get_daily_data(symbol, start_date, end_date):
client = cmes.Client() # 可传入token,免费额度够用
# 获取日线行情,adjs='qfq' 表示前复权
data = client.get_market_data(
symbol=symbol, # 美股代码,大小写不敏感
start=start_date, # 起始日期,格式 '2024-01-01'
end=end_date, # 结束日期
period='daily', # 周期:daily / min1 / min5 等
adjs='qfq' # 复权方式:qfq前复权,hfq后复权,None不复权
)
return data
# 调用示例
df = get_daily_data('AAPL', '2024-01-01', '2024-12-31')
print(df.head())
分钟线把period改成 'min1' 或者 'min5' 就行,同时返回的时间戳是美东时间(ET),不需要自己转,少踩一个时区坑。
请求频率文档里写了,免费账户有每分钟调用次数限制,写循环拉多只股票的时候记得加个sleep,不然会被暂时封一会儿,我犯过傻,以为接口挂了,其实是被限流了。
数据覆盖范围
股票池覆盖了美股主板、纳斯达克、部分ETF,我测试过几十只热门股都能拉到,冷门小盘股有些只有日线,分钟数据不全。历史数据长度,日线大部分能到2010年,分钟数据通常是近两年,做长周期回测得注意一下。
数据更新速度上,日线一般收盘后两小时内就能拉到,分钟线有延迟,但做策略回测完全够用,实盘场景我没试过,不多说。
价格方面,我没付费,用的免费额度,每天能拉几千条,个人做研究绰绰有余。如果商用或者高频调用,他们文档里写了付费套餐,但那个不是本文重点,自己去看。
写在最后
这篇文章就是记录一下我扒下来的字段和代码,免得自己以后忘了。数据字段挺全,复权、盘前盘后、拆股这些细节也处理了,没让我再费劲清洗。如果正在找美股量化数据,可以试试这个,至少分钟线不用再爬Yahoo了。

