3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 QMT 平台中使用 get_financial_data 函数获取财务数据时,如果返回的数据都是空值,通常是由以下几个原因导致的。请按照以下步骤逐一排查并解决:
原因分析:QMT 的财务数据接口(get_financial_data)是通过读取下载到本地的数据来进行取数的。如果你的客户端本地没有相应的财务数据,接口就会返回空值。
解决方法:
在使用该函数前,必须先通过 QMT 客户端补充数据。
操作路径:点击客户端菜单栏的 【数据管理】 -> 【补充数据】,勾选你需要的市场和财务数据,点击下载并等待补充完成。
原因分析:QMT 对财务数据的表名和字段名有严格的规范,必须使用官方文档中指定的英文表名和英文字段名。
解决方法:
检查你传入的 fieldList 或 tabname/colname 是否正确。例如,获取资产负债表中的固定资产和利润表中的净利润,正确的格式是:
['ASHAREBALANCESHEET.fix_assets', 'ASHAREINCOME.net_profit_incl_min_int_inc']
(注:部分旧版支持中文如 '利润表.净利润',但强烈建议使用全英文字段以保证兼容性)
原因分析:传入的股票代码后缀不正确,或者时间格式不符合要求。
解决方法:
stockcode.market 的形式,例如平安银行应写为 '000001.SZ',浦发银行应写为 '600000.SH'。startDate 和 endDate 必须是类似 'YYYYMMDD' 的字符串格式,例如 '20171209'。原因分析:get_financial_data 函数在返回多股或多期数据时,底层依赖 pandas 库来构建 Series、DataFrame 或 Panel 数据结构。
解决方法:
确保你的 Python 环境中已经安装了 pandas 库(QMT 自带的 Python 环境默认已安装,如果是自定义环境请执行 pip install pandas)。
原因分析:report_type 参数可选 'announce_time'(公告期)或 'report_time'(报告期)。如果指定的时间段内没有对应的财报发布,也会返回空。
解决方法:
根据策略需求合理选择 report_type。例如,如果想获取某天能看到的最新财报数据,建议使用默认的 'announce_time'。
在确保已经下载了本地财务数据后,你可以使用以下标准代码进行测试:
#coding:gbk
def init(ContextInfo):
pass
def handlebar(ContextInfo):
# 取股本结构中的总股本,与利润表中的净利润
fieldList = ['CAPITALSTRUCTURE.total_capital', 'ASHAREINCOME.net_profit_incl_min_int_inc']
stockList = ['600000.SH', '000001.SZ']
startDate = '20201201'
endDate = '20201231'
# 获取指定时间段浦发银行和平安银行的总股本及利润表的净利润
df = ContextInfo.get_financial_data(fieldList, stockList, startDate, endDate, report_type='announce_time')
print(df)
总结:遇到 get_financial_data 返回空值,90% 以上的情况是因为没有在客户端的【数据管理】中下载财务数据。请先执行数据补充操作,然后再运行策略。