How the engine works
The Build screen
The Build screen (sidebar → Build, or Ctrl/Cmd+2) is where you "compose the search space, optimizer settings, and constraints, then start a run." It has three panes: the block palette on the left, the canvas in the middle, and the settings tabs on the right.
The palette
The palette lists every building block the optimizer may use, grouped into Indicators (88 stock NinjaTrader 8 indicators) and Structural primitives (9 patterns: opening range, session levels, swing structure, compression, rejection patterns, and friends). All blocks are non-repainting: evaluated on closed bars, no lookahead.
Click + on a block to add it to the canvas (it turns into a checkmark once added). Blocks that repaint are disabled with the tooltip "repaints — not sampleable."
The canvas
The canvas holds the blocks the search may draw from:
- "Add blocks from the palette — the first becomes the mandatory entry anchor." The first block is automatically mandatory — it appears in every candidate strategy.
- Each further block has its own mandatory checkbox. Checked = included in every candidate; unchecked = the optimizer decides per candidate whether to use it (via an inclusion gene).
- Remove a block with ✕.
Parameter ranges
Every block parameter shows three fields — Min, Max, Step — plus a helper line like catalog 2–200 · default 14. You set the range the optimizer samples, not a single value. Validation errors appear inline (min must be ≤ max, step must be > 0).
Narrow ranges search faster and overfit less; wide ranges explore more. The catalog bounds are sane outer limits.
Dataset and date range
Pick the dataset for the run from the Dataset dropdown — each option reads like MES 1m · 2023-01-01 → 2024-12-31 (252,000 bars). Import one first on the Data screen if the list is empty.
Once a dataset is selected, From / To date fields let you narrow the backtest window inside the dataset span. Leave them alone for "Full dataset span" or click "Reset to full dataset span" to undo a narrowing. Validation folds and the incubation hold-out are carved from whatever window you choose — see Understanding validation.
The settings tabs
The right pane holds eight tabs, each with its own doc page:
| Tab | What it controls |
|---|---|
| Optimizer | The genetic algorithm: population, generations, reproduction |
| Fitness | What the optimizer maximizes |
| Gates | Hard floors a candidate must clear or be marked Kill |
| Quality | The validation gauntlet: walk-forward, Monte Carlo, param stress |
| Run | The fixed trading world: account, costs, risk, sizing, session rules |
| Exits | The exit-gene ranges the optimizer samples |
| Style | One-click presets for a holding horizon |
| Prop firm | Optional funded-account rule enforcement |
Saving and loading builds
- Save stores the current build under a name; starting a run saves it too.
- Load… opens the Saved builds dialog — load, rename, or delete past builds (delete is a two-click confirm). Each row shows when it was saved and how many runs used it.
- When the current build has runs, a line above the canvas links to the latest run and its leaderboard.
Validate and start
The footer shows validation state: "Job spec is valid." when everything is complete, or a list of problems. Validate checks without starting; Start Run submits the job and jumps to the live run screen. If Start Run is disabled, press Validate to see exactly what's missing — typically the dataset or an empty canvas.