做A股量化,一套Python SDK搞定A股行情数据沪深实时+历史行情

AI摘要
【知识分享】本文分享使用itick Python SDK开发A股行情监控工具的经验,涵盖REST接口获取实时报价与历史K线、WebSocket实时推送订阅沪深股票的方法,并提示SH/SZ市场区分、交易状态字段判断等关键细节,适合量化开发者参考。

写量化小工具、个人盯盘脚本的时候,相信很多朋友跟我一样:最难的往往不是写策略逻辑,而是搞定靠谱的行情数据源
A股行情数据沪深实时+历史行情
之前踩过不少坑:用爬虫抓取网页行情,网站一改接口直接全部失效;高频请求就触发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股工具,这几个细节一定要留意

  1. 交易状态字段 ts

quote接口返回ts字段代表股票状态:0正常交易、1停牌、2退市、3熔断。写监控、预警程序务必判断这个字段,否则停牌、涨跌停股票的数据容易造成逻辑误判。

  1. T+1 是交易规则,和行情接口无关

SDK只返回行情数据,不涉及交易下单。A股T+1属于券商交易层面规则,不会影响行情数据获取。

  1. 常见报错排查
  • cannot be resolved action:大概率订阅消息里股票代码、SH/SZ格式写错,核对代码$region写法;

  • 完全收不到推送:优先检查当前是否A股交易时间,其次核对token权限。

简单总结

个人做量化小项目的时候,优先避开不稳定的网页爬虫,选择成熟SDK可以节省大量底层开发时间。

这套方案的优势总结:

  1. 统一SDK,A股区分SH/SZ,多市场字段统一;

  2. 历史K线用REST,实时行情用WebSocket,分工清晰;

  3. WebSocket内置心跳、自动重连,减少造轮子;

  4. 有免费套餐可以用来做原型验证,跑通脚本之后,再按需升级扩大标的数量。

完整的字段说明、批量接口可以去官方文档中心查阅。

希望这篇实战可以帮到正在折腾Python量化的小伙伴。如果大家有好用的行情工具,也欢迎评论区一起交流。

免责声明:本文仅为技术开发实战分享,不构成任何投资建议,行情接口仅供程序学习研究使用。

参考文档:https://docs.itick.org/rest-api/stocks/stock-kline

GitHub:https://github.com/itick-org/

本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!
未填写
文章
83
粉丝
4
喜欢
8
收藏
8
排名:1771
访问:1525
私信
所有博文
社区赞助商