量化因子发现与选择方法
文章目录
量化交易中的因子发现与筛选方法
一、因子发现方法
1. 数据驱动挖掘
- 统计方法:通过相关性分析、协整检验、Granger因果检验等,从历史数据中寻找与收益率显著相关的变量。
- 机器学习:使用随机森林、LASSO回归、梯度提升树(如XGBoost)等算法自动提取有效特征。
- 事件驱动:分析财报发布、政策变化、市场事件对价格的影响(如财报超预期因子)。
2. 理论驱动构建
- 行为金融学:基于投资者心理偏差设计因子(如过度反应因子、羊群效应因子)。
- 风险溢价理论:捕捉风险溢价(如波动率风险溢价、流动性溢价)。
- 套利定价理论(APT):基于多因子模型(如Fama-French三因子、五因子模型)。
二、常见因子类型
因子类别 | 典型因子示例 | 应用场景 |
---|---|---|
技术因子 | 动量、波动率、换手率、RSI、布林带 | 短期趋势跟踪、反转策略 |
基本面因子 | 市盈率(PE)、市净率(PB)、ROE | 价值投资、长线选股 |
情绪因子 | 新闻舆情、社交媒体热度、期权隐含波动率 | 事件驱动、市场情绪对冲 |
另类数据因子 | 卫星图像数据、供应链数据、ESG评分 | 行业轮动、ESG主题投资 |
三、因子筛选流程
1. 初步筛选
- 显著性检验:剔除p值>0.05的因子(如通过t检验或ANOVA)。
- 相关性过滤:剔除与其他因子相关性>0.7的冗余因子(如使用皮尔逊相关系数矩阵)。
2. 样本外测试
- 分层回测:将因子在训练集(样本内)和测试集(样本外)分别测试,剔除样本外表现显著下降的因子。
- 过拟合检验:通过随机数据生成器(如White's Reality Check)验证因子有效性。
3. 经济逻辑验证
- 理论一致性:剔除与经济逻辑矛盾的因子(如“股价尾号为8的股票收益更高”缺乏逻辑支撑)。
- 稳定性分析:剔除在不同市场周期(牛市/熊市)表现不稳定的因子。
四、策略案例:多因子选股策略
1. 因子库选择
假设因子库包含以下候选因子:
- 动量因子(20日收益率)
- 波动率因子(60日收益率标准差)
- 质量因子(ROE排名)
- 价值因子(市盈率倒数)
- 换手率因子(5日平均换手率)
2. 筛选过程
剔除因子:质量因子(ROE排名)
- 原因:
- 多重共线性:与价值因子(市盈率倒数)相关性高达0.85。
- 样本外失效:在2020-2023年回测中,质量因子在测试集的IC(信息系数)从0.12降至-0.05。
保留因子:动量、波动率、换手率
- 原因:
- 动量因子:样本内外IC均>0.1,且与波动率因子相关性仅0.3。
- 波动率因子:在熊市中表现稳定(IC=0.18),符合“低波动异象”理论。
- 换手率因子:高频数据中与短期动量形成互补(相关性0.2)。
3. 策略构建
- 信号生成:
1# 组合权重:动量(40%) + 波动率(30%) + 换手率(30%) 2def generate_signal(df): 3 df['momentum'] = df['close'].pct_change(20) 4 df['volatility'] = df['close'].pct_change().rolling(60).std() 5 df['turnover_rank'] = df['turnover'].rank(pct=True) 6 # 综合得分 7 df['score'] = 0.4*df['momentum'] - 0.3*df['volatility'] + 0.3*df['turnover_rank'] 8 return df['score'].rank(pct=True)