精华帖子

基于 ICIR 动态加权的多因子行业中性选股

由bq5973r5创建,最终由bq5973r5 被浏览 21 用户

1. 策略概述

本策略属于多因子选股 + 动态因子权重框架。核心思想是:

  • 同一时间,不同因子对未来收益的预测能力会变化;
  • 用历史“因子-未来收益”的相关性(IC)衡量因子有效性;
  • 用 IC 的稳定性(ICIR = IC均值 / IC标准差)决定因子权重;
  • 将多个因子按权重线性合成为综合得分(score),在股票池内做 TopN 等权持有,并按固定频率再平衡。

该框架的优势在于:权重不是固定拍脑袋,而是由历史有效性动态驱动;同时通过行业分组做因子分位排名,降低行业结构差异带来的偏差。

2. 数据与股票池(Universe)

2.1 数据源

策略使用 BigQuant 数据表 cn_stock_prefactors,主要字段包括:

  • 行情:close
  • 估值:pe_ttm, pb
  • 财务质量:roe_avg_ttm
  • 成长:net_profit_yoy_ttm, operating_revenue_yoy_ttm
  • 市值:float_market_cap
  • 行业:sw2021_level2(申万2021二级行业)
  • 其他过滤:st_status, suspended, list_days

2.2 交易标的范围

仅选择以下代码前缀的股票:

  • 300%.SZ 或 301%.SZ\n即:创业板相关标的(包含 300/301 代码段)。

2.3 基础可交易过滤(硬约束)

在原始股票池上进行过滤,确保可交易性与基本面质量:

  • 非 ST:st_status = 0
  • 非停牌:suspended = 0
  • 流通市值上限:float_market_cap <= 1,500,000,000
  • 上市天数:list_days > 90
  • 成长性:
    • net_profit_yoy_ttm > 0.3(净利润TTM同比 > 30%)
    • operating_revenue_yoy_ttm > 0.3(营收TTM同比 > 30%)
  • 估值合理区间:
    • 0 < pe_ttm < 50
    • 0 < pb < 5

3. 收益标签(Label)定义:未来 5 日收益

策略以未来 HORIZON = 5 个交易日的收益作为训练标签:

即:用今天收盘价作为基准,计算 5 个交易日后的涨跌幅。

4. 因子构建(Factors)

策略构建 5 个因子,并采用行业内分位数排名(percent_rank)来标准化,减少行业间可比性问题。行业分组维度为:sw2021_level2(申万二级行业)。

4.1 因子列表与含义

  1. 规模因子(size)
  • 原始指标:float_market_cap(流通市值)

  • 处理:行业内按市值排序做分位数,并取反使“小市值”得分高:

    f_size=1−percent_rank(float_market_cap)

  1. 盈利收益率因子(ep)
  • 原始指标:1 / pe_ttm(E/P)
  • 行业内分位数:percent_rank(1/pe_ttm)\n倾向于“估值更便宜(E/P 更高)”
  1. 净资产收益率因子(bp)
  • 原始指标:1 / pb(B/P)
  • 行业内分位数:percent_rank(1/pb)\n倾向于“PB 更低”。
  1. 盈利质量因子(roe)
  • 原始指标:roe_avg_ttm
  • 行业内分位数:percent_rank(roe_avg_ttm)\n倾向于“ROE 更高”。

5.动量因子(mom)

  • 原始指标:过去 5 日收益: 行业内分位数:percent_rank(mom)

5. IC / ICIR:动态评估因子有效性并生成权重

5.1 日度 IC 计算逻辑

策略不是直接用因子值与未来收益算相关,而是先将它们都转换为当日分位数排名:

  • 对每个交易日、每个因子:
    • rx:该因子值 x 在当日(全市场)中的 percent_rank
    • ry:未来收益 y 在当日(全市场)中的 percent_rank
  • corr(rx, ry) 作为当日该因子的 IC。

5.2 避免未来函数:IC 延迟使用

代码将 IC 向后平移 HORIZON 天再纳入权重计算:

  • 直观理解:某天计算出的因子-未来收益关系,要等未来收益真正“发生后”才可用于历史统计,因此在权重更新上做了时间对齐。

5.3 ICIR 计算窗口

使用过去 LOOKBACK = 120 个交易日(不含当天)作为滚动窗口,计算:

  • ic_mean:窗口内 IC 的均值
  • ic_std:窗口内 IC 的标准差
  • ic_cnt:有效 IC 个数(少于 30 则不启用)

并得到: 5.4 权重生成规则(只取“正有效”)

权重的核心原则:

  • ic_cnt < 30ic_std = 0:权重为 0
  • 否则取 ic_mean / ic_std,并与 0 取最大(只保留正值): 每个交易日对所有因子 wpos做归一化: 若当日所有 wpos 都为 0,则所有因子权重为 0(综合得分将接近 0 或缺失)。

这意味着策略会自动弱化/屏蔽近期不稳定或负向的因子,聚焦当下更有效的因子组合。

6. 综合得分(Score)与选股

6.1 Score 计算

对每只股票在每个交易日的综合得分:

6.2 排名与持仓构建

每天将股票按 score 降序排序,取前 HOLD_N = 30 只进入目标持仓;持仓权重等权

  • 当天入选股票数为 cnt(通常为 30,若因数据缺失不足 30,则以实际数量为准)
  • 单只权重:

7. 交易与再平衡机制(BigTrader 回测实现)

7.1 调仓频率

策略设定 每 5 个交易日调仓一次(REBALANCE_DAYS = 5)。

在回测引擎中,逻辑为:

  • 仅当 trading_day_index % 5 == 0 时执行调仓;
  • 读取当日目标持仓列表:
    • 先卖出:当前持仓中不在目标池的股票 → 调整到 0%
    • 再买入/调权:目标池股票 → 调整到目标等权比例

7.2 交易成本假设

采用按订单计费的手续费模型(代码写死):

  • 买入费率:0.0003(万 3)
  • 卖出费率:0.0013(千 1.3,含印花等综合)
  • 最低手续费:5 元/笔

\

8.回测结果

9. 策略特点与适用场景

9.1 策略特点

  • 动态权重:因子有效性变化时,策略会自适应调整因子占比;
  • 行业内标准化:同一行业内比较,减少行业结构差异影响;
  • 组合相对分散:等权持有 30 只,避免极端集中(但仍可能有行业集中风险)。

9.2 适用市场环境

  • 对中短周期(约 1 周)收益机会敏感;
  • 在成长风格占优、题材活跃阶段,动量因子可能权重上升;
  • 在估值修复或风格切换阶段,价值/质量因子(EP/BP/ROE)可能权重上升。

10. 风险提示与局限性

  1. 小市值固有波动:回撤可能较大。
  2. 财务因子滞后与修正风险:财务数据存在披露延迟与事后修正,可能影响回测与实盘一致性。
  3. 流动性与冲击成本:回测使用固定手续费,不含冲击成本;在小市值标的上,真实成交滑点可能更显著。
  4. 行业集中风险:尽管使用行业内排名,但最终选出来的 TopN 可能在某些阶段集中于少数行业。
  5. 执行时点假设:策略得分来自日频数据,实际落地通常采用“信号生成后下一交易日执行”的流程;不同执行假设会影响实盘表现。
  6. 参数敏感性:LOOKBACK、HORIZON、调仓频率、过滤阈值等均会显著影响结果。

策略源码:https://bigquant.com/square/ai/4f8381d1-1623-90fe-537b-5e03383fc939

\

{link}