问题描述
想请问get_history_fundamentals中的财务数据何时更新?
比如现在已经陆陆续续有公司公布2023年年报了,但是用该函数导出的最近财务数据依旧是2023第三季度
解决方案
在 JoinQuant 聚宽平台上,关于 get_history_fundamentals 函数获取财务数据更新的问题,主要与上市公司财报披露规则、平台数据同步机制以及函数参数设置有关。以下是详细的解答:
1. 财务数据的更新机制
- 上市公司披露时间:A股上市公司的年报披露时间通常为次年的 1月1日至4月30日。不同公司的披露时间差异很大,有些公司在1月份就早早披露,而很多公司会拖到4月底才集中披露。
- 平台数据同步:当上市公司正式发布财报后,聚宽平台的数据源会进行抓取、清洗和入库。通常情况下,平台会在财报正式公布后的 T+1 日(甚至更短时间内)完成数据更新。但如果是财报密集披露期,偶尔可能会有轻微延迟。
2. 为什么导出的最近数据依旧是第三季度?
如果您发现某家公司已经公布了2023年年报,但您导出的数据仍然是2023年第三季度(2023q3),通常有以下几种原因:
A. 公司确实还未披露年报(或仅披露了业绩快报/预告)
请确认该上市公司是正式发布了《2023年年度报告》,还是仅仅发布了《业绩预告》或《业绩快报》。get_history_fundamentals 获取的是正式财报数据,业绩预告和快报的数据不会更新到该接口中。
B. 函数参数设置问题(最常见原因)
get_history_fundamentals 函数的参数设置决定了您获取数据的维度。如果您想获取年度数据,需要特别注意 stat_date、interval 和 stat_by_year 参数的配合。
如果您没有指定 stat_date,而是使用了 watch_date(或者在回测中默认使用当前日期),函数会返回在该日期之前已发布的最新财报。如果此时年报尚未入库,它自然会返回上一期(即三季报)的数据。
3. 如何正确获取最新的年报数据?
如果您明确知道某公司已经发布了年报,并希望获取年度数据,建议使用 stat_date 和 stat_by_year=True 参数进行精确查询。
示例代码:获取2023年年度财务数据
from jqdata import *
# 假设我们要查询平安银行(000001.XSHE)的2023年年报数据
security = ['000001.XSHE']
# 指定查询的字段,例如:现金及现金等价物、营业总收入
fields = [balance.cash_equivalents, income.total_operating_revenue]
# 方法一:精确指定 stat_date 为 '2023',并设置 stat_by_year=True
# 这将强制返回2023年度的年报数据(如果平台已更新)
df_year = get_history_fundamentals(
security,
fields=fields,
stat_date='2023', # 指定年份
count=1,
interval='1y', # 间隔为1年
stat_by_year=True # 明确表示按年度统计
)
print("按年度查询结果:\n", df_year)
# 方法二:指定 stat_date 为 '2023q4' (第四季度即年报)
# 注意:有些字段在单季度表中可能与年度表有差异,具体视字段而定
df_q4 = get_history_fundamentals(
security,
fields=fields,
stat_date='2023q4', # 指定2023年第四季度
count=1,
interval='1q',
stat_by_year=False
)
print("按季度(Q4)查询结果:\n", df_q4)
总结建议
- 核实披露状态:去巨潮资讯网或交易所官网核实该股票是否已正式披露完整的年度报告。
- 调整查询参数:使用
stat_date='2023'配合stat_by_year=True强制拉取年度数据测试。 - 避免未来函数:在回测中,强烈建议使用
watch_date(或不填,默认使用context.current_dt的前一天),这样可以严格模拟真实交易时您能看到的最新财报,避免引入未来函数。如果此时取到的是三季报,说明在那个历史时刻,年报确实还未发布或未被市场消化。