12 red flags in an EA backtest report
Most misleading EA backtests are not edited images — they are real reports run under conditions chosen to look good: generated ticks, zero costs, a hand-picked period, or settings tuned to the past. A few EAs go further and read stored price history inside the tester. Below are 12 red flags to check in any MT4 or MT5 backtest report, and a step-by-step way to test whether an EA is a history reader.
The 12 red flags
One flag is a reason to look closer. Three or more, and the report is telling you very little about the future.
1. The modelling is not real ticks
"Every tick", "1 minute OHLC" or "Open prices only" on an EA that scalps, uses tight stops or runs a grid. Generated prices decide which side of a small range is hit first — exactly where these EAs make their money. Why real ticks matter.
2. Low or missing history quality
A history quality well below the high 90s, or a screenshot that crops it out. Part of the test ran on filled-in data.
3. A short or hand-picked period
Three months of one strong gold trend proves nothing. Ask why the test starts and ends where it does, and whether it includes a range, a crash and a news spike.
4. Too few trades
Thirty trades with a profit factor of 4 is luck or fitting until shown otherwise. Look for hundreds of trades.
5. Zero spread, zero commission, zero delay
Perfect execution does not exist. A strategy that only works at zero cost does not work.
6. A perfectly straight equity curve
Real strategies have losing weeks. A ruler-straight blue line usually means losses are held open (check equity), lots grow after losses, or the result was fitted to the data — or the EA knew the prices in advance (see history readers below).
7. Equity drawdown far bigger than balance drawdown
Balance drawdown of 5% next to equity drawdown of 60% means trades sat deep in loss before closing. That is how grid and martingale robots look calm on paper until the one move that ends the account. How grids hide risk.
8. Huge win rate, tiny average win
95% winners where the average loss is twenty times the average win. One bad trade erases weeks. Compare average profit trade with average loss trade, and check the largest loss trade.
9. Lot size grows after losses
Open the trade list: if volume doubles or steps up after each loser, it is a martingale or recovery system. It survives every test that does not contain its killer streak. Hedging and recovery EAs explained.
10. Only one timeframe or one symbol works
A robust idea usually degrades gracefully on a neighbouring timeframe or a similar symbol. If it collapses everywhere except one exact chart, it was tuned to that chart.
11. Results that break right after the tested dates
The seller tests 2019–2024 and the EA loses from the first day of 2025. That is classic over-fitting — or a history reader. Always test a period the seller did not show you.
12. No settings file, no inputs, or inputs you cannot reproduce
If you cannot load the exact inputs behind the report, you cannot reproduce it. Ask for the .set file and test it yourself.
What is a "history reader" EA?
A history reader is an EA that looks good in the Strategy Tester because it already knows the prices of the period it is tested on, instead of reacting to them. In MetaTrader 5 the tester only shows the EA prices up to the current simulated moment, so honest code cannot peek at the future. A history reader gets around that by bringing its own data:
- Data files shipped into the tester. MQL5 has a directive,
#property tester_file, that copies a file into the tester's sandbox for every run. Legitimate EAs use it for settings or model files; a cheating EA can use it to load a list of past prices or past trade signals. - Data embedded in the EA itself. With
#resource, a file can be compiled into the .ex5. A robot that carries a table of historical prices or "perfect" entry times can replay them in the tester. - Tester detection. Code can check whether it is running in the tester (
MQLInfoInteger(MQL_TESTER)in MQL5,IsTesting()in MQL4) and behave differently there than on a live chart. - DLLs. An external library can read files from anywhere on the disk. Most normal strategies never need a DLL.
The tell-tale result is the same every time: a near-perfect equity curve on exactly the dates the seller shows, and ordinary or terrible results on any period after the data ends.
How to check if an EA is a history reader
- Test dates the seller never showed. Run the EA on the most recent months, after the period in their report. A history reader cannot know prices that did not exist when it was built. This single test catches most of them.
- Test a different broker's data. Run the same dates on another broker's real ticks. Fitted or stored data rarely lines up with a different tick history.
- Compare a neighbouring symbol. Run gold settings on a gold symbol with a suffix (for example XAUUSD+) or a related market. Real logic transfers roughly; memorised prices do not.
- Check the file size and the folder. A simple strategy compiled to several megabytes, or an EA that ships with a mystery .csv/.bin "data" file, deserves questions.
- Watch for DLL imports. If MT5 asks you to allow DLL imports, find out why. Listings in our marketplace that import DLLs are flagged on the product page.
- Read the source if you have it. In an .mq4/.mq5 file, search for
tester_file,#resource,MQL_TESTER,IsTesting,FileOpenand hard-coded dates such asD'2023.. Their presence is not proof of cheating, but every hit needs a reason. The source-code vault sells editable .mq4/.mq5 files you can inspect. - Forward test on demo. Two to four weeks on a demo account is the final judge. A history reader cannot read prices that have not happened yet.
Get an independent backtest on your own dates
The fastest way to beat red flags 1, 3, 5, 11 and 12 is to test the EA yourself, on dates you choose, with real ticks and realistic delay. If you do not want to run the tester for hours, the MT5 backtest report service does it for you: upload the .ex5 and your .set file, pick the symbol, any period up to 365 days that the seller never showed, the timeframes and a delay, and receive genuine MT5 reports — one per timeframe — in Telegram. If the EA refuses to run outside its favourite dates, the report will say so.
Then read the result with how to read an MT5 backtest report, and only then move to a demo account. Building your own robot instead? The EA Builder generates readable MQL5 with no hidden data, so you always know what you are testing.
Frequently asked questions
How can you tell if an EA backtest is fake?
Check the modelling (it should be every tick based on real ticks), history quality, test length, number of trades, costs and delay, then rerun the EA yourself on dates the seller did not show. A real edge survives new dates; a fitted or fake one does not.
What is a history reader EA?
An EA that looks perfect in the Strategy Tester because it carries or loads stored price data for the tested period, for example through tester_file, an embedded resource or a DLL, instead of reacting to prices like a normal strategy.
How do I check if an EA is a history reader?
Backtest it on dates after the period shown by the seller, on another broker's data and on a related symbol, check for DLL imports and unusual file sizes, search the source for tester_file, #resource and MQL_TESTER if you have it, and forward test on demo.
Why does a straight equity curve look suspicious?
Real strategies have losing periods. A perfectly straight balance line usually means open losses are being held, lot sizes grow after losses, the settings were fitted to the data, or the EA knew the prices in advance.
Is a 90% win rate EA good?
Not by itself. If the average loss is many times the average win, a few losses can erase months of winners. Always compare average win, average loss and the largest loss trade.
Can a backtest prove an EA will be profitable?
No. A real-tick backtest shows how the logic would have behaved on that data. Demo and small live testing are still needed before trusting it with real money.