Three months of downloading everything the MQL5 Code Base offers free and running it on the same fixed conditions. 175 of the 372 never opened a single trade. Of the 190 that did, 157 lost money. And all five of the best returns came with a maximum drawdown between 76% and 99% — which is the entire finding in one sentence.
Each bar is a share of the 372. Nothing was excluded from the count for being uninteresting.
The drop from 332 to 197 is the number most people never see. 135 EAs compiled cleanly, attached to a chart, ran for 32 months of hourly bars, and never sent a single order — usually because a hard-coded session filter, a spread guard, or a lot-size check quietly refused every trade on this symbol. A file that does nothing looks identical to a file that is carefully waiting, right up until the day you are relying on it.
Then 7 more opened positions and never closed one. No stop, no target, no exit condition that this market ever satisfied. Those are the rows that matter most in a live account and are invisible in a screenshot of a backtest.
Every file that closed a trade, plotted by what it made against what it put at risk. The shaded box is the only region a real account can live in.
Each dot is one file that closed a trade. Across: maximum drawdown. Up: return, on a log scale so +1041% and −99% fit on one axis. Green finished positive, red finished negative.
Read the chart from the right. The further right a point sits, the closer that EA came to taking the whole account. Of the 13 files that returned more than 20%, 8 did it while running a drawdown above 60% — and all 5 that returned more than 100% did.
| # | File | Return | Max DD | Closes | Win % |
|---|---|---|---|---|---|
| 182 | The MasterMind 3 (Championship Edition) | +1041.34% | 96.0% | 22 | 50.0 |
| 314 | OverHedgeV2 | +480.43% | 92.8% | 1,675 | 63.0 |
| 298 | L3_H3_Expert | +261.89% | 76.0% | 1,952 | 11.5 |
| 52 | Swaper | +205.88% | 98.8% | 23 | 50.0 |
| 56 | Ilan1.4 | +167.77% | 98.7% | 11,339 | 74.5 |
| 24 | Simple moving-average EA | +99.99% | 62.0% | 273 | 22.0 |
| 200 | HarVesteR | +98.98% | 64.7% | 285 | 35.1 |
| 367 | CyberiaTrader | +53.31% | 84.3% | 10 | 80.0 |
#182 turned $10,000 into $114,000 and did it on 22 closed trades — with a 96% drawdown, meaning that at some point it had given back almost everything it had built. That is not a strategy with a bad year; it is a coin flipped twenty-two times with the lot size of someone else's money. #52 is the same shape with 23 trades.
#56 is Ilan 1.4 at +167.8% and a 98.7% drawdown. I have already tested that one separately on 2014 M1 data: it reached +15% on a $10,000 account and was at zero six days later. It is lab note 004, and the equity line there is the same mechanism that produced this leaderboard place.
Positive return, maximum drawdown under 20%, and at least 30 closed trades — the last condition exists so a single lucky order cannot qualify.
| # | File | Return | Max DD | Closes | Per month |
|---|---|---|---|---|---|
| 310 | Daydream01 | +16.71% | 15.9% | 43 | +0.48% |
| 145 | The new moving-average trading system | +12.88% | 17.7% | 64 | +0.38% |
| 137 | Virtual trailing stop | +5.41% | 10.3% | 103 | +0.16% |
| 252 | Currencyprofits_01.1 | +4.82% | 5.3% | 44 | +0.15% |
| 48 | MACD EA | +4.69% | 6.7% | 46 | +0.14% |
| 169 | Eugene | +4.69% | 16.2% | 32 | +0.14% |
| 61 | х1 | +3.61% | 6.0% | 76 | +0.11% |
| 118 | MA2CCI | +3.31% | 6.4% | 261 | +0.10% |
| 313 | MA2CCI | +3.31% | 6.4% | 261 | +0.10% |
| 377 | MA2CCI | +3.31% | 6.4% | 261 | +0.10% |
| 316 | SMC MaxMin at 1200 | +2.59% | 5.7% | 983 | +0.08% |
| 4 | VR Locker Lite - positive-lock strategy | +2.56% | 3.4% | 145 | +0.08% |
| 274 | Channels | +0.71% | 10.4% | 50 | +0.02% |
Three of those rows are the same MA2CCI code posted three times, so this is really 11 distinct EAs — 2.7% of the pile, or 5.3% of the files that traded at all.
Now read the last column. The best result in the entire batch is +0.48% a month over 32 months, before the spread widening you will actually meet and before the swap on any position held overnight. Everything else on that list is between +0.02% and +0.4% a month. This is what the honest end of the free-EA distribution looks like: not fraud, not a scam, just a result that does not clear the cost of the risk it takes.
The 190 files that traded, grouped by the win rate they achieved.
| Win rate | Files | Median return | Median max DD | Ended positive | DD over 50% |
|---|---|---|---|---|---|
| <40% | 97 | -18.9% | 26.0% | 11 | 40 |
| 40-60% | 47 | -32.8% | 45.6% | 4 | 22 |
| 60-70% | 13 | -31.3% | 80.1% | 2 | 7 |
| 70-85% | 17 | -3.8% | 41.6% | 6 | 5 |
| 85+% | 16 | +0.5% | 16.8% | 9 | 5 |
Only one bucket has a median that is not negative: the sixteen files above an 85% win rate, at +0.5% over 32 months. Below 70% the median file loses between 19% and 33%. So win rate does carry information — it is just that the information it carries, at the top of its range, is flat.
That is not a coincidence, it is arithmetic. A high win rate at a low reward-to-risk is what you get when the target is close and the stop is far; the 5/10 arithmetic needs 66.7% just to break even before the spread. And five of those sixteen still ran a drawdown past 50% getting there.
Grouped by reward-to-risk, as the run measured it.
| Reward : risk | Files | Median return | Ended positive |
|---|---|---|---|
| <0.5 | 46 | -26.5% | 2 |
| 0.5-1 | 42 | -30.0% | 4 |
| 1-1.5 | 29 | -51.5% | 3 |
| 1.5-3 | 43 | -17.0% | 8 |
| 3+ | 16 | -4.9% | 6 |
The tight-target group — reward under half the risk — is the worst cohort on the page: 46 files, median -26.5%, and 2 of them finished positive. These are the EAs that look calmest in a screenshot, because most individual trades are winners. The cost of that calm is entirely in the tail, and the 32-month window contains the tail.
Batch A was 77 files I picked by hand and tested in depth. Batch B is 372 files nobody picked — every free download I could get. The mechanical failure rate barely moved: 44% of batch A never opened a position, 47% of batch B did not. Selecting files more carefully did not select for EAs that trade; it selected for EAs with documentation.
One thing batch B adds is that the pile is not as large as it looks: 12 of the 190 traded files are byte-for-byte the same result as another row (11 groups — the same code reposted under a new name). 372 downloads is closer to 360 ideas, and the Code Base's own search ranking is doing most of the curation for you.
The filter in section 3 is deliberately looser than the one batch A used to name a survivor: batch A also re-ran each file with floating P/L included, which is why 77 files produced one survivor and 372 produce thirteen on this test. Both numbers are real; they answer slightly different questions.
Do not shop from the return column. On this page the return column and the drawdown column are almost the same column. If a free EA shows a spectacular curve, the first question is what the account was worth at the worst moment, and the answer is usually in the file's own report.
Treat “it trades” as a finding, not a baseline. Nearly half of these files never sent an order on a symbol and timeframe that every one of them claims to support. Before you judge an EA's edge, confirm it has one at all.
If you want a number you can trust, run it yourself. The whole batch took one harness and a few hours of compute. Nothing here needed a vendor's permission, and the same runs that produced this page are the ones behind every EA record in the database.
Related: the full 372-row table (filterable, every raw value) · the 77-EA deep report · the 74% win-rate EA that died in six days.
Conditions: EURUSD H1, 1 Feb 2024 – 31 Oct 2026, 17-point spread measured on the live feed, open-prices-only modelling, $10,000 starting balance, MT4 build 1492, one file per run with default inputs. Every figure above is recomputed from batch-b.csv by data/gen_batch_b_analysis.py. Per-trade ledgers were not retained for this batch; the defect patterns were diagnosed on the batch-A sample, whose ledgers exist.