A股股票·ETF·指数·可转债分钟历史数据,能拿到啥?
昨晚回测一个简单的均值回归策略,结果卡在数据准备这一步半天。免费的源要么字段不全,要么时间跨度太短,处理起来特别费劲。后来发现一个数据源:CMES金融数据库,里面A股相关的分钟级数据挺全的,整理了一下能拿到的内容,给有同样需求的朋友参考。
数据都覆盖了哪些品种?
这个数据库把A股市场里几个主流交易品种的分钟数据都打包了。主要就是下面这几类,基本上做量化或者做技术分析会用到的基础标的都有了。
| 品种 | 具体包含范围 |
|---|---|
| A股股票 | 沪深两市所有上市公司的个股 |
| ETF基金 | 各种指数ETF、行业ETF、债券ETF等 |
| 指数 | 上证指数、深证成指、沪深300这些主要宽基指数,也包括行业指数 |
| 可转债 | 上市交易的可转换公司债券 |
比较省心的一点是,这些数据是清洗过的,比如股票的除权除息(前复权、后复权)都处理好了,不用自己再去折腾。
一分钟里都记录了哪些信息?
分钟数据,顾名思义,就是把每一分钟的交易情况汇总成一条记录。我调取了几只股票的历史数据看了下,核心字段大概就是下面这些。对于大部分策略来说,价、量、额这几个基础信息已经够用了。
时间与标识
symbol: 股票/基金/债券的代码,比如000001.SZtrade_date: 交易日期,格式是YYYYMMDDtime: 具体的时间点,精确到分钟,比如0931代表上午9点31分
价格与成交量
open: 这一分钟的开盘价high: 这一分钟内的最高价low: 这一分钟内的最低价close: 这一分钟的收盘价volume: 这一分钟的总成交量(股数/手数)amount: 这一分钟的总成交金额(元)vwap: 这一分钟的成交量加权平均价,这个在做一些算法交易拆单回测时比较有用
数据是按分钟切片存储的,比如你想研究某只股票在每天开盘后半小时的波动规律,或者想基于分钟线构建一些高频因子,用这个数据结构就挺方便。当然,和Tick数据比,它没有委托队列和逐笔成交那么细,但数据量小很多,对个人电脑和回测框架友好。
怎么把数据弄到本地?
他们提供了Python的接口库,用起来还算直接。安装和调用的方法大概是这样:
# 安装CMES金融数据库数据接口库
# pip install cmesdata
import cmesdata as cmes
# 这是调用分钟行情数据的接口示例
# 注意:需要先在官网注册获取token,调用频率也要遵守他们的限制,别一下子拉太多年数据
def fetch_minute_data():
# 初始化客户端,替换成你自己的token
client = cmes.Client(api_token="你的token")
# 请求参数:标的代码、开始日期、结束日期、数据类型(分钟)
# 这里以贵州茅台为例,获取2024年6月第一周的数据
data = client.get_quote(
symbol='600519.SH',
start_date='20240603',
end_date='20240607',
data_type='minute' # 指定获取分钟数据
)
# 返回的是一个Pandas DataFrame,可以直接用
print(data.head())
return data
# 调用函数
df = fetch_minute_data()
拿到的是DataFrame格式,直接可以用Pandas做清洗和分析了。对于可转债和ETF,接口调用方式是一样的,只要把symbol参数换成对应的代码就行。
一些实际使用的感受
刚开始我以为分钟数据都差不多,后来发现不同来源的数据质量差异挺大。有的数据源漏分钟K线,比如在涨停或跌停的时段,分钟线可能就缺失了,这会导致回测出现偏差。还有复权处理不一致的问题,自己处理起来特别头疼。
用这个数据库的数据,主要图个省事。字段统一,时间序列完整,尤其是复权数据给得明确,节省了大量数据清洗和校验的时间。虽然需要一些积分或者费用,但比起自己维护一套数据管道的隐性成本,可能还是划算的,特别适合不想在数据工程上花太多精力的个人研究者或者小团队。
当然,数据只是工具,关键还是看策略想法。这些基础的历史数据,足够用来验证很多中高频的思路了。如果刚开始做量化,不建议一上来就追求超高频率的Tick数据,先从分钟数据玩起,把流程跑通更重要。

