多因子合成选股策略:从因子打分到组合构建
由bqi2tg8b创建,最终由bqi2tg8b 被浏览 8 用户
一、策略简介
单个因子通常只能反映股票的某一类特征。
例如,动量因子主要观察价格趋势,估值因子关注股票是否便宜,质量因子关注公司的盈利能力。不同因子在不同市场环境下的表现可能存在较大差异,因此,仅依赖单一因子容易受到市场风格切换的影响。
多因子策略的基本思路是:
将多个选股因子统一处理后合成为一个综合得分,再根据综合得分对股票排序并构建投资组合。
本策略使用多个因子,根据因子近期的 ICIR 表现动态调整权重,选择综合得分最高的 200 只股票,每 5 个交易日调仓一次。
https://bigquant.com/codesharev3/9d40692f-f079-4382-883e-4e40950d524e
整体流程如下:
选择候选因子
↓
因子去极值与标准化
↓
计算因子合成权重
↓
生成综合因子
↓
行业、市值中性化
↓
股票池过滤
↓
排序选股与定期调仓
二、策略参数
- 候选因子数量:4 个
- ICIR 计算窗口:120 个交易日
- 最少有效观测:60 个交易日
- 持仓股票数量:200 只
- 调仓周期:5 个交易日
- 股票权重:等权
- 初始资金:2000 万元
- 业绩基准:中证 1000 指数
三、选择候选因子
策略首先从因子库中选择多个候选因子。
候选因子可以来自:
- Alpha101 因子
- Alpha191 因子
- 技术指标因子
- 基本面因子
- 量价因子
不同因子反映的信息可能不同。例如:
- 动量因子反映价格趋势;
- 估值因子反映股票是否相对便宜;
- 质量因子反映企业盈利和财务状况;
- 量价因子反映价格与成交量之间的关系。
使用多个因子的目的,是从不同角度对股票进行评价,降低策略对单一信号的依赖。
但因子数量并不是越多越好。如果多个因子高度相关,它们可能只是在重复表达同一种信息。因此,构建因子池时还需要关注因子之间的相关性和信息互补性。
四、因子预处理
不同因子的数值范围通常差异很大。
例如,一个因子的取值可能在 -2 到 2 之间,另一个因子的取值可能达到几百。如果直接将它们相加,数值较大的因子会自然占据主导地位。
因此,在合成因子之前,需要先进行去极值和标准化。
4.1 去极值
金融数据中经常存在极端值,例如:
- 股票停牌或复牌;
- 成交价格异常;
- 财务数据异常;
- 因子公式分母过小;
- 个股出现极端行情。
这些异常值可能明显影响因子的平均值和标准差。
本策略采用三倍标准差方法进行去极值。
普通文本公式:
因子合理区间 = 当日因子均值 ± 3 × 当日因子标准差
超过上限的因子值会被调整为上限,低于下限的因子值会被调整为下限。
去极值不会删除股票,只是减少极端数据对因子结果的影响。
4.2 标准化
去极值后,对每个交易日的股票因子进行截面标准化。
普通文本公式:
标准化因子值 =(原始因子值 - 当日因子均值)÷ 当日因子标准差
标准化后的因子值可以这样理解:
- 大于 0:高于当天市场平均水平;
- 小于 0:低于当天市场平均水平;
- 绝对值越大:偏离市场平均水平越明显。
经过标准化后,不同因子被转换到相近的尺度,可以进行后续合成。
五、计算因子权重
多个因子完成标准化后,还需要确定每个因子在综合得分中的权重。
最简单的方法是等权,即每个因子使用相同权重。但等权方法默认所有因子在任何时期都具有相同的预测能力。
本策略根据因子近期的 ICIR 表现动态调整权重。
5.1 什么是 IC
IC 是信息系数,用于衡量因子值与未来股票收益之间的相关程度。
简单理解:
- IC 为正:因子值较高的股票,未来收益整体上也较高;
- IC 为负:因子方向可能与未来收益相反;
- IC 接近 0:因子的选股区分能力较弱。
5.2 什么是 ICIR
ICIR 用于衡量因子表现的稳定性。
普通文本公式:
ICIR = 一段时间内 IC 的平均值 ÷ IC 的标准差
一个因子的平均 IC 较高,并且 IC 波动较小,通常会得到较高的 ICIR。
本策略使用过去 120 个交易日的 IC 计算滚动 ICIR,并要求窗口内至少存在 60 个有效观测。
5.3 权重计算
因子的合成权重与其 ICIR 大小有关。
普通文本公式:
因子权重 = 该因子的 ICIR ÷ 所有因子 ICIR 绝对值之和
ICIR 较高的因子获得较高权重。
如果某个因子的 ICIR 为负,则对应权重也可能为负,相当于反向使用该因子。
为了避免使用未来信息,实际合成时使用滞后的 ICIR 权重,而不是直接使用当日尚未完全获得的数据。
六、合成综合因子
完成因子标准化和权重计算后,将多个因子加权合成为一个综合得分。
综合因子计算方式:
F(i,t) = w₁(t) × z₁(i,t) + w₂(t) × z₂(i,t) + … + wₖ(t) × zₖ(i,t)
其中:
- F(i,t):股票 i 在日期 t 的综合因子得分;
- wₖ(t):第 k 个因子在日期 t 的动态权重;
- zₖ(i,t):股票 i 在日期 t 的第 k 个标准化因子值。
简单来说,综合因子就是将每个标准化因子乘以对应权重,再把所有结果相加。
例如,某只股票有三个标准化因子值:
- 因子 1:1.2
- 因子 2:0.5
- 因子 3:-0.4
对应的因子权重分别为:
- 因子 1 权重:0.5
- 因子 2 权重:0.3
- 因子 3 权重:-0.2
则该股票的综合得分为:
综合得分 = 0.5 × 1.2 + 0.3 × 0.5 - 0.2 × (-0.4) = 0.83
对股票池中的所有股票计算综合得分后,按照得分从高到低排序。综合得分越高,表示该股票在多个因子的共同评价下越具有相对优势。
七、综合因子再次处理
多个因子合成后,综合得分仍可能存在极端值或不同日期尺度不一致的问题。
因此,策略会继续进行三步处理:
- 使用 0.1% 和 99.9% 分位数进行缩尾;
- 对综合因子再次进行截面标准化;
- 对综合因子进行行业和市值中性化。
第一轮标准化处理的是各个原始因子,第二轮标准化处理的是合成后的综合因子,两者的处理对象不同。
八、行业和市值中性化
如果综合得分较高的股票大部分来自某个行业,或者主要是小市值股票,那么策略收益可能主要来自行业行情或小盘风格,而不完全来自综合因子本身。
因此,本策略对综合因子进行行业和市值中性化。
基本思路是:
使用综合因子对行业变量和股票市值进行回归,再使用无法被行业和市值解释的剩余部分作为最终选股得分。
普通文本表达:
综合因子 = 行业影响 + 市值影响 + 个股剩余信息
策略最终使用“个股剩余信息”进行股票排序。
这样可以减少组合对单一行业和市值风格的集中暴露。
需要注意,中性化只能减少指定变量的线性影响,并不表示组合完全不存在市场风险、波动率风险或流动性风险。
九、股票池过滤
在正式选股前,策略会对股票池进行过滤。
主要过滤条件包括:
- 剔除 ST 股票;
- 剔除上市不足 365 天的股票;
- 剔除价格低于 1.2 元的股票;
- 剔除北交所股票;
- 剔除以 688 开头的科创板股票。
股票池过滤的主要目的,是减少异常股票、交易限制和不同市场制度对策略结果的影响,提高回测结果的可交易性。
十、排序选股
完成因子合成、中性化和股票池过滤后,每只股票都会得到一个最终得分。
策略按照最终得分从高到低进行排序,并选择排名最高的 200 只股票。
普通文本表达:
目标股票池 = 最终综合得分排名前 200 的股票
综合得分越高,表示该股票在多个因子的共同评价下越具有相对优势。
十一、组合权重
入选的 200 只股票采用等权配置。
普通文本公式:
单只股票目标权重 = 1 ÷ 200 = 0.5%
如果初始资金为 2000 万元,那么每只股票的初始目标资金约为:
2000 万元 ÷ 200 = 10 万元
需要区分两类不同的权重:
- 因子权重:决定多个因子如何合成为综合因子;
- 股票权重:决定入选股票如何分配投资资金。
因此,这套策略可以概括为:
因子层采用滚动 ICIR 动态加权,股票层采用前 200 名等权配置。
十二、定期调仓
策略每 5 个交易日重新计算一次股票排名,并根据最新排名调整持仓。
调仓时:
- 新进入前 200 名的股票被买入;
- 退出前 200 名的股票被卖出;
- 继续持有的股票重新调整到目标等权比例。
5 日调仓是在信号更新速度和交易成本之间进行折中。
调仓过于频繁,会增加换手率、手续费和冲击成本;调仓周期过长,又可能导致因子信号已经发生变化。
十三、交易成本
策略回测中考虑了以下交易费用:
- 买入成本:0.03%
- 卖出成本:0.08%
- 单笔最低费用:5 元
- 买卖价格:开盘价
交易成本是评价策略可执行性的重要因素。
普通文本公式:
策略净收益 = 策略毛收益 - 交易成本
如果策略换手率较高,即使不考虑成本时表现较好,扣除手续费、印花税、买卖价差和冲击成本后,实际收益也可能明显下降。
十四、回测结果
完成因子预处理、动态加权、综合因子构建和股票组合配置后,使用 BigTrader 对策略进行历史回测 请为我完成结尾部分的内容
本次回测的主要指标如下:
| 指标 | 回测结果 |
|---|---|
| 累计收益率 | 202.79% |
| 年化收益率 | 23.47% |
| 基准收益率 | 29.34% |
| 阿尔法 | 0.18 |
| 贝塔 | 0.85 |
| 夏普比率 | 0.89 |
| 胜率 | 61.83% |
| 盈亏比 | 0.99 |
| 收益波动率 | 23.43% |
| 信息比率 | 1.36 |
| 最大回撤 | 35.44% |
从收益曲线来看,策略在回测区间内取得了较明显的正收益,累计表现高于同期基准。策略净值虽然在部分阶段出现回撤,但长期趋势整体向上。
年化收益率为 23.47%,夏普比率为 0.89,说明策略获得较高收益的同时,也承担了较为明显的净值波动。信息比率为 1.36,表明策略在本次回测中取得了一定的相对基准超额表现。
策略胜率为 61.83%,但盈亏比为 0.99。简单来说,盈利交易出现得更加频繁,但单次平均盈利与单次平均亏损接近。因此,策略收益更多来自较高的获胜频率,而不是依靠少数几次大幅盈利。
最大回撤为 35.44%,说明即使长期累计收益较高,持有过程中仍可能经历较大的阶段性损失。评价策略时,不能只看最终收益,还需要同时考虑波动率、最大回撤和收益稳定性。
十五、如何理解本次结果
需要强调的是,本次回测的主要目的不是寻找历史收益率最高的因子组合,而是展示一套完整的多因子合成流程。
本次示例重点说明了以下几个问题:
15.1 多个因子可以被统一为一个选股指标
不同因子的计算逻辑和数值范围可能完全不同。
通过去极值、标准化和动态加权,可以将多个原始因子转换为统一的综合得分,并据此对股票进行排序。
15.2 因子权重可以随时间动态变化
本策略没有始终对所有因子使用固定权重,而是根据近期 ICIR 表现动态调整各因子的影响程度。
近期表现相对稳定的因子获得更高权重,表现减弱的因子权重则相应下降。
15.3 因子信号需要经过组合构建才能形成策略
因子得分本身并不是最终收益。
还需要经过:
- 股票池过滤;
- 行业和市值中性化;
- 股票排序;
- 持仓数量设定;
- 股票权重分配;
- 调仓周期设置;
- 交易成本扣除。
只有完成这些步骤,因子信号才真正转化为可回测的投资组合。
15.4 高收益不代表策略没有风险
本次策略的收益表现较好,但最大回撤仍超过 30%。
这说明即使一个因子组合在长期回测中获得正收益,投资者仍可能在某些阶段经历较大的净值下跌。
因此,评价量化策略不能只看累计收益,还需要同时观察:
- 年化收益率;
- 收益波动率;
- 夏普比率;
- 最大回撤;
- 信息比率;
- 不同年份的收益稳定性。
十六、本次回测的局限
虽然本次结果较好,但不能据此直接判断该因子组合未来一定有效。
16.1 候选因子并未经过系统筛选
本次示例使用的是指定的多个因子,主要目的是演示合成流程,并未从全部因子库中寻找最优组合。
因此,回测结果既不能代表该权重方法的上限,也不能说明当前因子一定是最优选择。
16.2 历史表现不代表未来收益
因子的有效性可能随市场环境变化。
某个因子在过去表现较好,未来也可能因为市场风格切换、交易拥挤或投资者行为变化而失效。
16.3 ICIR 动态加权并非唯一方案
除了滚动 ICIR 加权,还可以使用:
- 因子等权;
- IC 均值加权;
- 正 ICIR 截断加权;
- 因子排名加权;
- 波动率调整权重;
- 机器学习模型加权。
不同的合成方法可能产生不同的收益和风险特征。
16.4 回测交易成本仍可能低于实际成本
回测中已经考虑手续费和最低交易费用,但真实交易还可能受到以下因素影响:
- 买卖价差;
- 市场冲击成本;
- 开盘价格滑点;
- 涨跌停无法成交;
- 个股流动性不足;
- 大资金成交容量限制。
因此,实盘表现通常不会与历史回测完全一致。
十七、后续研究方向
在理解完整的多因子合成流程后,可以继续从以下方向进行优化。
17.1 优化候选因子池
在因子合成前,对单个因子进行检验,例如:
- IC 均值;
- ICIR;
- 分组收益;
- 多空收益;
- 年度稳定性;
- 因子相关性。
剔除长期无效或与其他因子高度重复的因子。
17.2 比较不同合成方法
可以将滚动 ICIR 加权与等权方法进行对比,观察动态权重是否真正改善了综合因子的表现。
17.3 调整组合参数
可以进一步测试:
- 持有前 50、100 或 200 只股票;
- 每 5 日、10 日或 20 日调仓;
- 按综合得分加权;
- 按波动率倒数加权;
- 设置行业权重上限;
- 设置单只股票权重上限。
17.4 增加样本外检验
更严谨的研究应将历史数据划分为训练区间、验证区间和测试区间。
因子筛选和参数调整在训练集与验证集完成,测试集只用于评价最终策略的样本外表现。
\