← Back to Research
2025-12-24

Why Forex Backtests Fail: Check the Data Before the Strategy

Backtest failure proof path

  • Major-8 release: 8 pairs, 56 Parquet files, 79,042,363 audited rows, and M1 coverage from 2000-05-30 to 2026-07-02 UTC.
  • QA result: 0 structural review blockers, with 51 files carrying visible source-observed gap caveats.
  • Sample audit report: a flawed EUR/USD M1 fixture scored 84/100 and still showed duplicate timestamps, invalid OHLC rows, non-positive prices, a negative volume value, a gap, and large price jumps.
Check your backtest data

Proof path

Before trusting any backtest idea from this article, start from the historical forex data hub, then inspect a sample file and the current coverage report. The paid bundle path stays proof-first: sample, coverage, then order help if the data fits.

A forex backtest can fail before the first trade rule is evaluated. The usual problem is not the moving average, RSI setting, or entry condition. It is the price history underneath the test: missing bars, duplicate timestamps, invalid OHLC rows, platform import errors, timezone shifts, and spread assumptions that do not match the market you plan to trade.

Before you change the strategy, test the file. If the equity curve looks too good, breaks after import, or changes between platforms, run a mechanical data-quality check first. Look for duplicate timestamps, impossible OHLC rows, missing intervals, timezone drift, non-positive prices, and platform conversion errors before optimizing another parameter.

Fast check: start with the forex backtest data checker, load a sample file, inspect release coverage, and confirm the provider shows known gaps instead of hiding them. HistoricalFX publishes a free EUR/USD Parquet sample, a release coverage report, a backfill status page, and a forex data provider comparison so this due diligence happens before checkout.

Commercial route: if the question has shifted from debugging a backtest to choosing a dataset, compare the historical forex data overview, the download path, and the free-versus-paid workflow before committing strategy logic to a file you have not audited.

Current proof layer: the current Major-8 release contains 8 pairs, 56 Parquet files, and 79,042,363 audited rows spanning 2000-05-30 through 2026-07-02 UTC M1 coverage. The release QA report shows 0 structural review blockers and 51 files with known source-observed gaps, which is exactly why the product is sold with coverage visibility rather than a broad gap-free claim.

Reader path: the safest sequence is diagnostic first, sample second, coverage third. Use the checker to identify risk symptoms, test the EUR/USD sample in your own stack, then inspect release coverage before considering the Major-8 readiness kit or a custom data-quality audit.

The fastest way to know if the data is the problem

If a strategy looks too good, fails only after import, or behaves differently between platforms, check the file before changing the strategy. The first questions are mechanical: are timestamps unique and sorted, are OHLC rows possible, are missing intervals visible, and does the file use the timezone your backtester assumes?

The sample forex data audit report shows the kind of evidence this produces. A deliberately flawed EUR/USD M1 fixture scored 84/100 and still had one duplicate timestamp, one out-of-order timestamp, two invalid OHLC rows, one non-positive price row, one negative volume value, one unexpected M1 gap, one large close-to-close jump, and one large candle range. That is the difference between a vague data-quality warning and a repairable audit finding.

The missing-bar problem

Missing source bars are not automatically bad. Forex markets close on weekends, liquidity varies by session, and different venues can have different maintenance windows. The problem is pretending those gaps do not exist. If an indicator expects a regular M1 cadence and a data file silently skips hours, the calculation can jump in ways your chart may not make obvious.

For commercial backtesting, do not fill multi-year gaps with interpolation or fake continuity. Source the missing range from a real provider, document the gap, or exclude that range from the test. A useful dataset should make known gaps visible instead of hiding them.

Duplicate timestamps and bad OHLC rows

Duplicate timestamps can cause double-counted bars, unstable joins, or different results depending on how your backtester sorts rows. Invalid OHLC rows are just as dangerous: a high below the close, a low above the open, or a zero price can create trades that never could have happened.

Before trusting a dataset, check duplicate timestamps, nulls, monotonic ordering, and OHLC validity. The current HistoricalFX release is packaged with coverage reporting so buyers can inspect the schema and known coverage before using it in a strategy. The Major-8 Backtest Readiness Kit is positioned around that workflow: audited Parquet delivery, known-gap visibility, and a practical starting point for liquid FX research.

If the dataset is your own broker export or legacy archive, use the forex data quality audit path to scope the pair, timeframe, source, and date range before repair work is quoted. The audit is for evidence, not fake smoothing: duplicate timestamps, invalid OHLC rows, out-of-order timestamps, and unexpected gaps should be visible before a backtest depends on them.

Spread and slippage assumptions

OHLCV bars are not execution data. A strategy that looks profitable on close-to-close bars can fail once spread, commission, slippage, and session liquidity are modeled. This matters most for scalping systems, news-event systems, and anything trading near rollover.

If your data does not include separate bid and ask columns, model transaction costs explicitly. Do not assume a fixed one-pip spread is realistic across every pair, session, and year.

MetaTrader modeling quality can mislead you

MetaTrader workflows add another layer of risk because the platform import process has its own assumptions. Symbol names, broker suffixes, timezone offsets, custom symbols, HST/FXT generation, and Strategy Tester settings can all change results. A high modeling-quality number does not prove that your imported source history is complete or aligned.

That is why our live paid release is Parquet-first. MT4 and MT5 conversion files are not sold until the exact artifacts are generated, audited, and uploaded. If you need platform-specific conversion, start with a data audit request so the target symbols, date ranges, and validation checks are explicit.

A safer backtest data checklist

  • Confirm timestamp timezone and session assumptions.
  • Check duplicate timestamps and sort order.
  • Validate open, high, low, close, and volume fields.
  • Separate normal weekend closures from true source gaps.
  • Model spread, slippage, and commission outside the OHLCV file.
  • Use a sample file before committing your full workflow.
  • Inspect release coverage before buying or training models.
  • Request a data audit when your own file has gaps, duplicate timestamps, unclear timezone handling, or platform-import mismatches.

If you want to test the HistoricalFX format, start with the free backtest data checker, download the free EUR/USD sample, inspect the release coverage report, compare the paid bundle against the free vs paid forex data breakdown, and review the sample audit report before scoping a paid audit.

Related Articles

Inspect the dataset before you buy

Start with the historical forex data hub, then the free EUR/USD sample and release coverage. If the schema and proof layer fit your workflow, the major-pair bundle is the practical first paid download.