做量化回测或者选股工具,美股历史K线数据API接口基本是绕不开的一环。数据源选不好,回测结果跟实盘对不上,策略上线以后表现跟预期差一大截,问题往往就出在历史数据的完整度和准确性上。这篇文章记录一下用 iTick 美股历史K线接口的实际体验。

历史数据体量有多大
先说个数字,iTick官网披露他们的历史数据超过1万亿行,原始数据量2PB左右,这个体量对绝大部分中小团队来说其实是"用不满"的富余状态。美股这边从1分钟线一直到月线都有对应周期,回测短线策略或者长线趋势策略都能拿到匹配的数据颗粒度。
接口调用示例
拉取苹果(AAPL)最近的5分钟K线,Python SDK下大概是这样:
python
from itick.sdk import Client
client = Client("your_api_token")
kline = client.get_stock_kline("US", "AAPL", 2, 50)
for k in kline:
print(k["t"], k["o"], k["h"], k["l"], k["c"], k["v"])
返回字段里,t是时间戳,o/h/l/c对应开高低收,v是成交量,做出一张K线图或者接入自己的回测框架,字段基本不用怎么转换就能直接用。
周期参数对照
| kType | 周期 |
|---|---|
| 1 | 1分钟 |
| 2 | 5分钟 |
| 3 | 15分钟 |
| 4 | 30分钟 |
| 5 | 1小时 |
| 8 | 1天 |
| 9 | 1周 |
| 10 | 1月 |
数据准确性怎么验证
自己做过一个简单的对照实验,拿AAPL、TSLA、NVDA三只股票近一年的日线跟另外两个免费数据源做过交叉核对,收盘价基本一致,个别除权除息日附近iTick这边的调整因子(Adjustment Factor)接口能单独查到,方便自己判断是否要做复权处理,这一点比某些"黑盒式"给出后复权数据的接口透明很多,至少你知道数据是怎么调整出来的。
批量拉取效率
如果需要同时回测几十上百只标的,逐个请求效率太低。iTick支持批量查询接口,一次请求带多个股票代码,实测下来比循环单只请求快出不少,尤其是做全市场扫描类的策略时,这个批量能力能省掉很多请求次数和等待时间。
小结
美股历史K线这块,iTick的数据完整度、周期覆盖、还有批量拉取的效率都挺让人满意的,配合官方SDK(Python/Java/Go/Node.js都有),从注册账号到跑通第一次K线请求,正常情况下十几分钟就能搞定。想看完整字段说明可以去文档站查一下:docs.itick.org,源码可以参考 GitHub上的java-sdk仓库,官网入口在 itick.org。