🚀 AI 一键生成 joinquant 策略代码

JoinQuant聚宽平台回测调用自定义因子指南

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

问题描述

回测如何调用研究中定义的因子

策略回测如何调用研究中的自定义因子?
1.我目前看到因子分析中只有因子分析,没有调用示例
2.回测教程中只有用看板因子的示例,那自定义的要怎么用?
3.或者说哪里有讲解

主要是平时在研究中的因子,要实际使用,后续可以提交模拟盘
应该是可以 from ? import ?

解决方案

在 JoinQuant(聚宽)平台上,将研究环境中定义的自定义因子应用到回测或模拟交易中,主要有两种方式:

方法一:直接在回测代码中定义并计算因子

你可以直接将自定义因子的类定义在回测代码中,然后使用 jqfactor 库提供的 calc_factors 函数来计算因子值。

代码示例:

# 导入聚宽函数库
import jqdata
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()

def initialize(context):
    set_benchmark('000300.XSHG')
    set_option('use_real_price', True)
    g.security = ['000001.XSHE', '000002.XSHE']
    run_daily(market_open, time='09:30')

def market_open(context):
    # 2. 在需要的时候计算因子值
    # 注意:end_date 必须小于 context.current_dt,通常使用 context.previous_date
    factors = calc_factors(
        securities=g.security, 
        factors=[ALPHA013()], 
        start_date=context.previous_date, 
        end_date=context.previous_date,  
        use_real_price=False, 
        skip_paused=False
    )
    
    # 获取计算出的因子值
    alpha_values = factors['alpha013_name']
    print(alpha_values)
    
    # 根据因子值进行交易逻辑...

方法二:将因子保存在研究目录的 .py 文件中并导入

如果你在研究环境中编写了很长的因子代码,不想全部复制到回测代码中,你可以利用聚宽的自定义 Python 库功能。

步骤 1:在研究环境中创建 .py 文件
在“投资研究”的根目录下,新建一个 Python 文件,例如命名为 my_factors.py,将你的因子类写在里面:

# my_factors.py
from jqfactor import Factor
import numpy as np

class MyCustomFactor(Factor):
    name = 'my_custom_factor'
    max_window = 5
    dependencies = ['close']
    
    def calc(self, data):
        return data['close'][-5:].mean()

步骤 2:在回测代码中导入并使用
在你的回测或模拟交易代码的开头,使用 import 导入你刚才创建的文件:

import jqdata
from jqfactor import calc_factors
# 导入你研究根目录下的自定义库
from my_factors import MyCustomFactor

def initialize(context):
    set_benchmark('000300.XSHG')
    set_option('use_real_price', True)
    g.security = ['000001.XSHE', '000002.XSHE']
    run_daily(market_open, time='09:30')

def market_open(context):
    # 实例化并计算导入的因子
    factors = calc_factors(
        securities=g.security, 
        factors=[MyCustomFactor()], 
        start_date=context.previous_date, 
        end_date=context.previous_date
    )
    
    factor_values = factors['my_custom_factor']
    print(factor_values)

注意事项:

  1. 避免未来函数:在回测中调用 calc_factors 时,end_date 参数千万不要传入 context.current_dt(当天的逻辑时间),应该传入 context.previous_date(前一个交易日),否则会引入未来数据。
  2. 文件路径:使用 import 导入时,.py 文件必须放在研究环境的根目录下,目前暂不支持导入子目录中的文件(例如 import a.b.c)。
  3. 性能考虑calc_factors 每次调用都会进行计算,如果因子计算非常复杂,建议在 before_trading_start 中计算好当天的因子值并存入全局变量 g 中,然后在 handle_data 或定时运行函数中使用。