我经常看到一种说法:
“我们的回测是严格按时间顺序跑的,没有偷看未来,所以结果可信。”
前半句很重要。
后半句却不能自动成立。
没有 look-ahead bias,不等于没有 overfitting。
这是交易策略研究里最容易混在一起的两个问题之一。
1. 什么叫“没有偷看未来”?
先说我们自己。
公开回测采用按历史时间顺序逐根推进的代码重放。
原则很简单:
- 当前决策只能读取当时已经存在的数据;
- 当前目标市场还没有发生的结果不能提前进入决策;
- 依赖历史结果维护的内部状态,只能由当时已经完成、已经可以确认的事件更新;
- 策略动作按照生产代码真实顺序执行。
这解决的是一个非常具体的问题:
在历史的 t 时刻,程序有没有偷偷使用 t 之后的信息?
如果答案是有,那回测基本失去意义。
2. 但策略可以“不偷看未来”地过拟合
假设你拿到 5 年历史数据。
你做了第一个策略。
结果一般。
于是加一个过滤器。
更好。
再加一个条件。
更好。
再针对最差的那几个月修一下。
又更好。
最终你得到一条漂亮曲线。
在每一次单笔决策里,你都没有读取未来 K 线。
但你这个研究者看过完整五年。
你知道:
- 哪些月份差;
- 哪些交易亏;
- 哪些行情最难;
- 哪个参数让最终曲线最好。
所以问题从:
程序有没有偷看未来?
变成:
研究过程有没有把历史答案反复反馈进规则?
这就是另一类过拟合。
3. “因果正确”与“样本独立”是两件事
我会把它们分开。
因果正确
关心:
decision(t)
只能使用
information(<= t)
这是代码和时序问题。
样本独立
关心:
这段数据
有没有参与过
规则发现 / 参数选择 / 假设筛选
这是研究设计问题。
一个回测可以满足第一条,但不满足第二条。
我们的公开报告对此没有回避:
历史市场数据参与过策略研究和规则选择,因此完整五年不是完全未接触的独立样本。
我觉得这句话必须保留。
4. 为什么“再留最后 7 天”也不一定是真正 OOS
很多人会做:
前面数据选参数
最后 7 天验证
听起来已经是 Out-of-Sample。
但如果你是在看了最近表现之后才想到某个特征,然后把最后 7 天留出来,严格来说,这 7 天也不一定完全独立。
因为:
特征家族本身可能就是被近期现象启发出来的。
这就是为什么我不会只问:
参数有没有在测试集上调?
还会问:
这个研究方向是什么时候想到的?
这类边界很难做到完美。
但至少应该意识到它存在。
5. 我更关心“一个想法怎么死掉”
研究过程里,最容易被公开的是成功规则。
但更能判断研究质量的,其实是:
有多少看起来不错的想法最后被否掉了?
我们最近的一次内部研究就出现过类似情况。
近期表现暴露出一个弱点,于是产生了一个新的自适应过滤思路。
它在局部样本里看起来有帮助。
但放回完整策略之后,我们还继续检查:
- 更长历史;
- 不同年份;
- 回撤;
- 连续亏损;
- 过去数据选参;
- 是否只是在解释最近已经知道的亏损。
最终,它没有达到进入生产版本的标准。
所以没上。
这对我来说不是一次“研究失败”。
相反:
一个研究流程如果从来没有拒绝过自己提出的规则,才更值得怀疑。
6. 参数邻域比“最佳参数”更有意思
假设一个规则的最佳参数是 X。
X 的结果非常漂亮。
但:
X - 一点点 → 很差
X + 一点点 → 很差
这种结果我不会太兴奋。
因为它可能只是历史噪声里的尖峰。
更有意思的是:
附近一片参数
结果方向大致一致
也就是参数邻域稳定性。
公开文章里我们不会给出真实策略参数和阈值。
但研究方法本身可以公开:
我更愿意看到一个宽而平的可接受区域,而不是一个孤立的“神参数”。
7. 时间切片能回答不同的问题
我不会只看:
2021 → 2026
总结果
还会拆成:
- 年度;
- 月度;
- 周度;
- 近期滚动窗口;
- 时间顺序分段。
这些切分不是为了找到最好看的那一张表。
它们是在问:
edge 是不是只存在于某个时间段?
例如一个规则:
2021 很好
2022 很好
2023 很好
2024 崩
2025 崩
和一个规则:
每年都只是略微正
即使五年总结果一样,我也会更喜欢第二种。
8. 总分提升也可能是假象
假设新规则让标准化总分增加了。
听起来升级成功。
但还要继续问:
- 最大回撤有没有变差?
- 最长连亏有没有变差?
- 最差周有没有变差?
- 交易数量是不是骤降?
- 改善是不是只来自几个极端样本?
- 某一年是不是几乎没有命中?
- 结果是不是对一个很窄的参数特别敏感?
量化研究不是只优化一个数字。
如果只优化总分,最终很容易把整个策略变成“对历史答案的压缩文件”。
9. 一个更诚实的回测结论应该怎么写
我不太喜欢:
“五年回测证明策略长期稳定盈利。”
我更愿意写:
“当前规则在历史时间顺序重放中表现出一定的方向质量和路径稳定性;历史数据参与过研究,因此该结果不是完全独立的样本外预测,也不能保证未来重复。”
这句话没那么有营销感。
但它更接近数据真正能支持的结论。
10. 所以怎样判断一个 Polymarket Bot 回测更可信?
我会看它有没有回答这些问题:
有没有使用未来数据?
↓
历史数据是否参与过研究?
↓
结果是否跨时间段存在?
↓
最佳参数附近是否稳定?
↓
失败规则有没有被记录?
↓
总分之外,回撤和连亏如何?
↓
研究逻辑能否被生产代码一致复现?
↓
真实执行还缺哪些摩擦?
注意,这些检查也不能“证明未来一定有效”。
它们只是不断减少我们自己骗自己的方式。
在我看来,这已经是回测最重要的工作之一。
完整公开回测方法:
Polymarket BTC 5m Public Backtest Report
相关阅读:
本文仅用于技术研究与教育,不构成投资或财务建议。历史数据、回测和任何统计验证都不能保证未来表现。