Advanced · 10 min read

Backtesting without hindsight shortcuts

Design a reproducible historical test and name the assumptions that can invalidate it.

Complete lesson · editorial review pending

Prerequisite: A journal that separates process from outcome

Learning objective

Design a reproducible historical test and name the assumptions that can invalidate it.

Write entry, exit, sizing, cost and session rules before evaluating the data. Record data provider, timezone, date range and version. Use only information available at each decision time. A bar’s eventual high, low or close was not fully known before that bar ended.

If a bar touches both stop and target, OHLC alone may not tell which came first. Use suitable finer data or a clearly documented conservative assumption. Include plausible bid/ask, commission, financing and execution effects; a chart close is not automatically a tradable fill.

Separate development data from an untouched evaluation period. Repeatedly selecting settings on the evaluation period turns it into development data. Report all tested variants, net results, drawdown and unresolved assumptions. Historical or simulated performance is not proof of future live outcomes.

Worked example

Hypothetical long: entry 100, stop 98, target 104. The next bar has high 105 and low 97. Both levels were reached, but their sequence is unknown from those values. Mark the trade ambiguous or apply your predeclared assumption; do not always count a win.

Common mistakes

Do not remove losing trades, treat gross results as net results or describe a backtest as a live account history.

Practice

Write a one-page protocol covering decision time, data, costs, ambiguous bars, variants and the untouched period.

Check your understanding: Does the example bar prove the target was reached before the stop?

Sources & further reading

Server progress is available only after account activation and sign-in. Quiz answers themselves are not saved.

Sign in to use your private workspace.