Backtesting

Test it against the past, with the engine that trades the present

A replay here is not a second implementation of your rule. It is the same engine reading recorded bars instead of live ones, which is the only way a result means anything about what will happen next.

One engine, two bar sources
Live
Bars as they arrive
Replay
Recorded bars, one at a time
The same rule engine

Conditions, state transitions, sizing and the identifier stamped on every signal are one body of code, not two.

The test that keeps it that way: over the same window, live and replay have to produce an identical signal sequence. If they diverge, the replay is not evidence about anything.

The result

What a finished run tells you

Grouped as the results screen groups it. Nothing here is a metric we plan to add, because a list like this grows a plausible extra entry and nobody finds out until they run one.

Outcome
  • Final equity
  • Net profit and loss
  • Total return
  • Annualised growthcan be blank
Risk
  • Maximum drawdown
  • Longest drawdown, in time
  • Sharpecan be blank
  • Sortinocan be blank
  • Time holding a position
Trades
  • Trades, won and lost
  • Win rate
  • Profit factorcan be blank
  • Average win
  • Average loss
  • Largest win
  • Largest loss
Cost and coverage
  • Commission paid
  • Bars replayed

HYPOTHETICAL PERFORMANCE. Every figure above is produced by replaying a rule over recorded bars. It is not the result of trading and no money was at risk. Hypothetical results have inherent limitations, chief among them that they are prepared with the benefit of hindsight and that no replay contains the order it is testing. No representation is made that any account will or is likely to achieve a profit or a loss resembling one shown here. Sections 12 and 13 of the Terms of Service and Section 16 of the Risk Disclosure Agreement state this in full.

The window

What a replay is set up over

A window, a starting balance, and one decision about which bars count. Nothing here is a result yet.

The replay setup card: a strategy selector, a period of one year with its start and end dates, a starting capital field, and a regular-hours-only checkbox with the sentence explaining what it skips.
The regular-hours toggle states its own consequence, and that it does not apply to crypto.

Regular hours only is the setting most likely to change a result quietly, which is why the app says what it does rather than naming it and moving on. A replay that includes pre-market bars fills at prices a thin book produced, and a rule that looked profitable on them is a rule that was tested somewhere it will not trade.

How it can be wrong

Every backtest is a claim about a past that did not contain your order

The ways that claim can be wrong are knowable, so here are ours. A result you cannot interrogate is a result you should not act on.

Bars, not ticks

We hold minute bars, not every quote and trade. Inside a single bar the exact path is reconstructed from its open, high, low and close, so anything that depends on the order those were touched is an approximation.

Options are not replayed yet

Stocks and crypto only. The historical options data we hold is too thin to replay honestly, and a spread backtest built on it would look precise and mean nothing.

A modelled fill is not a fill

Commission and slippage are applied from a model you set. Real fills depend on a book that was not asked to absorb your order, and no replay anywhere can undo that.

Before it touches money

Build a rule, replay it over the window you care about, and read the result next to what the replay cannot know.