问题描述
我看有些策略里使用了类似sales_growth这样的因子,但在文档中未单独说明,只在风格因子计算中用到,请问是否我遗漏了,在哪里可以查到完整的所有因子说明?
另一个问题是,sales_growth表示五年营收增长率,那是否有因子表示三年或四年营收增长率?或说是否有以年为参数的该因子?
解决方案
您好!关于您在 JoinQuant 聚宽平台使用因子库时遇到的疑问,以下是详细的解答:
一、 在哪里可以查到完整的所有因子说明?
您并没有遗漏,聚宽的因子库包含了数百个因子,除了在文档中列出的部分常用因子外,您可以通过 API 直接获取完整的因子列表和说明。
您可以在研究环境或策略中使用 get_all_factors() 函数来获取聚宽因子库中所有的因子代码(code)、因子名称、因子分类及说明。
代码示例:
from jqfactor import get_all_factors
# 获取并打印所有因子信息
factors_df = get_all_factors()
print(factors_df)
输出的 pandas.DataFrame 将包含以下列:
factor: 因子 code(如sales_growth)factor_intro: 因子说明category: 因子分类名称(如style,basics,growth等)category_intro: 因子分类说明
此外,您也可以在聚宽官网的数据字典 -> 因子库页面查看详细的网页版说明。
二、 是否有表示三年或四年营收增长率的因子?
在聚宽的官方预设因子库中,sales_growth 被固定定义为5年营业收入增长率(过去 5 年每股营业收入关于[0,1,2,3,4]回归的斜率系数,除以均值)。
目前官方没有直接提供以年为参数的动态因子,也没有直接命名为 3 年或 4 年营收增长率的预设因子。官方提供的成长类基础因子中,通常只有同比(如 operating_revenue_growth_rate,即今年/去年-1)。
三、 如何自己实现三年或四年的营收增长率?
虽然官方没有直接提供,但聚宽平台提供了非常灵活的自定义因子功能。您可以继承 Factor 类,利用历史财务数据自己编写一个 3 年或 4 年的营收增长率因子。
在自定义因子时,可以通过在财务字段后加 _y1、_y2 等后缀来获取过去几年的年度财务数据。
自定义 3 年营收复合增长率因子示例:
from jqfactor import Factor
import numpy as np
class SalesGrowth3Y(Factor):
# 设置因子名称
name = 'sales_growth_3y'
# 设置获取数据的时间窗口长度
max_window = 1
# 依赖的数据:当前可见最新年度营收,以及3年前的年度营收
# operating_revenue_y 表示最新年度营收,operating_revenue_y3 表示3年前的年度营收
dependencies = ['operating_revenue_y', 'operating_revenue_y3']
def calc(self, data):
# 获取最新年度营收
rev_current = data['operating_revenue_y']
# 获取3年前年度营收
rev_3y_ago = data['operating_revenue_y3']
# 计算3年复合增长率 (CAGR) = (当前/3年前)^(1/3) - 1
# 注意处理分母为负数或0的情况,这里简单处理,实际应用中需更严谨的清洗
cagr = np.power(rev_current / rev_3y_ago, 1/3.0) - 1
# 返回 Series
return cagr.mean()
如何使用该自定义因子:
定义好之后,您可以像使用官方因子一样,通过 calc_factors 或在单因子分析 analyze_factor 中调用它:
from jqfactor import calc_factors
# 计算自定义因子值
securities = ['000001.XSHE', '600000.XSHG']
factor_values = calc_factors(securities, [SalesGrowth3Y()], start_date='2023-01-01', end_date='2023-01-05')
print(factor_values['sales_growth_3y'])
总结:
- 使用
get_all_factors()随时查询最新最全的因子库。 - 遇到官方未提供的特定周期因子,利用
Factor类和_y1,_y2财务数据后缀进行自定义计算是最佳实践。