tail_pipeline_engine:因子「海选工厂」

一句话:把上千个候选「打分公式」(因子)放进统一考场,用历史数据批量模拟买卖股票、逐一出成绩单,筛出真正能预测涨跌的好因子,再做深度复赛、导出归档。整个过程像一条自动化流水线。

指挥中心 Python 壳

不亲自干重活,负责组织整场考试:点名候选人、划定考场、布置试卷、按成绩定名次。

  • 点名:从因子仓库读出全部候选因子名单(也可只考其中一部分)。
  • 划定考场:考试时间(默认 2016–2024 年)、考生范围(股票池)、回测起始日。
  • 布置试卷:把所有考生共用的「标准答案」备齐(见第 2 层)。
  • 组织后续:考试结束后按成绩筛选、导出结果、安排深度复赛、生成文档。

它和旧版系统长得一模一样,可以直接替换使用——这是设计上的刻意兼容。

考场布置 公共数据 · 只算一次

所有考生共用的「标准答案」提前备好,全体共享,绝不重复劳动。

  • 未来收益:每只股票 1 天后、5 天后的实际涨跌——判卷的唯一标准。
  • 交易限制:哪些股票在哪些日子不可交易(停牌、新股等),阅卷时跳过。
  • 指数收益:大盘基准,用来衡量「扣除大盘行情后还剩多少本事」。
  • 风格画像:Barra 风格的 10 项指标(市值、波动、动量……)——中性化要用。
  • 行业归属:每只股票属于哪个行业——中性化要用。
  • 中性化预计算:行业分级、风格展开这些重活先做一遍,结果放进共享区,200 个工人随取随用。

考试执行 Rust 引擎 · 一个工人包办一个因子

同时开 200 个工人,每人认领一个因子、独立完成全部工序,互不交接、互不排队。

  • 认领制:任务放在一个无上限的队列里,谁干完谁领下一个——不会有人闲着,也不会拥堵。
  • 直接取数:因子按「列」存放在仓库里,每个工人带着一张「快速索引图」,只取自己那一个因子的数据,几乎零等待。
  • 成绩单落盘:每考完一个因子就存档。中途断电、断网都不怕——下次接着考,考完的不重考(断点续算)。
  • 进度透明:实时显示已完成个数、通过率、预计剩余时间。

这是整套引擎的心脏。它和上一代的最大区别:上一代是「读数据的人」和「计算的人」分成两组,中间有个交接瓶颈;这一代让每个工人从头包到尾,瓶颈消失。

单因子闯五关 每个工人的固定工序

一个因子进来,先体检、再变化出几十个「变体」、逐个预检、原始回测、洗去行业风格后再回测。

第 1 关
体检
覆盖率不达标(每天有值的股票太少)直接淘汰,不浪费后面算力
第 2 关
变体加工
滑动窗口排名(5/10/20 天)+平滑(均值/最大/最小/标准差),1 个因子变几十个变体
第 3 关
预检
快速枪毙垃圾变体:大多数日子没数据、几乎全零、空值过多
第 4 关
原始回测
按因子排名买前 10% 卖后 10%,统计 IC、年化收益、夏普、回撤
第 5 关
中性化回测
把因子「洗干净」:抹掉行业和 10 项风格影响,再回测一遍

每个变体最终交出 4 张成绩单:持有 1 天 / 5 天 × 洗前 / 洗后。第 5 关是这套引擎的招牌——它回答的问题最有价值:「去掉人人皆知的因素之后,这个因子还有没有独门预测力?」

成绩筛选 四榜合一 · 去重限量

按成绩排出尖子生:四张榜单合并、剔除「长得太像」的、限量录取。

  • 四张榜单:中性化收益榜、中性化 IC 榜、原始收益榜、原始 IC 榜。
  • 按信任度合并:默认最看重「中性化 IC」——即洗去风格后依然稳定的预测力;其次原始 IC、中性化收益、原始收益。
  • 相关性去重:两个变体走势太像(相关系数高)只留一个,保证入选名单彼此独立、各有所长。
  • 限量录取:默认最多 40 个,输出两份名单:5 天持有期入选、1 天持有期入选。

赛后工序 复赛 · 导出 · 归档

入选的尖子生还要参加「深度复赛」,最后导出成通用格式并自动生成文档。

  • 导出:入选因子从仓库导出为通用数据格式,供下游策略使用。
  • 深度复赛(fulltest):对入选者做完整版检验——洗前/洗后 × 1 天/5 天四种组合的详细报告。
  • 自动归档:生成因子说明文档;考试过程可随时断点续跑。

为什么这么快?(设计要点)

列式仓库因子一列一列存放,读一个因子只碰自己的列,绝不扫全表。
没有接力棒每个工人全流程包干,消除上代「读数据 ↔ 计算」两组交接的瓶颈。
算力用在刀刃上公共数据只算一次、垃圾变体提前枪毙、已考完的存档续用。
小白词汇表: 因子=一个打分公式,给每只股票每天打分、预测未来涨跌 回测=用历史数据模拟「按因子排名买卖」,看能不能赚 IC=打分排名与未来真实涨跌排名的吻合度,0.01 已算不错 中性化=洗掉行业与风格影响,看因子「独立」的预测力