基于 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 < 500 < pb < 5
3. 收益标签(Label)定义:未来 5 日收益
策略以未来 HORIZON = 5 个交易日的收益作为训练标签:
即:用今天收盘价作为基准,计算 5 个交易日后的涨跌幅。
4. 因子构建(Factors)
策略构建 5 个因子,并采用行业内分位数排名(percent_rank)来标准化,减少行业间可比性问题。行业分组维度为:sw2021_level2(申万二级行业)。
4.1 因子列表与含义
- 规模因子(size)
-
原始指标:
float_market_cap(流通市值) -
处理:行业内按市值排序做分位数,并取反使“小市值”得分高:
f_size=1−percent_rank(float_market_cap)
- 盈利收益率因子(ep)
- 原始指标:
1 / pe_ttm(E/P) - 行业内分位数:
percent_rank(1/pe_ttm)\n倾向于“估值更便宜(E/P 更高)”
- 净资产收益率因子(bp)
- 原始指标:
1 / pb(B/P) - 行业内分位数:
percent_rank(1/pb)\n倾向于“PB 更低”。
- 盈利质量因子(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_rankry:未来收益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 < 30或ic_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. 风险提示与局限性
- 小市值固有波动:回撤可能较大。
- 财务因子滞后与修正风险:财务数据存在披露延迟与事后修正,可能影响回测与实盘一致性。
- 流动性与冲击成本:回测使用固定手续费,不含冲击成本;在小市值标的上,真实成交滑点可能更显著。
- 行业集中风险:尽管使用行业内排名,但最终选出来的 TopN 可能在某些阶段集中于少数行业。
- 执行时点假设:策略得分来自日频数据,实际落地通常采用“信号生成后下一交易日执行”的流程;不同执行假设会影响实盘表现。
- 参数敏感性:LOOKBACK、HORIZON、调仓频率、过滤阈值等均会显著影响结果。
策略源码:https://bigquant.com/square/ai/4f8381d1-1623-90fe-537b-5e03383fc939
\