A backtest can process every row correctly and still answer the wrong question because the rows describe the wrong market, skip part of the sample or attach information to the wrong time. Data quality is therefore part of the strategy specification. Before reading a return, record what each observation means, when it became available and how it was obtained.
1. Name the exact market and bar
Write down the provider and venue, exact symbol, spot or derivative contract, quote and settlement assets, candle interval, and whether the timestamp marks the open or close of a bar. “BTC hourly candles” leaves out details that can change prices, volume, funding and trading hours. Keep one contract’s price series with that contract’s funding history unless a documented research question justifies a different join.
Check contract metadata for delistings, migrations, contract multipliers and symbol changes during the sample. A symbol can survive while its market definition changes. If a source revises historical data, retain the retrieval date and a raw copy so a future run can explain the difference.
2. Audit the time index before calculating indicators
Normalize timestamps to UTC while preserving the provider’s original representation. Record whether numeric values are seconds or milliseconds. An ISO timestamp needs an explicit Z or UTC offset to identify an instant; a local clock string such as 2026-04-07 13:00 is ambiguous without a timezone. Check ordering and uniqueness, then compare the first and last times with the requested window and the expected interval count.
For a four-hour hourly sample beginning at 10:00 UTC, the expected open times are 10:00, 11:00, 12:00 and 13:00. A file with 10:00, 11:00, 11:00 and 13:00 still contains four rows, but it has a duplicate 11:00 and no 12:00 observation. Row count alone misses both defects. Resolve them from the authoritative source; do not average duplicate bars or invent an ordinary-looking candle to fill a gap. If a gap is excluded, report the dates, the rule and how it affects warm-up, trades and sample coverage.
3. Check values and source coverage
For each OHLC bar, confirm positive finite prices, high ≥ max(open, close), low ≤ min(open, close) and high ≥ low. Volume should use the declared unit and be non-negative. Plot or inspect several raw rows at the start, middle, end and around suspicious moves against the original source. Look for stale repeats, abrupt volume-unit changes, duplicated page boundaries, partial current candles and missing intervals. A plausible chart is not proof of correct market identity or provider provenance.
Coverage is an API property as well as a file property. As a current Hyperliquid example, its candle snapshot endpoint documents supported intervals and says only the most recent 5,000 candles are available. The candle response exposes open and close timestamps along with symbol, interval, OHLC, volume and trade count; its WebSocket schema labels the timestamp fields in milliseconds. If a requested history reaches beyond that endpoint’s available window, a response that parses cleanly can still be incomplete. Record the request window and verify that the first and last returned bars match it. Use an appropriate archive or another explicitly identified provider for older coverage. These are Hyperliquid API details checked on 25 September 2026, not universal exchange limits; see the candle snapshot API and candle WebSocket schema.
4. Align funding and other event data by their actual meaning
Funding is time- and contract-specific. Preserve its rate unit, sign, timestamp and settlement convention. A missing rate is unknown, not a zero payment. A market funding-rate history describes rates at settlement times; an individual account ledger records position size and the actual cash delta. They answer different questions. Hyperliquid, for example, documents hourly funding for its perpetuals, a historical rate endpoint and a separate user funding ledger containing fields such as time, coin, rate, size and USDC delta. Match the right record to the position held at that time rather than forward-filling or applying the rate to every bar. Consult its current funding rules and perpetual data endpoints, checked on 25 September 2026.
Signal timing needs the same care. A bar’s final high, low and close are not all known at its open. If a rule needs the completed close, the decision can only use it after the bar has ended. The simulated entry must then use a later executable observation under a stated convention. Testing a close-based decision at that same bar’s open leaks future information. Check indicator warm-up, resampling boundaries, merged features and the exact row used for a signal.
5. Keep raw evidence and every transformation
Save the original response or file unchanged with the source name, market identifiers, request parameters, retrieval timestamp, interval, timezone, row count and requested start/end. Record the software or transformation version and a cryptographic fingerprint. Create a separate cleaned dataset; for each correction or exclusion, retain the original row, reason, replacement source and exact transformation. This lets another researcher reproduce a result and compare a later source revision without guessing what “cleaned data” meant.
The research run should bind its dataset fingerprint to the strategy version, engine version, time span, settings, warnings and outputs. A hash establishes that two files are byte- or value-identical under the chosen method; it does not establish that either file is true. Data provenance and data accuracy are related but separate checks.
What SuperQuant validates
SuperQuant’s CSV importer requires timestamp, open, high, low, close and volume fields, with optional funding_rate. It requires at least 60 ascending, unique, contiguous one-hour UTC observations, positive finite OHLC prices, non-negative volume and valid candle relationships. ISO timestamps must carry a timezone. Missing funding remains null and is reported; strategies that include funding or depend on a funding filter require the funding observations. These checks reject malformed structure, but the importer cannot authenticate the claimed exchange or prove economic accuracy.
The bundled histories are synthetic teaching examples, not market records. An imported series is distinct evidence with its own source and limitations. Review the historical-data CSV template and backtest audit checklist, then read the cost guide and look-ahead bias review. Good data make a test interpretable; they do not demonstrate a persistent edge or a future result. This guide is general education, not investment advice.