问题描述
解决方案
在聚宽(JoinQuant)平台中,生成因子全景分析报告图表主要依赖于 jqfactor 库。你需要先使用 analyze_factor 函数对因子进行计算和分析,然后调用返回对象的 create_full_tear_sheet 方法来绘制全景图表。
以下是具体的操作步骤和代码示例。
核心步骤
- 获取或定义因子数据:可以是聚宽因子库的内置因子,也可以是自定义的
Factor类,或者是自行计算好的DataFrame。 - 执行单因子分析:使用
analyze_factor函数进行回测分析。 - 生成全景报告:调用
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.Series或Factor子类(自定义因子定义)。 - 输出:返回一个分析对象(通常命名为
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_factor 的 factor 参数即可。系统会自动根据定义的逻辑计算因子值并进行分析。
Q: analyze_factor 中的 max_loss 参数是做什么的?
A: max_loss 默认为 0.25。它表示因重复值或 NaN 值太多而导致无效的因子值的最大允许占比。如果你的因子数据缺失严重超过这个比例,分析将会报错停止。如果数据本身覆盖率较低,可以适当调大此参数。