同一根K线碰到止盈和止损,回测怎么算?

 / 
5

同一根 K 线同时触及止盈和止损,回测里没有一个"客观正确"的答案,只有你选择采用哪种假设。K 线只记录了开盘、最高、最低、收盘四个价格,没有记录最高价和最低价谁先出现。当止盈和止损都落在这根 K 线的价格范围内时,真实路径信息已经丢失了。

欧易OKX交易所
全球领先的加密货币平台,适合新手与进阶交易者
新手福利:注册即享20% 交易手续费减免!

我的判断很直接:如果你用的是简化回测框架,优先按止损触发处理;如果你有条件使用更细粒度的数据,就用低周期数据还原路径,而不是依赖任何假设。 前者是保守做法,后者是更接近真实情况的解法。两者都比"默认止盈先触发"可靠。

不同回测框架的默认规则不一样

这不是一个统一标准,不同软件的处理方式有明确差异。你在用什么工具,直接决定了回测结果会被怎样扭曲。

TradingView 的 broker emulator 采用开盘价相对高低的启发式规则:如果开盘价更靠近最高价,假设路径是"开→高→低→收",对多头来说止盈先触发;如果开盘价更靠近最低价,假设路径是"开→低→高→收",止损先触发。这个规则是确定性的、可查的,但它本质上是一个猜测,不是测量。

MultiCharts 采用同样的开盘价启发式。Wealth-Lab 在讨论"智能同 K 线出场"时,给出的结论更保守:在无法确定顺序的情况下,回测应该偏向更悲观的结果,也就是优先止损。有独立回测引擎的代码注释也写明"if a bar could hit both, the STOP is assumed first (conservative)"。

freqtrade 和 banbot 的处理是优先触发止损。而 backtrader 和 vnpy 的情况更麻烦:止盈止损作为子订单,优先触发先发送的那个,不一定先止损还是先止盈。这意味着同一组参数、同一段行情,换一个框架回测,结果可能完全不同。

这个假设对回测结果的影响有多大

有研究做过一个规模很大的压力测试:在 Binance USDT 永续合约上,用 BTC、ETH、BNB、XRP、SOL 五个市场,每个市场 4,882,500 种配置,分别按"止盈优先"和"止损优先"跑两次,对比结果。

在总收益发生变化的 37,168,124 组配置中,中位数变化是 总收益下降 13.50 个百分点,胜率下降 1.94 个百分点,最大回撤加深 5.80 个百分点。在第 10 百分位,总收益变化达到 -113.86 个百分点,反映了复利效应下的长尾影响。

这个数字说明:如果你的策略经常出现同一根 K 线同时触及止盈止损的情况,你的回测结果有相当大一部分是由框架的默认假设决定的,而不是由策略逻辑决定的。

怎么知道自己回测里这个问题有多严重

有一个简单的自查方法。以 banbot 为例,当它检测到同一根 K 线同时触发止盈止损时,会输出警告并统计这类订单的数量。有一篇中文记录显示,在 ETH 上回测 10 天、259 个订单中,183 个订单是在同一根 K 线上同时满足止盈止损的。这意味着超过 70% 的出场是由假设决定的,回测结果基本不可信。

如果你用的框架没有这种警告,可以自己检查:在成交记录里,找出那些出场 K 线的最高价和最低价同时覆盖了你的止盈价和止损价的交易。如果这类交易占比很高,说明你的止损止盈设置相对 K 线波动来说太窄了,或者你用的 K 线周期太粗。

更可靠的解法:用低周期数据还原路径

如果你需要更准确的结果,而不是依赖假设,正确的方向是用更低时间周期的数据来"放大"这根 K 线。比如你策略运行在 1 小时 K 线上,可以引入 1 分钟 K 线数据,让回测引擎按时间顺序逐根检查 1 分钟 K 线,看止盈和止损哪个先被触及。

PyneCore 的 Bar Magnifier 功能做的就是这件事:脚本仍然在 1 小时 K 线上运行,但订单撮合引擎会检查该小时内每一根低周期 K 线的 OHLC,按顺序判断哪个价位先被触及。TradingView 也有类似的 Bar Magnifier 设置。

代价是数据和计算量。你需要额外获取低周期历史数据,回测速度会变慢。而且低周期数据仍然不是逐笔数据,如果止盈和止损落在同一根 1 分钟 K 线内,问题依然存在,只是概率小了很多。

对于普通用户,一个务实的折中方案是:如果你的策略在 1 小时或更高周期上运行,止盈止损距离至少是 K 线平均波幅的 2 到 3 倍,那么同一根 K 线同时触及两边的概率会显著降低。这不是消除了问题,而是把问题控制在可以接受的频率内。如果做不到这一点(比如做高频或窄幅震荡策略),那就必须正视这个假设对你回测结果的影响,不要把回测收益当作策略真实表现的证据。

完成标准

判断你是否处理好了这个问题,标准不是"选了一个正确的规则",而是你能回答:你的回测中,同一根 K 线同时触及止盈止损的交易占比是多少?如果这个比例超过 10% 到 20%,你的回测结果需要打折扣看待。如果比例很低,框架默认规则的影响有限,继续用当前设置问题不大。如果比例很高,要么换用低周期数据,要么接受"这个回测结果只能在保守假设下成立"这个事实,不要用它来估算预期收益。

欧易OKX交易所
全球领先的加密货币平台,适合新手与进阶交易者
新手福利:注册即享20% 交易手续费减免!

参考资料

  1. Wealth-Lab·Smart-Same-Bar-Exits-for-Backtests,2026-10-26
  2. MultiCharts·Intra-bar Price Movement Assumptions in Backtesting,2026-10-26
  3. Rulyfi·Does Your Backtest Survive the Adverse Same-Bar Fill? A 48.8 Million-Pair Stress Test,2026-10-26
  4. 微信公众平台·回测中止损和止盈的坑,你遇见过吗?,2026-10-26
  5. AlfaTactix·Pine Strategy Risk: SL, TP, % Equity, Daily Trade Cap,2026-10-26
  6. PyneCore·Bar Magnifier,2026-10-26
  7. SiftingIO·Stop-loss and take-profit in the same candle: OHLC backtests,2026-10-26