3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在使用 QMT (xtquant) 获取财务数据时,遇到 xtdata.get_financial_data 卡死不动的情况,通常不是因为券商(如国金证券)没有权限,而是由代码细节错误、客户端未启动或数据未正确下载引起的。请按照以下步骤进行排查和解决:
在您提供的代码中,table_list 列表存在一个明显的语法遗漏:
table_list = ['Balance', 'Income', 'CashFlow', 'Capital', 'Holdernum' 'Pershareindex']
注意 'Holdernum' 和 'Pershareindex' 之间缺少了一个逗号。在 Python 中,相邻的字符串会被自动拼接,这会导致实际传入的表名变成了 'HoldernumPershareindex'。底层 C++ 接口在解析这个不存在的表名时可能会陷入死循环或引发未捕获的异常,从而导致程序卡死。
修改为:
table_list = ['Balance', 'Income', 'CashFlow', 'Capital', 'Holdernum', 'Pershareindex']
xtquant 的 xtdata 模块并不是直接连接云端服务器,而是依赖于本地正在运行的 QMT 客户端作为数据代理。如果您的 QMT 客户端没有打开,或者没有成功登录,xtdata.download_financial_data 和 get_financial_data 就会因为无法与本地终端通信而一直阻塞等待。
虽然您使用了 xtdata.download_financial_data,但有时由于网络波动或请求量过大,代码下载可能会卡住。建议先通过 QMT 客户端界面手动下载一次数据,以验证数据源是否正常:
get_financial_data(可暂时注释掉 download 语句测试)。基础的财务数据(如资产负债表、利润表等)在绝大多数券商的 QMT 版本中都是默认开放的,不需要额外申请高级权限。只有极少数特色因子数据(如 Level-2 逐笔、特定的 AI 预测因子)才需要额外开通权限。因此,卡死问题基本可以排除是权限限制导致的。
from xtquant import xtdata
xtdata.enable_hello = False
stock_list = ['300750.SZ']
# 修复了缺失逗号的问题
table_list = ['Balance', 'Income', 'CashFlow', 'Capital', 'Holdernum', 'Pershareindex']
start_time = '20231231'
end_time = '20240930'
print("开始下载财务数据...")
# 如果卡死,可以尝试先在 QMT 终端手动下载,然后注释掉下面这行
xtdata.download_financial_data(stock_list=stock_list, table_list=table_list, start_time=start_time, end_time=end_time)
print("下载完成,开始获取数据...")
data = xtdata.get_financial_data(stock_list=stock_list, table_list=table_list, start_time=start_time, end_time=end_time, report_type='report_time')
print("获取成功:")
print(data)
如果修改代码并确保 QMT 客户端运行后仍然卡死,建议检查 QMT 安装目录下的 userdata_mini/datadir 路径是否有读写权限,或者尝试重启 QMT 客户端及 Python 环境。