因子研究
因子是量化选股的核心——用一个可计算的指标给股票打分,分数高的未来更可能跑赢。聚宽内置了数百个因子(质量、成长、动量、情绪、风险等),并提供完整的取值和分析 API。本章讲清怎么查因子、取因子值、做因子分析。
一、因子是什么
因子本质上是一个「股票 → 数值」的映射。例如:
- PE 因子:每只股票的市盈率,PE 低的可能被低估。
- 动量因子:过去 N 天的涨幅,强者恒强。
- 质量因子:ROE 高的公司基本面好。
研究因子的核心问题是:**这个指标打分高的股票,未来是否真的跑赢?**聚宽的因子库和因子看板就是帮你回答这个问题的。
二、查看所有因子 — get_all_factors
聚宽因子库包含质量、基础、情绪、成长、风险、风格、技术、动量等大类,几百个因子:
from jqfactor import get_all_factors
df = get_all_factors()
# 列:factor(因子代码)、factor_intro(中文名)、category(分类)
返回一个 DataFrame,你可以按分类筛选:
# 筛选动量类因子
momentum_factors = df[df['category'] == 'momentum']
三、取因子值 — get_factor_values
拿到因子代码后,取具体数值:
from jqfactor import get_factor_values
factor_data = get_factor_values(
securities=['000001.XSHE', '000002.XSHE'],
factors=['Skewness60'], # 60 日收益偏度
start_date='2024-01-01',
end_date='2024-03-01'
)
# 返回 dict,key 是因子名,value 是 DataFrame(index=日期,column=股票)
df = factor_data['Skewness60']
每次请求的
因子数 × 股票数 × 交易日不超过 200000,数据量大时分批取。
四、因子看板 — get_factor_kanban_values
因子看板直接给你因子回测后的绩效指标(IC、夏普、收益、回撤等),不用自己写回测:
from jqfactor import get_factor_kanban_values
df = get_factor_kanban_values(
universe='hs300', # 股票池:hs300/zz500/zz1000
bt_cycle='month_3', # 周期:近 3 月/1 年/3 年/10 年
model='long_only', # 纯多头或多空
category=['quality', 'growth', 'momentum'], # 因子分类
skip_paused=False, # 是否过滤涨停/停牌
commision_slippage=0 # 0=无成本 1=佣金+税 2=再加滑点
)
返回的每行是一个因子的完整绩效摘要,关键列:
| 列 | 含义 |
|---|---|
ic_mean | IC 均值(因子值与未来收益的相关性),>0.02 有效 |
ir | 信息比率(IC 的稳定性) |
good_ic | IC 绝对值 >0.02 的占比 |
sharpe_5q | 五分组的夏普比率 |
annualized_return_1q / 5q | 第一/五分位的年化收益 |
max_drawdown_5q | 五分位最大回撤 |
turnover_ratio_5q | 换手率 |
IC(Information Coefficient)是因子值与未来收益的 Rank 相关系数。IC 均值 > 0.03 且 IR 高的因子,选股能力较强。
五、自定义因子
除了内置因子,你可以继承 Factor 类定义自己的因子,然后在组合优化中使用:
from jqfactor import Factor
# 定义因子:人气指标 5 日均值
class AR_M5(Factor):
name = 'ar_m5'
max_window = 5 # 取过去 5 天
dependencies = ['AR'] # 依赖的数据
def calc(self, data):
return data['AR'].mean()
六、因子在组合优化中的应用
把因子值作为打分,喂给 组合优化 的目标函数:
# 用因子值给股票打分
scores = pd.Series(
[...], # 因子值列表
index=stock_list
)
# 优化器:因子值大的给更高权重
weights = portfolio_optimizer(
date=context.previous_date,
securities=stock_list,
target=MaxScore(scores=scores),
constraints=[AnnualStdConstraint(limit=0.15)],
bounds=[Bound(0, 0.1)]
)
七、因子研究的工作流
一个完整的因子研究流程通常是:
- 查因子库 →
get_all_factors()找候选因子。 - 取因子值 →
get_factor_values()拉历史数据。 - 看因子看板 →
get_factor_kanban_values()快速评估有效性。 - 筛选 → 挑 IC 高、IR 稳定、回撤可控的因子。
- 组合 → 用
MaxScore或MaxFactorValue喂给优化器落地。
因子有时效性,过去有效不代表未来有效;单因子不如多因子组合稳健。建议做 IC 衰减分析和样本外验证。
小结
聚宽因子库提供数百个现成因子:get_all_factors 查目录,get_factor_values 取数值,get_factor_kanban_values 看绩效。有效因子通过组合优化的 MaxScore / MaxFactorValue 落地为权重。到此,聚宽从研究环境、策略结构、数据交易到回测优化的完整链路已覆盖——左侧导航可随时回查任一章节。