Market Data Quality: The Foundation Nobody Checks

A strategy is only as good as its data. Most backtest errors that look like logic problems are data problems that nobody checked for.

5 min readAdvancedUpdated September 16, 2026

At a glance

Biggest issues
Adjustments, survivorship, roll methodology, timestamps
Silent failures
Bad prints that trigger stops; missing delisted instruments
Vendor differences
The same instrument can have different bars from different sources
Practical rule
Audit the data before debugging the strategy

Key takeaways

  • Adjusted prices are not the prices at which trades occurred, which matters for any rule referencing round numbers or historical levels.
  • Continuous futures contracts are constructed, not observed, and different roll methods produce materially different historical series.
  • Bad prints and erroneous ticks trigger stops and generate phantom signals, and they are common even in professional data.
  • Timestamp conventions differ between vendors and between markets, which causes subtle look-ahead when combining sources.
  • Two vendors can produce different daily bars for the same instrument, so results are not reproducible across data sources without care.

Price adjustments

Historical equity prices are commonly adjusted for splits and dividends so that returns are continuous. That adjustment changes every historical price, which has consequences for any rule that references absolute levels.

Series typeWhat it showsCorrect useProblem
UnadjustedActual traded pricesLevel-based rules, round numbersArtificial gaps on ex-dividend and split dates
Split adjustedContinuous through splits onlyMost technical rulesDividend gaps remain
Total return adjustedContinuous through splits and dividendsReturn calculations, performanceHistorical prices never existed
Back-adjusted futuresContinuous through contract rollsTrend systems on futuresCan produce negative historical prices

Futures continuous contracts

Situation: front contract 70.00, next contract 71.50 (contango)

UNADJUSTED SPLICE
   The series jumps 1.50 at the roll date.
   Creates an artificial gap that triggers signals.

BACK-ADJUSTED (difference method)
   All prior prices shifted down by 1.50 so the series
   is continuous.  Historical levels no longer match
   what actually traded, and repeated rolls can push
   early history negative.

RATIO-ADJUSTED
   All prior prices multiplied by 70.00/71.50 so the
   series is continuous in percentage terms.
   Preserves percentage moves; distorts absolute levels.

The choice changes: signal timing, stop levels,
percentage returns, and in some cases the sign of
the long-run result.  It must be documented.
Three roll methods, three different histories.

Additional roll decisions compound the problem: rolling on a fixed date, on volume crossover, or on open interest crossover produces different series. For backtests to be meaningful, the roll rule in the data must match the roll rule you would trade.

Bad prints and data errors

  • Erroneous ticks. A single bad print creates a spike that triggers stops and generates false breakout signals. Screen for prices deviating implausibly from neighbouring bars.
  • Zero or missing volume. Frequently indicates a holiday, a halt, or a data gap rather than genuine inactivity.
  • Stale prices. Illiquid instruments repeat the previous close, which understates volatility and creates artificial mean reversion.
  • Missing bars. A gap in the series can silently shift lookback calculations, producing signals computed from the wrong window.
  • Duplicate bars. Double-counting inflates volume and distorts any cumulative calculation.
  • Incorrect corporate actions. A missed split produces a 50 percent phantom gap; a missed reverse split produces the opposite.
  • Weekend and holiday bars. Some sources include them with zero volume, which affects any bar-count-based rule.

Timestamps and session conventions

IssueExampleConsequence
Bar timestamp conventionIs a bar labelled by its start or its end?One-bar look-ahead if mismatched
Time zoneExchange local, UTC, or vendor localMisaligned cross-market data
Daylight saving transitionsSession times shift relative to UTCDuplicate or missing bars twice a year
Session definition in 24-hour marketsWhich close defines the daily barEntirely different daily candles
Extended hours inclusionPre-market and after-hours in daily barsDifferent highs, lows, and gaps
Settlement versus last tradeFutures daily close conventionDifferent signals from the same market

The bar timestamp convention is the most dangerous because it silently introduces look-ahead. If bars are labelled by their start time and your code treats the label as the time the bar closed, every signal is computed with information from the future. This produces excellent backtest results and no error message.

Choosing and validating a data source

  1. 1

    Establish whether delisted instruments are included

    The single most important question for any equity or crypto dataset. See survivorship bias.

  2. 2

    Confirm the adjustment methodology

    What is adjusted, when, and whether unadjusted series are also available. You will need both for different purposes.

  3. 3

    Check the futures roll rule and adjustment

    It must be documented and it must match your intended trading approach.

  4. 4

    Cross-check against a second source

    Compare a sample of bars across two vendors. Differences reveal convention mismatches before they corrupt a year of research.

  5. 5

    Verify timestamp semantics explicitly

    Confirm whether bars are labelled by open or close time, and in which time zone. Test with a known event whose timing you can verify.

  6. 6

    Run the audit checks on every new dataset

    Outlier ranges, zero volume, date gaps, stale prices, and negative values. Automate it so it runs every time you load data.

Frequently asked questions

Should I use adjusted or unadjusted prices?

Both, for different purposes. Total-return adjusted series for computing performance and for signals based on returns. Unadjusted series for anything referencing actual price levels, such as round numbers or historical support. Using only adjusted data means your backtest sees levels that never traded.

Which futures roll method should I use?

Whichever matches how you will trade. If you roll on volume crossover, your data should too. Ratio adjustment is generally preferable to difference adjustment because it preserves percentage moves and avoids negative prices, but the essential requirement is that the method is documented and consistent.

How do I find bad data in my dataset?

Screen for bars with ranges far above the median, zero or missing volume, gaps in the date sequence, prices repeated identically across many bars, and any negative values. These checks are fast, catch most problems, and should run automatically whenever data is loaded rather than only when results look strange.

Do different data vendors give different results?

Yes, frequently. Session definitions, extended-hours inclusion, adjustment timing, and bad-print filtering all vary. The same strategy can produce noticeably different backtest results on two vendors’ data for the same instrument, which is why documenting your data source is part of documenting your strategy.

Is free market data good enough for backtesting?

For broad index ETFs and liquid instruments with straightforward adjustments, often yes. For anything involving a universe of individual stocks, delisted instruments, futures rolls, or point-in-time fundamentals, generally no. The biases introduced by free data are systematically favourable, which is the worst kind of error.

Test this idea before you trade it

Describe the rules in plain language and AlgoTrader AI turns them into a structured strategy blueprint with a configurable historical backtest, cost assumptions, and exportable code.

Build a backtest

Keep reading

Referenced by

Educational use only. This guide explains how a strategy works. It is not investment advice, not a recommendation, and no result described here is a forecast. Test any approach on historical and out-of-sample data, size positions conservatively, and never risk money you cannot afford to lose.