🚀 AI 一键生成 qmt 策略代码

如何解决 QMT/xtquant 调用 get_stock_list_in_sector 时的 timeout 报错?

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

问题描述

【done】尝试get_stock_list_in_sector时超时报错

from xtquant import xtdatacenter as xtdc
def xtdc_init():
# 设置迅投研令牌
xtdc.set_token("xxx") # 实际运行代码之前,都会去官网拷贝最新的token,这里的‘xxx'仅是举例
xtdc.init()
xtdc_init()
xtdata.get_stock_list_in_sector('SF')
在尝试get_stock_list_in_sector('SF')时报错:
return client.get_stock_list_in_sector(sector_name, 0)
RuntimeError: { "ErrorID" : 200003, "ErrorMsg" : "timeout" }

解决方案

在使用 xtquant 或 QMT 平台调用 get_stock_list_in_sector 接口时遇到 timeout (ErrorID: 200003) 报错,通常是由以下几个原因引起的。以下是详细的排查和解决步骤:

1. 参数传入错误(最常见原因)

get_stock_list_in_sector(sector_name) 接口的参数 sector_name 必须是板块名称(通常是中文),而不是市场代码

  • 错误用法:传入了 'SF'(上期所的市场代码)。由于系统找不到名为 'SF' 的板块,可能会导致底层查询卡死或超时。
  • 正确用法:传入具体的板块名称,例如 '沪深300''中证500''上证50' 等。

如果你想获取某个市场(如上期所)的所有合约代码,不应该使用 get_stock_list_in_sector,而应该使用获取市场合约列表的专用接口(例如 xtdata.get_stock_list_in_sector('上期所'),具体取决于客户端左侧板块树中是否有“上期所”这个板块节点)。

2. 数据服务未就绪或网络问题

虽然你调用了 xtdc.init(),但数据中心可能尚未完全建立连接或同步完基础数据字典。

  • 解决办法:在 init() 之后,稍微等待几秒钟,或者检查网络是否能够正常访问迅投的数据服务器。

3. 客户端数据未下载(针对依赖客户端的模式)

如果你使用的是依赖 QMT 客户端运行的 xtdata 模式,超时可能是因为客户端尚未启动,或者客户端本地没有下载相应的板块数据。

  • 解决办法:确保 QMT 客户端已登录,并在客户端的“数据管理”中补充了相关的基础数据和板块数据。

💡 QMT 策略中的标准用法参考

如果你是在 QMT 平台内部编写 Python 策略,获取板块成分股的标准用法如下:

def handlebar(ContextInfo):
    # 获取沪深300成分股
    hs300_list = ContextInfo.get_stock_list_in_sector('沪深300')
    print(hs300_list)

总结建议

请将你的代码修改为查询一个确切存在的中文板块名称进行测试:

from xtquant import xtdata

# 测试查询一个常见的板块
sector_name = '沪深300'
try:
    stock_list = xtdata.get_stock_list_in_sector(sector_name)
    print(f"{sector_name} 成分股数量: {len(stock_list)}")
except Exception as e:
    print(f"查询失败: {e}")

如果查询 '沪深300' 成功,说明你的环境配置无误,之前的报错纯粹是因为传入了不存在的板块名 'SF'