五天可信底座路线图
先把「防未来数据 + 样本外划分 + 纯代码回测」做成有测试的可信底座,再让 LLM 提因子——没有可靠回测,生成再多因子也没意义。
M0 数据契约 → M1 PIT 对齐 → M2 因子引擎 → M3 回测(纯代码)
└── 可信底座到此 ✔ 全部有 pytest
M4 LLM 封装 → M5 三 Agent 闭环 → M6 汇总与可解释性
留一个问题你们组把「防 look-ahead」放在管线的哪一步做验证?
样本外只能按日期滚动,不能随机打乱
时间序列里随机划分训练/测试等于用未来教过去——样本外必须严格按日期切,train_end 之后的每一天都是「当时不可见」的检验区。
|<──── 训练区 (≤ train_end) ────>|<──── 样本外区 (> train_end) ────>|
时间轴 ─────────────────────────●─────────────────────────────────▶
train_end
✗ 随机 shuffle 后再切:测试点可能早于训练点 → 信息泄漏
✓ 只按日期切:测试永远在训练之后
留一个问题除了单次切分,你们会用滚动 / 扩展窗口(walk-forward)吗?窗口多长?
防泄漏point-in-time
一张时间线讲清「防未来数据」
财报要用「公告日 ann_date」对齐,而不是「报告期 report_period」——T 日的因子只能看见 ann_date ≤ T 的数据,否则就偷看了未来。
报告期 2026Q1 (report_period = 2026-03-31)
│
│ 真空期:季报还没公布,这段时间不能用 Q1 数据
▼
公告日 ann_date = 2026-04-28 ← 从这天起,因子才允许引用 Q1 财报
│
▼
可用区间 [ann_date, +∞) → pit_merge 只并入 ann_date ≤ 当日 的最新一期
留一个问题除了财报公告日,你还会给哪些字段单独设「可得日」?(如分析师预期、指数调仓)
三张表的数据契约:先定协议,再填数据
在拿到聚源数据前,先把输入表结构写死成契约——尤其把「历史成分股」单列一张表,不然回测会只看今天还活着的股票,天然偏乐观。
prices date, code, open/high/low/close, vol, amount, adj_factor
fundamentals code, report_period, ann_date, <财务字段…> ← ann_date 用于时间对齐
universe date, code ← 历史成分股,防幸存者偏差
└── 回测只在「当日在册」的股票上做横截面
留一个问题你们做 A 股回测时,退市 / 停牌的股票是怎么处理进 universe 的?