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

为什么 get_factor_values 获取的 PEG 值与手动计算结果不同?

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

问题描述

get_factor_values获得的PEG值的问题

老师,您好。以达威股份300535.XSHE,截止2021年9月23日,通过get_factor_values,获得的PEG值为0.077736。查看了PEG的公式(市盈率相对盈利增长比率)= PE / (归母公司净利润(TTM)增长率 * 100) # 如果 PE 或 增长率为负,则为 nan,我用get_fundamentals_continuously查询到的该股的pE值为20.4712,归母公司净利润增长率111.03%,PEG为0.184375,与因子值0.077736不符,为什么?谢谢

解决方案

您好!在 JoinQuant 平台上,使用 get_factor_values 获取的因子值与手动通过财务数据计算的值出现差异,通常是由计算口径(特别是 TTM 的定义)数据快照时间引起的。针对您提到的达威股份(300535.XSHE)PEG 因子值的差异,主要有以下几个排查方向:

1. 归母净利润(TTM)增长率的计算口径差异

根据聚宽因子库的定义,PEG 的公式为:
PEG = PE / (归母公司净利润(TTM)增长率 * 100)

其中,归母公司净利润(TTM)增长率(因子代码:np_parent_company_owners_growth_rate)的严格计算公式是:
[今年归属于母公司所有者的净利润(TTM) / 去年同期归属于母公司所有者的净利润(TTM)] - 1

您手动查询到的净利润增长率 111.03%,很可能是单季度同比或者累计净利润同比(例如中报公布的累计同比),而不是严格的 TTM 同比。TTM(滚动十二个月)的计算需要将过去四个季度的净利润相加,然后再与往前推一年的四个季度净利润之和进行对比。这通常是导致手动计算与因子库结果差异最大的地方。

2. PE (市盈率) 的取值差异

因子库在计算 PEG 时,分子使用的 PE 是 PE(TTM)。您通过 get_fundamentals_continuously 查询到的 PE 值为 20.4712,请确认查询的是 valuation.pe_ratio(市盈率 TTM)还是 valuation.pe_ratio_lyr(静态市盈率)。如果使用的是静态市盈率,也会导致结果不一致。

3. 因子库的数据更新机制

聚宽因子库文档中明确指出:

  • “涉及到财务数据的因子,使用对应日期所能获取到的最新一期单季度数据进行计算”
  • “频率为天,每天05:00更新前一天数据”

这意味着 9月23日 获取的因子值,实际上是基于 9月22日 收盘后的市值和当时能看到的最新财报(通常是中报)计算出来的快照。如果您手动查询时传入的日期参数或逻辑有微小偏差,市值(影响 PE)就会不同。

💡 验证建议与排查代码

为了准确找出差异来源,建议您直接拉取因子库中用于计算 PEG 的两个底层因子:PEnp_parent_company_owners_growth_rate,看看因子库底层的数值究竟是多少。

您可以在研究环境中运行以下代码进行验证:

from jqfactor import get_factor_values

# 获取 2021-09-23 当天的底层因子值
factors = ['PEG', 'PE', 'np_parent_company_owners_growth_rate']
data = get_factor_values(securities=['300535.XSHE'], 
                         factors=factors, 
                         start_date='2021-09-23', 
                         end_date='2021-09-23')

peg_val = data['PEG'].iloc[0, 0]
pe_val = data['PE'].iloc[0, 0]
growth_val = data['np_parent_company_owners_growth_rate'].iloc[0, 0]

print(f"因子库 PEG: {peg_val}")
print(f"因子库 PE: {pe_val}")
print(f"因子库 归母净利润TTM增长率: {growth_val * 100}%")

# 验证公式
calculated_peg = pe_val / (growth_val * 100)
print(f"底层因子相除计算的 PEG: {calculated_peg}")

通过上述代码,您大概率会发现因子库中的 np_parent_company_owners_growth_rate 并非 111.03%,而是另一个数值(大约在 263% 左右,假设 PE 为 20.47 的话)。在量化回测中,建议直接使用 get_factor_values 提供的因子值,因为它们经过了严格的截面清洗和对齐,能有效避免未来函数和口径不一的问题。