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.

62%
within 5% on trade count

71% for ordinary entry/exit strategies

3.8%
median trade-count gap

typical strategy, engine vs MetaTrader 5

6.1pp
median return gap

47% land within 5 points of return

98
strategies compared

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.

StrategySymbolPeriodEngine tradesMT5 tradesTrade gapEngine returnMT5 returnReturn gap
Amber Bollinger Reversion (Quick)EURUSD2023299289+3.5%31.9%38.3%-6.4pp
Amber CoG CycleEURUSD2023277260+6.5%-27.3%-28.1%+0.8pp
Amber CVD Order-Flow (Runner)EURUSD20234847+2.1%-17.4%-16.2%-1.2pp
Amber Hurst ImprintEURUSD20233129+6.9%-4.6%-3.5%-1.1pp
Anchor Williams Bounce (Trend)EURUSD2023303499-39.3%-14.5%-41.7%+27.2pp
Apex Keltner Breakout (Scalp)EURUSD2023186173+7.5%-4.0%-1.7%-2.3pp
Apex MACD Trend GlideEURUSD20237974+6.8%8.9%6.3%+2.6pp
Aurora CCI Divergence (Trend)EURUSD2023187179+4.5%30.9%30.8%+0.1pp
Aurora CCI Hunter (Quick)EURUSD2023346323+7.1%-5.0%-11.1%+6.0pp
Aurora FracDiff Thrust (Runner)EURUSD2023290288+0.7%12.7%0.1%+12.6pp
Aurora Hurst SentinelEURUSD2023162160+1.2%-13.2%-15.7%+2.6pp
Bayes ER Donchian Break (Quick)EURUSD2023132125+5.6%-13.6%-14.1%+0.5pp
Beat Stochastic Cross (Trend)EURUSD2023272268+1.5%39.3%39.4%-0.1pp
Cinder Bandwidth Squeeze (Trend)EURUSD2023114111+2.7%37.8%-4.4%+42.3pp
Ironclad Nbar High Killzone (Quick)EURUSD2023142131+8.4%12.2%14.2%-2.0pp
Undertow Amihud Illiquid Fade Swing (Trend)EURUSD2023150143+4.9%-34.0%-41.3%+7.3pp
Halcyon Deep-Liquidity PPO MomentumEURUSD2023138129+7.0%-14.1%-14.6%+0.5pp
Volume-Concentration A/D-Thrust BreakoutEURUSD2023000.0%0.0%0.0pp
Donchian 10 Breakout — ADX>25 · MACD · 2R+SignalEURUSD2023135134+0.7%42.5%34.0%+8.5pp
Tempest Bollinger(20,2) Band Breakout EMA(50)-slopeEURUSD2023192183+4.9%2.0%10.6%-8.7pp
Cinder TTM Squeeze MACD histogram Release (K1.5 BB20)EURUSD2023144141+2.1%73.0%100.4%-27.3pp
Blaze Semivariance Skew Donchian(20) BreakEURUSD2023207202+2.5%54.0%79.1%-25.0pp
Piston ATR Expansion 20-bar range BreakEURUSD2023198192+3.1%60.9%80.1%-19.2pp
Squall ATR Squeeze 20-bar range BreakEURUSD20238782+6.1%-6.4%0.2%-6.5pp
Regime Trend aroonBreak14 / adxGt22p14EURUSD2023233228+2.2%-6.1%-0.1%-6.1pp
Trend Gate adxGt22p14 + emaX20EURUSD2023151154-1.9%22.9%21.3%+1.6pp
Router hurst_rs : donch20 | bb20EURUSD2023120117+2.6%25.9%26.9%-1.0pp
Donchian(20) Break + ADX14>20+DI · RR2EURUSD2023168161+4.3%4.5%10.6%-6.1pp
Bollinger(20) breakout + AO momentum · rr1.5EURUSD2023192184+4.3%16.2%7.8%+8.4pp
Dual-confirm ATR14 rising + ADX>20 · Bollinger50/2 breakout [rr_be1.5]EURUSD20239185+7.1%-5.1%-1.4%-3.7pp
MS Amihud illiquidity router · EMA 12/26 cross / Bollinger band break (p20, betime)EURUSD2023182176+3.4%-0.5%-8.9%+8.4pp
Amber Connors Reversion (Trend)EURUSD20237570+7.1%6.3%3.6%+2.8pp
Amber CyberCycle Wave (Scalp)EURUSD2023302286+5.6%-17.2%-4.2%-13.0pp
Amber Garman-Klass Current (Trend)EURUSD2023330325+1.5%-7.6%-28.4%+20.8pp
Amber Hurst Imprint (Scalp)EURUSD20233532+9.4%1.3%1.4%-0.1pp
Coil Ulcer Dip (Marathon)EURUSD2023239234+2.1%14.0%12.7%+1.4pp
Apex Nbar High Eject (Runner)EURUSD2023252231+9.1%-3.8%-17.0%+13.2pp
Crimson ADX Trend Surfer (Marathon)EURUSD20237675+1.3%0.8%-2.3%+3.1pp
Cinder CCI Divergence (Marathon)EURUSD2023155152+2.0%38.1%30.3%+7.8pp
Aurora Fractal Signal (Quick)EURUSD2023278271+2.6%14.3%36.3%-21.9pp
Cinder FracDiff Impulse (Trend)EURUSD2023252254-0.8%53.8%41.7%+12.2pp
Barometer ER Supertrend Rider (Quick)EURUSD20231210+20.0%1.0%-10.9%+12.0pp
Bayes ER Donchian Break (Runner)EURUSD2023116110+5.5%-24.4%-26.5%+2.1pp
Cadence Stochastic Cross (Runner)EURUSD2023328316+3.8%-10.0%-12.2%+2.2pp
Cinder Garman-Klass Trend (Quick)EURUSD2023400410-2.4%14.8%10.2%+4.6pp
Juniper Nbar High Session Play (Trend)EURUSD20231061060.0%-5.7%-5.8%+0.1pp
Millrace Pin Bar Donchian Reversal Swing (Marathon)EURUSD20232930-3.3%3.5%4.3%-0.7pp
Quartz Deepening-Liquidity VIDYA CrossEURUSD20238279+3.8%109.7%63.6%+46.1pp
POC Breakout Concentration+A/D ConfirmedEURUSD2023000.0%0.0%0.0pp
Donchian 10 Breakout — ADX>25 · 2REURUSD2023173169+2.4%4.0%15.4%-11.4pp
Maelstrom Bollinger(20,2) Band Breakout above/belowEURUSD2023191184+3.8%-9.7%-3.0%-6.7pp
Flux TTM Squeeze MACD histogram Release (K1.5 BB30)EURUSD20235352+1.9%3.6%5.2%-1.6pp
Pulse Semivariance Skew Donchian(20) BreakEURUSD2023207202+2.5%61.9%79.5%-17.6pp
Geyser StdDev Expansion 20-bar range BreakEURUSD2023206200+3.0%54.7%72.8%-18.1pp
Vortex StdDev Squeeze 20-bar range BreakEURUSD20235654+3.7%4.4%6.1%-1.7pp
Regime Trend aroonBreak14 / adxGt22p20EURUSD2023163160+1.9%-1.0%-4.8%+3.8pp
Trend Gate adxGt22p14 + emaX20 +RVolEURUSD20238481+3.7%10.0%2.7%+7.2pp
Router hurst_rs : donch20 | bb30EURUSD2023201194+3.6%-8.8%-8.0%-0.8pp
Donchian(20) Break + ADX14>20+DI · RR3EURUSD2023138135+2.2%23.0%17.1%+5.8pp
Bollinger(20) breakout + CMO(14) momentum · be+timeEURUSD2023196188+4.3%4.4%-2.4%+6.8pp
Dual-confirm ATR14 rising + ADX>20 · Bollinger50/2 breakout [rr_be2]EURUSD20238982+8.5%-6.2%-1.3%-4.9pp
MS Amihud illiquidity router · EMA 12/26 cross / Bollinger band break (p20, rr2)EURUSD2023196191+2.6%34.3%22.9%+11.3pp
Amber RSI ReversionEURUSD2023587577+1.7%7.4%-11.6%+19.0pp
Amber Sinewave Oscillator (Quick)EURUSD2023395373+5.9%-19.0%3.4%-22.4pp
Amber VWAP-Z Flow (Trend)EURUSD2023162161+0.6%17.0%4.3%+12.7pp
Amber RSI Imprint (Quick)EURUSD202386+33.3%-4.2%-7.8%+3.6pp
Coil Ulcer Dip (Quick)EURUSD2023483471+2.5%7.2%-11.4%+18.6pp
Apex Nbar High Eject (Trend)EURUSD2023230224+2.7%8.5%8.9%-0.4pp
Current Hilbert Trend Flow (Quick)EURUSD2023472466+1.3%-36.2%-21.2%-15.0pp
Drift Connors Split (Marathon)EURUSD2023166174-4.6%93.2%61.0%+32.1pp
Basalt Connors Hunter (Marathon)EURUSD2023140136+2.9%-9.6%-17.2%+7.6pp
Glacier FracDiff Momentum (Scalp)EURUSD2023482475+1.5%-31.7%-37.8%+6.2pp
Barometer FD Keltner Fade (Quick)EURUSD20231210+20.0%-0.1%-0.0%-0.0pp
Cauchy Hurst Super Ride (Quick)EURUSD20235854+7.4%5.7%-1.2%+6.9pp
Oscillator 001EURUSD2023147142+3.5%12.1%8.1%+4.1pp
Cinder Parkinson Reversal (Runner)EURUSD2023165164+0.6%24.9%6.5%+18.4pp
Kraken Nbar High Session Play (Runner)EURUSD20231061060.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.

