3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在QMT量化交易平台中,调用API(如 get_market_data_ex、get_financial_data、get_stock_list_in_sector 等)时如果无法获取数据,通常是由以下几个常见原因导致的。请按照以下步骤进行排查和解决:
QMT 平台的许多数据接口(特别是历史行情数据、财务数据和多因子数据)依赖于本地数据缓存。如果本地没有下载对应的数据,接口将返回空值或报错。
解决办法:
get_financial_data,请务必勾选并下载财务数据。QMT API 对股票代码的格式有严格要求,必须包含市场后缀。
解决办法:
确保传入的股票代码格式为 stockcode.market,例如:
000001.SZ(不能只写 000001)600000.SH000300.SH部分旧版接口(如 get_history_data)在调用前,必须先通过 ContextInfo.set_universe() 设定基础股票池,否则无法获取数据。
解决办法:
在 init 函数中初始化股票池:
def init(ContextInfo):
ContextInfo.set_universe(['000001.SZ', '600000.SH'])
注:新版接口 get_market_data_ex 可以直接传入 stock_code 列表,不强制依赖 universe,但仍需确保本地有数据。
财务数据除了需要提前下载外,还需要注意参数的正确性。
解决办法:
fieldList 字段名是否正确,必须使用官方文档中提供的英文表名和字段名,例如 ['ASHAREBALANCESHEET.fix_assets']。report_type 参数:默认为 announce_time(按公告期取数),如果需要按报告期取数,需显式设置为 report_time。该接口依赖于客户端左侧板块列表中的板块名称。
解决办法:
sectorname(如 '沪深300')在客户端的板块列表中真实存在。realtime(时间戳)格式正确,通常可以通过 ContextInfo.get_bar_timetag(index) 获取当前 K 线的时间戳传入。在使用 get_market_data_ex 时,如果需要获取实时更新的数据,需要注意 subscribe 参数。
解决办法:
确保 subscribe=True(默认即为 True)。如果设置为 False,则只读取本地已有数据,不会进行数据订阅。
总结:遇到 QMT 无法获取数据的问题,90% 以上是因为没有在【数据管理】中下载对应的本地数据。养成在回测或运行策略前先补充数据的习惯,可以避免绝大多数的数据获取问题。