QuantWave
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.
Polars .ta() + plugins
Zero-copy expression plugins for hot paths, or the ergonomic .ta() namespace for research. Same math either way.
Backtest engine
Sweep, walk-forward, Monte Carlo, cross-sectional runs, and HTML tear sheets — Rust core with Python Polars integration.
Python DX
qw.indicators(), qw.metadata(), qw.assert_parity(), build_feature_matrix(), and arm64 wheels.
Correctness
Gold-standard vectors, proptests, TA-Lib parity, and Python FFI parity — machine-counted on the validation page.
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)
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 hub → Python or Rust.
2 — Pick your path
Indicators overview — learning paths for trend, PA, Ehlers, ML.
3 — Backtest a signal
4 — Go deep
Full catalog · Gallery · API
Explore
- Getting Started funnel — install to first backtest in ~10 minutes
- Comparison vs TA-Lib & pandas-ta — migration and decision guide
- FAQ — common questions (install, parity, backtest, vs TA-Lib)
- llms.txt — AI crawler index (canonical pages for LLMs)
- Indicator gallery — curated high-value starting points
- Ehlers DSP suite
- Backtest engine
- ML features
- Notebooks