Alpha-Online
技术手册

3. 因子与信号 DWS

因子层的两条底线:结果可复现、物理隔离未来信息。因子实现忠于论文原始定义,筛选与组合只允许依赖历史截面。

作用:批量计算 Alpha101 因子值,再做筛选 → 组合 → 截面排序,产出每个调仓日的目标持仓。

输入与输出的契约

输入是预处理层的干净面板(returns / vwap / cap + OHLCV,见数据预处理)。输出是两样东西:

输出形态规模感
因子值每日截面 × 101 个因子上千万行
目标持仓每个调仓日 Top N 名单 + 合成分每次仅 10 行

这一层对下游的承诺:同样的输入永远算出同样的持仓(可复现),且 T 日的持仓只依赖 T-1 及更早的信息(无未来函数)

决策一:因子实现忠于论文原始定义

101 个因子全部按 WorldQuant 论文的公式实现,不做「自认为更合理」的改动。原因是偏离定义的偏差是静默的:程序不报任何异常,因子值却系统性错误。两个真实教训:

  • 论文 adv{d} 定义为「平均成交金额(dollar volume)」,早期实现错误地使用了「平均成交股数」。数值天差地别,但代码全程无异常 → 事故档案 · adv 语义错误
  • 为防止 rank() / correlation() 分母为零引入随机扰动,导致同样的输入每次算出不同的因子值 → 用固定 seed 恢复可复现性,见事故档案 · 随机扰动与不可复现

这两个事故共同的教训:因子层的正确性无法靠「跑通了」验证,只能靠对照定义逐项核对,以及可复现性约束。

决策二:用 IC 筛选并去冗余,而不是全部拿来用

101 个因子不是 101 份独立信号。Alpha101 高度同构(大量因子共享相似的量价结构,见 Alpha101 是什么),直接全用等于给同一个信号重复计权。所以进组合前有两道筛选。

IC 法是完整单因子评估体系(IC/ICIR、分组测试、回归法)中的一环,本系统当前仅实现这一环,分组测试与回归法尚未实现。三个维度的公式、算例与互补关系见单因子有效性评估

第一道,逐因子评估。对每个因子逐日计算「当期因子值 vs 未来 5 日收益」的截面 Spearman 相关,得到一条 IC 序列,然后设四项条件:

条件阈值意图
|IC 均值|≥ 0.02预测力下限
ICIR(IC 均值 / IC 标准差)≥ 0.3预测力的稳定性
IC 方向一致的天数占比≥ 55%方向不能来回翻
有效样本≥ 60 个交易日统计意义下限

任一条件不满足即排除。101 个因子筛选后,剩余数量通常大幅减少。

第二道,去冗余。通过筛选的因子两两算相关,> 0.7 视为同质信号,只保留 IC 较高者。

这套筛选的隐含代价要在主线说清楚:IC 用未来 5 日收益评估因子,所以筛选本身是「用历史窗口内的未来」做的。窗口内没问题,但把筛选结果外推到窗口外,就是路线图里「因子衰减监测与自动重训练」要解决的问题。

决策三:合成用 ICIR 加权,方向按 IC 符号统一

通过筛选的因子合成为单一分数,分三步:先做每日截面标准化拉平量纲;再按各因子 IC 均值的符号统一方向(负 IC 因子翻号,表示与收益负相关);最后加权求和,默认按 ICIR 加权——预测越稳定的因子权重越大(等权 / IC 加权作为备选口径保留)。

最后每日对合成分做截面排序取前 10 名,等权各 1/10,连同分数写入目标持仓。

决策四:同一套逻辑,回测与实盘各一个入口

合成分只算一份。回测入口在使用前对信号整体后移一天(T 日只用 T-1 的分);实盘入口在收盘后才运行,天然只有 T-1 及更早的数据。防未来函数不依赖散布在各处的时间判断,而是在入口处物理隔离。这就是 One Codebase 在信号层的形态;三套独立实现导致结果无法复现的教训见事故档案 · 回测实盘路径分叉

常见错误

当前状态

101 个因子全部定义;行业中性化已在因子层使用(按 sector 分组,缺失行业时退化为全市场去均值),但不是 point-in-time 行业分类,历史行业变化仍可能带入未来信息。早期 README「82 可运行」口径已过时,以引擎的可用因子清单为准(见指标口径)。

实现对照


内部溯源(私有仓库):adv 语义与随机扰动 issue #33 · 多进程并行 #10 / #15 · 行业中性化补全 #39 + commit 3a46f0f · 因子正交化 #22 · 拥挤度监控 #23

On this page