3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在使用 QMT 的 xtdata 模块获取行情数据时,遇到 ErrorID: 200003, ErrorMsg: timeout 错误,通常是因为 Python 脚本无法成功连接到正在运行的 QMT/miniQMT 客户端的数据服务。即使你已经登录了券商版的 miniQMT,仍然可能因为配置或环境问题导致连接超时。
以下是排查和解决该问题的详细步骤:
xtdata 模块本身不直接连接交易所服务器,而是通过本地运行的 QMT/miniQMT 客户端获取数据。因此,在运行 Python 脚本时,必须确保 miniQMT 客户端处于登录且正常运行的状态。默认情况下,xtdata 会尝试连接本地默认端口。如果你的 miniQMT 安装路径或端口有特殊设置,可能需要手动指定数据路径。
在代码开头添加数据路径配置(请将路径替换为你实际的 miniQMT 安装路径下的 userdata_mini 文件夹):
from xtquant import xtdata
import time
# 指定 miniQMT 的数据路径 (非常重要!)
# 请替换为你实际的 miniQMT 安装路径
xtdata.data_dir = r'C:\Your\Path\To\miniQMT\userdata_mini'
# 设定一个标的列表
code_list = ["000001.SZ"]
period = "1d"
# ... 后续代码 ...
xtdata.get_market_data_ex 默认会尝试从本地缓存读取数据。如果本地没有该标的、该周期的历史数据,且订阅未能及时返回,就会导致超时。
000001.SZ 的日线(1d)历史数据。xtdata.download_history_data 下载数据。from xtquant import xtdata
import time
code_list = ["000001.SZ"]
period = "1d"
# 下载历史数据
print("开始下载历史数据...")
for code in code_list:
xtdata.download_history_data(code, period=period)
print("历史数据下载完成")
# ... 然后再进行订阅和获取 ...
有时网络延迟或客户端处理较慢,time.sleep(1) 可能不够。尝试增加等待时间,例如 time.sleep(3) 或 time.sleep(5),确保订阅成功并接收到数据。
xtquant 库版本与你使用的 miniQMT 客户端版本相匹配。建议使用客户端安装目录下自带的 xtquant 库,或者通过官方渠道获取最新版本。结合以上建议,你可以尝试使用以下代码结构:
from xtquant import xtdata
import time
# 1. (可选但推荐) 指定数据路径,如果默认连接失败
# xtdata.data_dir = r'C:\Your\Path\To\miniQMT\userdata_mini'
code_list = ["000001.SZ"]
period = "1d"
# 2. 确保本地有历史数据
print("正在检查/下载历史数据...")
for code in code_list:
xtdata.download_history_data(code, period=period)
# 3. 订阅实时行情
print("正在订阅行情...")
for code in code_list:
xtdata.subscribe_quote(code, period=period, count=-1)
# 4. 给予充分的等待时间
time.sleep(3)
# 5. 获取数据
print("正在获取数据...")
try:
kline_data = xtdata.get_market_data_ex([], code_list, period=period)
print("获取成功:")
print(kline_data)
except Exception as e:
print(f"获取数据失败: {e}")
如果按照以上步骤排查后仍然报错,请检查是否有杀毒软件或防火墙拦截了 Python 进程与 miniQMT 客户端之间的本地网络通信(通常是 127.0.0.1 的某个端口)。