🚀 AI 一键生成 joinquant 策略代码

JoinQuant 因子分析:使用 create_full_tear_sheet 生成全景报告

joinquant | 发布时间: 2025/12/19
以下内容由 EasyQuant 生成。

问题描述

怎样生成因子的全景分析报告图表?

解决方案

在聚宽(JoinQuant)平台中,生成因子全景分析报告图表主要依赖于 jqfactor 库。你需要先使用 analyze_factor 函数对因子进行计算和分析,然后调用返回对象的 create_full_tear_sheet 方法来绘制全景图表。

以下是具体的操作步骤和代码示例。

核心步骤

  1. 获取或定义因子数据:可以是聚宽因子库的内置因子,也可以是自定义的 Factor 类,或者是自行计算好的 DataFrame
  2. 执行单因子分析:使用 analyze_factor 函数进行回测分析。
  3. 生成全景报告:调用 create_full_tear_sheet 函数展示图表。

代码示例

请在聚宽的 研究环境 (Notebook) 中运行以下代码:

# -*- coding: utf-8 -*-
import pandas as pd
from jqfactor import analyze_factor, get_factor_values, get_index_stocks

# 1. 准备数据
# 设定分析的时间范围和股票池(例如沪深300)
start_date = '2023-01-01'
end_date = '2023-06-01'
universe = get_index_stocks('000300.XSHG')

# 获取因子数据(这里以市值因子 'market_cap' 为例)
# 注意:get_factor_values 返回的是一个字典,我们需要提取出具体的因子值 DataFrame
factor_data_dict = get_factor_values(
    securities=universe, 
    factors=['market_cap'], 
    start_date=start_date, 
    end_date=end_date
)
factor_data = factor_data_dict['market_cap']

# 2. 执行单因子分析
# analyze_factor 会计算因子的收益、IC、换手率等指标
# 参数说明:
# - factor: 因子值 DataFrame
# - industry: 行业分类标准,如 'jq_l1'
# - quantiles: 分位数数量,通常分为 5 层或 10 层
# - periods: 调仓周期,如 (1, 5, 10) 代表持有 1天、5天、10天
far = analyze_factor(
    factor=factor_data, 
    start_date=start_date, 
    end_date=end_date, 
    universe=universe,
    industry='jq_l1',       # 使用聚宽一级行业分类
    weight_method='mktcap', # 按市值加权
    quantiles=5,            # 分成 5 组
    periods=(1, 5, 10)      # 分析 1日、5日、10日 调仓周期的表现
)

# 3. 生成全景分析报告图表
# 这将绘制包括收益分析、IC分析、换手率分析等在内的一整套图表
far.create_full_tear_sheet(
    demeaned=False,      # 是否使用超额收益计算
    group_adjust=False,  # 是否进行行业中性化调整
    by_group=False,      # 是否按行业展示
    turnover_periods=None, 
    avgretplot=(5, 15),  # 因子预测天数范围
    std_bar=False        # 是否显示标准差
)

关键函数说明

1. analyze_factor

这是核心分析函数,它接受因子数据并进行回测计算。

  • 输入:可以是 pandas.DataFrame(因子值)、pandas.SeriesFactor 子类(自定义因子定义)。
  • 输出:返回一个分析对象(通常命名为 far),该对象包含了所有计算好的指标数据(如 IC 值、分位数收益等)。

2. create_full_tear_sheet

这是绘图函数,它会一次性输出以下几类图表:

  • 收益分析:累积收益图、分位数平均收益图、多空组合收益图。
  • IC 分析:IC 时间序列图、IC 分布直方图、IC QQ 图、月度 IC 热力图。
  • 换手率分析:各分位数换手率、自相关性图。

常见问题 Q&A

Q: 如果我只想看 IC 分析的图表,不想看所有的图表怎么办?
A: 分析对象提供了单独绘制特定模块图表的方法。例如,只看 IC 分析可以使用 far.create_information_tear_sheet(),只看收益分析可以使用 far.create_returns_tear_sheet()

Q: 代码运行后没有显示图表是什么原因?
A: 请确保你是在 研究环境 (Notebook) 中运行代码。回测环境主要用于策略逻辑的验证,不支持这种交互式的图表绘制。如果在 Notebook 中未显示,请检查是否正确导入了库且代码执行无报错。

Q: 如何分析我自己编写的自定义因子?
A: 你可以定义一个继承自 jqfactor.Factor 的类,实现 calc 方法,然后直接将这个类传递给 analyze_factorfactor 参数即可。系统会自动根据定义的逻辑计算因子值并进行分析。

Q: analyze_factor 中的 max_loss 参数是做什么的?
A: max_loss 默认为 0.25。它表示因重复值或 NaN 值太多而导致无效的因子值的最大允许占比。如果你的因子数据缺失严重超过这个比例,分析将会报错停止。如果数据本身覆盖率较低,可以适当调大此参数。