StrategySymbolPeriodEngine tradesMT5 tradesTrade gapEngine returnMT5 returnReturn gap
Martingale 001EURUSD2023359339+5.9%-66.6%-59.9%-6.7pp
Protective Stop 001EURUSD2023155144+7.6%70.5%59.3%+11.2pp
Window 001EURUSD2023273260+5.0%-5.1%-8.0%+2.9pp
Grid 007EURUSD2023530475+11.6%-9.6%-8.1%-1.5pp
Adaptive Kelly · Full Kelly 01 RsiEURUSD2023147134+9.7%5.4%3.9%+1.4pp
Anti-Martingale 001EURUSD2023149136+9.6%23.8%7.0%+16.8pp
Multi-Step 001EURUSD202399101-2.0%-4.4%-6.8%+2.4pp
Orderflow 001EURUSD2023205187+9.6%6.9%26.8%-19.9pp
Regime Switch · Statsizer Hurst AEURUSD2023136128+6.2%47.3%34.3%+13.0pp
Adaptive Ribbon KAMA-VIDYA-TEMA Stack ADX TrendEURUSD20233834+11.8%3.6%1.6%+2.0pp
Martingale 002EURUSD2023216+250.0%-29.6%-45.5%+15.9pp
Protective Stop 002EURUSD2023124115+7.8%269.2%178.9%+90.3pp
Window 002EURUSD2023183176+4.0%15.7%12.5%+3.1pp
Grid 011EURUSD2023576510+12.9%-13.9%-12.5%-1.4pp
Adaptive Kelly · Full Kelly 02 EmaEURUSD2023140131+6.9%1.1%0.6%+0.5pp
Anti-Martingale 002EURUSD2023136128+6.2%89.8%42.6%+47.2pp
Multi-Step 002EURUSD202361610.0%-10.0%-10.1%+0.1pp
Orderflow 002EURUSD2023161155+3.9%4.8%8.6%-3.8pp
Regime Switch · Statsizer Hurst BEURUSD20239389+4.5%14.2%3.8%+10.4pp
Donchian Breakout Efficiency-Gated KAMA-Slope TrendEURUSD2023121119+1.7%-18.8%-18.0%-0.8pp
Martingale 003EURUSD2023107102+4.9%50.4%49.3%+1.1pp
Protective Stop 003EURUSD2023171156+9.6%-7.7%-5.4%-2.3pp
Window 003EURUSD2023139131+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