前视偏差:为什么回测能赢、实盘却亏
2026-07-06
你搭好一个策略、跑完回测,资金曲线一路向右上方。上了实盘,一个月内账户就在流血。最常见的原因不是运气差,而是 前视偏差(look-ahead bias):在真实下单的那一刻本不存在的信息,被你的回测偷偷用上了。
前视偏差之所以危险,正是因为它让人感觉一切正常。代码在跑,数字很漂亮,而漏洞就藏在一个索引偏移,或一个对K线数据的 粗心假设里。
形态一:用产生信号的同一根K线交易
一根K线的指标值,只有在这根K线 收盘 后才最终确定。如果RSI在第N根K线上穿50,而你的回测在第N根的 开盘价——或最低价——入场,你就穿越回了过去。在实盘中,这根K线运行期间RSI一直在波动,你据以行动的那次上穿还没发生。
形态二:同一根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线都被触及的次数。如果它们占了你盈利交易的很大一部分,你的 结果是一个假设,而非一次测量。
- 交叉实现: 如果可以,用同一份规格独立地重写代码,逐笔比对。不一致就意味着至少有一个实现在撒谎。