因子研究

因子是量化选股的核心——用一个可计算的指标给股票打分,分数高的未来更可能跑赢。聚宽内置了数百个因子(质量、成长、动量、情绪、风险等),并提供完整的取值和分析 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_meanIC 均值(因子值与未来收益的相关性),>0.02 有效
ir信息比率(IC 的稳定性)
good_icIC 绝对值 >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)]
)

七、因子研究的工作流

一个完整的因子研究流程通常是:

  1. 查因子库get_all_factors() 找候选因子。
  2. 取因子值get_factor_values() 拉历史数据。
  3. 看因子看板get_factor_kanban_values() 快速评估有效性。
  4. 筛选 → 挑 IC 高、IR 稳定、回撤可控的因子。
  5. 组合 → 用 MaxScoreMaxFactorValue 喂给优化器落地。

因子有时效性,过去有效不代表未来有效;单因子不如多因子组合稳健。建议做 IC 衰减分析和样本外验证。

小结

聚宽因子库提供数百个现成因子:get_all_factors 查目录,get_factor_values 取数值,get_factor_kanban_values 看绩效。有效因子通过组合优化的 MaxScore / MaxFactorValue 落地为权重。到此,聚宽从研究环境、策略结构、数据交易到回测优化的完整链路已覆盖——左侧导航可随时回查任一章节。