DATA QUALITY WORKFLOW
Why missing candles affect your backtest—and how to check them
A historical date range does not guarantee a candle for every minute inside it. Some minutes fall during closures; others are absent, invalid or excluded after conflicting provider rows. ReplayPip keeps those gaps instead of inventing prices. This guide explains how that affects available timeframes, replay timing and the conclusions you can reasonably draw from a test.
Start by identifying the kind of gap
Separate expected closures from missing observations during a period you intended to study. Forex weekends, metal trading breaks and exchange maintenance are not interchangeable with a corrupted row. A provider can omit an observation or revise an archive later. ReplayPip’s validation can also exclude conflicting versions of the same minute when that audited option is selected.
Check instrument, provider, price basis and UTC timestamp together. HistData bid, Binance spot trade and a broker export are different datasets. A discrepancy is not proof that one source is fraudulent. Compare the same period and source conventions before calling it an error; a suspicious price still needs investigation even if it passes structural validation.
Five minutes need five source candles
Consider a bucket beginning at 09:00 UTC with observations at 09:00, 09:01, 09:03 and 09:04. The 09:02 minute is missing. Even if four prices look plausible, ReplayPip does not publish that bucket as a complete five-minute candle. It cannot know whether the missing minute contained a more extreme high or low.
The same rule applies to 15-minute, hourly, four-hour and daily buckets. The opening price comes from the first source minute, the closing price from the last, and extremes from all constituent minutes—but only when the full bucket is present. A source’s own daily candle may use a different timezone or aggregation policy.
| Minute label | Source observation | Meaning |
|---|---|---|
| 09:00 | Present | First source minute |
| 09:01 | Present | Second source minute |
| 09:02 | Missing | No invented replacement |
| 09:03 | Present | Fourth source minute |
| 09:04 | Present | Last source minute |
| Five-minute bucket | Not published | Incomplete source coverage |
Read the coverage report without overinterpreting it
The Data & methodology page lists each dataset’s first and last stored minute and available chart intervals. Those endpoints do not certify continuous coverage. An interval may be available somewhere in a dataset but incomplete around the particular date you choose.
The operator command market:status reports counts within an audit window, normally the last 30 days of each stored dataset. Unrepresented minutes include closures as well as gaps; they are not all rejected prices. A low daily-candle count can be consistent with a strict 24-hour UTC completeness rule. It does not mean the system should fill empty minutes just to make the 1D button available.
Check time elapsed, not only candles advanced
A sequence of twelve five-minute candles spans an hour only if their opening timestamps are five minutes apart. A gap can make twelve stored candles cover longer. A rule written as exit after twelve candles therefore differs from exit after sixty minutes when coverage is incomplete.
Our ten-session exercise checked continuity before applying its fixed hold. In your journal, write the clock-based or candle-based interpretation in advance. If data needed for a stop or exit is absent, label the observation incomplete or apply a declared policy; do not choose whichever interpretation produces the better result after replay.
Testing one setup across ten replay sessions: keep the whole journal
Do not repair a gap by changing the story
Forward-filling the last close assumes nothing relevant happened during the missing interval. Interpolation invents a path between prices. Either can change indicators, stop/target triggers and the apparent duration of a hold. ReplayPip does not use those replacements to create missing market candles.
Likewise, a checksum verifies that an archive matches its published checksum, not that every row is economically correct. Our recent early-crypto checks found malformed minute timing in an official historical archive. Validation should reject that structure or use an explicitly reviewed, audited treatment; moving timestamps silently would change what the chart claims to show.
A practical pre-session checklist
Before a replay, confirm the instrument, source, price basis and date range. Check that the selected timeframe has complete candles around the planned window, inspect timestamps across the observation period, and record how missing data will be handled. Keep unknown intervals and skipped sessions in the journal.
When reporting a suspected problem, send the pair, timeframe, UTC date/time and the observed behaviour through Feedback. Do not send database passwords or broker credentials. A later provider revision may change coverage, so keep the dataset/revision information with any published example. Good backtesting records uncertainty rather than hiding it behind a smooth chart.