Here's a backtest result that fooled me for a week. A coin showed no trend at all for two and a half years. Flat equity, zero trades, a clean row of nothing.

I almost wrote it up as "the strategy sits out sideways markets." Then I looked at the raw candles.

The price hadn't been flat. The data had been missing.

What a data hole looks like

In early 2021, several large US exchanges stopped trading XRP while the SEC's case against Ripple played out. Coinbase was one of them, and it didn't bring the coin back until after the July 2023 summary judgment ruling. If your history for XRP comes from a venue like that, you get a gap of roughly two and a half years.

Now here's the trap. Plenty of data pipelines forward-fill. When a candle is missing, they copy the last known close into the empty slots. Nobody asked them to. It just makes the series look continuous.

So your system sees a price that doesn't move for 900 days. Zero volatility, zero trend, zero signal. It does nothing, and the backtest records that as discipline.

Why this is worse than a bad trade

A bad trade shows up in the log. You can see it, hate it, and learn from it.

A data gap produces no trade at all. Nothing in the results tells you something is wrong. The equity curve just goes quiet, and quiet looks like safety.

It also flatters your risk numbers. Those fake-calm months drag your average volatility down and shrink your measured drawdown. Run that through a position-sizing formula and the sizes come out too big. I think this is the part most people miss: the hole doesn't only hide opportunity, it quietly corrupts every statistic computed over the window.

There's a second version of the problem. Average a few coins together and one of them is frozen for a year, and the portfolio looks more diversified and steadier than it ever was. A frozen price has zero correlation with everything. Of course it makes the blend look good.

The check takes ten minutes

Before I trust any result now, I run three checks on the raw data.

Count the candles. A year of daily bars should have 365, and an hourly series should have 8,760. Exchanges that run 24/7 have no reason to be short.

Look for runs of identical closes. One repeated close happens. Two hundred repeated closes is a hole that something painted over.

Compare against a second venue. If Binance shows a coin moving 40% while your series shows a straight line, believe Binance.

If any of those fail, I either drop that window or pull the history from a venue that actually traded the coin. What I never do is leave it in and hope the average washes it out. It won't.

What this changes

The uncomfortable lesson is that a clean-looking result deserves more suspicion than a messy one. When a backtest says "no trades for two years," the honest reading is that one of two things is true. The system really had no edge for two years, or it never saw the market.

Those lead to completely different decisions, and the equity curve looks the same for both.

I rerun that audit every time I add a coin. Usually it finds something small, a missing week here and there. Once in a while it's a hole big enough to change the answer.

So audit the input before you admire the output. A strategy is only as honest as the data it was fed.

If you want to see how we handle this, our backtest methodology and data sources are published at v33systematic.com, gaps and all.