🚀 AI 一键生成 joinquant 策略代码
立即体验
👉 AI 生成代码 👈

JoinQuant 平台 indicator 表中增长率指标(扭亏为盈)的计算逻辑

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

问题描述

indicator表增长率的计算方式问题

比如inc_net_profit_year_on_year,inc_revenue_year_on_year,inc_net_profit_to_shareholders_year_on_year这些增长率指标,在
基期数据为负,报告期为正时,也就是企业扭亏为盈时,如何计算的呢?是用如下公式计算的么?:
当基期数据为负数时,公式:亏损增长率=[1-(报告期水平/基期水平)]*100%,应用于企业亏损状态或亏转盈状态。
相当于对基期数据取了绝对值。

解决方案

是的,您的理解是非常准确的。

在 JoinQuant(聚宽)的财务指标(indicator 表)中,对于各类同比增长率指标(如 inc_net_profit_year_on_year 净利润同比增长率、inc_revenue_year_on_year 营业收入同比增长率等),当遇到基期数据为负数(例如去年同期亏损,今年扭亏为盈,或者今年继续亏损但亏损减少)的情况时,为了保证计算结果在经济学上具有合理的解释意义,底层计算逻辑确实相当于对基期数据取了绝对值

1. 公式推导与等价性

常规的增长率计算公式为:

增长率 = (报告期水平 - 基期水平) / 基期水平 * 100%

如果基期为负数,直接套用上述公式会导致符号反转(例如扭亏为盈反而算出负的增长率)。因此,量化平台和财务软件通用的修正公式为:

修正增长率 = (报告期水平 - 基期水平) / ABS(基期水平) * 100%

这与您提到的公式在数学上是完全等价的。我们可以推导一下,当基期水平 < 0 时,ABS(基期水平) = -基期水平

修正增长率 = (报告期水平 - 基期水平) / (-基期水平)
= -(报告期水平 / 基期水平) + (基期水平 / 基期水平)
= 1 - (报告期水平 / 基期水平)

所以,您提到的公式 [1 - (报告期水平 / 基期水平)] * 100% 是完全正确的。

2. 具体案例演示

为了更直观地理解,我们来看两个常见的基期为负的场景:

场景 A:扭亏为盈

  • 基期(去年同期)净利润:-100 万
  • 报告期(本期)净利润:50 万
  • 计算过程:(50 - (-100)) / ABS(-100) = 150 / 100 = 150%
  • 使用您的公式:1 - (50 / -100) = 1 - (-0.5) = 150%
  • 经济意义:企业不仅填平了 100 万的亏损,还额外赚了 50 万,业绩大幅正增长。

场景 B:亏损减少(依然亏损)

  • 基期(去年同期)净利润:-100 万
  • 报告期(本期)净利润:-20 万
  • 计算过程:(-20 - (-100)) / ABS(-100) = 80 / 100 = 80%
  • 使用您的公式:1 - (-20 / -100) = 1 - 0.2 = 80%
  • 经济意义:虽然还在亏损,但亏损额减少了 80 万,业绩呈现正向改善(增长率为正)。

3. 如何在 JoinQuant 中验证?

如果您在编写策略时对某个具体的异常高增长率存疑,可以通过 get_fundamentals 函数同时拉取 income 表(利润表绝对值)和 indicator 表(财务指标)进行交叉验证:

from jqdata import *

# 查询某只股票的净利润绝对值和同比增长率
q = query(
    income.code,
    income.net_profit, # 净利润绝对值
    indicator.inc_net_profit_year_on_year # 净利润同比增长率
).filter(
    income.code == '000001.XSHE'
)

# 获取数据进行对比
df = get_fundamentals(q, statDate='2020q1')
print(df)

总结:在处理财务数据时,JoinQuant 已经为您处理好了基期为负时的数学陷阱,您可以放心地直接使用 indicator 表中的增长率字段进行选股或因子计算。