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.

95%
within 5% on trade count

97% for ordinary entry/exit strategies

0.3%
median trade-count gap

typical strategy, engine vs MetaTrader 5

1.1pp
median return gap

87% land within 5 points of return

100
strategies compared

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.

StrategySymbolPeriodEngine tradesMT5 tradesTrade gapEngine returnMT5 returnReturn gap
Donchian 10 Breakout — ADX>25 · MACD · 2R+SignalEURUSD2023132133-0.8%34.7%35.7%-1.0pp
Donchian 10 Breakout — ADX>25 · 2REURUSD2023168170-1.2%40.9%43.9%-3.0pp
Tempest Bollinger(20,2) Band Breakout EMA(50)-slopeEURUSD20231771770.0%32.0%30.6%+1.4pp
Maelstrom Bollinger(20,2) Band Breakout above/belowEURUSD20231781780.0%6.4%5.4%+1.0pp
Cinder TTM Squeeze MACD histogram Release (K1.5 BB20)EURUSD20231401400.0%97.2%97.5%-0.3pp
Flux TTM Squeeze MACD histogram Release (K1.5 BB30)EURUSD202352520.0%11.6%12.0%-0.4pp
Blaze Semivariance Skew Donchian(20) BreakEURUSD2023199198+0.5%77.5%68.9%+8.6pp
Pulse Semivariance Skew Donchian(20) BreakEURUSD2023195194+0.5%82.0%72.2%+9.8pp
Piston ATR Expansion 20-bar range BreakEURUSD20231861860.0%76.6%68.7%+8.0pp
Geyser StdDev Expansion 20-bar range BreakEURUSD2023199198+0.5%70.8%61.9%+8.9pp
Squall ATR Squeeze 20-bar range BreakEURUSD20238788-1.1%-3.0%-1.3%-1.7pp
Vortex StdDev Squeeze 20-bar range BreakEURUSD202355550.0%15.0%14.6%+0.4pp
Regime Trend aroonBreak14 / adxGt22p14EURUSD2023228229-0.4%3.8%2.6%+1.2pp
Regime Trend aroonBreak14 / adxGt22p20EURUSD2023158159-0.6%-11.2%-9.5%-1.7pp
Trend Gate adxGt22p14 + emaX20EURUSD2023151154-1.9%36.5%28.4%+8.1pp
Trend Gate adxGt22p14 + emaX20 +RVolEURUSD20238687-1.1%10.6%8.9%+1.7pp
Router hurst_rs : donch20 | bb20EURUSD2023122124-1.6%21.3%17.6%+3.7pp
Router hurst_rs : donch20 | bb30EURUSD20231941940.0%-3.7%-5.8%+2.1pp
Donchian(20) Break + ADX14>20+DI · RR2EURUSD20231611610.0%17.0%12.1%+4.9pp
Donchian(20) Break + ADX14>20+DI · RR3EURUSD20231361360.0%8.3%6.0%+2.3pp
Bollinger(20) breakout + AO momentum · rr1.5EURUSD20231671670.0%19.6%19.8%-0.1pp
Bollinger(20) breakout + CMO(14) momentum · be+timeEURUSD2023175176-0.6%15.8%11.6%+4.2pp
Dual-confirm ATR14 rising + ADX>20 · Bollinger50/2 breakout [rr_be2]EURUSD20238887+1.1%-7.7%-3.6%-4.0pp
MS Amihud illiquidity router · EMA 12/26 cross / Bollinger band break (p20, betime)EURUSD20231861860.0%6.4%5.1%+1.3pp
MS Amihud illiquidity router · EMA 12/26 cross / Bollinger band break (p20, rr2)EURUSD20231891890.0%32.6%32.2%+0.3pp
Halcyon Deep-Liquidity PPO MomentumEURUSD2023146144+1.4%-25.8%-24.4%-1.4pp
Quartz Deepening-Liquidity VIDYA CrossEURUSD20239089+1.1%44.0%43.5%+0.6pp
Amber Bollinger Reversion (Quick)EURUSD2023269268+0.4%43.7%43.3%+0.4pp
Amber CoG CycleEURUSD2023271270+0.4%-52.5%-51.5%-1.0pp
Amber Connors Reversion (Trend)EURUSD20237265+10.8%9.4%2.2%+7.2pp
Amber CVD Order-Flow (Runner)EURUSD202343430.0%-8.0%-8.0%-0.0pp
Amber CyberCycle Wave (Scalp)EURUSD2023302300+0.7%0.2%-4.6%+4.8pp
Amber Garman-Klass Current (Trend)EURUSD2023318313+1.6%26.4%28.9%-2.5pp
Amber Hurst ImprintEURUSD202333330.0%2.2%2.2%+0.0pp
Amber Hurst Imprint (Scalp)EURUSD202338380.0%-3.5%-3.6%+0.0pp
Amber RSI Imprint (Quick)EURUSD2023770.0%-5.7%-5.7%+0.0pp
Amber RSI ReversionEURUSD2023535534+0.2%23.1%24.0%-0.9pp
Amber Sinewave Oscillator (Quick)EURUSD20233663660.0%-27.2%-22.9%-4.3pp
Amber VWAP-Z Flow (Trend)EURUSD20231591590.0%19.1%17.4%+1.8pp
Apex Keltner Breakout (Scalp)EURUSD2023165164+0.6%-3.7%-2.0%-1.6pp
Apex MACD Trend GlideEURUSD202374740.0%14.4%15.1%-0.7pp
Apex Nbar High Eject (Runner)EURUSD20232492490.0%-13.5%-13.3%-0.1pp
Apex Nbar High Eject (Trend)EURUSD2023207206+0.5%5.7%6.5%-0.8pp
Aurora CCI Divergence (Trend)EURUSD2023157156+0.6%51.9%47.1%+4.8pp
Aurora CCI Hunter (Quick)EURUSD2023337338-0.3%-15.5%-16.8%+1.3pp
Aurora Fractal Signal (Quick)EURUSD2023259258+0.4%64.4%80.8%-16.4pp
Basalt Connors Hunter (Marathon)EURUSD2023145130+11.5%-30.6%-19.5%-11.0pp
Cinder CCI Divergence (Marathon)EURUSD20231181180.0%28.6%28.9%-0.4pp
Drift Connors Split (Marathon)EURUSD2023133128+3.9%23.3%45.0%-21.7pp
Ironclad Nbar High Killzone (Quick)EURUSD20231371370.0%12.1%12.1%+0.0pp
Juniper Nbar High Session Play (Trend)EURUSD20231061060.0%-2.6%-2.6%-0.0pp
Kraken Nbar High Session Play (Runner)EURUSD20231061060.0%-1.4%-1.4%+0.0pp
Anchor Williams Bounce (Trend)EURUSD2023291289+0.7%-30.7%-29.6%-1.1pp
Cadence Stochastic Cross (Runner)EURUSD20233213210.0%-18.8%-19.5%+0.7pp
Beat Stochastic Cross (Trend)EURUSD2023273272+0.4%44.3%42.6%+1.7pp
Bayes ER Donchian Break (Quick)EURUSD2023116117-0.9%-0.3%-3.1%+2.9pp
Bayes ER Donchian Break (Runner)EURUSD2023105106-0.9%-16.6%-19.8%+3.2pp
Cauchy Hurst Super Ride (Quick)EURUSD202359590.0%8.3%9.4%-1.1pp
Cinder Bandwidth Squeeze (Trend)EURUSD20231131130.0%79.7%80.0%-0.4pp
Cinder Garman-Klass Trend (Quick)EURUSD2023386383+0.8%27.1%31.5%-4.4pp
Undertow Amihud Illiquid Fade Swing (Trend)EURUSD2023153151+1.3%-32.2%-32.0%-0.2pp
CCI Zero Cross / Efficient (Runner)EURUSD202378780.0%60.0%59.3%+0.7pp
Stochastic Band / ADX20 (RR2)EURUSD2023196193+1.6%-7.5%2.6%-10.1pp
Cyclone Keltner(20,2.5) Band Breakout above/belowEURUSD202392920.0%-21.5%-22.3%+0.8pp
Pulse ATR Squeeze 20-bar range BreakEURUSD20238483+1.2%6.6%6.6%-0.0pp
Value Reclaim Value-Area Break60 + EMA50 SlopeEURUSD20231981980.0%14.5%10.1%+4.4pp
MS Corwin-Schultz spread-expansion · Aroon trend-age (ATR-runner)EURUSD20231601600.0%13.0%16.8%-3.9pp
MS Kyle impact-building · TEMA price-cross (rr3)EURUSD2023135134+0.7%-2.2%-3.3%+1.1pp
Cycle Center-of-Gravity ppoh (Swing)EURUSD2023196194+1.0%1.8%5.8%-4.0pp
Abyss Engulfing × EMA(100) Trend (2x/2R)EURUSD2023224220+1.8%-20.6%-19.1%-1.5pp
Slate Engulfing × MACD Hist (2x/2R)EURUSD2023210203+3.4%22.8%20.6%+2.2pp
KAMA(10/2/30) Cross + Vortex14 · RR1.5EURUSD2023197195+1.0%0.3%1.0%-0.7pp
KAMA(10/2/30) Cross + Vortex14 · TrailEURUSD2023173172+0.6%18.2%19.0%-0.8pp
Keltner(20,2) Break + ADX14>25+DI · TrailEURUSD20238990-1.1%9.3%10.0%-0.8pp
Squeeze-fade (ER14<0.25) Keltner50/2 reversion [time_sig]EURUSD2023138137+0.7%-18.7%-18.3%-0.5pp
Flow MACD Signal Cross x VWAP Sigma-Z40 Zero Cross [RR]EURUSD202350500.0%28.9%29.2%-0.3pp
Flow ROC10 Zero Cross x CMF20 Zero Cross [RR]EURUSD20235352+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.

