🚀 AI 一键生成 joinquant 策略代码
立即体验
👉 AI 生成代码 👈

JoinQuant 聚宽平台获取因子收益率数据指南(附代码示例)

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

问题描述

请问有因子收益率数据吗?

API找了半天没找到,想要因子收益率数据做组合风格归因,是收益率数据,不是因子数据,谢谢!

解决方案

您好!在 JoinQuant(聚宽)平台的 API 中,目前并没有直接提供一个单一函数来直接拉取现成的“每日因子收益率时间序列”(例如直接获取 Barra 10大风格因子的每日纯因子收益率)。平台提供的 get_factor_values 获取的是因子暴露度(因子值)

但是,如果您需要因子收益率数据来进行组合风格归因,可以通过以下几种方法在聚宽平台上计算和获取:

方法一:使用 analyze_factor 工具计算每日因子收益率(推荐)

聚宽提供了强大的单因子分析工具 analyze_factor。您可以通过传入因子值,让系统帮您计算出按因子值加权组合的每日收益率,这在很大程度上可以作为该因子的收益率序列使用。

具体使用的是 far.calc_factor_returns() 方法:

from jqfactor import analyze_factor, get_factor_values
from jqdata import get_index_stocks

# 1. 获取沪深300成分股的市值因子(size)暴露度
stock_pool = get_index_stocks('000300.XSHG')
factor_data = get_factor_values(securities=stock_pool, 
                                factors=['size'],
                                start_date='2023-01-01', 
                                end_date='2023-03-01')['size']

# 2. 实例化单因子分析对象
far = analyze_factor(factor=factor_data, 
                     start_date='2023-01-01', 
                     end_date='2023-03-01', 
                     weight_method='mktcap', 
                     industry='jq_l1', 
                     quantiles=5, 
                     periods=(1,))

# 3. 计算按因子值加权组合每日收益(即因子每日收益率)
# demeaned=True 表示对权重去均值,构建 cash-neutral 多空组合
# group_adjust=True 表示行业中性化
factor_returns = far.calc_factor_returns(demeaned=True, group_adjust=False)

print(factor_returns.head())

注:这种方法计算的是基于因子值构建的多空组合收益率,是因子收益率的一种常见代理。

方法二:通过横截面回归自行计算纯因子收益率(进阶,归因标准做法)

如果您是在做严格的 Barra 风格归因或 Fama-French 归因,标准的做法是:每天用所有股票的下一期收益率对当期的各个因子暴露度(风格因子+行业因子)进行多元横截面回归(Cross-Sectional Regression)。回归得到的系数(Coefficients)就是当期的纯因子收益率(Pure Factor Returns)

虽然聚宽没有直接提供回归后的系数序列,但您可以利用聚宽的数据自己快速实现:

  1. 使用 get_factor_values 获取您需要的风格因子(如 size, beta, momentum 等)。
  2. 使用 get_price 获取股票的每日收益率。
  3. 使用 statsmodelssklearn 每天做一次 WLS(加权最小二乘法,通常以市值的平方根作为权重)回归。
import pandas as pd
import statsmodels.api as sm
from jqfactor import get_factor_values

# 伪代码示例:单日横截面回归获取因子收益率
# 假设 df 包含了当天的因子暴露度 (size, beta) 和下一天的股票收益率 (next_ret)
# df = pd.DataFrame({'size': [...], 'beta': [...], 'next_ret': [...]})

X = df[['size', 'beta']] # 因子暴露度
X = sm.add_add_constant(X) # 添加截距项(通常代表市场收益)
Y = df['next_ret']       # 股票收益率

# 进行普通最小二乘回归 (实际应用中建议用市值加权的 WLS)
model = sm.OLS(Y, X, missing='drop')
results = model.fit()

# 回归系数即为当天的因子收益率
daily_factor_returns = results.params 
print(daily_factor_returns)

将上述过程在时间序列上循环,即可得到您需要的因子收益率矩阵,用于组合的绩效归因。

方法三:获取因子看板的统计收益率

如果您不需要每日的时间序列,只是想看某个因子在过去一段时间的整体年化收益率或累计收益率,可以使用 get_factor_kanban_values

from jqfactor import get_factor_kanban_values

# 获取纯多头组合下,质量类因子的表现
df = get_factor_kanban_values(universe='hs300',
                              bt_cycle='year_1',
                              model='long_only',
                              category=['quality'])

# 结果中包含 annualized_return_1q (一分位数年化收益率) 等字段
print(df[['code', 'annualized_return_1q', 'annualized_return_5q']])

总结:对于专业的组合风格归因,建议您提取 get_factor_values 的因子暴露度数据,结合股票日收益率,在研究环境中自行编写横截面回归代码来提取纯因子收益率序列,这样最符合您的定制化归因需求。