🚀 AI 一键生成 joinquant 策略代码

为什么 JoinQuant 的 get_fundamentals 获取的财务数据与同花顺不一致?

joinquant | 发布时间: 2026/5/20
以下内容由 EasyQuant 生成。

问题描述

貌似get_fundamentals获取的数据很不准确???

各位大神,我请教一个问题:
貌似get_fundamentals获取的数据很不准确,是我的获取方法错误???

比如,假如我要获取 滨江集团最近公布的净利润。

我在同花顺行情软件中查询的结果:
财报统计的季度的最后一天(2015-09-30),净利润(万元):68,480.78
而用get_fundamentals获取的结果:
q = query(
income.code, # 股票代码
income.pubDate, # 公司发布财报日期
income.statDate, # 财报统计的季度的最后一天, 比如2015-03-31, 2015-06-30
income.net_profit # 净利润(元)
).filter(
valuation.code=='002244.XSHE'
)
df = get_fundamentals(q, date='2016-04-15')
df.head()

code pubDate statDate net_profit
002244.XSHE 2015-10-30 2015-09-30 354747328

明显不一样,我是哪里错了???

解决方案

您好!您获取的数据并没有错,导致数据不一致的原因是统计口径不同(单季度数据 vs 累计报告期数据)

详细解析

  1. 同花顺等行情软件的默认显示(累计数据)
    上市公司公布的财报分为一季报、半年报(中报)、三季报和年报。同花顺等财经网站默认展示的是报告期累计数据。您查询的 2015-09-30 是三季报,同花顺显示的 68,480.78 万元 是滨江集团在 2015年第一季度 + 第二季度 + 第三季度的前三季度累计净利润

  2. JoinQuant 平台的默认返回(单季度数据)
    考虑到量化分析中,单季度数据更能真实反映公司在该季度的经营状况(避免了历史季度的平滑效应),JoinQuant 的 get_fundamentals 默认查询和返回的财务指标数据是单季度的。因此,您获取到的 354,747,328 元(约 3.54 亿元)仅仅是滨江集团在 2015年第三季度(7月-9月) 这一个季度的净利润。

如何验证?

您可以在同花顺软件中,将财务报表的统计方式从“按报告期”切换为**“按单季度”**统计,您会发现 2015年第三季度的单季净利润与您在 JoinQuant 获取到的 354,747,328 是一致的。

如果我需要获取累计数据怎么办?

如果您在策略中确实需要使用前三季度的累计净利润,可以通过以下方式解决:

方法一:自行累加单季度数据
您可以分别获取该年度 Q1、Q2、Q3 的单季度净利润,然后在代码中进行相加。

# 示例:获取 2015年前三个季度的单季净利润并求和
q = query(
    income.statDate,
    income.net_profit
).filter(
    income.code == '002244.XSHE'
)

# 分别获取 Q1, Q2, Q3 的数据
df_q1 = get_fundamentals(q, statDate='2015q1')
df_q2 = get_fundamentals(q, statDate='2015q2')
df_q3 = get_fundamentals(q, statDate='2015q3')

# 累加净利润
total_net_profit = df_q1['net_profit'][0] + df_q2['net_profit'][0] + df_q3['net_profit'][0]
print("前三季度累计净利润:", total_net_profit)

方法二:使用 TTM 数据(滚动十二个月)
在量化选股中,通常更推荐使用 TTM(Trailing Twelve Months)数据,它能有效消除季节性因素。JoinQuant 提供了 net_profit_ttm 字段,表示过去12个月的净利润之和。

总结

在进行量化财务数据分析时,一定要区分单季度数据(Quarterly)累计数据(Cumulative/YTD)滚动十二个月数据(TTM)。JoinQuant 默认提供单季度数据是为了方便构建更精细的量化因子。