◆ New — Strategy Validator, Code Fixer & Prop Compliance Checker are live. Try one free →
Home / Learn / Backtest Integrity Checks: Catching a Report That Contradicts Itself
Backtesting

Backtest Integrity Checks: Catching a Report That Contradicts Itself

Integrity checks look for internal contradictions in a backtest — places where the report disagrees with itself — rather than judging whether the strategy is good. This article catalogs the main self-consistency red flags: recompute-versus-claimed mismatches, impossible chronology, zero-loss samples, single-trade-dominated edges, and near-perfectly-straight equity curves, and explains what each one means. It is educational only, not financial advice, and it is about robustness and honesty, never about predicting profitability.

What is a backtest integrity check?

A backtest integrity check asks whether a report is internally consistent — whether its own numbers, timestamps, and curve agree with each other — independent of whether the strategy has any edge. It is a lie-detector for the document, not a verdict on the system. A report can pass every integrity check and still be a bad strategy; the point of these checks is that a report which fails them cannot be trusted enough to even begin evaluating.

This framing matters because it keeps the question honest. We are not asking 'will this make money' — that question cannot be answered from a backtest at all, and anyone who claims otherwise is selling something. We are asking a narrower, answerable question: does this report contradict itself? Contradictions are cheap to find and expensive to fake around, which makes them a high-yield first pass. The checks below are the ones that catch the most reports with the least effort. Each has a specific meaning when it fires, and each has innocent explanations you should rule out before concluding anything. The free [Backtest Health Check](/backtest) runs several of these automatically on an uploaded trade list; this article explains what it is looking for so the output is legible rather than a black box.

Recompute-vs-claimed mismatch: when the summary disagrees with the trades

The first and most decisive check is arithmetic: recompute the headline metrics from the trade list and compare to the stated summary. Net profit should equal the sum of per-trade P/L. Profit factor should equal gross profit over gross loss. Win rate should equal winners over total trades. Max drawdown should match a backward-only running-peak calculation on the chronological equity curve. When any of these disagree, the summary was not generated from the trades it claims to describe — or was generated from them and then edited.

Before calling it a red flag, rule out the innocent causes. Cost conventions differ (gross versus net). Rounding accumulates. Break-even trades get classified differently. Currency conversion or contract multipliers can shift totals. A single small mismatch with a plausible convention behind it is not evidence of bad faith. What is evidence is direction: if every mismatch flatters the strategy, the report has a thumb on the scale. The mechanics of recomputing each figure are covered step by step in [How to Verify a Backtest Report You Didn't Run](/learn/how-to-verify-a-backtest-report). Here the emphasis is interpretive: a reconciliation gap is not a performance problem, it is a trust problem, and trust problems are disqualifying in a way that mediocre performance is not.

Impossible chronology and zero-loss samples: what do they signal?

Chronology checks catch trades that could not have happened in the order claimed. Sort the trade list by entry time and look for exits that precede their own entries, overlapping trades in a strategy that is documented as single-position, or entries timestamped before the data feed's start. An exit before its entry is often a symptom of look-ahead bias leaking into the backtest engine — the strategy 'knew' something it could not have known at entry. That is a mechanical defect, not a bad-luck outcome, and it is covered in depth in [Look-Ahead Bias](/learn/look-ahead-bias). Overlapping positions in a single-position system usually mean the accounting double-counts capital, which inflates returns.

Zero-loss samples are the other tell. A backtest with no losing trades, or with a suspiciously clean floor under its losers, almost never reflects a real market. Stops slip, spreads widen, gaps happen. A trade list where every loss is exactly the stop distance — never a tick worse — suggests fills were modeled as frictionless, which understates real-world cost and risk. A strategy reporting literally zero losing trades over a meaningful sample is not a great strategy; it is a modeling artifact or a curve fit so tight it memorized the data. Neither is a reason to expect profit. Both are reasons to stop trusting the report.

Single-trade-dominated edges and straight equity curves

An edge dominated by one or a handful of trades is fragile in a way the headline hides. If the profit factor is 2.0 but 80% of the net profit came from a single trade, the strategy does not have an edge — it had an event. Recompute the summary with the top few winners removed and watch whether the result survives. This is important enough to deserve its own procedure, laid out in [The Drop-the-Best-Trades Test](/learn/drop-the-best-trades-test). As an integrity check, the question is narrow: is the reported edge a property of the trade distribution, or an artifact of its extreme tail?

The near-perfectly-straight equity curve is the last and most seductive red flag. Real strategies breathe — they have losing streaks, flat periods, and drawdowns. An equity curve that rises in an almost straight diagonal line, with an r-squared against a straight line near 1.0, is not a sign of quality. It is usually a sign of look-ahead bias, survivorship in the instrument selection, or a returns series that was smoothed or fit. The smoother the curve, the more suspicious it should make you. A useful reflex: a backtest that looks too clean to be real is telling you the truth about being too clean, and probably a lie about being real.

| Red flag | Most common cause | What it is NOT | |---|---|---| | Recompute mismatch | Costs dropped, summary edited | A performance problem | | Exit before entry | Look-ahead bias in engine | Bad luck | | Zero losing trades | Frictionless fills, overfit | A great strategy | | One trade = most profit | Tail event, not edge | A repeatable system | | Straight equity curve | Look-ahead, smoothing, fit | Consistency |

How do integrity checks fit the rest of validation?

Integrity checks are the entry gate, not the whole building. They are cheap, they run on the report alone, and they disqualify the worst material fast. What they cannot do is tell you a strategy is good — a report that passes every check may still be overfit, under-sampled, or built on a data feed with hindsight baked in. Passing integrity checks earns a strategy the right to be evaluated further; it earns nothing else, and it never earns a claim about future returns.

The checks that come after are about robustness rather than consistency. [In-Sample vs Out-of-Sample](/learn/in-sample-vs-out-of-sample) and [Walk-Forward Analysis](/learn/walk-forward-analysis) test whether performance survives data the strategy was not fit on. [Monte Carlo Simulation](/learn/monte-carlo-simulation-backtests) tests whether the result survives reordering and resampling of its own trades. The [Deflated Sharpe Ratio](/learn/deflated-sharpe-ratio) of Bailey and Lopez de Prado, building on the multiple-testing corrections formalized by White's Reality Check and Hansen's SPA test and the broader critique of Harvey and Liu, adjusts a headline Sharpe for how many variants were tried to find it. Run integrity checks first because they are the fastest way to spend no further time on a report that already contradicts itself. The free [Overfitting Check](/backtest/overfitting) picks up where integrity checks leave off. None of these tools, ours included, predicts profitability — they measure whether a result is honest and whether it is robust. That is the entire brand, and it is the only claim worth making.

Key takeaways

Educational only — not financial advice. Trading involves substantial risk of loss.

Catch the bug that compiles.Run auditGet Pro