问题描述
请问一下,我第一次使用 mini qmt,但是提示 func:getStockListInSector, error:{ "error" : { "error" : "not authenticated" } }
解决方案
在第一次使用 mini qmt(通常是通过 xtquant 库连接 QMT 客户端)时,遇到 func:getStockListInSector, error:{ "error" : { "error" : "not authenticated" } } 的报错,根本原因是您的 Python 脚本未能成功连接到已登录的 QMT 客户端数据服务。
not authenticated 的字面意思是“未认证”,在 mini qmt 的架构中,这意味着数据接口没有检测到有效的登录状态。请按照以下步骤进行排查和解决:
1. 确认 QMT 客户端已启动并成功登录
mini qmt 本质上是调用本地运行的 QMT 客户端的数据和交易服务。因此,必须先打开 QMT 客户端,并成功登录您的资金账号或测试账号。如果客户端未启动、处于离线状态或断网,Python 脚本将无法获取认证信息。
2. 确认是否开启了 mini qmt 模式
在 QMT 客户端中,确保您使用的是支持 mini qmt(极简模式/独立 Python 运行)的版本。部分券商版本的 QMT 需要在设置中勾选允许外部 Python 连接,或者确保您启动的是带有数据服务的正确版本。
3. 检查 Python 代码中的连接初始化
在调用 getStockListInSector 等数据接口之前,必须确保 xtdata 模块已经正确连接到 QMT 客户端。通常不需要手动调用登录函数,但需要确保连接端口正确(默认数据端口通常是 58609,具体视券商版本而定)。
正确的初始化示例代码:
from xtquant import xtdata
# 尝试连接 QMT 数据服务(通常 xtdata 导入时会自动尝试连接默认端口)
# 如果您的 QMT 安装在非默认路径或使用了非默认端口,可能需要指定路径
# xtdata.data_dir = r'D:\国信证券QMT交易端\userdata_mini'
# 测试连接是否成功,获取沪深300成分股
try:
sector_name = '沪深300'
stock_list = xtdata.get_stock_list_in_sector(sector_name)
print(f"成功获取 {sector_name} 成分股,共 {len(stock_list)} 只")
except Exception as e:
print(f"获取数据失败,错误信息: {e}")
4. 检查防火墙或杀毒软件拦截
由于 mini qmt 是通过本地 Socket 端口(如 127.0.0.1:58609)与 QMT 客户端通信的,请检查是否有防火墙或杀毒软件拦截了 Python 进程或 QMT 客户端的本地网络通信。
总结
遇到 not authenticated 错误,90% 的情况是因为 QMT 客户端没有打开或者没有登录成功。请保持 QMT 客户端在后台正常运行并处于登录状态,然后再运行您的 Python 脚本。