All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
drawdown_details,expected_return,rolling_greeks, and related stats (#583)comp,compsum,ghprstats (#582)outliers,remove_outliers,outlier_win_ratio,outlier_loss_ratiostatsgeometric_meanand risk stats (value-at-risk, conditional-VaR, etc.) (#581)autocorrelation()andacf()in Stats (#544)omega_ratioin Stats (#554)- Quantstats parity benchmarks (#579)
- GitHub org rename: updated all remaining
tschm→jebel-quantreferences
Reports.metrics()decomposed into focused helper methods (#586)- CI workflows consolidated:
rhiza_validate,rhiza_qualitynow cover security, semgrep, typecheck, pip-audit, deptry, pre-commit, and link-check in unified jobs - Copilot agent hooks and setup workflow removed (sync out #587)
demo_report.htmlandREPOSITORY_ANALYSIS.mdremoved from repository
Portfolio.from_position()— fourth factory method for unit-position portfolios- 1/n equal-weight portfolio SVG charts from real AAPL/META data
generate_svgspath scope and coverage badge URLCostModelnow raisesValueErrorwhen constructed with both cost fields non-zero
- Figure 1 in companion paper: facades column reordered to
.stats>.report>.plots
generate_svgs.pyremoved from repository- Autopilot CI workflow removed
0.3.4 - 2026-03-26
- Vol-normalisation cap and input validation in
from_risk_position(#521) - Kaleido marker and dedicated CI job for static image export (#520)
- Kaleido static image export tests (#504)
- Per-subcategory 1–10 scores in analyser agent
- MkDocs-based book pipeline replacing minibook (#502)
- Companion paper and LaTeX CI workflow
PortfolioLikeprotocol aligned withCostModelabstraction (#522)- API Reference TOC depth limited to 3 to reduce clutter
mkdocs.ymlmoved to repo root (#514, #526)- Workflow missing permissions (code scanning alert #1) (#503)
slots=Trueadded toPortfolioandDatafrozen dataclasses (#515)trading_cost_impactvectorised — O(1) allocations for the full cost sweep (#516)
0.3.3 - 2026-03-24
Data.from_pricesclassmethod (#499)
mkdocssite_dirnested insidedocs_dir
- Tests reorganised to mirror
src/jquantstats/structure (#500)
0.3.2 - 2026-03-24
- Link-checking GitHub Actions workflow for README (#497)
mikedeploy failing due tomkdocs.ymlnot found at repo root
0.3.1 - 2026-03-24
- README: absolute URLs for references, static Python version badge, removed stale badges
- Dependency updates (python-dependencies group, 3 packages)
0.3.0 - 2026-03-24
__repr__with date range onDataandPortfolio(#489)- Versioned documentation with
mike(#480) - macOS and Windows added to CI test matrix (#482)
- Dashboard screenshot, quick-start output, and Marimo badge in README (#481)
- PyPI classifiers and explicit
__all__(#491)
PortfolioDatacollapsed intoPortfolio(#473)- Test coverage raised to 100%
0.2.0 - 2026-03-23
Data.describe()method and testsData.from_returnsclassmethod;build_dataretained as aliasDataLikeprotocol; upwardDataimports removed from_statsmixinsNativeFrametype alias replacingAnyfor narwhals inputsinterrogateenforcing 100% docstring coverageROADMAP.mdandCITATIONS.bib/ Citing section in README- Narwhals support to accept pandas/polars/modin inputs in
build_data Data.truncatemethod with tests- Property-based tests with
hypothesis;ZeroDivisionErrorinsortinofixed - conda-forge recipe and README installation docs
CHANGELOG.md,cliff.toml, andmake changelogtarget- Release notes automated with
git-cliffin release workflow - API contract test (
test_api_contract.py) to guard public API surface - QuantStats migration guide (
docs/migration.md) docs/stability.mdand updated mkdocs nav- GitHub Discussions templates; updated contributing guide
ISSUE_TEMPLATEconfig,PULL_REQUEST_TEMPLATE.md- Full API reference pages in mkdocs nav
py.typedmarker;.stats,.plots,.reportcached onPortfolio- ANN2 return-type annotation enforcement in ruff
Plotsrenamed toDataPlotsfor symmetry withPortfolioPlots(#462)_stats*.pyfiles grouped into_stats/subpackage_report.pyand_portfolio_plots.pybackward-compat shims removed__init__.pyexports reduced in_stats,_reports,_plotssubpackages- Analytics subpackage flattened; notebooks updated for marimo 0.20.4
- Mypy configuration removed from
pyproject.toml
- README code examples corrected to pass
make validate book/excluded frominterrogatepre-commit hook
0.1.1 - 2026-03-23
- Core library — polars-native portfolio analytics with zero pandas runtime dependency.
Portfolioclass — high-level entry point for price + position workflows; compiles NAV curves and exposes.stats,.plots, and.reportattributes.build_datafunction — lower-level entry point for working directly with return series and optional benchmarks.StatsAPI — performance metrics including Sharpe ratio, Sortino ratio, Calmar ratio, volatility, CAGR, max drawdown, Value at Risk (VaR), Conditional VaR, win rate, and more.PlotsAPI — interactive Plotly visualisations: performance dashboard (snapshot), drawdown chart, return distribution, and monthly return heatmap.ReportAPI — Jinja2-powered HTML report generation combining metrics and charts.- Benchmark comparison — align portfolio returns against a benchmark series and compute relative metrics.
- Risk-free rate support — adjustable daily risk-free rate parameter for excess-return calculations.
- PEP 561 compliance —
py.typedmarker included for downstream type checker support. - GitHub Release Notes —
.github/release.ymlconfigured to categorise auto-generated release notes by label (breaking changes, features, bug fixes, documentation, maintenance). - Full CI/CD pipeline via Rhiza templates: tests with coverage, type checking, pre-commit hooks, dependency auditing, CodeQL and Semgrep security scanning, PyPI publishing, and documentation building.
- Interactive notebooks — Marimo notebooks for exploratory analysis.
- Documentation book — rendered documentation available at https://jebel-quant.github.io/jquantstats/book.