How Developers Fake Backtests — And What to Check Instead

How Developers Fake Backtests — And What to Check Instead

23 August 2026, 13:40
Volodymyr Babak
0
24

Hi traders.

Let me tell you what most developers stay quiet about — because staying quiet works in their favour.

A backtest can be faked.
Easily, in several different ways, and almost none of them leave a trace in the code that an ordinary buyer would ever notice.

The mechanics are depressingly simple. A developer runs the test, sees a stop loss, deletes that trade, runs it again. The SL could happend on a live account too and the same way deleted from the backtest.
The curve comes out perfect. You see the perfect curve — and you never see what is behind it.

Below are the four methods I run into most often — in order, from the most common to the most elegant.

1. Look-ahead: the bot already knows where price is going

This is where almost every faked backtest begins. The principle is always the same: the algorithm gets access to information that did not exist yet at the moment of the trade.

Here is how it is usually done.Entries are executed on M5 or M15, while the logic reads data from the daily chart. And that is where the hole opens up — in the tester, depending on the modelling mode, a daily bar can already be resolved while the M5 bars inside it are still being replayed.

So the algorithm knows how the day closes before the day has finished happening.

Everything after that is trivial. Buy exactly at the low, sell exactly at the high, equity curve straight out of a textbook.

On a live account that information simply does not exist. The strategy has nothing left to work with — and it stops working on day one.

2. The history reader

Same idea, but cruder and more brazen.

When you start a backtest, the terminal downloads the full price history of the symbol. And nothing stops an algorithm from reading that file directly — instead of honestly limiting itself to the bars up to the current test moment.

At that point the bot is not trading. It is looking up the answers.

I have seen this more than once — and long before I started developing, back when I was just a buyer. You look at the curve and genuinely cannot understand how a system trades that flawlessly. Every entry at the bottom, every exit at the top, not a single questionable decision.

It trades perfectly because it is not predicting anything. It is reading the ending.

3. Excluded dates

Primitive, but effective — and especially popular with authors of martingale and grid systems.

The logic goes like this. These systems perform beautifully most of the time. Then a black swan arrives: a sharp, unpredictable move — and a grid of twenty or twenty-five orders opens up. At that moment the developer can top up the balance so the drawdown on the chart looks smaller than it really was. After that, either the bot drags the basket out, or the account is gone.

But none of that has to appear in the backtest. The developer simply excludes the problem dates from the test period.

The drawdown ran from the 26th to the 3rd of April — remove that window, and the curve is flawless again.

4. Fingerprinting a losing trade through an indicator

Now this one is elegant — and almost impossible to spot.

Take any indicator: RSI, CCI, it does not matter. The developer looks up the exact value the indicator held at the moment a losing trade was opened. Say RSI was at 17.1.

And a condition goes into the code: if RSI equals 17.1 — do not trade.

From the outside there is nothing suspicious about that code. An ordinary filter, the kind every serious EA has. Except it is not a filter. It is a blacklist of specific historical trades, disguised as logic.

Repeat it a few dozen times and every loss disappears from the history — while the strategy itself has not changed by a single line.

What all four have in common

None of these methods improve anything.

The strategy does not get better. The risk does not go down. No edge appears. All that happens is that what already occurred gets hidden — while the reason it occurred stays exactly where it was.

Which means the same drawdown will happen again. Only this time on your account — and deleting the date will no longer be an option.

Check the numbers against reality

The last check requires no technical knowledge at all — and it filters out most of the garbage on the market.

If a system claims 4000% in a year, you can stop right there. That is not a result. It is either a faked test or a level of risk that will erase the account on the first move against it.

For a sense of scale, here is what serious money actually earns:

  • 20% a year — a very good result for passive investing, where you do nothing at all
  • 50% a year with controlled drawdown — an excellent result by any standard
  • 100% a year — exceptional, and there is almost always risk behind it that the headline number does not show

200%, 300% and four-figure percentages are not part of this conversation. As a repeatable outcome those numbers do not exist in the investment world — only as marketing, or as a short streak that ends badly.

Return is only half the number. The other half is what risk produced it.

So study the developer as closely as the product. What are they claiming? Do their numbers fit what is physically possible in this market? Do they mention drawdown at all — or only profit?

What I do instead

Everything above is the reason my own systems are built the way they are.

Aero is a Gold EA with no martingale, no grid and no averaging. One position at a time, the risk of a trade fixed by a parameter you set yourself, and a live signal that has been running for 14 months and is open for anyone to inspect. No deleted dates, no indicator blacklists, no history reading. 



I write regularly about how this industry actually works: how to read a signal page, how to spot a system that is going to blow up long before it does, what to check before you buy anything.

Follow along if that is useful to you. The more traders who understand how this works, the harder it becomes to sell a drawn curve — and the healthier this market gets for all of us.

Written by Vladimir Babak — algorithmic trading developer.

Aero EA on MQL5