美股量化数据接入实战:低成本获取实时行情与历史K线
环境准备与数据源选择
先装 SDK:
pip install itick-sdk
然后去 itick 官网 注册账号,在后台拿到 API Token。所有请求都会用到它。
为什么选 itick?其实社区里还有很多优秀的金融数据 API,但 itick 的免费套餐已经覆盖了美股、港股、A股等主流市场的实时数据和历史K线。REST 接口每分钟可以调用 5 次,WebSocket 允许 1 条连接、订阅 3 个标的。这个额度对学习、原型测试基本够用,实测下来延迟也在可接受范围内。如果你需要更高频的查询,官方也提供了 600 次/分钟、6 条连接等更高配置的付费方案,按需升级就好。
1. 获取实时报价(REST)
from itick.sdk import Client
token = "your_api_token"
client = Client(token)
# region 填 US 代表美股市场
quote = client.get_stock_quote("US", "AAPL")
print("苹果最新报价:", quote)
tick = client.get_stock_tick("US", "TSLA")
print("特斯拉 Tick:", tick)
region 参数传 "US" 即可,SDK 底层会自动拼接成完整请求。返回的字段里,ld 是最新价,o/h/l 是开、高、低,ch/chp 是涨跌额和涨跌幅,和券商 App 看盘时的数据基本一致。
2. 获取历史 K 线
美股支持从 1 分钟到月线的多种周期,参数 kType 的取值整理如下:
| kType | 含义 |
|---|---|
| 1 | 1 分钟 |
| 2 | 5 分钟 |
| 3 | 15 分钟 |
| 4 | 30 分钟 |
| 5 | 1 小时 |
| 8 | 1 天 |
| 9 | 1 周 |
| 10 | 1 月 |
拉取苹果最近 10 根 5 分钟 K 线的代码:
kline = client.get_stock_kline("US", "AAPL", kType=2, limit=10)
print("K线数据:", kline)
每条 K 线包含 t(时间戳)、o/h/l/c(开高低收)、v(成交量)和 tu(成交额),画个简单的走势图完全够用。
3. WebSocket 实时推送
盯盘、量化实盘等场景下,反复轮询 REST 接口很容易触碰频率上限,而且效率不高。更好的方式是使用 WebSocket,让服务端主动推送数据。itick 的 SDK 已经封装好了连接、心跳和自动重连。
下面是一个完整的订阅例子,同时接收苹果和特斯拉的报价与盘口数据:
import time
def on_message(message):
print(f"收到推送: {message}")
def on_error(error):
print(f"WebSocket 出错: {error}")
client.set_message_handler(on_message)
client.set_error_handler(on_error)
# 建立 WebSocket 连接
client.connect_stock_websocket()
# 订阅 AAPL(US 市场)和 TSLA(NASDAQ 交易所,US 市场)
subscribe_msg = '{"ac":"subscribe","params":"AAPL$US,TSLA$NASDAQ$US","types":"quote,depth"}'
client.send_websocket_message(subscribe_msg)
# 保持连接一段时间,实际项目中可以改成事件循环
time.sleep(30)
print("当前连接状态:", client.is_websocket_connected())
client.close_websocket()
关于订阅参数:
params格式为代码$地区。如果同一市场内有多个交易所需要区分,可以写成代码$交易所$地区。types可选tick(逐笔成交)、quote(实时报价)、depth(十档盘口)、kline(K线推送,其中 1 分钟粒度的 kline@1 目前仅对 Premium 及以上套餐开放)。
SDK 还内置了心跳机制(默认每 30 秒 ping 一次),一旦因网络抖动断线,会自动按 5 秒间隔重连,最多尝试 10 次。重连成功后,之前的订阅关系也会自动恢复。这个小设计在搭建实时监控时省了不少事。
常见问题
Q:免费套餐能支撑日常开发吗?
如果只是个人学习、搭建原型或者跑一些低频策略,每分钟 5 次 REST 调用、1 条 WebSocket 连接基本足够。当策略需要监控更多标的或更高频的数据时,再考虑升级到更高级别的套餐。
Q:数据延迟表现怎么样?
itick 官方给出的延迟参考是毫秒级推送。我在本地测试下来,做盯盘工具和实时计算的延迟感知很小,符合一般量化的要求。当然实际体验也和你的服务器位置、网络环境有关。
Q:一条 WebSocket 连接可以订阅多少个标的?
单条连接最多支持 500 个标的。如果你监控上千只美股,可以按逻辑拆分成多条连接,或者联系客服调整连接数上限。
结语
本文用 itick 的 Python SDK 演示了美股实时行情和历史 K 线的基本接入流程:REST 负责一次性或低频查询,WebSocket 负责持续的实时推送。两条链路配合使用,基本能覆盖选股、盯盘、策略回测等场景。整个流程从注册、拿到 Token 到跑通第一条 WebSocket 推送,通常半小时内能搞定。
更详细的字段说明、批量请求接口以及 Java/Go/Node.js 等语言的 SDK,可以查阅 itick 文档中心。希望这篇文章能帮你少走一点弯路,快速把数据层搭起来。
免责声明:本文仅用于技术交流与学习,不构成任何投资建议。
本作品采用《CC 协议》,转载必须注明作者和本文链接
关于 LearnKu