系统手册
3. 因子与信号 DWS
用向量化算子实现 Alpha101,批量计算落 alpha_results;再做因子筛选 → 组合 → 截面排序,产出目标持仓。物理隔离未来。
作用:用向量化算子实现 Alpha101,批量计算落 alpha_results;再做因子筛选 → 组合 → 截面排序,产出目标持仓。
源码地图
| 文件 | 关键对象 | 作用 |
|---|---|---|
src/factors/operators.py | rank delay correlation decay_linear ts_rank indneutralize … | WorldQuant 算子(Pandas/NumPy 向量化) |
src/factors/alpha_factors.py | AlphaFactors.alpha001…alpha101 | 101 个因子公式实现 |
src/factors/engine.py | FactorEngine.calculate_alphas(n_jobs) | 多进程批量计算 |
_validate_factor_results | NaN / Inf 体检拦截 | |
src/models/factor_selector.py | evaluate_factors / select / _remove_redundant | IC 均值 / ICIR / 方向一致性 / 去冗余 |
src/models/factor_combiner.py | combine(等权 / IC 加权 / ICIR 加权) | 多因子合成单一打分 |
src/models/signal_generator.py | generate → _rank_and_select | 截面排序取 Top N → 目标持仓 |
已知问题与修复
adv 语义错误(#33)
论文 adv{d} 定义为「平均成交金额(dollar volume)」,早期实现错误地使用了「平均成交股数」——程序不报异常,但因子值系统性偏差。详见 事故档案 · adv 语义错误。
随机扰动导致不可复现(#33)
为防止 rank() / correlation() 分母为零而引入极小随机扰动,导致结果不可复现 → 最终用固定 seed 收口。见 事故档案 · 随机扰动与不可复现。
其它
- MultiIndex 索引对齐错位,导致下游数据被静默篡改。
- 单进程 → 多进程并行计算(#15 / #10)。
量化要点
- Alpha101 高度依赖截面 rank;
_validate_factor_results自动拦截 NaN/Inf,防止单因子异常导致组合权重失控。 - IC = 因子值与未来收益的截面秩相关;ICIR = IC 均值 / IC 标准差,是筛选与加权的核心依据。概念详解见 核心概念辨析。
当前状态
101 个因子全部定义;行业中性化已补全(#39 + commit 3a46f0f)。早期 README「82 可运行」口径已过时,以 FactorEngine.get_available_alphas() 为准(见 指标口径)。
缺口 / TODO
- 显式市值 / 行业中性化与因子正交化 / 特质动量(#22)。
- 因子择时:拥挤度 / 离散度监控(#23,见 路线图)。
上一层:2. 数据预处理 DWD · 下一层:4. 截面回测引擎