Changelog¶
Changelog¶
All notable changes to this project are documented in this file.
The format is based on Keep a Changelog 1.1.0, and this project adheres to Semantic Versioning 2.0.0.
Unreleased¶
Added¶
- New
markowitz.data_providerspackage with a Polygon.io REST client (PolygonProvider) supporting adjusted daily OHLCV, ticker reference metadata, and grouped-daily snapshots. Sliding-window token bucket caps outbound traffic at ~100 rpm; transient 429 / 5xx / network errors trigger exponential-backoff retries (3 attempts). - Typed Polygon error hierarchy:
PolygonError(base),PolygonAuthError,PolygonRateLimitError,PolygonDataError. YFinanceProvideradapter that conforms to the same surface asPolygonProvider, delegating to the existingmarkowitz.data.providersyfinance pipeline so callers can swap providers without code changes.make_provider()factory that selects Polygon whenPOLYGON_API_KEYis configured and falls back to yfinance otherwise.SP500UniverseBuilderwithget_membership_as_of(date_)andget_membership_window(start, end, freq='ME'). Intersects the staticCURRENT_SP500list with Polygon grouped-daily so backtests get an approximated point-in-time universe; falls back to the static list with a one-timeUserWarningwhen no Polygon provider is supplied.- Streamlit sidebar gains a Universe radio (
Custom tickersvsS&P 500 point-in-time) and the landing page now rendersdata:anduniverse:badges so the active data path is visible at a glance. httpx>=0.27added as a runtime dependency.
Planned¶
- CVaR optimization (Rockafellar-Uryasev linear-programming formulation)
- DeMiguel-Garlappi-Uppal (2009) reproduction on Fama-French datasets
- Interactive view-builder in the Streamlit Black-Litterman tab
0.1.0 - 2026-05-23¶
Added¶
- Closed-form efficient frontier via the Merton A/B/C/D scalars, including the global
minimum-variance and tangency portfolios in
markowitz.core.frontier. - Numerical mean-variance optimizer (
markowitz.optimizer.mean_variance.MeanVariance) with linear and box constraints, solved viacvxpy+ CLARABEL. - Cornuejols-Tutuncu change-of-variables for the maximum-Sharpe portfolio without a risk-free
asset (
markowitz.optimizer.cornuejols_tutuncu). - Covariance shrinkage estimators: Ledoit-Wolf identity-target and Oracle Approximating
Shrinkage (
markowitz.estimators.covariance). - Black-Litterman posterior in Theil mixed-estimation form, plus the Idzorek (2005)
confidence-to-
Omegamapping (markowitz.views.black_litterman,markowitz.views.idzorek). - Walk-forward backtest engine with proportional transaction costs, turnover tracking, and
rolling performance statistics (
markowitz.backtest). - Streamlit application under
app/for interactive frontier and Black-Litterman exploration. mkdocs-materialdocumentation site underdocs/with rendered notebooks and API reference.- He-Litterman (1999) Table 2 reproduction regression test
(
tests/regression/test_he_litterman_1999.py).