将MT5策略测试器中的回测速率调到最大(最快速度),**确实非常容易导致出现不符合策略逻辑的秒级成交(闪电交易)**。这并非MT5的“bug”,而是由**回测引擎的工作方式**与**策略代码的编写方法**在高速运行下不匹配所导致的。
---
### 为什么最大速率会导致问题?
MT5回测器在最大速率下,为了追求速度,会采用一种高度优化的处理方式。它不再是“模拟”每一个Tick的到来,而是倾向于**在每个历史柱(K线)的范围内,快速地、近乎同时地处理大量计算和逻辑判断**。
这种处理方式与几种常见的代码写法结合,就会产生问题:
#### 1. 最大的罪魁祸首:`OnTick()` 中的 `Open[0]` / `Close[0]` 逻辑
这是最核心的原因。在最大速率下,回测器可能会在一个K线的时间内,瞬间连续执行成千上万次 `OnTick()` 函数。
* **正常逻辑**:`Close[0]` 代表当前未完成K线的当前价。
* **高速回测下的问题**:
1. 回测器加载了一根已知所有信息(O, H, L, C)的K线。
2. 在极短时间内,`OnTick()` 被疯狂调用。
3. 在某个瞬间,`Close[0]` 的值可能等于最高价 `High[0]`,满足了你的买入条件(例如:`Close[0] > 上轨`),于是系统记为“在最高价”开仓。
4. 在几乎同一个瞬间,`Close[0]` 的值又变回了收盘价 `Close[0]`(或最低价),触发了你的卖出或止损条件(例如:`Close[0] < 开仓价`),于是系统立刻平仓。
5. **结果**:在回测报告中,你会看到在这根K线内,发生了一次几乎盈亏为0的开仓和平仓,速度是毫秒级。而这在真实的交易中几乎不可能发生,因为价格从最高点运动到收盘价需要一个过程。
#### 2. “仅用开盘价”模式的加速悖