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.