基于 ICIR 动态加权的多因子行业中性选股
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
即:创业板相关标的(包含 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 个交易日的收益作为训练标签:
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)
倾向于“估值更便宜(E/P 更高)”
净资产收益率因子(bp)
原始指标:
1 / pb(B/P)行业内分位数:
percent_rank(1/pb)
倾向于“PB 更低”。
盈利质量因子(roe)
原始指标:
roe_avg_ttm行业内分位数:
percent_rank(roe_avg_ttm)
倾向于“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 则不启用)
并得到:
权重的核心原则:
若
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