问题描述
coding:utf-8
from xtquant import xtdata
import time
下载交易日历数据
xtdata.download_holiday_data()
获取交易日
start_time = time.strftime("%Y%m%d") # 起始日期
end_time = time.strftime("%Y") + '1231' #结束日期,这里我用 time 函数自动计算年,格式生成'20241231'
返回获取的交易日历
result = xtdata.get_trading_calendar('SH', start_time , end_time )
print(result)
运行上面这些代码,有下面这些报错。
(cat-meho-rl) PS E:\cat-meho-rl> & e:\cat-meho-rl.venv\Scripts\python.exe e:/cat-meho-rl/scripts/test.py
xtquant 文档地址:http://dict.thinktrader.net/nativeApi/start_now.html
***** xtdata 连接成功 2026-05-27 01:27:42*****
服务信息: {'tag': 'sp3', 'version': '1.0'}
服务地址: 127.0.0.1:58610
数据路径: E:\国金证券 QMT 交易端\bin.x64/../userdata_mini/datadir
设置 xtdata.enable_hello = False 可隐藏此消息
Traceback (most recent call last):
File "e:\cat-meho-rl\scripts\test.py", line 6, in
xtdata.download_holiday_data()
File "E:\cat-meho-rl.venv\Lib\site-packages\xtquant\xtdata.py", line 2114, in download_holiday_data
inst = _BSON_call_common(
^^^^^^^^^^^^^^^^^^
File "E:\cat-meho-rl.venv\Lib\site-packages\xtquant\xtdata.py", line 283, in _BSON_call_common
return BSON.BSON.decode(interface(func, BSON.BSON.encode(param)))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
RuntimeError: 当前客户端未支持此功能,请更新客户端或升级投研版 func:commonControl, error:{ "error" : { "ErrorID" : 300000, "ErrorMsg" : "function not realize" } }
(cat-meho-rl) PS E:\cat-meho-rl>
这个数据在官方网页说明当中,没说明是 VIP 数据,为什么也会报错?
解决方案
遇到这个报错 RuntimeError: 当前客户端未支持此功能,请更新客户端或升级投研版 func:commonControl, error:{ "ErrorID" : 300000, "ErrorMsg" : "function not realize" },通常并不是因为该数据属于 VIP 数据,而是由于以下几个原因导致的:
1. QMT 客户端版本过低
xtquant 只是一个 Python 接口库,它底层依赖于你本地运行的 QMT 客户端(从你的日志看是“国金证券 QMT 交易端”)提供的数据服务。download_holiday_data() 是在较新版本的 QMT 中才加入或完善的接口。如果你的国金 QMT 客户端版本较老,底层 C++ 核心尚未实现这个函数(即报错中的 function not realize),就会抛出这个错误。
解决方法:联系你的券商客户经理,获取并安装最新版本的 QMT 客户端。
2. 券商定制版的功能阉割
不同券商提供的 QMT 客户端(尤其是 MiniQMT)在打包时,可能会对部分非核心交易接口进行裁剪或屏蔽。报错提示“升级投研版”说明该接口可能被券商划分到了更高级的权限包中,或者在当前普通交易端中未开放。
3. 替代解决方案(无需下载节假日数据)
如果你只是想获取一段日期内的交易日历,通常不需要显式调用 download_holiday_data()。你可以直接尝试使用 get_trading_dates 或 get_trading_calendar,因为基础的交易日历数据通常在客户端启动时就已经同步了。
你可以尝试修改代码,跳过下载步骤,直接获取交易日:
# coding:utf-8
from xtquant import xtdata
import time
# 注释掉这行,跳过显式下载
# xtdata.download_holiday_data()
# 获取交易日
start_time = time.strftime("%Y%m%d") # 起始日期
end_time = time.strftime("%Y") + '1231' # 结束日期
# 尝试直接获取交易日历
try:
# 注意:部分版本中获取交易日历的函数名为 get_trading_dates
result = xtdata.get_trading_dates('SH', start_time, end_time)
print("获取成功:", result)
except Exception as e:
print("获取失败:", e)
总结:
这个报错本质上是本地 QMT 客户端底层不支持该函数调用。建议先尝试直接调用获取交易日的函数;如果依然失败,请务必联系国金证券更新你的 QMT 客户端至最新版本。