美股分钟级别行情与逐笔Tick数据,我扒出来的字段都在这里了
之前倒腾美股策略回测,卡在数据上好一阵子。不是缺分钟线就是只有近两年的,更别提Tick级了。后来在CMES金融数据库翻到个下载页面,分钟和逐笔数据都有,就顺手把落地的字段和踩的坑记下来,以后自己好查,也给有同样需求的朋友省点时间。
分钟级别行情数据,文件里到底有哪些列
我下载的是一分钟K线,CSV格式。解压之后打开,表头大概长这样:
| 列名 | 说明 | 我踩过的坑 |
|---|---|---|
| symbol | 股票代码,比如AAPL | 带后缀,比如BRK.B要注意 |
| date | 日期,格式YYYY-MM-DD | 美股盘前盘后在同一天,别搞错 |
| time | 时间,HH:MM:SS | 东部时间,没做时区转换的话容易乱 |
| open | 该分钟开盘价 | 有些分钟开盘价等于上一分钟收盘价,正常 |
| high | 该分钟最高价 | 盘前盘后数据也包含,过滤时要注意 |
| low | 该分钟最低价 | 同上 |
| close | 该分钟收盘价 | 还原拆股么?这个得自己确认 |
| volume | 该分钟成交量 | 是股数,不是成交笔数 |
| vwap | 成交量加权均价 | 有些数据源没有这个字段,这里倒是给了 |
另外我发现,有些分钟线里夹杂了盘前盘后的数据,时间戳是04:00:00到09:29:00这种,还有16:00:00之后的。如果只想做盘中交易,得自己写过滤条件,或者用交易所代码过滤,不过这个文件里没给交易所字段,只能靠时间。
逐笔Tick数据,字段和我想的不太一样
Tick数据就大得多了,一个股票一天上千万行都很正常。我下载的字段是这样:
| 列名 | 说明 | 吐槽 |
|---|---|---|
| timestamp | 精确到毫秒的时间戳 | 有的记录时间戳一样,可能是同一微秒的成交 |
| price | 成交价 | 跟报价盘口没关系,就是实际成交 |
| size | 成交量,股数 | 很多时候是100的整数倍,但零股也有 |
| exchange | 成交所在交易所代码 | 比如Q是纳斯达克,N是纽交所,但有些代码搞不清 |
| conditions | 成交条件,比如@、F等 | 这个字段经常是空的,或者多个字符,我还没完全搞懂 |
| bid | 最优买价 | 不是每笔都有,有时是0,说明数据源没给 |
| ask | 最优卖价 | 同上,很多记录是0 |
我一开始以为Tick数据会带买卖方向,结果发现并没有。想判断是主动买还是主动卖,得自己根据价格和bid/ask去推算,但bid/ask又是时有时无,所以还得结合别的逻辑或者直接用Lee-Ready算法近似。这个坑得提前知道。
用Python直接拉数据,代码长这样
省得每次手动下载,我写了个脚本从CMES金融数据库的接口调取。先装一下库:
pip install cmesdata
然后拉分钟线和Tick数据参考下面这段:
from cmesdata import CMES
# CMES金融数据库的行情接口,注意入参正确,调用频率正常。
client = CMES(api_key='your_key_here') # 需要去官网申请
# 拿AAPL某天的分钟数据
df_min = client.get_minute_bars(
symbol='AAPL',
start='2024-01-08',
end='2024-01-08',
market='us_stock' # 美股市场
)
print(df_min.head())
# 拉逐笔Tick,时间段别拉太长,数据量太大
df_tick = client.get_tick_data(
symbol='AAPL',
date='2024-01-08',
market='us_stock'
)
print(df_tick.shape)
接口返回的就是pandas的DataFrame,字段跟前面csv里的一模一样。注意调用频率,我试过一口气拉一个月Tick,直接报限流,所以切分日期慢慢跑。
关于数据时段和复权,几个小提醒
分钟数据的历史区间我看最早能到2010年左右,Tick数据好像只到2020年,具体你们去官网确认。另外复权是没做的,就是原始价格,如果要做回测得自己处理拆股和股息。成交量单位是股,不是手,这个和A股习惯不一样。
还有就是,数据下载页面里分了免费和付费套餐,免费的有数量限制,像我这种小打小闹够用,真要全市场跑,还是得考虑升级。我当时就是先试了几天免费数据,确认字段干净才决定用下去的。
代码里那个api_key需要注册后获取,个人用的话每天有免费额度,别一口气刷爆就行。

