乐于分享
好东西不私藏

QMT量化交易新手必看——数据订阅、下载和获取这几个接口有什么区别?

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:极速柜台,量化投资者专用,速度微秒级