问题描述
显示如下信息:
***** xtdata 连接成功 *****
服务信息: None
服务地址: None
数据路径: None
RuntimeError: func:getTradingDatesByMarket, error:{ "error" : { "error" : "not authenticated" } }
解决方案
在使用 miniqmt(即 xtdata 模块)时,如果出现 ***** xtdata 连接成功 ***** 但随后报错 RuntimeError: func:getTradingDatesByMarket, error:{ "error" : { "error" : "not authenticated" } },这通常意味着 Python 成功连接到了本地的 QMT 终端,但 QMT 终端本身未能成功连接到券商的数据服务器进行身份验证。
以下是详细的排查和解决方法:
1. 检查 QMT 客户端是否已正常登录
miniqmt 的数据获取依赖于后台运行的 QMT 客户端。如果 QMT 客户端未启动,或者停留在登录界面未登录,xtdata 将无法通过验证获取数据。
- 解决方法:请确保 QMT 客户端已经启动,并且已经成功输入账号密码登录进入了主界面。
2. 检查 QMT 客户端的数据连接状态
即使 QMT 已经登录,如果网络波动导致数据服务断开,也会提示未授权。
- 解决方法:查看 QMT 客户端右下角的状态栏。确保“行情”和“交易”的连接图标是绿色的。如果是红色或灰色,请尝试在 QMT 中点击重新连接,或者检查您的网络设置。
3. 检查账号的数据权限
部分券商的 QMT 终端对历史数据或实时行情有权限控制。如果您的账号没有开通相应的量化数据权限,服务器会拒绝提供数据。
- 解决方法:联系您的券商客户经理,确认您的资金账号是否已经开通了 QMT 的完整量化权限(包括行情数据权限)。
4. 确保正确的启动顺序
有时候 Python 脚本启动过早,QMT 的数据服务还未完全初始化完毕。
- 解决方法:
- 关闭当前的 Python 脚本或 Jupyter Notebook。
- 完全退出 QMT 客户端。
- 重新启动 QMT 客户端并登录。
- 等待 QMT 界面完全加载,右下角数据连接显示正常。
- 再次运行您的 Python 脚本。
5. 检查 xtdata 的初始化代码
确保在调用获取数据的函数之前,没有遗漏必要的初始化步骤(虽然通常 import xtdata 会自动连接,但建议规范调用)。
from xtquant import xtdata
# 确保连接成功后再进行数据请求
# 可以尝试先获取一下基础信息测试
try:
dates = xtdata.get_trading_dates('SH', '20230101', '20231231')
print("获取交易日历成功,数据服务正常。")
except Exception as e:
print(f"获取数据失败: {e}")
总结:not authenticated 核心原因是底层 QMT 终端未处于有效的已登录且数据连通状态。只要确保 QMT 客户端正常登录且右下角网络状态全绿,该问题即可迎刃而解。