乐于分享
好东西不私藏

量化软件QMT获取数据有哪些方法?一文详解订阅数据的方法怎么使用?(附代码参考示例)

量化软件QMT获取数据有哪些方法?一文详解订阅数据的方法怎么使用?(附代码参考示例)

QMT 是一款本地运行的量化交易软件,所有数据都需要先下载到本地电脑才能使用。对于历史数据,用户可以提前下载好放在本地,这样用的时候直接读取就行,不会有什么问题。但如果是当天的实时数据,要是每次用的时候才临时去下载,就会因为网络传输等原因导致延迟,影响交易速度。

为了解决这个问题,QMT 设计了一种 "订阅" 机制。用户如果需要使用当天某只股票的历史数据(比如当天的 K 线、分时图等),可以先在软件里 "订阅" 这只股票。订阅之后,软件会把这只股票当天的数据实时同步到本地的一个缓存服务器里。这样一来,当用户调用 get_market_data_ex 这个函数获取数据时,实际上是直接从本地缓存服务器读取数据,而不需要再临时从网络上下载,大大提高了数据获取的速度。

一

QMT本地数据获取

QMT 作为本地客户端软件,数据处理的核心逻辑是“历史数据预下载 + 实时数据订阅缓存”。具体为:

历史数据处理:用户可以提前将历史数据下载至本地存储,使用时直接从本地调用,避免实时拉取导致的延迟,适用于回测、策略研究等需要大量历史数据的场景。

实时数据痛点:如果当天数据采用 “边下载边获取” 的方式,可能因为网络传输或数据处理延迟影响行情速度,尤其在高频交易或实时监控场景中,毫秒级延迟可能导致策略失效。

二

QMT数据订阅机制

为解决实时数据延迟问题,QMT 采用“订阅 - 缓存 - 直连” 模式,具体流程及优势如下:

1、订阅机制的核心流程
(1)主动订阅触发
用户若需获取当天某只标的(如股票、期货等)的数据,需先通过接口(如 subscribe_market_data)对该标的进行订阅。
(2)缓存服务器存储
订阅后,QMT 会将该标的当天的实时数据实时推送到缓存服务器,形成临时存储池。
(3)直接接口调用
订阅后,用户通过 get_market_data_ex 接口获取数据时,不需要重新从源端拉取,直接从缓存服务器读取,大幅提升数据获取速度。
2、订阅机制的核心优势
(1)减少延迟
数据提前缓存至服务器,避免实时网络请求的耗时(如 DNS 解析、服务器响应等),理论上可将数据获取延迟压缩至毫秒级。
(2)减轻本地压力
本地客户端无需实时处理大量数据流,仅需与缓存服务器建立稳定连接,降低本地硬件(如 CPU、网络带宽)的负载。
(3)数据一致性
缓存服务器作为中间节点,可确保同一标的数据的一致性,避免多源数据导致的误差(如不同接口返回数据时间戳不一致)。

三

QMT数据订阅机制

1、以订阅单股行情为例:

(1)参考示例
subscribe_quote(stock_code, period='1d', start_time='', end_time='', count=0, callback=None)
  • 订阅单股的行情数据,返回订阅号
  • 订阅成功后,可以用get_market_data获取行情,同时当指定callback回调函数后,动态行情会推送到callback里。传入不同period,其callback里收到的字段有所不同。
  • 如果只需要动态行情时,适合count=0,这种情况不管start_time和end_time传入任何值,都不会像服务器订阅历史行情
  • 当同时需要获取历史数据和动态行情时,end_time传空字符串或当前时间且count传大于0或-1,且用get_market_data获取历史和实时行情,但是建议历史行情提前用download_history_data提前下载到本地

  • 如果只需要历史行情时,不宜使用该接口,建议用download_history_data配合get_market_data使用

(2)实际运用——盘中均线金叉

#encoding: gb2312switch = 1def init(C):    def callback_func(data):        global switch        if switch == 1 :            datas = C.get_market_data_ex(                ['close'],                 ['510310.SH'],                period='1m',                start_time='20250414', end_time='',                count=10)            close_list = datas['510310.SH']['close'].tolist()            ma_5 = sum(close_list[-5:])/5            ma_10 = sum(close_list)/10            print('ma_5: ',ma_5,'ma_10: ',ma_10)            if ma_5 > ma_10:                #passorder:调用下单函数                switch = 0                print('ma_5上穿ma_10')    C.subscribe_quote('510310.SH', period = '1m', callback = callback_func)def handlebar(C):    pass

代码说明:

订阅数据:通过subscribe_quote订阅了 510310.SH 的 1 分钟 K 线数据
数据获取:在回调函数中使用get_market_data_ex获取当天的 1 分钟 K 线数据
均线计算:计算了最近 5 根和 10 根 K 线的收盘价均线
交易触发:当 MA5 上穿 MA10 时,调用insert_order函数执行买入操作,并将 switch 设为 0 避免重复买入

看一下监控效果,黑色(ma_5)确实上穿了紫色(ma_10)。

四

如何开通QMT和miniQMT?

1、开通门槛
目前券商限时入金10万就可以开通
    2、佣金费率
    • 股票无条件万1,根据资金量最低可以做到万0.854
    • 融资无条4.5%,根据资金量,最低可以做到4%
    3、开通福利
    • 极速柜台:普通柜台毫秒级,极速柜台微秒级延时,理论上极速柜台并发处理能力在普通柜台5倍以上。
    • VIP席位 :普通席位人数众多,同一价位排单量多,导致无法在理想价位买入。VIP席位人数少,可更加快实现成交。
    福利1:低佣开量化
    福利2:领取完整教程
    福利3:添加量化讨论群
    福利4:提供专业量化问题解答

    福利5:量化工具安装使用教程、视频

    福利6:极速柜台,量化投资者专用,速度微秒级

    相关学习资料