🚀 AI 一键生成 qmt 策略代码
立即体验
👉 AI 生成代码 👈

为什么 QMT 中 xtdata.get_full_tick 经常返回空数据?

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

问题描述

为什么最近xtdata.get_full_tick经常返回空数据,是行情源的问题吗,求解

为什么最近xtdata.get_full_tick经常返回空数据,是行情源的问题吗,求解

解决方案

在 QMT(迅投)量化平台中,调用 get_full_tick(或 ContextInfo.get_full_tick)经常返回空数据,不一定全是行情源的问题。通常情况下,这与数据订阅状态、代码格式、调用时机或本地客户端状态有关。

以下是导致该接口返回空数据的常见原因及排查解决方法:

1. 未提前订阅实时行情(最常见原因)

get_full_tick 是用于获取内存中最新的 tick 快照数据。如果你没有提前对该股票进行行情订阅,内存中可能没有该股票的最新数据,从而返回空字典 {}
解决方法:在获取 tick 数据前,确保已经调用了订阅接口。

# QMT 内置模式示例
def init(ContextInfo):
    # 订阅行情数据
    ContextInfo.subscribe_quote('000001.SZ', period='tick', dividend_type='none')

def handlebar(ContextInfo):
    # 获取全量 tick 数据
    tick_data = ContextInfo.get_full_tick(['000001.SZ'])
    print(tick_data)

如果是独立运行模式(xtdata),请确保调用了 xtdata.subscribe_quote

2. 股票代码格式不规范

QMT 对股票代码的格式要求非常严格,必须包含市场后缀,且大写。例如,平安银行必须是 000001.SZ,贵州茅台必须是 600519.SH
排查方法:检查传入的 stock_code 列表,确保格式为 ['代码.市场']。如果漏掉后缀或写成小写,接口将无法识别,直接返回空。

3. 在非交易时间段调用

如果你在盘前(如 9:00 之前)、盘后或周末调用该接口,且 QMT 客户端刚刚重启,内存中尚未接收到当天的任何 tick 推送,此时调用也会返回空数据。
排查方法:确认测试时间是否在交易时段内(9:15 - 15:00)。如果需要在盘后测试,建议使用获取历史数据的接口(如 get_market_data_exget_local_data)。

4. QMT 客户端行情断开或未登录

无论是内置模式还是独立模式,底层都依赖 QMT 客户端的行情接收模块。如果 QMT 客户端的行情服务器断开连接,或者账号未正常登录,数据推送就会停止。
排查方法

  • 检查 QMT 客户端右下角的网络连接状态,确保“行情”显示为绿色已连接。
  • 尝试在 QMT 客户端的 K 线图上查看该股票,看是否有实时行情跳动。

5. 传入的参数类型错误

get_full_tick 的参数 stock_code 应该是一个列表(List),即使只查询一只股票,也建议传入列表形式。
正确写法ContextInfo.get_full_tick(['600000.SH'])
错误写法ContextInfo.get_full_tick('600000.SH') (部分版本可能会兼容,但标准用法是列表)。

总结建议

如果你最近频繁遇到这个问题,建议按照以下步骤排查:

  1. 检查 QMT 客户端行情连接是否正常。
  2. 确认代码中是否正确执行了 subscribe_quote 订阅操作。
  3. 打印传入的股票代码,核对 .SH / .SZ 后缀是否正确。
  4. 确保在交易时段内进行实时 tick 的获取测试。