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

如何在 JoinQuant 聚宽平台使用 Factor 类自定义因子并进行计算?

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

问题描述

请问 jqfactor 里的 Factor 类有没有文档?

看一些比较古早的帖子,里面有些代码通过继承 Factor 类来自己定义因子,然后用 calc_factors 计算,不过搜了下目前的 api 文档好像没有说明,想问问这块有没有文档?

解决方案

在 JoinQuant 聚宽平台的 API 文档中,关于 jqfactor 里的 Factor 类以及 calc_factors 函数是有详细说明的。这部分内容主要集中在**“因子定义和计算”**章节。以下为您整理的详细文档和使用指南:

1. 因子定义 (继承 Factor 类)

用户需要实现一个自定义因子的类,继承 Factor 类,并实现 calc 方法。max_windowdependencies 定义了在 calc 中可以获取到的数据,calc 实现因子的算法。

各属性的含义:

  • name:因子的名称,不能与基础因子冲突。
  • max_window:获取数据的最长时间窗口,返回的是日级别的数据。
  • dependencies:依赖的基础因子名称(如价量信息、财务数据、行业因子等)。

calc 方法说明:

  • calc 的返回值即每天的因子值。calc 需要返回一个 pandas.Series,index 是股票代码,value 是因子值。
  • 可以通过 data 参数获取通过 max_windowdependencies 定义的数据。data 是一个 dict,key 是 dependencies 中的因子名称,value 是 pandas.DataFrame

示例代码:

from jqfactor import Factor
import numpy as np

class MA5(Factor):
    name = 'ma5'
    # 每天获取过去五日的数据
    max_window = 5
    # 获取的数据是收盘价
    dependencies = ['close']
    
    def calc(self, data):
        # data['close'] 是一个 DataFrame,包含过去5天的收盘价
        return data['close'][-5:].mean()

2. 因子计算 (使用 calc_factors)

在回测以及研究中,可以通过调用 jqfactor 中的 calc_factors 函数来计算自定义的因子值。

API 接口:

calc_factors(securities, factors, start_date, end_date, use_real_price, skip_paused)

参数说明:

  • securities: 股票代码列表。
  • factors: 因子(object)列表,即您实例化的自定义因子对象。
  • start_date: 开始日期。
  • end_date: 结束日期(在回测中使用时,注意应该保证截止日期小于 context.current_dt)。
  • use_real_price: 是否使用真实价格。默认为 False,表示使用后复权价格。
  • skip_paused: 是否跳过停牌。默认为 False。

返回值:
返回一个 dict 对象, key 是各 factors 的 name,value 是一个 pandas.DataFrame,DataFrame 的 index 是日期,column 是股票代码。

3. 完整示例

结合自定义因子和计算函数,以下是一个完整的示例:

from jqfactor import Factor, calc_factors
import numpy as np

# 1. 定义因子
class ALPHA013(Factor):
    name = 'alpha013_name'
    max_window = 1
    dependencies = ['high','low','volume','money']
    
    def calc(self, data):
        high = data['high']
        low = data['low']
        vwap = data['money']/data['volume']
        return (np.power(high*low, 0.5) - vwap).mean()

# 2. 定义股票池
securities = ['600000.XSHG', '600016.XSHG']

# 3. 计算因子值
factors = calc_factors(
    securities=securities, 
    factors=[ALPHA013()], 
    start_date='2017-01-01', 
    end_date='2017-02-01',  
    use_real_price=False, 
    skip_paused=False
)

# 4. 查看因子值
print(factors['alpha013_name'].head())

通过这种方式,您可以非常灵活地利用聚宽底层的数据(如财务、量价等)来构建复杂的自定义因子,并将其无缝接入到单因子分析或多因子选股策略中。