3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
关于您在 JoinQuant 平台上对“归因分析 -> 因子分析 -> 风险分析”的疑问,解答如下:
JoinQuant 平台使用的是 类 Barra CNE5 风险模型。根据官方文档说明,其横截面线性回归的截距项包含:10个风格因子、11个行业因子(jq_l1) 和 1个国家因子。这 10 个风格因子(市值、非线性市值、杠杆、账面市值比、成长、动量、盈利能力、贝塔、残差波动率、流动性)与 MSCI Barra CNE5 模型的标准十大风格因子结构完全一致。
您的理解基本是正确的。在 JoinQuant 的风险分析中,投资组合的风险因子暴露度计算逻辑如下:
Exp_portfolio = sum(Weight_i * FactorLoading_i)。组合风险暴露 - 基准(HS300)风险暴露。如果差值接近0,说明策略组合对该风险因子是风险中性的。在 JoinQuant 的研究环境中,虽然没有直接提供一键生成 Web 端完整归因图表的单一函数,但您可以通过 jqfactor 库和 get_backtest 接口自行提取和计算这些时间序列数据:
获取回测的整体风险指标:
您可以使用 get_backtest 获取回测对象,然后调用相关方法:
from jqdata import *
gt = get_backtest('您的回测ID')
risk_dict = gt.get_risk() # 获取总的风险指标
period_risks = gt.get_period_risks() # 获取分月计算的风险指标
获取因子回报率时间序列 (Factor Returns Time Series):
您可以使用 jqfactor 库中的 analyze_factor 进行单因子分析,并提取因子的每日收益率:
from jqfactor import analyze_factor, get_factor_values
# 1. 获取风险因子(例如市值因子 size)的因子值
factor_data = get_factor_values(securities=您的股票池, factors=['size'], start_date='2023-01-01', end_date='2023-12-31')['size']
# 2. 进行因子分析
far = analyze_factor(factor=factor_data, weight_method='mktcap', industry='jq_l1')
# 3. 计算因子收益率(Factor Returns)
# calc_factor_returns 返回按因子值加权组合的每日收益
factor_returns = far.calc_factor_returns(demeaned=True, group_adjust=False)
获取投资组合在风险因子上的回报率 (Portfolio Factor PnL):
要计算投资组合在特定风险因子上的收益贡献,您需要结合组合的每日持仓权重和因子的每日收益率:
gt.get_positions() 获取回测每天的持仓明细,计算出每天每只股票的实际权重。get_factor_values 获取对应风险因子的每日 Factor Loading。Daily_Exposure = sum(Weight_i * FactorLoading_i)。Daily_Exposure * 因子当日收益率 (Factor Return)。