QMT量化交易新手必看——数据订阅、下载和获取这几个接口有什么区别?
在量化交易中,高效拿到并用好行情数据,对后续策略编写、策略回测、策略实盘这些步骤都特别关键。而订阅数据、主动拿数据、下载数据这些不同的获取方式,各自都有特别的作用和适合用的场景。subscribe_/unsubscribe_(订阅 / 反订阅)、get_(获取数据)、download_(下载数据)这几类接口有着明显的区别,主要体现在数据获取的方式、时效性、使用场景等方面,现在我们好好探讨一下:

订阅/反订阅接口
subscribe_/unsubscribe_(订阅 / 反订阅)
订阅是一种实时推送式的数据获取方式,向行情服务器请求实时数据推送,当订阅了某类数据(比如某只股票的实时行情、分笔成交数据)后,只要这个数据有更新(比如股票价格变动、产生新的成交单),系统就会主动将最新数据推送给订阅者。
subscribe_quote: 订阅单个个股的行情数据(如K线、分笔),可设置回调函数接收推
代码示例:
# conding = gbkdef call_back(data):print(data)def init(C): C.subID = C.subscribe_quote("000001.SZ","1d", callback = call_back)def handlebar(C):print("============================")print("C.subID: ",C.subID)
subscribe_whole_quote:订阅全推市场或多个个股的行情(主要为分笔数据),增量推送有变化的个股。
代码示例:
# conding = gbkdef call_back(data):print(data)def init(C): C.stock_list = ["000001.SZ","600519.SH", "510050.SH"] C.subID = C.subscribe_whole_quote(C.stock_list,callback=call_back)def handlebar(C):print("============================")print("C.subID: ",C.subID)
unsubscribe_quote: 配合上面的订阅接口使用,之后不再接收对应数据的实时更新,可以释放资源。
代码示例:
# conding = gbkdef call_back(data):print(data)def init(C): C.stock_list = ["000001.SZ","600519.SH", "510050.SH"] C.subID = C.subscribe_whole_quote(C.stock_list,callback=call_back)def handlebar(C):print("============================")print("C.subID: ",C.subID)if C.subID > 0: C.unsubscribe_quote(C.subID) # 取消行情订阅
获取数据接口
get_(用于主动查询实时或历史数据)
用get_是一种主动拉取式的数据获取方式,需要用户主动发起请求,系统才会返回对应的数据。获取的通常是当前或短时间段内的最新数据快照,或者是时间区间、指定标的的历史数据,但一般数据量相对不大、时间间隔相对较短。比如,交易前想快速查看某只股票当前的 K 线形态(如最新的 5 分钟 K 线);或者查询某只股票近一周的分笔成交记录。
get_market_data_ex:多功能数据获取接口,可以通过设置 subscribe 参数选择模式:
-
subscribe=True :订阅模式,可获取动态行情,但受订阅额度限制。 -
subscribe=False :本地模式,从本地已下载文件中读取数据,无订阅限制,但无法获取最新行情。
get_full_tick:获取客户端缓存的最新全推分笔数据,不能用于回测 只能取最新的分笔,不能取历史分笔。无需订阅,无品种数量限制。
代码示例:
# coding:gbkimport pandas as pdimport numpy as npdef init(C): C.stock_list = ["000001.SZ","600519.SH", "510050.SH"]def handlebar(C): tick = C.get_full_tick(C.stock_list)print(tick["510050.SH"])
get_local_data: 用于仅用于获取本地历史行情数据,使用前需要确保已通过download_history_data下载过历史行情数据。一般不推荐使用这个函数。
代码示例:
ContextInfo.get_local_data( stock_code, start_time='', end_time='', period='1d', divid_type='none', count=-1)
下载数据接口
download_(下载数据)
用download_也是主动拉取,但主要用于获取大规模、长时间跨度的历史数据。数据会下载到本地,用于策略回测前的数据准备、补充缺失的历史数据。比如,要回测一个基于股票历史 K 线的交易策略,需要下载某只股票过去 5 年的日线数据;
注意:K线基础周期类型,包括:’tick’(分笔线)、’1d’(日线)、’1m’(分钟线)、’5m'(5分钟线)
其他周期为合成周期,以基础周期合成得到:

代码示例:
# coding:gbkdef init(C): download_history_data("000001.SZ","1d","20230101","") # 下载000001.SZ,从20230101至今的日线数据 download_history_data("000001.SZ","1d","20230101","",incrementally=True) # 下载000001.SZ,从20230101至今的日线数据,增量下载def handlebar(C):return
总结,这三类接口是量化交易中获取数据的 “三种实用工具”:subscribe_/unsubscribe_ 订阅后系统会主动推送数据动态(比如股票实时行情变动),不想盯了就取消订阅,适合需要紧跟实时数据的场景;
get_ 得你主动发起请求,才能拿到即时或小范围数据(比如当前的 5 分钟 K 线、当天上午的成交记录),主打临时取 “数据快照”;
download_ 同样需要主动操作,但能获取大规模历史数据(比如某股票过去 5 年的日线数据、全行业 3 年的财务报表),下载后可用于离线深度分析或策略回测。
如何开通量化软件QMT、PTrade
开通门槛
目前券商限时入金10万就可以开通
佣金费率
股票佣金最低可以做到万0.854

开户福利
福利1:低佣开量化
福利2:领取完整教程
福利3:添加量化讨论群
福利4:提供专业量化问题解答
福利5:量化工具安装使用教程、视频
福利6:极速柜台,量化投资者专用,速度微秒级

夜雨聆风