Engine ↔ MetaTrader 5 parity
How do exported strategies perform in MetaTrader 5?
Our own C++ engine, three years in the making, built to export cleanly to MetaTrader 5.
We don’t wrap someone else’s backtester. We wrote our own high-performance C++ engine. This parity test puts its results side by side with the exact same strategy exported to MQL5 and run in MetaTrader 5.
97% for ordinary entry/exit strategies
typical strategy, engine vs MetaTrader 5
87% land within 5 points of return
every strategy comparable
100 EUR/USD strategies · one year of hourly data · matched costs both sides. Every one is here — including the disagreements, and why.
Ordinary strategies (77)
Entry/exit logic without stacked state. The strategies most users build and export.
| Strategy | Symbol | Period | Engine trades | MT5 trades | Trade gap | Engine return | MT5 return | Return gap |
|---|---|---|---|---|---|---|---|---|
| Donchian 10 Breakout — ADX>25 · MACD · 2R+Signal | EURUSD | 2023 | 132 | 133 | -0.8% | 34.7% | 35.7% | -1.0pp |
| Donchian 10 Breakout — ADX>25 · 2R | EURUSD | 2023 | 168 | 170 | -1.2% | 40.9% | 43.9% | -3.0pp |
| Tempest Bollinger(20,2) Band Breakout EMA(50)-slope | EURUSD | 2023 | 177 | 177 | 0.0% | 32.0% | 30.6% | +1.4pp |
| Maelstrom Bollinger(20,2) Band Breakout above/below | EURUSD | 2023 | 178 | 178 | 0.0% | 6.4% | 5.4% | +1.0pp |
| Cinder TTM Squeeze MACD histogram Release (K1.5 BB20) | EURUSD | 2023 | 140 | 140 | 0.0% | 97.2% | 97.5% | -0.3pp |
| Flux TTM Squeeze MACD histogram Release (K1.5 BB30) | EURUSD | 2023 | 52 | 52 | 0.0% | 11.6% | 12.0% | -0.4pp |
| Blaze Semivariance Skew Donchian(20) Break | EURUSD | 2023 | 199 | 198 | +0.5% | 77.5% | 68.9% | +8.6pp |
| Pulse Semivariance Skew Donchian(20) Break | EURUSD | 2023 | 195 | 194 | +0.5% | 82.0% | 72.2% | +9.8pp |
| Piston ATR Expansion 20-bar range Break | EURUSD | 2023 | 186 | 186 | 0.0% | 76.6% | 68.7% | +8.0pp |
| Geyser StdDev Expansion 20-bar range Break | EURUSD | 2023 | 199 | 198 | +0.5% | 70.8% | 61.9% | +8.9pp |
| Squall ATR Squeeze 20-bar range Break | EURUSD | 2023 | 87 | 88 | -1.1% | -3.0% | -1.3% | -1.7pp |
| Vortex StdDev Squeeze 20-bar range Break | EURUSD | 2023 | 55 | 55 | 0.0% | 15.0% | 14.6% | +0.4pp |
| Regime Trend aroonBreak14 / adxGt22p14 | EURUSD | 2023 | 228 | 229 | -0.4% | 3.8% | 2.6% | +1.2pp |
| Regime Trend aroonBreak14 / adxGt22p20 | EURUSD | 2023 | 158 | 159 | -0.6% | -11.2% | -9.5% | -1.7pp |
| Trend Gate adxGt22p14 + emaX20 | EURUSD | 2023 | 151 | 154 | -1.9% | 36.5% | 28.4% | +8.1pp |
| Trend Gate adxGt22p14 + emaX20 +RVol | EURUSD | 2023 | 86 | 87 | -1.1% | 10.6% | 8.9% | +1.7pp |
| Router hurst_rs : donch20 | bb20 | EURUSD | 2023 | 122 | 124 | -1.6% | 21.3% | 17.6% | +3.7pp |
| Router hurst_rs : donch20 | bb30 | EURUSD | 2023 | 194 | 194 | 0.0% | -3.7% | -5.8% | +2.1pp |
| Donchian(20) Break + ADX14>20+DI · RR2 | EURUSD | 2023 | 161 | 161 | 0.0% | 17.0% | 12.1% | +4.9pp |
| Donchian(20) Break + ADX14>20+DI · RR3 | EURUSD | 2023 | 136 | 136 | 0.0% | 8.3% | 6.0% | +2.3pp |
| Bollinger(20) breakout + AO momentum · rr1.5 | EURUSD | 2023 | 167 | 167 | 0.0% | 19.6% | 19.8% | -0.1pp |
| Bollinger(20) breakout + CMO(14) momentum · be+time | EURUSD | 2023 | 175 | 176 | -0.6% | 15.8% | 11.6% | +4.2pp |
| Dual-confirm ATR14 rising + ADX>20 · Bollinger50/2 breakout [rr_be2] | EURUSD | 2023 | 88 | 87 | +1.1% | -7.7% | -3.6% | -4.0pp |
| MS Amihud illiquidity router · EMA 12/26 cross / Bollinger band break (p20, betime) | EURUSD | 2023 | 186 | 186 | 0.0% | 6.4% | 5.1% | +1.3pp |
| MS Amihud illiquidity router · EMA 12/26 cross / Bollinger band break (p20, rr2) | EURUSD | 2023 | 189 | 189 | 0.0% | 32.6% | 32.2% | +0.3pp |
| Halcyon Deep-Liquidity PPO Momentum | EURUSD | 2023 | 146 | 144 | +1.4% | -25.8% | -24.4% | -1.4pp |
| Quartz Deepening-Liquidity VIDYA Cross | EURUSD | 2023 | 90 | 89 | +1.1% | 44.0% | 43.5% | +0.6pp |
| Amber Bollinger Reversion (Quick) | EURUSD | 2023 | 269 | 268 | +0.4% | 43.7% | 43.3% | +0.4pp |
| Amber CoG Cycle | EURUSD | 2023 | 271 | 270 | +0.4% | -52.5% | -51.5% | -1.0pp |
| Amber Connors Reversion (Trend) | EURUSD | 2023 | 72 | 65 | +10.8% | 9.4% | 2.2% | +7.2pp |
| Amber CVD Order-Flow (Runner) | EURUSD | 2023 | 43 | 43 | 0.0% | -8.0% | -8.0% | -0.0pp |
| Amber CyberCycle Wave (Scalp) | EURUSD | 2023 | 302 | 300 | +0.7% | 0.2% | -4.6% | +4.8pp |
| Amber Garman-Klass Current (Trend) | EURUSD | 2023 | 318 | 313 | +1.6% | 26.4% | 28.9% | -2.5pp |
| Amber Hurst Imprint | EURUSD | 2023 | 33 | 33 | 0.0% | 2.2% | 2.2% | +0.0pp |
| Amber Hurst Imprint (Scalp) | EURUSD | 2023 | 38 | 38 | 0.0% | -3.5% | -3.6% | +0.0pp |
| Amber RSI Imprint (Quick) | EURUSD | 2023 | 7 | 7 | 0.0% | -5.7% | -5.7% | +0.0pp |
| Amber RSI Reversion | EURUSD | 2023 | 535 | 534 | +0.2% | 23.1% | 24.0% | -0.9pp |
| Amber Sinewave Oscillator (Quick) | EURUSD | 2023 | 366 | 366 | 0.0% | -27.2% | -22.9% | -4.3pp |
| Amber VWAP-Z Flow (Trend) | EURUSD | 2023 | 159 | 159 | 0.0% | 19.1% | 17.4% | +1.8pp |
| Apex Keltner Breakout (Scalp) | EURUSD | 2023 | 165 | 164 | +0.6% | -3.7% | -2.0% | -1.6pp |
| Apex MACD Trend Glide | EURUSD | 2023 | 74 | 74 | 0.0% | 14.4% | 15.1% | -0.7pp |
| Apex Nbar High Eject (Runner) | EURUSD | 2023 | 249 | 249 | 0.0% | -13.5% | -13.3% | -0.1pp |
| Apex Nbar High Eject (Trend) | EURUSD | 2023 | 207 | 206 | +0.5% | 5.7% | 6.5% | -0.8pp |
| Aurora CCI Divergence (Trend) | EURUSD | 2023 | 157 | 156 | +0.6% | 51.9% | 47.1% | +4.8pp |
| Aurora CCI Hunter (Quick) | EURUSD | 2023 | 337 | 338 | -0.3% | -15.5% | -16.8% | +1.3pp |
| Aurora Fractal Signal (Quick) | EURUSD | 2023 | 259 | 258 | +0.4% | 64.4% | 80.8% | -16.4pp |
| Basalt Connors Hunter (Marathon) | EURUSD | 2023 | 145 | 130 | +11.5% | -30.6% | -19.5% | -11.0pp |
| Cinder CCI Divergence (Marathon) | EURUSD | 2023 | 118 | 118 | 0.0% | 28.6% | 28.9% | -0.4pp |
| Drift Connors Split (Marathon) | EURUSD | 2023 | 133 | 128 | +3.9% | 23.3% | 45.0% | -21.7pp |
| Ironclad Nbar High Killzone (Quick) | EURUSD | 2023 | 137 | 137 | 0.0% | 12.1% | 12.1% | +0.0pp |
| Juniper Nbar High Session Play (Trend) | EURUSD | 2023 | 106 | 106 | 0.0% | -2.6% | -2.6% | -0.0pp |
| Kraken Nbar High Session Play (Runner) | EURUSD | 2023 | 106 | 106 | 0.0% | -1.4% | -1.4% | +0.0pp |
| Anchor Williams Bounce (Trend) | EURUSD | 2023 | 291 | 289 | +0.7% | -30.7% | -29.6% | -1.1pp |
| Cadence Stochastic Cross (Runner) | EURUSD | 2023 | 321 | 321 | 0.0% | -18.8% | -19.5% | +0.7pp |
| Beat Stochastic Cross (Trend) | EURUSD | 2023 | 273 | 272 | +0.4% | 44.3% | 42.6% | +1.7pp |
| Bayes ER Donchian Break (Quick) | EURUSD | 2023 | 116 | 117 | -0.9% | -0.3% | -3.1% | +2.9pp |
| Bayes ER Donchian Break (Runner) | EURUSD | 2023 | 105 | 106 | -0.9% | -16.6% | -19.8% | +3.2pp |
| Cauchy Hurst Super Ride (Quick) | EURUSD | 2023 | 59 | 59 | 0.0% | 8.3% | 9.4% | -1.1pp |
| Cinder Bandwidth Squeeze (Trend) | EURUSD | 2023 | 113 | 113 | 0.0% | 79.7% | 80.0% | -0.4pp |
| Cinder Garman-Klass Trend (Quick) | EURUSD | 2023 | 386 | 383 | +0.8% | 27.1% | 31.5% | -4.4pp |
| Undertow Amihud Illiquid Fade Swing (Trend) | EURUSD | 2023 | 153 | 151 | +1.3% | -32.2% | -32.0% | -0.2pp |
| CCI Zero Cross / Efficient (Runner) | EURUSD | 2023 | 78 | 78 | 0.0% | 60.0% | 59.3% | +0.7pp |
| Stochastic Band / ADX20 (RR2) | EURUSD | 2023 | 196 | 193 | +1.6% | -7.5% | 2.6% | -10.1pp |
| Cyclone Keltner(20,2.5) Band Breakout above/below | EURUSD | 2023 | 92 | 92 | 0.0% | -21.5% | -22.3% | +0.8pp |
| Pulse ATR Squeeze 20-bar range Break | EURUSD | 2023 | 84 | 83 | +1.2% | 6.6% | 6.6% | -0.0pp |
| Value Reclaim Value-Area Break60 + EMA50 Slope | EURUSD | 2023 | 198 | 198 | 0.0% | 14.5% | 10.1% | +4.4pp |
| MS Corwin-Schultz spread-expansion · Aroon trend-age (ATR-runner) | EURUSD | 2023 | 160 | 160 | 0.0% | 13.0% | 16.8% | -3.9pp |
| MS Kyle impact-building · TEMA price-cross (rr3) | EURUSD | 2023 | 135 | 134 | +0.7% | -2.2% | -3.3% | +1.1pp |
| Cycle Center-of-Gravity ppoh (Swing) | EURUSD | 2023 | 196 | 194 | +1.0% | 1.8% | 5.8% | -4.0pp |
| Abyss Engulfing × EMA(100) Trend (2x/2R) | EURUSD | 2023 | 224 | 220 | +1.8% | -20.6% | -19.1% | -1.5pp |
| Slate Engulfing × MACD Hist (2x/2R) | EURUSD | 2023 | 210 | 203 | +3.4% | 22.8% | 20.6% | +2.2pp |
| KAMA(10/2/30) Cross + Vortex14 · RR1.5 | EURUSD | 2023 | 197 | 195 | +1.0% | 0.3% | 1.0% | -0.7pp |
| KAMA(10/2/30) Cross + Vortex14 · Trail | EURUSD | 2023 | 173 | 172 | +0.6% | 18.2% | 19.0% | -0.8pp |
| Keltner(20,2) Break + ADX14>25+DI · Trail | EURUSD | 2023 | 89 | 90 | -1.1% | 9.3% | 10.0% | -0.8pp |
| Squeeze-fade (ER14<0.25) Keltner50/2 reversion [time_sig] | EURUSD | 2023 | 138 | 137 | +0.7% | -18.7% | -18.3% | -0.5pp |
| Flow MACD Signal Cross x VWAP Sigma-Z40 Zero Cross [RR] | EURUSD | 2023 | 50 | 50 | 0.0% | 28.9% | 29.2% | -0.3pp |
| Flow ROC10 Zero Cross x CMF20 Zero Cross [RR] | EURUSD | 2023 | 53 | 52 | +1.9% | -4.3% | -3.3% | -1.0pp |
Grids, martingales & other stateful strategies (23)
Separated on purpose. These stack positions, so they are the most sensitive to leverage and margin. Read the gaps as a warning about the strategy type, not a verdict on either engine.
| Strategy | Symbol | Period | Engine trades | MT5 trades | Trade gap | Engine return | MT5 return | Return gap |
|---|---|---|---|---|---|---|---|---|
| Adaptive Ribbon KAMA-VIDYA-TEMA Stack ADX Trend | EURUSD | 2023 | 39 | 38 | +2.6% | 7.0% | 6.0% | +0.9pp |
| Donchian Breakout Efficiency-Gated KAMA-Slope Trend | EURUSD | 2023 | 119 | 119 | 0.0% | -20.0% | -20.7% | +0.7pp |
| Adaptive Kelly · Full Kelly 01 Rsi | EURUSD | 2023 | 142 | 142 | 0.0% | 7.4% | 7.0% | +0.4pp |
| Adaptive Kelly · Full Kelly 02 Ema | EURUSD | 2023 | 135 | 135 | 0.0% | 1.2% | 0.2% | +1.0pp |
| Martingale 001 | EURUSD | 2023 | 337 | 339 | -0.6% | -68.8% | -69.1% | +0.3pp |
| Martingale 002 | EURUSD | 2023 | 6 | 6 | 0.0% | -52.6% | -52.6% | +0.0pp |
| Martingale 003 | EURUSD | 2023 | 84 | 84 | 0.0% | 26.7% | 27.6% | -0.8pp |
| Anti-Martingale 001 | EURUSD | 2023 | 145 | 145 | 0.0% | 34.4% | 34.3% | +0.0pp |
| Anti-Martingale 002 | EURUSD | 2023 | 118 | 118 | 0.0% | 91.2% | 87.2% | +4.0pp |
| Grid 001 | EURUSD | 2023 | 76 | 109 | -30.3% | -82.9% | -67.4% | -15.5pp |
| Grid 002 | EURUSD | 2023 | 247 | 46 | +437.0% | -24.4% | -89.8% | +65.4pp |
| Multi-Step 001 | EURUSD | 2023 | 98 | 100 | -2.0% | -9.2% | -11.3% | +2.0pp |
| Multi-Step 002 | EURUSD | 2023 | 56 | 52 | +7.7% | -7.6% | -7.1% | -0.5pp |
| Orderflow 001 | EURUSD | 2023 | 195 | 195 | 0.0% | 39.3% | 39.3% | +0.0pp |
| Orderflow 002 | EURUSD | 2023 | 138 | 138 | 0.0% | 63.9% | 63.9% | +0.0pp |
| Protective Stop 001 | EURUSD | 2023 | 154 | 154 | 0.0% | 135.4% | 137.8% | -2.4pp |
| Protective Stop 002 | EURUSD | 2023 | 115 | 115 | 0.0% | 196.9% | 199.6% | -2.7pp |
| Protective Stop 003 | EURUSD | 2023 | 170 | 170 | 0.0% | -3.3% | -3.3% | -0.0pp |
| Regime Switch · Statsizer Hurst A | EURUSD | 2023 | 118 | 118 | 0.0% | 58.9% | 51.6% | +7.3pp |
| Regime Switch · Statsizer Hurst B | EURUSD | 2023 | 64 | 64 | 0.0% | -12.7% | -12.7% | 0.0pp |
| Window 001 | EURUSD | 2023 | 244 | 245 | -0.4% | 6.6% | 5.8% | +0.9pp |
| Window 002 | EURUSD | 2023 | 141 | 141 | 0.0% | 16.2% | 16.3% | -0.1pp |
| Window 003 | EURUSD | 2023 | 127 | 127 | 0.0% | 23.4% | 23.6% | -0.3pp |
How the test was run
- Identical bars, down to the tick. Our own real-market-data bars are loaded into MetaTrader 5 as custom symbols, no broker feed involved, and both sides run on the same bars at the same price precision, so they judge the exact same candles.
- Matched costs, verified inside the tester. A probe EA reads what MetaTrader is really charging — spread, swap, leverage and the margin model — and the engine matches it on both sides. These are testreturns, not achievable ones.
- One year, hourly, EUR/USD. February to December 2023 on open prices, so neither side redraws the candles it is testing.
Why a few don’t match, and why that’s expected
Building this study found (and fixed) real defects in our own code. What is left has causes we won’t pretend away:
1. Grids and baskets: two different kinds of trading account
Strategies that stack many orders at once are the one place the two systems are not comparable, and the reason is structural rather than a fault in either. Our engine keeps a single net position per market: buy two lots and sell one, and it holds one. The MetaTrader account these tests run on is a hedging account, which keeps both sides open as separate positions. We logged five simultaneous buy positions in the same market, each with its own ticket. On a grid that places orders in both directions, MetaTrader therefore carries a far larger combined position than we do, and its broker margin call arrives much sooner. The orders themselves match to the fifth decimal on both sides. What differs is how the account books them. We report these strategies separately rather than blending them into the headline, because a grid’s backtest number depends on an account model your broker may or may not share.
2. Compounding turns a rounding difference into a headline number
Most of these strategies risk a percentage of equity, so every trade is sized off the result of the last one. That makes the return figure far more fragile than the trading itself. The widest ordinary gap in this study is a strategy where 134 of its 165 trades are the same trades, entering within a tenth of a pip of each other, with just two trades resolving differently. Because it more than doubles the account over the year, those two flips read as a 40-point difference in return. We checked the shape of the divergence rather than assuming: the two equity curves drift apart gradually and MetaTrader is actually behind for the first two months. It is accumulation, not one bad trade. A strategy that compounds this hard is telling you its result is path-dependent, whichever engine runs it.
3. MetaTrader is a second opinion, not the truth
A MetaTrader backtest is itself a simulation with its own fill assumptions. When the two disagree it doesn’t automatically mean our engine is wrong. We chase agreement so that what you test is what you export, not because either number is reality. The only real proof is forward testing.

