避免自我欺骗的回测
历史模拟是研究工具,不是时光机,也不是实盘表现的承诺。

查看答案之前先写下规则
回测将明确的决策规则应用于历史数据,计算模型中的一系列交易本会产生什么结果。其价值在于用证据检验假设。如果每遇到亏损案例就修改规则,练习就变成描述过去,而非检验可重复的决策流程。
从交易品种范围、观察区间、入场条件、出场条件、仓位计算方法和成本模型开始。明确何时能获得信息,以及订单最早何时能成交。基于收盘价的策略,通常不能在缺乏进一步理由的情况下,假设自己提前知道最终收盘价,并恰好按同一价格成交。
警惕信息向过去泄漏
当模拟使用决策时尚不可得的信息,就发生了前视偏差。例如修订后的经济数据、之后的业绩公告或未来的指数成分名单。历史数据库在今天可能完全准确,却不适合重建某人在过去某日实际知道什么。
当测试范围排除已消失的工具时,就会产生幸存者偏差。仅用仍然存续的公司测试策略,可能遗漏影响历史机会集合的破产、退市及收购。失败的加密代币或已终止基金也会产生同样问题。应记录数据集如何处理消失的对象,而不是悄悄删除难处理的记录。
公司行动需要单独核对。一次一拆二的拆股,会把每股四十美元的一百股变成每股约二十美元的两百股,暂不考虑其他价格变化。拆股本身不会让持仓价值减半。将复权价格与未调整股数混用,会凭空制造盈亏。如果收益序列已经包含股息再投资,再加一次现金股息也会重复计算。应分别说明信号使用的价格、实际可交易价格和持仓记账方法。
将执行建模,而不是假定市场会帮忙
蜡烛图触及限价,并不证明你的整笔订单都会成交。排队位置、可用数量和蜡烛图内部价格路径都很重要。如果同一根 K 线同时触及止损和目标,仅凭该 K 线可能无法确定先后顺序。应保守处理这类模糊情况,或使用能确定顺序的数据。
纳入价差、佣金、融资费用、适用时的借券成本,以及合理的滑点。税务处理取决于司法管辖区和具体情况,因此通用模拟应说明结果是否为税前,而不是编造一个通用税率。比较多种成本假设下的结果。只有在免费且瞬时成交时才成功的方法是脆弱的。
区分发现与评估
尝试数百种参数组合并展示最佳一种,会产生选择问题。某种组合可能仅凭运气就显得极好。应保留未用于开发规则的数据,避免反复查看这份留出数据,直到它变成另一个训练样本。前向纸面测试提供另一种检验,因为新观察是在规则固定之后才到来的。
报告失败的变体、样本量、日期范围和试验次数,而不只是获胜的图表。考察相邻参数选择的表现是否相似,还是某个孤立设置贡献了全部利润。即使电子表格精确到多位小数,假设结果仍是假设结果。历史算术无法完整再现流动性、情绪和操作问题。
保留数据版本和计算变更的研究日志。修正拆股调整或新纳入一个退市案例,都可能显著改变结果,而这些修正应保持可见。可复现性意味着他人能根据所述输入与规则重建同一答案。这不代表答案在经济上有用,但却是判断其是否有用的必要步骤。
先复原一笔交易,再相信一千笔结果
挑选一笔代表性交易,重建完整时间线:数据标注日期、真正可获得的时间、作出决定、订单到达市场、各次成交以及收费。这些时间不能互换。周二收盘后发布的公告,不能支持周二上午的决策。时区转换和夏令时切换,也可能使一条看似合理的规则悄然使用未来信息。
接着核对整个账户,而不只是已平仓交易清单。期初现金、外部资金流、已实现盈亏和未平仓头寸的市值,应能解释期末权益。只统计已平仓结果,可能让已兑现利润显眼,却把巨额浮亏留在报告之外。多个同时出现的信号也不能各自花掉同一笔可用现金。模拟器必须规定订单争用资金、购买力不足及样本结束时仍有持仓的处理方法。
用结果已知的小型人工数据测试程序。没有费用且价格恒定时,交易不应创造利润;纯粹拆股在股数正确调整后应保持财富不变。固定交易清单后提高佣金,净利润应恰好减少新增费用。缺失价格必须触发有记录的处理规则,而不是悄悄按零成交,或无限期沿用过时报价。
最后,选择真正回答研究问题的比较基准。只做多股票的规则可能仅仅因为市场上涨而盈利。应在相同日期,与明确定义的被动敞口比较,并一致处理股息和现金。部分时间空仓也改变风险敞口及机会成本。期末余额更高是需要解释的证据,不是择时能力存在的自动证明。