🚀 AI 一键生成 qmt 策略代码

QMT get_market_data_ex 怎么获取包含当天的最新行情数据?

qmt | 发布时间: 2026/5/25
以下内容由 EasyQuant 生成。

问题描述

get_market_data_ex不能获取当天的行情数据吗,怎么获取包含当天的行情数据?

data = xtdata.get_market_data_ex(['open','high','low','close','volume'], stock, period='5m', count=60)

上面的代码执行的过程中,最新的结果也只是前面一天的数据,怎样才能获取当天的数据

解决方案

在 QMT(迅投极速量化)平台中,get_market_data_ex 函数完全可以获取当天的最新行情数据。如果您发现获取到的数据只到前一天,通常是因为本地没有当天的最新数据

get_market_data_ex 的机制是优先从本地读取数据。为了获取当天的实时数据,您需要确保数据已经被下载或正在被实时订阅。以下是具体的解决方法:

1. 如果您使用的是 xtdata(独立 Python 环境)

在独立环境中使用 xtdata 时,必须显式地订阅行情下载数据,否则只能读到本地已有的历史数据。

方法 A:实时订阅(推荐用于盘中获取最新数据)
在调用 get_market_data_ex 之前,先使用 subscribe_quote 订阅该品种的对应周期。订阅后,后台会自动接收并更新当天的实时数据。

from xtquant import xtdata
import time

stock = '000001.SZ'
period = '5m'

# 1. 订阅行情,确保后台持续接收当天最新数据
xtdata.subscribe_quote(stock, period=period)

# 等待一小段时间让数据接收完成(仅首次订阅时需要)
time.sleep(1)

# 2. 获取数据,此时就能包含当天的最新 K 线了
data = xtdata.get_market_data_ex(
    ['open', 'high', 'low', 'close', 'volume'], 
    [stock], 
    period=period, 
    count=60
)

print(data[stock])

方法 B:手动下载数据(推荐用于盘后复盘)
如果您不需要实时更新,只是想拉取一下包含当天的最新数据,可以先调用 download_history_data

from xtquant import xtdata

stock = '000001.SZ'
period = '5m'

# 1. 强制从服务器下载最新数据到本地
xtdata.download_history_data(stock, period=period)

# 2. 从本地读取数据
data = xtdata.get_market_data_ex(
    ['open', 'high', 'low', 'close', 'volume'], 
    [stock], 
    period=period, 
    count=60
)

print(data[stock])

2. 如果您是在 QMT 客户端内置的策略编辑器中运行

在 QMT 客户端内部编写策略时,使用的是 ContextInfo.get_market_data_ex。该函数有一个参数 subscribe,默认值为 True

def handlebar(ContextInfo):
    stock = '000001.SZ'
    # subscribe=True 会自动订阅并获取最新数据
    data = ContextInfo.get_market_data_ex(
        ['open', 'high', 'low', 'close', 'volume'], 
        [stock], 
        period='5m', 
        count=60,
        subscribe=True  # 确保此参数为 True(默认即为 True)
    )
    print(data[stock])

注意:

  • 如果在客户端内回测,确保在“数据管理”中已经补充了当天的最新数据。
  • 如果是实盘/模拟运行模式,只要客户端连接正常,subscribe=True 就会自动获取当天的实时 K 线。