AI 生成量化代码如何检查未来函数:FiClaw 回测数据时点清单
检查 AI 生成策略中的未来数据泄漏:从财务披露、历史股票池、信号与成交时点,到全样本预处理和代码复核,保留 FiClaw 回测证据。
发布人 FiClaw 产品团队 · 发布于 · 更新于
Read in English先看结论
检查未来函数,要逐项回答“这条信息在当时是否已经可用”。分别核对数据所属期、实际公布或可用时间、信号计算时间和最早可成交时间,再检查历史股票池与预处理是否使用了后来的信息。FiClaw 的代码生成和历史回测仍需要这一步人工复核。
适合使用自然语言生成策略代码、研究财务因子或发现异常漂亮回测曲线的研究者。
代码复核请求示例:把时间假设列出来
请审查当前策略,不先优化收益。列出每个数据字段的所属期、可用时间、信号计算时点与订单执行时点;标出负向 shift、居中滚动窗口、全样本归一化、向前填入未来披露值,以及使用当前成分股回测历史的地方。每项给出代码位置、所需证据与修正方式,无法确认的数据写为待核实。
报告期、公布日与可用时间不能混用
财务数据属于某个报告期,不代表在报告期结束当天就能使用。研究需要核对实际披露或数据可用时间,并检查字段是否已经被后来修订的值覆盖;没有相应历史版本时,应明确限制。
收盘后才能确定的信号,需要与可执行的订单时点配套。若使用当日完整收盘信息,又假设在信息尚未可得时按同一个价格成交,就需要重新核对信号与撮合逻辑。
历史股票池与全样本计算也会引入泄漏
用今天的指数成分股覆盖整个历史区间,会改变当时可选择的股票集合,并可能忽略后来退市或调出的标的。先确认历史成分、上市退市和停牌数据是否足够,再说明回测结论能覆盖的范围。
AI 生成代码时,可重点检查负向 shift、居中窗口、反向填充、用全区间统计量处理较早数据,以及先看未来收益再筛样本的逻辑。代码中出现这些操作不必然都是错误,但必须能解释信息可用顺序。
在 FiClaw 中把疑点变成可核对材料
先把时间约束写进 spec,再对照生成代码抽查几笔交易:从原始字段和历史股票池,追到信号与成交记录。保留修正前后的代码版本和运行设置,比较结果变化,而不是只改收益曲线。
回测没有报错不代表没有未来信息。FiClaw 可以辅助解释代码与诊断结果,但数据时点是否成立,需要结合数据说明和实际记录确认;无法确认时,把问题保留在研究结论里。
沿着一笔交易检查时间顺序
| 检查对象 | 需要的证据 | 常见疑点 |
|---|---|---|
| 数据字段 | 所属期、公布/可用时间与历史版本 | 把报告期末当作已知时点 |
| 股票池 | 当时成分与上市退市状态 | 全历史只保留今天仍在池中的股票 |
| 信号计算 | 窗口方向、预处理范围与计算时间 | 让后来的观测参与较早的信号 |
| 订单执行 | 下单时间、撮合规则与成交日志 | 在信息尚不可用时假设成交 |
常见问题
代码能运行,是否说明没有未来函数?
不是。语法和接口检查只能解释程序是否运行,无法证明每个数据字段当时已经可用。还应核对字段时点、历史股票池、窗口方向与成交记录。
统一把信号 shift 一天就足够了吗?
不够。延迟信号不能自动修复历史股票池、财务修订值或全样本预处理带来的泄漏。应按信息实际可用时间逐项检查。
FiClaw 是否保证所有历史数据都是时点版本?
本指南不作这一保证。FiClaw 通过 QuantAPI 连接历史数据;财务历史版本、历史成分与具体字段的可用范围需要查阅数据说明或单独确认,不能仅凭数据名称推断。
方法参考
- scikit-learn:数据泄漏与预处理的常见陷阱
用于补充训练与评估数据隔离的概念;金融字段的披露时点仍需核对具体数据源。