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

JoinQuant 策略环境中直接调用聚宽因子库因子的方法与示例

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

问题描述

请问策略环境里,可以直接调用聚宽因子库的因子吗?

在策略环境中:

# 获取因子值
# get_factor_values 有三个参数,context、因子列表、股票池;
# 例如: factor_values = get_factor_values(context, [gross_profitability()], universe)
因子列表里用的因子都是需要额外定义 Class才能使用,请问可以直接调用聚宽因子库里的因子吗?

如果可以的话 请给一个sample,谢谢。

解决方案

在 JoinQuant 的策略环境中,完全可以直接调用聚宽因子库中已经提供好的因子,而不需要你自己去额外定义 Class。

你只需要使用 jqfactor 模块中的 get_factor_values 函数,并在 factors 参数中传入你想要获取的**因子名称(字符串格式)**即可。

get_factor_values 函数说明

get_factor_values(securities, factors, start_date=None, end_date=None, count=None)
  • securities: 股票池,单只股票(字符串)或一个股票列表。
  • factors: 因子名称,单个因子(字符串)或一个因子列表。聚宽因子库中的因子名称可以通过 get_all_factors() 查看。
  • start_date: 开始日期,字符串或 datetime 对象,与 count 参数二选一。
  • end_date: 结束日期,字符串或 datetime 对象。
  • count: 截止 end_date 之前交易日的数量(含 end_date 当日),与 start_date 参数二选一。

策略环境中的调用示例 (Sample)

下面是一个在策略环境中直接调用聚宽因子库因子(例如:Skewness60net_profit_ratio)的完整示例:

# 导入聚宽函数库
import jqdata
# 导入获取因子的函数
from jqfactor import get_factor_values

def initialize(context):
    # 设定沪深300作为基准
    set_benchmark('000300.XSHG')
    # 开启动态复权模式(真实价格)
    set_option('use_real_price', True)
    
    # 设定要操作的股票池,这里以平安银行和万科A为例
    g.stocks = ['000001.XSHE', '000002.XSHE']
    
    # 每天开盘前运行
    run_daily(before_market_open, time='09:00')

def before_market_open(context):
    # 获取前一个交易日的日期
    yesterday = context.previous_date
    
    # 我们想要获取的因子列表(直接使用聚宽因子库中的因子名称字符串)
    # Skewness60: 个股收益的60日偏度 (风险因子)
    # net_profit_ratio: 销售净利率 (质量因子)
    factor_list = ['Skewness60', 'net_profit_ratio']
    
    # 调用 get_factor_values 获取因子值
    # 注意:为了避免未来函数,end_date 使用前一个交易日 (yesterday)
    factor_data = get_factor_values(securities=g.stocks, 
                                    factors=factor_list, 
                                    end_date=yesterday, 
                                    count=1)
    
    # factor_data 是一个字典,key 是因子名称,value 是 pandas.DataFrame
    # 查看 Skewness60 因子值
    skewness_df = factor_data['Skewness60']
    log.info("\n=== Skewness60 因子值 ===\n%s" % skewness_df)
    
    # 查看 net_profit_ratio 因子值
    net_profit_df = factor_data['net_profit_ratio']
    log.info("\n=== net_profit_ratio 因子值 ===\n%s" % net_profit_df)
    
    # 你可以根据获取到的因子值进行后续的选股或调仓逻辑
    # 例如:获取平安银行昨天的销售净利率
    # pa_net_profit = net_profit_df['000001.XSHE'].iloc[0]
    # log.info("平安银行销售净利率: %s" % pa_net_profit)

总结

  1. 不需要自定义 Class:只要是聚宽因子库里有的因子,直接传字符串名字就行。
  2. 注意避免未来函数:在策略中调用时,end_date 最好传入 context.previous_date,以获取前一个交易日的因子值,避免使用当天的未知数据。
  3. 返回值结构:返回的是一个字典,键是因子名,值是 DataFrame(行是日期,列是股票代码)。