How the engine works
Optimizer settings
The Optimizer tab configures the genetic algorithm (GA) that searches the strategy space — "these knobs set its population size, how long it evolves, and how strategies reproduce." For the concepts behind these knobs, see How evolution works.
Core knobs
| Setting | Meaning | Guidance |
|---|---|---|
| Population (≥10) | How many candidate strategies live in each generation. | Bigger searches wider but runs slower. Small experiments: 30–50. Real searches: 100+. |
| Generations (≥5) | How many evolution rounds the search runs. | More rounds refine further at the cost of time. The optimizer also stops early when the search stalls. |
| Crossover rate (0–1) | Chance two parents are recombined (vs. copied) when breeding. | ~0.8 is typical. |
| Elitism | How many top strategies carry into the next generation untouched. | Keeps the best from being lost to mutation. A handful is plenty. |
| Seed | Random-number seed. | The same seed + the same inputs reproduce a run exactly; change it to explore a different path through the same space. |
How blocks combine (advanced)
Two options widen the shapes of entry logic the optimizer may build:
- Allow "at least K of N" rules — lets the optimizer build soft-consensus rules that fire when at least K of several conditions hold: the middle ground between ALL (And) and ANY (Or). More robust than a long AND chain (one condition flickering won't kill the trade) and more selective than OR. Off by default.
- Allow NOT (negation) rules — lets the optimizer negate a whole condition group, e.g. "enter unless the market is choppy and trendless." Most single comparisons can already invert themselves, so this mainly helps over multi-condition groups. Off by default.
Both enlarge the search space — turn them on when simple AND/OR trees aren't finding structure, and expect to need more generations.
Comparison quality (advanced)
Compare like with like (scale-aware) — on by default. Keeps the optimizer from comparing an oscillator (RSI, ADX, …) or a volatility width (ATR) against a raw price — comparisons that are always true or always false and let the search slip in tautological filler instead of real conditions. Uncheck to allow any-vs-any comparisons (the legacy behavior); there is rarely a reason to.
Reproducibility
Runs are deterministic: the same build, dataset, and seed produce the same result, bit for bit, regardless of how many CPU cores do the work. Record the seed (it's part of the build) and you can always reproduce a leaderboard.