Changelog
All notable changes to this project will be documented in this file.
[Unreleased]
Fixed
- 68 indicators silently resolved to a streaming class instead of their batch function (
quantwave-84cu). The generated TA registry introduced in 0.7.0 derived native batch symbol names withpascal_to_snake()(SuperTrend→super_trend), but theexport_*!macros emitpub fn [<$name:lower>](SuperTrend→supertrend). Every multi-word name missed; the 44 single-word ones (rsi,sma,atr) passed only becausepascal_to_snake("Rsi") == "rsi"._resolve_ta_bindingtreated the miss as a fallback and returnednative_streaming, soqw.supertrendwas a class whileqw.rsiwas a function — with no error or warning.qw.supertrend(period=10, multiplier=3.0, high=…, low=…, close=…)again returnslist[SuperTrendResult]as it did in 0.6; callers need no changes. _resolve_ta_bindingnow raisesImportErrorwhen an entry declares anative_batchsymbol the build does not export, rather than silently substituting the streaming class (whose calling convention differs). Anative_batchofNonestill falls through to streaming/polars as before.- Corrected stale hand-written aliases in
scripts/api_slug_aliases.json:fm_demodulator,fourier_series_model,my_rsi,precision_trend_analysisnamed non-existent snake_cased symbols;linreg,oc2,true_rangedeclared batch exports that do not exist and now fall through to their polars methods;sr_monitordeclaredSrInteractionMonitor, a class never exported to Python.
Added
test_registry_native_symbols_resolve_against_build— asserts every declared native symbol exists in the compiled module. The prior test only checked a name was present, never that it resolved, sonative_batch: "super_trend"passed cleanly. Plus a regression test that multi-word slugs bind as batch functions, not classes.
[0.7.0] - 2026-07-13
Added
- Complete classic TA-Lib surface (
quantwave.talib): 161 functions, up from 8 — RSI, MACD, SMA, EMA, ATR, ADX, BBANDS, STOCH, OBV, all 61 candlestick patterns, and the math/price transforms. The classic array-in/array-out API (talib.RSI(close, timeperiod=14), multi-output tuples, OHLC/candlestick inputs) delegates to the Polars.taplugins, so values are the talib-rs-parity-tested Rust results. (quantwave-yp9a) - Top-level native symbol access restored:
qw.FracDiff,qw.fracdiff,qw.rsi,qw.SuperTrend, … bind alongside the slug-basedqw.tanamespace.
Changed
- Unified the Python FFI on PyO3 (abi3), retiring uniffi. The indicator bindings, the Polars expression plugins, and the backtest engine are now a single PyO3
abi3-py39extension in one crate (quantwave-py) producing one cdylib — a singlematurin buildyields onecp39-abi3wheel with no wheel-merge step. (quantwave-5ipk.10,quantwave-6dgg) - Collapsed the three PyO3 crates (
quantwave-python,quantwave-plugins,quantwave-backtest-py) intoquantwave-py; deletedscripts/build_unified_wheel.pyand consolidated to onepyproject.toml.
Fixed
- Wheel tag / install correctness: the published wheel is now
cp39-abi3and installs correctly on CPython 3.9–3.13. 0.6.1 shipped apy3-nonewheel bundling CPython-3.12-only extensions, which brokepip installon 3.9/3.10/3.11/3.13. (quantwave-9gek.1)
[0.6.0] - 2026-06-28
Added
- Fractional differencing (
FracDiff) (quantwave-wnd9): Prado-style stationary features; RustNext<f64>, Polarslf.ta.frac_diff(), Pythonfracdiff() - HTML tear sheets (
quantwave-0gi1):BacktestReport.to_html()/save_html()with equity, drawdown, and trade tables - Research loop (Tier 2):
qw.build_feature_matrix(),lf.ta().features().recommended_matrix(),lf.bt.monte_carlo(), Rust.btWFO-optimize + MC bootstrap - Product guardrails (Tier 1):
scripts/quantwave_verify.sh, metadata drift gate, streamlined CI (verify → plugins → deploy-docs) - 55 custom Polars expression plugins and 98 auto-generated pyo3-polars bindings for standard indicators
- PA foundation: S/R Polars, confluence, geometric patterns with H&S neckline breakout
- Streaming readiness (
quantwave-h6xe) and Rust metadata codegen (quantwave-iqq7) - Plugin vs
.taguide, expanded regime user guide, comparison one-pager - Indicator doc SOA complete (
quantwave-frq0): 220+ native pages underDOCUMENTATION_STANDARDS.mdwith PNG previews, doc drift script in verify - Full visual depth layer (p1k6):
docs/generate_all_previews.py+ standards lint rejecting placeholders
Changed
- GitHub Actions consolidated from four workflows to CI + Release (
v*→ crates.io + PyPI) - Platform planning docs split into
INDICATORS_SOA.mdandBACKTEST_SOA.md
Fixed
- CI:
cargo-nextest, maturin venv,uniffi-bindgen==0.31.0for verify job - Doc lint for
fractional_differentiation.md(preview PNG + description depth) - Empty Python API Reference page (
quantwave-rbz4) - Broken imports for
quantwave >=0.4.1on fresh installs without polars
[0.5.2] - 2026-05-31
Added (Python DX improvements)
- Discovery API:
quantwave.indicators()andquantwave.is_indicator(name). - Rich Metadata:
quantwave.metadata(name)returningIndicatorMetawith params, data inputs, outputs, warmup_bars, category, etc. - Streaming lookup:
quantwave.streaming_class(name). - Parity testing:
quantwave.assert_parity()helper for verifying batch vs streaming bit-identical behavior. warmup_bars(name, params)helper.- Namespace improvements: New
quantwave.results,quantwave.options, andquantwave.talibsubmodules. Old top-level access now emits deprecation warnings. - Public exception base:
quantwave.QuantwaveError. __version__properly exposed.- Linux arm64 (aarch64) wheels are now built and published.
Changed
- Release workflow no longer hard-gates on docs build (docs issues can be fixed independently).
Documentation
- Official Standards Published: Created
docs/DOCUMENTATION_STANDARDS.md(v1.0, 2026-05-31 IST) under task quantwave-d2hk / epic p1k6. Defines mandatory enforceable template for all 223+ indicator pages: required sections (Visual Example, full batch+streaming+Polars Usage Examples, Edge Cases & Limitations, Sources), type-specific guidance (classic scalar / patterns / rich struct / Ehlers), good-vs-bad examples, tone/visual/cross-link rules, and 4-phase rollout. - Updated
contributing.md(new indicator docs step) and appended full decision record + rationale (diagnosis of thin stubs vs. PA notebook quality) toDOCUMENTATION_DECISIONS.md. - Minor alignments in
gallery.md. - This is the foundation for all future indicator documentation work and the planned xtask generator. See
DOCUMENTATION_STANDARDS.mdfor the complete template and checklist. - Candle Standards Proof batch (p1k6 child, 2026-05-31 IST): 8 worst-duplication candlestick pages (doji.md + gravestone/dragonfly variants, harami.md + harami_cross, three_black_crows.md + three_white_soldiers.md, abandoned_baby.md) + engulfing.md enhancement fully rewritten to DOCUMENTATION_STANDARDS.md (mandatory visuals, 3-surface code, edges, authoritative TA-Lib+core sources, no Nison boilerplate).
docs/gen_candle_previews.pyextended (portable + 8+ generators); 11 professional PNGs produced inassets/candlestick-previews/. Cross-refs + full decision record in DOCUMENTATION_DECISIONS.md. Proves template + gens scale for Phase 1 rollout. See decisions file for files touched and bd tracking attempt details. - Ehlers DSP Phase 1 batch 2 (p1k6, 2026-05-31 IST): 5 high-value thin Ehlers DSP pages (ehlers_filter.md, reflex.md, ehlers_stochastic.md, ehlers_loops.md, ultimatesmoother.md) rewritten to full Ehlers/scalar STANDARDS conformance. Extended
gen_indicator_previews.py(portable, pure-numpy core ports for the 5, CLI, professional DSP styling); 5 new PNG visuals generated with 2026-05-31 IST captions mapping directly to core .rs Next logic. 3-surface examples, Edge Cases, authoritative sources (exact core paths + Ehlers papers). Cross-refs + detailed decision record appended. Worktree clean for merge. See DOCUMENTATION_DECISIONS.md for complete list of files + checklist confirmation.
[0.5.1] - 2026-05-31
Fixed
- Publishing completeness: Fixed workspace dependency configuration so that
cargo publishsucceeds for all internal crates (quantwave-core,quantwave-polars,quantwave-plugins,quantwave-backtest,quantwave). Internal crates now correctly declareversion.workspace = truein[workspace.dependencies]. - Release reliability: Added required
build-docsjob (export +mkdocs build --strict) to the release workflow. Release publishing now hard-gates on successful docs build. Removed allcontinue-on-error: truefrom publish steps — any failure is now fatal. - Docs build: Fixed filename collision (
*.py.mdlanding pages conflicting with*.pynotebooks) that was breaking main deploys. Renamed affected landing pages and cleaned up references + committed__pycache__. - Modernized
cargo publishsteps to useCARGO_REGISTRY_TOKENenvironment variable (no more deprecated--tokenflag).
Changed
- 0.5.1 is the first complete, trustworthy release of the Backtest Engine v0.2 features (including
quantwave-backtestcrate on crates.io) plus the full Polars + Python package set.
[0.5.0] - 2026-05-30
Added
- Backtest Engine v0.2 (major milestone):
- Rich-Metadata Position Sizing: New
PositionSizertrait +InitialRiskPositionSizerthat directly consumes rich PA detector metadata (fraction_at_risk,pole_height_atr, strength, etc.) for dynamic, risk-aware sizing. Inspired by QF-Lib patterns. IncludesSizingAdapterfor seamless streamingNext<T>generators. - Pluggable Realistic Execution Models: Proper
CommissionModelandSlippageModeltraits with high-quality implementations, includingSquareRootMarketImpactSlippage(volatility × √(volume/ADV)) andmax_volume_share_limitsupport. - High-Fidelity Execution Simulator Mode: New execution path that applies the full sophisticated models while being driven by the exact same rich
StrategySignal/ PA struct stream as the fast vectorized path. Perfect for "pre-live" validation. - Professional Tearsheet & Reporting Layer: New
BacktestTearsheetwithPerformanceSummary,RiskMetrics,EnrichedTrade(carries full PA metadata for attribution),AttributionReport,to_markdown(), and Polars DataFrame export for Excel. Institutional-quality output. - Full batch + streaming
Next<T>parity maintained across all new features. - Updated canonical examples and documentation demonstrating PA detector + rich metadata workflows.
Changed
- Backtester is now production-grade ready for complex PA + ML strategies (Flags, H&S, Market Structure, etc.).
[0.4.0] - 2026-05-19
Added
- Options India Analytics: Comprehensive suite for NSE options including Black-Scholes Greeks (Price, Delta, Gamma, Theta, Vega, Rho), Implied Volatility, and Chain Analytics (Max Pain, PCR, GEX, OI Zones, ATM Straddle, Synthetic Futures).
- Polars Integration for Options: Full support for
options_indiaas native Polars expressions with robust handling of column-or-value parameters. - NSE Utilities: Added
nse_lot_sizeandmoneynesshelpers for the Indian market.
Fixed
- Release Build: Resolved a critical 'maturin' conflict where tracked
__init__.pyfiles were being overwritten during the wheel build process. - Code Hygiene: Cleaned up all compiler warnings and unused imports across the entire workspace.
[0.3.0] - 2026-05-18
Added
- Multi-Asset Regime Detection: Enhanced
MultiAssetClustererwith rolling correlation structures and dispersion analysis to identify joint market states. - Advanced Conditioned Risk Metrics: Expanded
regimes_conditioned_metricsin Polars to include Skewness, Kurtosis, and Sortino Ratio. - Polars Enhancements: Enabled
momentandcum_aggfeatures for vectorized higher-order statistics.
Fixed
- Release Stability: Fixed workspace dependency alignment issues that caused CI failures in previous releases.
- Compilation: Resolved method resolution errors for
skewandkurtosisin Polars pipelines.
[0.2.0] - 2026-05-18
Added
- Regime Detection Suite (
quantwave::regimes):- Volatility Clustering (Prakash et al. 2021) with online K-Means.
- Hidden Markov Models (Hamilton 1989) with Viterbi decoding.
- Gaussian Mixture Models (Two Sigma 2021) foundations.
- Changepoint Detection (PELT - Killick et al. 2012) for exact segmentation.
- Polars integration for all regime detection tools.
- Comprehensive documentation and guides for market state tools.