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

QMT无法获取数据(get_market_data_ex、get_financial_data等)的常见原因与解决办法

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

问题描述

QMT无法获取数据(包含但不限get_market_data_exget_stock_list_in_sector、get_financial_data等函数)?

/

解决方案

在QMT量化交易平台中,调用API(如 get_market_data_exget_financial_dataget_stock_list_in_sector 等)时如果无法获取数据,通常是由以下几个常见原因导致的。请按照以下步骤进行排查和解决:

1. 未补充本地历史数据(最常见原因)

QMT 平台的许多数据接口(特别是历史行情数据、财务数据和多因子数据)依赖于本地数据缓存。如果本地没有下载对应的数据,接口将返回空值或报错。
解决办法

  • 打开 QMT 客户端,点击顶部菜单栏的**【数据管理】【操作】 -> 【数据管理】**。
  • 选择**【补充数据】**。
  • 根据你的策略需求,勾选对应的市场、品种、数据周期(如日线、分钟线)以及时间范围。
  • 如果使用的是 get_financial_data,请务必勾选并下载财务数据
  • 如果使用的是多因子接口,请在补充数据中勾选多因子数据
  • 点击下载,等待数据补充完成后,重新运行策略。

2. 股票代码格式不正确

QMT API 对股票代码的格式有严格要求,必须包含市场后缀。
解决办法
确保传入的股票代码格式为 stockcode.market,例如:

  • 平安银行:000001.SZ(不能只写 000001
  • 浦发银行:600000.SH
  • 沪深300指数:000300.SH

3. 未设置基础股票池 (Universe)

部分旧版接口(如 get_history_data)在调用前,必须先通过 ContextInfo.set_universe() 设定基础股票池,否则无法获取数据。
解决办法
init 函数中初始化股票池:

def init(ContextInfo):
    ContextInfo.set_universe(['000001.SZ', '600000.SH'])

注:新版接口 get_market_data_ex 可以直接传入 stock_code 列表,不强制依赖 universe,但仍需确保本地有数据。

4. 财务数据接口 (get_financial_data) 的特殊要求

财务数据除了需要提前下载外,还需要注意参数的正确性。
解决办法

  • 检查 fieldList 字段名是否正确,必须使用官方文档中提供的英文表名和字段名,例如 ['ASHAREBALANCESHEET.fix_assets']
  • 检查 report_type 参数:默认为 announce_time(按公告期取数),如果需要按报告期取数,需显式设置为 report_time

5. 板块成分股接口 (get_stock_list_in_sector) 的注意事项

该接口依赖于客户端左侧板块列表中的板块名称。
解决办法

  • 确保传入的 sectorname(如 '沪深300')在客户端的板块列表中真实存在。
  • 确保传入的 realtime(时间戳)格式正确,通常可以通过 ContextInfo.get_bar_timetag(index) 获取当前 K 线的时间戳传入。

6. 订阅开关未开启 (针对 get_market_data_ex)

在使用 get_market_data_ex 时,如果需要获取实时更新的数据,需要注意 subscribe 参数。
解决办法
确保 subscribe=True(默认即为 True)。如果设置为 False,则只读取本地已有数据,不会进行数据订阅。

总结:遇到 QMT 无法获取数据的问题,90% 以上是因为没有在【数据管理】中下载对应的本地数据。养成在回测或运行策略前先补充数据的习惯,可以避免绝大多数的数据获取问题。