Skip to content

QuantWave

High-performance, Polars-native quantitative finance — 221 native indicators, full Ehlers DSP suite, regime detection, backtest engine, and bit-identical streaming parity.

Get Started Compare vs TA-Lib Explore Indicators

221Native indicators
30+Ehlers DSP tools
1Mathematical truth (`Next<T>`)
0Batch vs streaming drift

Why QuantWave?

Most quant stacks force a tradeoff: Python convenience or Rust speed — rarely both with Polars-native ergonomics and research-to-production parity.

QuantWave is built as a Rust workspace with a single source of mathematical truth. Every indicator implements Next<T>; Polars plugins and Python streaming wrappers consume the same logic, validated by gold-standard vectors and proptests.

Approach Large-data speed Polars-native Streaming parity Ehlers + PA + regimes
pandas-ta / TA-Lib (Python) Slow Partial Rare Limited
Other Rust TA crates Fast Weak Rare Limited
QuantWave Fast Native Guaranteed Deep

What you get

Indicators

221 Rust-native indicators with metadata, gold-standard tests, and full docs. Classic TA, Ehlers DSP, candlestick patterns, price action, and fractional differencing. All 221 are QuantWave's own Rust — no C TA-Lib, no third-party TA crate at runtime.

Browse catalog →

Polars .ta() + plugins

Zero-copy expression plugins for hot paths, or the ergonomic .ta() namespace for research. Same math either way.

Plugin vs .ta

Backtest engine

Sweep, walk-forward, Monte Carlo, cross-sectional runs, and HTML tear sheets — Rust core with Python Polars integration.

Backtest quickstart →

Python DX

qw.indicators(), qw.metadata(), qw.assert_parity(), build_feature_matrix(), and arm64 wheels.

Python guide →

Correctness

Gold-standard vectors, proptests, TA-Lib parity, and Python FFI parity — machine-counted on the validation page.

Validation methodology →

Quickstart

import polars as pl
import quantwave as qw

print(len(qw.indicators()), "indicators")
meta = qw.metadata("supertrend")

df = pl.DataFrame({"close": [100.0, 101.0, 102.0, 101.5, 103.0]})
out = (
    df.lazy()
    .with_columns(
        pl.col("close").ta.supertrend("high", "low", period=10, multiplier=3.0).alias("st")
    )
    .collect()
)
use quantwave_core::indicators::supertrend::SuperTrend;
use quantwave_core::Next;

let mut st = SuperTrend::new(10, 3.0);
let v = st.next((100.0, 105.0, 95.0, 102.0));

Install: pip install "quantwave[polars]" or cargo add quantwave.

Performance snapshot

  • Memory: 2–5× lower than pandas on multi-ticker workloads (measured — see benchmarks)
  • Speed & latency: reproducible harness in progress; we publish measured numbers only (benchmarks)

Full benchmarks →

Our mission

QuantWave exists because most quant stacks force a tradeoff: Python convenience or Rust speed — rarely both inside Polars with guaranteed batch ↔ streaming parity.

We built the fastest, most complete Polars-native toolkit in open source: 221 indicators, full Ehlers DSP, regime detection, options India helpers, and a research-grade backtest engine — one Next<T> implementation everywhere.

Start here

New users: follow the Getting Started funnel — install → first indicator → pick batch, streaming, or backtest.

Evaluating stacks? QuantWave vs TA-Lib & pandas-ta

1 — Install & first indicator

Getting Started hubPython or Rust.

2 — Pick your path

Indicators overview — learning paths for trend, PA, Ehlers, ML.

3 — Backtest a signal

Backtest quickstartStrategy notebook.

4 — Go deep

Full catalog · Gallery · API

Explore