Skip to content

Benchmarks ​

Looking for the indicator library's numbers?

This page is about Wickra Darwin. Wickra's own indicator benchmarks — the comparison against TA-Lib, talipp, pandas-ta and the other Rust TA crates — live at wickra.org.

The headline figure is backtests per second — the rate at which the evolution loop scores candidate specs through the wickra-backtest engine. One "backtest" is one individual evaluated over one symbol, so the total work of a search is population × (generations + 1) × symbols — the loop scores the initial population before it breeds, so one more generation is scored than the spec's generations count names.

Reproduce with:

bash
cargo bench -p darwin-bench

Measured throughput ​

Criterion evolve group, single machine (Windows, release build, default parallel feature), sweeping population × generations × symbol count over the in-bench synthetic universe. Throughput is total backtests over wall-clock:

populationgenerationssymbolsthroughput (backtests/s)
1653~122 K
16510~261 K
16203~127 K
162010~264 K
6453~188 K
64510~393 K
64203~191 K
642010~394 K
25653~214 K
256510~435 K
256203~221 K
2562010~448 K

Throughput rises with the symbol count because per-search fixed overhead (sampling, ranking, breeding) amortises over more backtests, and with population and generations for the same reason. On these short synthetic series the loop sustains ~122 K–448 K backtests/second; longer candle histories raise the per-backtest cost but the engine stays O(1) per tick, so the rate is governed by total bars processed, not by strategy or indicator complexity.

Method notes ​

  • These figures were re-measured after to_strategy_spec was fixed. The earlier ones were taken while every candidate failed to deserialise into a StrategySpec, so the loop never reached the backtest engine at all: a table headed "backtests per second" was timing a search that ran none.
  • Numbers are indicative of relative scaling, not a hardware datasheet — absolute values depend on CPU, candle-series length and the indicators the genome uses.
  • The parallel (rayon) and single-threaded paths produce byte-identical reports; parallelism affects wall-clock only (see docs/DETERMINISM.md).
  • Re-bless these figures when the wickra-backtest engine is bumped, since engine changes move the per-tick cost.

The numbers above are the ones in the repository's BENCHMARKS.md, measured with the commands it names.

Updated: