前视偏差:为什么回测能赢、实盘却亏

2026-07-06

你搭好一个策略、跑完回测,资金曲线一路向右上方。上了实盘,一个月内账户就在流血。最常见的原因不是运气差,而是 前视偏差(look-ahead bias):在真实下单的那一刻本不存在的信息,被你的回测偷偷用上了。

前视偏差之所以危险,正是因为它让人感觉一切正常。代码在跑,数字很漂亮,而漏洞就藏在一个索引偏移,或一个对K线数据的 粗心假设里。

形态一:用产生信号的同一根K线交易

一根K线的指标值,只有在这根K线 收盘 后才最终确定。如果RSI在第N根K线上穿50,而你的回测在第N根的 开盘价——或最低价——入场,你就穿越回了过去。在实盘中,这根K线运行期间RSI一直在波动,你据以行动的那次上穿还没发生。

诚实的惯例:用K线的 收盘确定值 判定信号,在 下一根K线的开盘价 成交入场。这正是 实盘机器人体验市场的方式,也是本站引擎对每一笔交易强制执行的规则。

形态二:同一根K线内的止盈与止损

假设你的仓位设了+3%止盈和−2%止损,而某根K线的最高价越过止盈、最低价击穿止损。哪个先成交?仅凭OHLC数据 你无法知道——K线并不记录价格在其内部走过的路径。

乐观的回测假设止盈先成交,而它虚增的胜率恰恰来自最关键的那些交易(波动大的K线)。站得住脚的选择是保守的那个:当两者 都被触及时,假设止损先成交。让回测看起来比现实稍差,好过看起来好得多。本引擎在每一根有歧义的K线上都 采用止损优先。

形态三:使用尚未收盘的高周期K线

一个流行的过滤器:「只在4小时趋势向上时做多」。微妙的漏洞:10:00时,当前这根4小时K线(08:00–12:00)还在 运行中。如果回测按时间戳去查4h指标值,它读到的是一根在实盘中仍在绘制的K线的最终值——那个区间里的4根1小时 K线中有3根,会被未来所控制。

高周期过滤器只能引用在当前低周期K线开盘 之前已完全收盘 的HTF K线。这是多周期策略中最常见、也最具 破坏性的漏洞之一,因为知道趋势未来的趋势过滤器,总是看起来像天才。

形态四:用全部数据计算的指标

任何用完整历史来归一化、排名或缩放的做法,都会把未来泄漏到过去:对全部数据做min-max缩放、用全周期均值算z分数、或挑选 跨越尚未到来年份计算出的「成交量前10%」。策略在第N根K线读取的每个值,都必须仅由第0..N根K线计算得出。

形态五:一根K线内的双向入场

在上方挂买入止损、下方挂卖出止损的突破系统,会遇到与形态二相同的路径问题:如果一根K线扫掉了两个价位,OHLC无法告诉你 哪一侧先触发。把这种歧义按盈利那一侧解决(在上涨市场中常是「永远先做多」)的回测,制造出一个并不存在的优势。

如何检查你自己的回测

  • 平移测试: 把每次入场都延后一根K线。如果优势大部分消失了,那个「优势」是信息泄漏,而非市场行为。
  • 好得离谱测试: 窄止盈下胜率超过约70%,或没有明显回撤的资金曲线,值得怀疑——而非庆祝。
  • 路径歧义审查: 数一数止盈和止损在同一根K线都被触及的次数。如果它们占了你盈利交易的很大一部分,你的 结果是一个假设,而非一次测量。
  • 交叉实现: 如果可以,用同一份规格独立地重写代码,逐笔比对。不一致就意味着至少有一个实现在撒谎。
回测永远只能是实盘的近似。目标不是完美的模拟——而是让每一处歧义都 对你不利 地解决,这样实盘才会 往好的方向给你惊喜。

阅读很好,实测更好 — 用币安7年数据免费运行一次真实回测。

试用回测器