问题描述
咨询一下:
能否在研究环境里使用 jqfactor_analyzer?
如果不能,不支持在研究环境使用的原因是啥呢?
解决方案
在 JoinQuant(聚宽)的研究环境中,是可以进行单因子分析的,但您需要使用的是聚宽官方内置的 jqfactor 模块,而不是外部开源的 jqfactor_analyzer 库。
为什么不直接使用 jqfactor_analyzer?
jqfactor_analyzer 通常指的是聚宽之前开源在 GitHub 上的单因子分析工具包(类似于 Alphalens)。但在聚宽官方的线上研究环境中,官方已经将其深度集成并优化为内置的 jqfactor 模块。
使用内置 jqfactor 的优势在于:
- 数据无缝对接:直接与聚宽的底层数据库(行情、财务、因子库)打通,无需手动清洗和对齐数据。
- 性能优化:针对聚宽的服务器环境进行了底层优化,计算速度更快,且避免了内存超限问题。
- API 统一:与聚宽的其他 API(如
get_factor_values)完美兼容。
如何在研究环境中使用 jqfactor 进行因子分析?
在研究环境中,您可以通过引入 jqfactor 库中的 analyze_factor 函数来便捷地进行单因子分析。以下是两种常见的使用场景示例:
场景一:分析聚宽因子库中已有的因子
如果您想分析聚宽因子库中现成的因子(例如:60日偏度 Skewness60),可以直接获取因子值并传入分析函数:
# 导入需要的数据库
from jqfactor import analyze_factor
from jqfactor import get_factor_values
from jqdata import get_index_stocks
# 1. 获取因子值 (pandas.DataFrame 格式)
factor_data = get_factor_values(
securities=get_index_stocks('000300.XSHG'),
factors=['Skewness60'],
start_date='2018-01-01',
end_date='2018-03-01'
)['Skewness60']
# 2. 使用获取的因子值进行单因子分析
far = analyze_factor(
factor=factor_data,
start_date='2018-01-01',
end_date='2018-03-01',
weight_method='mktcap',
industry='jq_l1',
quantiles=5,
periods=(1, 5, 20),
max_loss=0.2
)
# 3. 打印或绘制分析结果
# 获取按分位数分组加权平均因子收益
print(far.mean_return_std_by_quantile)
# 绘制全部分析图表
far.create_full_tear_sheet()
场景二:分析自定义因子
如果您自己编写了一个因子逻辑,可以通过继承 Factor 类来定义,并直接传入 analyze_factor:
# 导入需要的数据库
from jqfactor import analyze_factor
from jqfactor import Factor
# 1. 自定义因子的类 (例如:5日均线因子)
class MA5(Factor):
name = 'ma5'
max_window = 5
dependencies = ['close']
def calc(self, data):
return data['close'][-5:].mean()
# 2. 使用自定义因子的类进行单因子分析
far = analyze_factor(
factor=MA5,
start_date='2018-01-01',
end_date='2018-03-01',
weight_method='mktcap',
universe='000300.XSHG',
industry='jq_l1',
quantiles=5,
periods=(1, 5, 20)
)
# 3. 获取分析结果
# 查看月度信息系数 (IC)
print(far.ic_monthly)
# 绘制因子预测能力分析图
far.create_event_returns_tear_sheet()
总结
您完全可以在聚宽研究环境中进行专业的单因子分析,只需将代码中的 jqfactor_analyzer 替换为官方内置的 jqfactor 模块,并使用 analyze_factor 函数即可。这不仅能满足您的需求,还能获得更好的性能和数据支持。