实验复现

同一个策略回测结果为什么不同:FiClaw 实验复现清单

两张曲线不一样,可能源于研究条件变化、数据更新、代码差异,也可能只是展示精度不同。先确认“究竟有什么不同”,比立即判断哪次结果更好更有用。复现的目标是让另一位研究员知道如何得到这次结果,并能解释偏差发生在哪里。

发布人 FiClaw 产品团队 · 发布于 · 更新于

Read in English

直接回答

同一策略名称或同一 Prompt,并不能证明两次回测是同一个实验。先核对实际采用的策略规格、代码、参数、历史数据、区间、费用与成交设置,再定位第一处信号、持仓或成交差异。FiClaw 研究应保留这些材料及修改原因;涉及随机过程时,还需记录随机性设置和依赖版本,不能只比较最终收益。

阅读要点

  • 保存实际运行的规格和代码,不能仅靠策略名称或聊天记录定义实验。
  • 对齐数据、配置与时间范围后,沿信号到成交定位最早差异。
  • 随机种子只控制对应的随机过程,不能替代代码、数据与环境版本记录。

先给每次运行建立一份实验清单

一次运行的身份由输入、实现、数据与配置共同决定。Prompt 用于解释研究意图,实际采用的规格与代码才决定规则如何落地。若重新让模型生成代码,即使 Prompt 没变,也应核对新代码,而不是默认它与上一版相同。

尽量保留数据获取时间、数据版本或快照标识;没有版本能力时,明确记录这一限制及关键字段样本。复现材料的完整程度应以当前工具能提供什么为准,不能因为保存了报告就宣称已经锁定全部数据和环境。

先给每次运行建立一份实验清单
材料建议记录会改变结果的差异
策略定义Prompt、确认后的规格、固定规则与可调参数排序方向、退出规则或调仓条件变动
实际实现运行代码、依赖及相关引擎版本(如可获得)重新生成代码、库默认行为或计算方式变化
数据来源、字段、取数时间、历史范围与版本标识(如有)补齐缺失值、历史修订、复权或成分口径变化
运行配置股票池、区间、预热、费用、滑点与成交假设窗口、成本或不可成交处理不同
随机过程算法、随机性参数及运行方式(如适用)抽样、随机搜索或模型训练路径不同
结果证据信号、持仓、订单、成交及指标计算口径过程相同但指标区间或展示精度不同

从最早差异向前追,而不是只比较终点

先对齐两次运行的日期、交易日历和有效样本,再比较数据字段与信号。信号一致但持仓不同,应检查权重、数量处理与调仓逻辑;持仓目标一致但成交不同,应检查订单、资金及撮合假设;成交与现金流都一致时,再核对指标计算与展示。

每次只改变一个可控制因素。先用原代码和原配置复现基线,再替换数据或代码,记录哪一步引入差异。若多个因素同时改变,只能说明组合结果不同,难以解释差异究竟来自哪里。

  1. 01第一步:列出两次运行的材料与缺失项,不完整的条件先标为未知。
  2. 02第二步:找到第一处数据、信号、目标持仓或成交分歧,记录日期与标的。
  3. 03第三步:对照对应字段、代码位置与配置,提出可验证的原因。
  4. 04第四步:固定其他条件重跑,保留差异是否消失的证据。

数据更新、随机性和显示差异要分别解释

历史数据可能因补充、修订或处理口径变化而不同。相同代码重新取数,不等于读取了相同数据。遇到结果变化时,应尽量追到具体字段和日期;若无法获取旧版本,就说明不能完全复现的原因,而不是把变化直接解释成策略能力提升。

涉及随机抽样、参数搜索或模型训练时,要记录对应算法与随机性设置。固定一个种子不能保证所有库、并行执行和环境变化下都得到完全相同的结果,也不会自动固定大模型重新生成的代码。应优先保存已经采用的产物,再区分确定性计算与随机实验。

如果差异只出现在报告末位小数,应核对精度、取整、收益率单位与日期对齐;不要把百分比与小数、累计收益与年化收益混用。即使怀疑只是显示问题,也应先证明底层序列和成交记录一致。

用 FiClaw 整理一份结果差异说明

可以让 FiClaw 辅助整理材料、解释代码和提出重跑计划。以下模板要求结论回到具体证据;材料清单是研究方法,不意味着工作站已经提供完整的数据快照或版本控制系统。文末随机性与收益率计算文档同样属于方法参考。

请比较运行 A 与运行 B,先解释差异,不选择收益更高的一次。
逐项对照:确认后的策略规格、实际代码、参数、股票池、区间与预热、数据来源与版本、费用、滑点、成交约束、依赖版本及随机性设置。没有材料的项目标为未知。
请按数据→信号→目标持仓→订单/成交→净值→汇总指标的顺序,寻找第一处可证实的差异,列出日期、标的、字段或代码位置。
将原因分为:已证实、需要补充证据、尚不能判断。提出一次只改变一个因素的重跑计划,并说明预期看到什么才能验证原因。
保留 A、B 原始产物,不覆盖旧报告;最后输出差异说明、复现步骤与无法锁定的条件。

常见问题

同一个 Prompt 为什么可能得到不同回测结果?

同一 Prompt 可能生成不同代码,也可能在未明确的条件上采用不同假设;随后使用的数据、参数与运行设置也可能变化。应保存并比较实际采用的规格、代码与配置,而不是只核对输入文字。

固定随机种子就能完全复现吗?

不能一概保证。种子只影响对应实现中的随机过程,还需核对算法、依赖版本、执行方式、数据与代码。没有随机过程的策略同样可能因数据修订或配置改变产生差异。

FiClaw 研究最少应该保留哪些复现材料?

建议保留原始 Prompt、确认后的规格、实际代码、参数和运行配置、数据范围与取数信息、结果及修改原因。数据版本、订单日志或环境信息无法取得时,应明确记录限制,并避免承诺可以完全复现。

方法与产品参考

继续阅读

把研究问题变成可检查的实验

在 FiClaw 中从明确策略规则开始,再核对代码、数据口径与回测结果。