Strategies
A strategy is a ruleset you build once and run against data automatically, instead of clicking through a replay yourself. Strategies are built from blocks, executed in a worker on your machine, and stored with the same provenance as a manual test.
Building one
The builder is visual: entry rules, exit rules, position sizing and management (stop-loss, take-profit, partial close, trailing) are expressed as blocks and connections rather than as source code. What you compose is compiled into a versioned strategy definition, so a run can always be re-read later as the exact ruleset that produced it.
Strategies live in the same library as your tests, and they can be:
- backtested headlessly over a dataset,
- attached to a symbol in a multi-symbol portfolio,
- saved as a variant of an existing strategy when you only changed a parameter.
Backtest runs
A strategy backtest runs in a background worker over an existing dataset, so the interface stays usable while it runs. The result is a run: the fills the ruleset produced at simulated prices, plus the same statistics view a manual test gives you — equity curve, drawdown, breakdowns, journal.
Runs are pinned to the dataset version and the strategy definition that produced them. Re-running the same strategy over the same data version reproduces the same fills; that is the point of the deterministic engine.
The optimizer
The optimizer sweeps parameter combinations: you choose which numeric fields to vary and their candidate values, and it enumerates the combinations. Every row in the result table is a real full backtest, not an approximation.
What the panel deliberately does not hide:
- All runs are shown, not only the winners. Any column can be sorted; parameter columns sit side by side so you can see how a change moved the result.
- A persistent overfitting warning stays in the panel while you look at the table.
- Sweep results are memory-only: they are a working set, not a saved artifact. A refresh loses them. Use Open as Test or Save as new strategy variant on a completed row to keep it.
- A sweep is capped by default (200 runs) so a combinatorial explosion cannot hang your browser; narrow the ranges instead of raising the cap blindly.
Reading optimizer output honestly
The best row in a sweep is the row that best fits the window you swept. That is a description of the past, not an expectation of the future — the more combinations you try, the more likely the best row is mostly noise. If you change one parameter slightly and the result swings a lot, that row was fragile. A strategy worth trading in a replay is one whose neighbours in the table also look reasonable.
Related
- Creating a Replay for manual sessions, Portfolios for rules across symbols.
- Why results are reproducible: Data & Storage.