问题描述
get_financial_data 为什么获取的数据都是空,应该怎么解决呢
解决方案
在 QMT 平台中使用 get_financial_data 函数获取财务数据时,如果返回的数据都是空值,通常是由以下几个原因导致的。请按照以下步骤逐一排查并解决:
1. 最常见原因:未补充本地财务数据
原因分析:QMT 的财务数据接口(get_financial_data)是通过读取下载到本地的数据来进行取数的。如果你的客户端本地没有相应的财务数据,接口就会返回空值。
解决方法:
在使用该函数前,必须先通过 QMT 客户端补充数据。
操作路径:点击客户端菜单栏的 【数据管理】 -> 【补充数据】,勾选你需要的市场和财务数据,点击下载并等待补充完成。
2. 字段名或表名拼写错误
原因分析:QMT 对财务数据的表名和字段名有严格的规范,必须使用官方文档中指定的英文表名和英文字段名。
解决方法:
检查你传入的 fieldList 或 tabname/colname 是否正确。例如,获取资产负债表中的固定资产和利润表中的净利润,正确的格式是:
['ASHAREBALANCESHEET.fix_assets', 'ASHAREINCOME.net_profit_incl_min_int_inc']
(注:部分旧版支持中文如 '利润表.净利润',但强烈建议使用全英文字段以保证兼容性)
3. 股票代码或时间格式不规范
原因分析:传入的股票代码后缀不正确,或者时间格式不符合要求。
解决方法:
- 股票代码:必须是
stockcode.market的形式,例如平安银行应写为'000001.SZ',浦发银行应写为'600000.SH'。 - 时间格式:
startDate和endDate必须是类似'YYYYMMDD'的字符串格式,例如'20171209'。
4. 缺少 Pandas 依赖库
原因分析:get_financial_data 函数在返回多股或多期数据时,底层依赖 pandas 库来构建 Series、DataFrame 或 Panel 数据结构。
解决方法:
确保你的 Python 环境中已经安装了 pandas 库(QMT 自带的 Python 环境默认已安装,如果是自定义环境请执行 pip install pandas)。
5. 报表时间类型(report_type)选择不当
原因分析: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% 以上的情况是因为没有在客户端的【数据管理】中下载财务数据。请先执行数据补充操作,然后再运行策略。