写量化小工具、个人盯盘脚本的时候,相信很多朋友跟我一样:最难的往往不是写策略逻辑,而是搞定靠谱的行情数据源。
之前踩过不少坑:用爬虫抓取网页行情,网站一改接口直接全部失效;高频请求就触发IP限流;不同市场返回字段五花八门,写一堆适配代码;想要实时推送,还要自己折腾WebSocket心跳、断线重连,一堆底层细节耗掉大把时间。
最近在做个人A股监控小项目,试了 itick 的 Python SDK,体验挺舒服,不需要复杂封装,REST拿历史K线,WebSocket接收实时推送,沪深两市一套代码就能搞定,在这里分享下实战踩坑与完整示例。
一个关键认知:A股要区分沪市SH、深市SZ
和美股港股不一样,A股接口里,上海交易所用region=SH,深圳交易所用region=SZ,这是最容易踩的第一个坑。
举两个典型标的:
- 贵州茅台 600519 → 沪市 SH
- 平安银行 000001 → 深市 SZ
⚠️注意:股票代码直接传纯数字,不要带
.SH/.SZ后缀,region参数负责区分交易所,后缀加上反而查不到数据。如果拿不准某只股票归属哪个市场,可以调用get_symbol_list标的列表接口确认。
快速安装初始化
安装SDK,填入自己申请的token即可完成初始化:
pip install itick-sdk
from itick.sdk import Client
# 替换成你的token
token = "your_api_token"
client = Client(token)
REST接口:获取实时快照 + 历史K线
普通的最新报价、历史K线数据,直接调用REST接口就可以,同步调用简单直接,适合回测、定时拉取数据场景。
# 获取沪市贵州茅台实时报价
quote_sh = client.get_stock_quote("SH", "600519")
print("茅台实时报价:", quote_sh)
# 获取深市平安银行实时报价
quote_sz = client.get_stock_quote("SZ", "000001")
print("平安银行实时报价:", quote_sz)
# 获取茅台最近60根日线K线
# kType:1=1分钟,2=5分钟,3=15分钟,4=30分钟,5=1小时,8=日线,9=周线,10=月线
kline = client.get_stock_kline("SH", "600519", kType=8, count=60)
print("茅台日K线:", kline)
返回字段是统一规范:
o开盘、h最高、l最低、c收盘、v成交量、tu成交额。A股、港股、美股字段命名保持一致,做多市场项目的时候,不用反复写不同字段适配代码,这点很省心。
WebSocket实时推送:同时订阅沪深多只股票
如果要做盘中盯盘、预警脚本,轮询接口效率太低,优先使用 WebSocket 推送。
比较友好的一点:同一个连接可以同时订阅沪市、深市的标的,不用分别新建两条连接,监控沪深300一篮子股票的时候会省事很多。SDK内部已经封装好了心跳、断线自动重连,断线后最多重试10次,重连成功自动恢复订阅关系,不用自己手写重连逻辑。
示例代码:
import time
# 收到行情消息回调
def on_message(message):
print("收到行情推送:", message)
# 异常回调
def on_error(error):
print("连接异常:", error)
# 注册回调函数
client.set_message_handler(on_message)
client.set_error_handler(on_error)
# 建立websocket连接
client.connect_stock_websocket()
# 订阅标的:格式 代码$交易所,同时订阅quote快照、tick逐笔
sub_msg = '{"ac":"subscribe","params":"600519$SH,000001$SZ,300750$SZ","types":"quote,tick"}'
client.send_websocket_message(sub_msg)
# 保持连接30秒接收数据
time.sleep(30)
print("连接状态:", client.is_websocket_connected())
# 关闭连接
client.close_websocket()
💡小提示:A股不是7×24小时市场,非交易时段不会有tick、quote推送。如果连接成功但是收不到数据,先确认是否开盘;排查连接是否正常,可以尝试订阅kline类型做验证。
开发A股工具,这几个细节一定要留意
- 交易状态字段 ts
quote接口返回ts字段代表股票状态:0正常交易、1停牌、2退市、3熔断。写监控、预警程序务必判断这个字段,否则停牌、涨跌停股票的数据容易造成逻辑误判。 - T+1 是交易规则,和行情接口无关
SDK只返回行情数据,不涉及交易下单。A股T+1属于券商交易层面规则,不会影响行情数据获取。 - 常见报错排查
cannot be resolved action:大概率订阅消息里股票代码、SH/SZ格式写错,核对代码$region写法;- 完全收不到推送:优先检查当前是否A股交易时间,其次核对token权限。
简单总结
个人做量化小项目的时候,优先避开不稳定的网页爬虫,选择成熟SDK可以节省大量底层开发时间。
这套方案的优势总结:
- 统一SDK,A股区分SH/SZ,多市场字段统一;
- 历史K线用REST,实时行情用WebSocket,分工清晰;
- WebSocket内置心跳、自动重连,减少造轮子;
- 有免费套餐可以用来做原型验证,跑通脚本之后,再按需升级扩大标的数量。
完整的字段说明、批量接口可以去官方文档中心查阅。
希望这篇实战可以帮到正在折腾Python量化的小伙伴。如果大家有好用的行情工具,也欢迎评论区一起交流。
免责声明:本文仅为技术开发实战分享,不构成任何投资建议,行情接口仅供程序学习研究使用。
参考文档:https://docs.itick.org/rest-api/stocks/stock-kline
GitHub:https://github.com/itick-org/

