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.
MetaTrader 5 is where your strategy ends up running, so it is the standard we hold ourselves to. We wrote our own C++ engine because searching thousands of strategies needs a backtester we can run in parallel on our own servers — and that is only worth having if it agrees with the terminal you will actually trade in. So we export the same strategy to MQL5.
71% for ordinary entry/exit strategies
typical strategy, engine vs MetaTrader 5
47% land within 5 points of return
2 never traded (excluded)
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 |
|---|---|---|---|---|---|---|---|---|
| Amber Bollinger Reversion (Quick) | EURUSD | 2023 | 299 | 289 | +3.5% | 31.9% | 38.3% | -6.4pp |
| Amber CoG Cycle | EURUSD | 2023 | 277 | 260 | +6.5% | -27.3% | -28.1% | +0.8pp |
| Amber CVD Order-Flow (Runner) | EURUSD | 2023 | 48 | 47 | +2.1% | -17.4% | -16.2% | -1.2pp |
| Amber Hurst Imprint | EURUSD | 2023 | 31 | 29 | +6.9% | -4.6% | -3.5% | -1.1pp |
| Anchor Williams Bounce (Trend) | EURUSD | 2023 | 303 | 499 | -39.3% | -14.5% | -41.7% | +27.2pp |
| Apex Keltner Breakout (Scalp) | EURUSD | 2023 | 186 | 173 | +7.5% | -4.0% | -1.7% | -2.3pp |
| Apex MACD Trend Glide | EURUSD | 2023 | 79 | 74 | +6.8% | 8.9% | 6.3% | +2.6pp |
| Aurora CCI Divergence (Trend) | EURUSD | 2023 | 187 | 179 | +4.5% | 30.9% | 30.8% | +0.1pp |
| Aurora CCI Hunter (Quick) | EURUSD | 2023 | 346 | 323 | +7.1% | -5.0% | -11.1% | +6.0pp |
| Aurora FracDiff Thrust (Runner) | EURUSD | 2023 | 290 | 288 | +0.7% | 12.7% | 0.1% | +12.6pp |
| Aurora Hurst Sentinel | EURUSD | 2023 | 162 | 160 | +1.2% | -13.2% | -15.7% | +2.6pp |
| Bayes ER Donchian Break (Quick) | EURUSD | 2023 | 132 | 125 | +5.6% | -13.6% | -14.1% | +0.5pp |
| Beat Stochastic Cross (Trend) | EURUSD | 2023 | 272 | 268 | +1.5% | 39.3% | 39.4% | -0.1pp |
| Cinder Bandwidth Squeeze (Trend) | EURUSD | 2023 | 114 | 111 | +2.7% | 37.8% | -4.4% | +42.3pp |
| Ironclad Nbar High Killzone (Quick) | EURUSD | 2023 | 142 | 131 | +8.4% | 12.2% | 14.2% | -2.0pp |
| Undertow Amihud Illiquid Fade Swing (Trend) | EURUSD | 2023 | 150 | 143 | +4.9% | -34.0% | -41.3% | +7.3pp |
| Halcyon Deep-Liquidity PPO Momentum | EURUSD | 2023 | 138 | 129 | +7.0% | -14.1% | -14.6% | +0.5pp |
| Volume-Concentration A/D-Thrust Breakout | EURUSD | 2023 | 0 | 0 | — | 0.0% | 0.0% | 0.0pp |
| Donchian 10 Breakout — ADX>25 · MACD · 2R+Signal | EURUSD | 2023 | 135 | 134 | +0.7% | 42.5% | 34.0% | +8.5pp |
| Tempest Bollinger(20,2) Band Breakout EMA(50)-slope | EURUSD | 2023 | 192 | 183 | +4.9% | 2.0% | 10.6% | -8.7pp |
| Cinder TTM Squeeze MACD histogram Release (K1.5 BB20) | EURUSD | 2023 | 144 | 141 | +2.1% | 73.0% | 100.4% | -27.3pp |
| Blaze Semivariance Skew Donchian(20) Break | EURUSD | 2023 | 207 | 202 | +2.5% | 54.0% | 79.1% | -25.0pp |
| Piston ATR Expansion 20-bar range Break | EURUSD | 2023 | 198 | 192 | +3.1% | 60.9% | 80.1% | -19.2pp |
| Squall ATR Squeeze 20-bar range Break | EURUSD | 2023 | 87 | 82 | +6.1% | -6.4% | 0.2% | -6.5pp |
| Regime Trend aroonBreak14 / adxGt22p14 | EURUSD | 2023 | 233 | 228 | +2.2% | -6.1% | -0.1% | -6.1pp |
| Trend Gate adxGt22p14 + emaX20 | EURUSD | 2023 | 151 | 154 | -1.9% | 22.9% | 21.3% | +1.6pp |
| Router hurst_rs : donch20 | bb20 | EURUSD | 2023 | 120 | 117 | +2.6% | 25.9% | 26.9% | -1.0pp |
| Donchian(20) Break + ADX14>20+DI · RR2 | EURUSD | 2023 | 168 | 161 | +4.3% | 4.5% | 10.6% | -6.1pp |
| Bollinger(20) breakout + AO momentum · rr1.5 | EURUSD | 2023 | 192 | 184 | +4.3% | 16.2% | 7.8% | +8.4pp |
| Dual-confirm ATR14 rising + ADX>20 · Bollinger50/2 breakout [rr_be1.5] | EURUSD | 2023 | 91 | 85 | +7.1% | -5.1% | -1.4% | -3.7pp |
| MS Amihud illiquidity router · EMA 12/26 cross / Bollinger band break (p20, betime) | EURUSD | 2023 | 182 | 176 | +3.4% | -0.5% | -8.9% | +8.4pp |
| Amber Connors Reversion (Trend) | EURUSD | 2023 | 75 | 70 | +7.1% | 6.3% | 3.6% | +2.8pp |
| Amber CyberCycle Wave (Scalp) | EURUSD | 2023 | 302 | 286 | +5.6% | -17.2% | -4.2% | -13.0pp |
| Amber Garman-Klass Current (Trend) | EURUSD | 2023 | 330 | 325 | +1.5% | -7.6% | -28.4% | +20.8pp |
| Amber Hurst Imprint (Scalp) | EURUSD | 2023 | 35 | 32 | +9.4% | 1.3% | 1.4% | -0.1pp |
| Coil Ulcer Dip (Marathon) | EURUSD | 2023 | 239 | 234 | +2.1% | 14.0% | 12.7% | +1.4pp |
| Apex Nbar High Eject (Runner) | EURUSD | 2023 | 252 | 231 | +9.1% | -3.8% | -17.0% | +13.2pp |
| Crimson ADX Trend Surfer (Marathon) | EURUSD | 2023 | 76 | 75 | +1.3% | 0.8% | -2.3% | +3.1pp |
| Cinder CCI Divergence (Marathon) | EURUSD | 2023 | 155 | 152 | +2.0% | 38.1% | 30.3% | +7.8pp |
| Aurora Fractal Signal (Quick) | EURUSD | 2023 | 278 | 271 | +2.6% | 14.3% | 36.3% | -21.9pp |
| Cinder FracDiff Impulse (Trend) | EURUSD | 2023 | 252 | 254 | -0.8% | 53.8% | 41.7% | +12.2pp |
| Barometer ER Supertrend Rider (Quick) | EURUSD | 2023 | 12 | 10 | +20.0% | 1.0% | -10.9% | +12.0pp |
| Bayes ER Donchian Break (Runner) | EURUSD | 2023 | 116 | 110 | +5.5% | -24.4% | -26.5% | +2.1pp |
| Cadence Stochastic Cross (Runner) | EURUSD | 2023 | 328 | 316 | +3.8% | -10.0% | -12.2% | +2.2pp |
| Cinder Garman-Klass Trend (Quick) | EURUSD | 2023 | 400 | 410 | -2.4% | 14.8% | 10.2% | +4.6pp |
| Juniper Nbar High Session Play (Trend) | EURUSD | 2023 | 106 | 106 | 0.0% | -5.7% | -5.8% | +0.1pp |
| Millrace Pin Bar Donchian Reversal Swing (Marathon) | EURUSD | 2023 | 29 | 30 | -3.3% | 3.5% | 4.3% | -0.7pp |
| Quartz Deepening-Liquidity VIDYA Cross | EURUSD | 2023 | 82 | 79 | +3.8% | 109.7% | 63.6% | +46.1pp |
| POC Breakout Concentration+A/D Confirmed | EURUSD | 2023 | 0 | 0 | — | 0.0% | 0.0% | 0.0pp |
| Donchian 10 Breakout — ADX>25 · 2R | EURUSD | 2023 | 173 | 169 | +2.4% | 4.0% | 15.4% | -11.4pp |
| Maelstrom Bollinger(20,2) Band Breakout above/below | EURUSD | 2023 | 191 | 184 | +3.8% | -9.7% | -3.0% | -6.7pp |
| Flux TTM Squeeze MACD histogram Release (K1.5 BB30) | EURUSD | 2023 | 53 | 52 | +1.9% | 3.6% | 5.2% | -1.6pp |
| Pulse Semivariance Skew Donchian(20) Break | EURUSD | 2023 | 207 | 202 | +2.5% | 61.9% | 79.5% | -17.6pp |
| Geyser StdDev Expansion 20-bar range Break | EURUSD | 2023 | 206 | 200 | +3.0% | 54.7% | 72.8% | -18.1pp |
| Vortex StdDev Squeeze 20-bar range Break | EURUSD | 2023 | 56 | 54 | +3.7% | 4.4% | 6.1% | -1.7pp |
| Regime Trend aroonBreak14 / adxGt22p20 | EURUSD | 2023 | 163 | 160 | +1.9% | -1.0% | -4.8% | +3.8pp |
| Trend Gate adxGt22p14 + emaX20 +RVol | EURUSD | 2023 | 84 | 81 | +3.7% | 10.0% | 2.7% | +7.2pp |
| Router hurst_rs : donch20 | bb30 | EURUSD | 2023 | 201 | 194 | +3.6% | -8.8% | -8.0% | -0.8pp |
| Donchian(20) Break + ADX14>20+DI · RR3 | EURUSD | 2023 | 138 | 135 | +2.2% | 23.0% | 17.1% | +5.8pp |
| Bollinger(20) breakout + CMO(14) momentum · be+time | EURUSD | 2023 | 196 | 188 | +4.3% | 4.4% | -2.4% | +6.8pp |
| Dual-confirm ATR14 rising + ADX>20 · Bollinger50/2 breakout [rr_be2] | EURUSD | 2023 | 89 | 82 | +8.5% | -6.2% | -1.3% | -4.9pp |
| MS Amihud illiquidity router · EMA 12/26 cross / Bollinger band break (p20, rr2) | EURUSD | 2023 | 196 | 191 | +2.6% | 34.3% | 22.9% | +11.3pp |
| Amber RSI Reversion | EURUSD | 2023 | 587 | 577 | +1.7% | 7.4% | -11.6% | +19.0pp |
| Amber Sinewave Oscillator (Quick) | EURUSD | 2023 | 395 | 373 | +5.9% | -19.0% | 3.4% | -22.4pp |
| Amber VWAP-Z Flow (Trend) | EURUSD | 2023 | 162 | 161 | +0.6% | 17.0% | 4.3% | +12.7pp |
| Amber RSI Imprint (Quick) | EURUSD | 2023 | 8 | 6 | +33.3% | -4.2% | -7.8% | +3.6pp |
| Coil Ulcer Dip (Quick) | EURUSD | 2023 | 483 | 471 | +2.5% | 7.2% | -11.4% | +18.6pp |
| Apex Nbar High Eject (Trend) | EURUSD | 2023 | 230 | 224 | +2.7% | 8.5% | 8.9% | -0.4pp |
| Current Hilbert Trend Flow (Quick) | EURUSD | 2023 | 472 | 466 | +1.3% | -36.2% | -21.2% | -15.0pp |
| Drift Connors Split (Marathon) | EURUSD | 2023 | 166 | 174 | -4.6% | 93.2% | 61.0% | +32.1pp |
| Basalt Connors Hunter (Marathon) | EURUSD | 2023 | 140 | 136 | +2.9% | -9.6% | -17.2% | +7.6pp |
| Glacier FracDiff Momentum (Scalp) | EURUSD | 2023 | 482 | 475 | +1.5% | -31.7% | -37.8% | +6.2pp |
| Barometer FD Keltner Fade (Quick) | EURUSD | 2023 | 12 | 10 | +20.0% | -0.1% | -0.0% | -0.0pp |
| Cauchy Hurst Super Ride (Quick) | EURUSD | 2023 | 58 | 54 | +7.4% | 5.7% | -1.2% | +6.9pp |
| Oscillator 001 | EURUSD | 2023 | 147 | 142 | +3.5% | 12.1% | 8.1% | +4.1pp |
| Cinder Parkinson Reversal (Runner) | EURUSD | 2023 | 165 | 164 | +0.6% | 24.9% | 6.5% | +18.4pp |
| Kraken Nbar High Session Play (Runner) | EURUSD | 2023 | 106 | 106 | 0.0% | -3.9% | -4.0% | +0.1pp |
Grids, martingales & other stateful strategies (23)
Separated because they are booked differently — per leg, like a hedging account — not because they are the weak rows. On returns these now track CLOSER than ordinary strategies. Their trade counts drift further apart by design: MetaTrader records every leg it closes as its own deal, so for these read the return gap, not the trade gap.
| Strategy | Symbol | Period | Engine trades | MT5 trades | Trade gap | Engine return | MT5 return | Return gap |
|---|---|---|---|---|---|---|---|---|
| Martingale 001 | EURUSD | 2023 | 359 | 339 | +5.9% | -66.6% | -59.9% | -6.7pp |
| Protective Stop 001 | EURUSD | 2023 | 155 | 144 | +7.6% | 70.5% | 59.3% | +11.2pp |
| Window 001 | EURUSD | 2023 | 273 | 260 | +5.0% | -5.1% | -8.0% | +2.9pp |
| Grid 007 | EURUSD | 2023 | 530 | 475 | +11.6% | -9.6% | -8.1% | -1.5pp |
| Adaptive Kelly · Full Kelly 01 Rsi | EURUSD | 2023 | 147 | 134 | +9.7% | 5.4% | 3.9% | +1.4pp |
| Anti-Martingale 001 | EURUSD | 2023 | 149 | 136 | +9.6% | 23.8% | 7.0% | +16.8pp |
| Multi-Step 001 | EURUSD | 2023 | 99 | 101 | -2.0% | -4.4% | -6.8% | +2.4pp |
| Orderflow 001 | EURUSD | 2023 | 205 | 187 | +9.6% | 6.9% | 26.8% | -19.9pp |
| Regime Switch · Statsizer Hurst A | EURUSD | 2023 | 136 | 128 | +6.2% | 47.3% | 34.3% | +13.0pp |
| Adaptive Ribbon KAMA-VIDYA-TEMA Stack ADX Trend | EURUSD | 2023 | 38 | 34 | +11.8% | 3.6% | 1.6% | +2.0pp |
| Martingale 002 | EURUSD | 2023 | 21 | 6 | +250.0% | -29.6% | -45.5% | +15.9pp |
| Protective Stop 002 | EURUSD | 2023 | 124 | 115 | +7.8% | 269.2% | 178.9% | +90.3pp |
| Window 002 | EURUSD | 2023 | 183 | 176 | +4.0% | 15.7% | 12.5% | +3.1pp |
| Grid 011 | EURUSD | 2023 | 576 | 510 | +12.9% | -13.9% | -12.5% | -1.4pp |
| Adaptive Kelly · Full Kelly 02 Ema | EURUSD | 2023 | 140 | 131 | +6.9% | 1.1% | 0.6% | +0.5pp |
| Anti-Martingale 002 | EURUSD | 2023 | 136 | 128 | +6.2% | 89.8% | 42.6% | +47.2pp |
| Multi-Step 002 | EURUSD | 2023 | 61 | 61 | 0.0% | -10.0% | -10.1% | +0.1pp |
| Orderflow 002 | EURUSD | 2023 | 161 | 155 | +3.9% | 4.8% | 8.6% | -3.8pp |
| Regime Switch · Statsizer Hurst B | EURUSD | 2023 | 93 | 89 | +4.5% | 14.2% | 3.8% | +10.4pp |
| Donchian Breakout Efficiency-Gated KAMA-Slope Trend | EURUSD | 2023 | 121 | 119 | +1.7% | -18.8% | -18.0% | -0.8pp |
| Martingale 003 | EURUSD | 2023 | 107 | 102 | +4.9% | 50.4% | 49.3% | +1.1pp |
| Protective Stop 003 | EURUSD | 2023 | 171 | 156 | +9.6% | -7.7% | -5.4% | -2.3pp |
| Window 003 | EURUSD | 2023 | 139 | 131 | +6.1% | 17.1% | 12.1% | +5.0pp |
How the test was run
- The same ticks, not the same candles. Our own 24.6-million-tick EUR/USD stream is loaded into MetaTrader 5 as a custom symbol, no broker feed involved, and both sides price every fill from those identical ticks. Each then builds its own candles from them, exactly as a live terminal does — which is why the trade counts drift apart at all. The returns track less tightly than the trade counts do, not more: the headline figures above give both, and the second point below explains why the return number is the fragile one.
- 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, replaying every tick rather than approximating from candles, so neither side can take a fill the other could not have had.
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 book per leg — and they are the closest rows here
A retail MetaTrader account is a hedging account: buy two lots and sell one, and it keeps both sides open as separate positions, each with its own ticket. Baskets now run per leg on our side too, which is what the tester reports the account actually is — every entry opens its own leg and opposite fills no longer cancel out. Both sides keep the same books, not just place the same orders.
Strategies that stack many orders at once are now the closest rows on this page, with a median return gap of 3.1 points against 6.2 for ordinary entry/exit strategies. They are still listed separately because they are booked differently, not because they are the weak ones.
Two things to read correctly. Their trade counts drift further apart than the returns do — MetaTrader books every leg it closes as its own deal, so for a basket the return gap is the number that means something. And this assumes a hedging account: if your broker nets positions instead, a grid will behave differently for you than in either backtest here.
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 gap in this study is Protective Stop 002, where our engine takes 124 trades and MetaTrader takes 115 — a difference of nine trades out of a hundred and twenty-four. That reads as a ninety-point difference in return, because the strategy roughly triples the account over the year and every trade is sized off the one before it. We audited that row rather than assuming: the trades MetaTrader never took fall early in the period, which is the most expensive place to miss one — the whole remaining year then compounds off a smaller balance. It is accumulation, not a single bad fill. A strategy that compounds this hard is telling you its result is path-dependent, whichever engine runs it.
3. Neither backtest is reality — including ours
Every backtest is a simulation with its own fill assumptions, and that is as true of our engine as it is of the Strategy Tester. When the two disagree it does not automatically mean either one 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.
This page asks whether our engine and MetaTrader 5 agree on the same strategy. A different question — which kind of strategy survives without tuning at all — is what the archetype study measures, across 20,500 random-setting strategies and 143,500 backtests.
Build a strategy and see the numbers yourself.
Create your first strategy