StrategySymbolPeriodEngine tradesMT5 tradesTrade gapEngine returnMT5 returnReturn gap
Adaptive Ribbon KAMA-VIDYA-TEMA Stack ADX TrendEURUSD20233938+2.6%7.0%6.0%+0.9pp
Donchian Breakout Efficiency-Gated KAMA-Slope TrendEURUSD20231191190.0%-20.0%-20.7%+0.7pp
Adaptive Kelly · Full Kelly 01 RsiEURUSD20231421420.0%7.4%7.0%+0.4pp
Adaptive Kelly · Full Kelly 02 EmaEURUSD20231351350.0%1.2%0.2%+1.0pp
Martingale 001EURUSD2023337339-0.6%-68.8%-69.1%+0.3pp
Martingale 002EURUSD2023660.0%-52.6%-52.6%+0.0pp
Martingale 003EURUSD202384840.0%26.7%27.6%-0.8pp
Anti-Martingale 001EURUSD20231451450.0%34.4%34.3%+0.0pp
Anti-Martingale 002EURUSD20231181180.0%91.2%87.2%+4.0pp
Grid 001EURUSD202376109-30.3%-82.9%-67.4%-15.5pp
Grid 002EURUSD202324746+437.0%-24.4%-89.8%+65.4pp
Multi-Step 001EURUSD202398100-2.0%-9.2%-11.3%+2.0pp
Multi-Step 002EURUSD20235652+7.7%-7.6%-7.1%-0.5pp
Orderflow 001EURUSD20231951950.0%39.3%39.3%+0.0pp
Orderflow 002EURUSD20231381380.0%63.9%63.9%+0.0pp
Protective Stop 001EURUSD20231541540.0%135.4%137.8%-2.4pp
Protective Stop 002EURUSD20231151150.0%196.9%199.6%-2.7pp
Protective Stop 003EURUSD20231701700.0%-3.3%-3.3%-0.0pp
Regime Switch · Statsizer Hurst AEURUSD20231181180.0%58.9%51.6%+7.3pp
Regime Switch · Statsizer Hurst BEURUSD202364640.0%-12.7%-12.7%0.0pp
Window 001EURUSD2023244245-0.4%6.6%5.8%+0.9pp
Window 002EURUSD20231411410.0%16.2%16.3%-0.1pp
Window 003EURUSD20231271270.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.