Coverage for src / jquantstats / __init__.py: 100%
8 statements
« prev ^ index » next coverage.py v7.13.5, created at 2026-03-26 18:44 +0000
« prev ^ index » next coverage.py v7.13.5, created at 2026-03-26 18:44 +0000
1"""jQuantStats: Portfolio analytics for quants.
3Two entry points
4----------------
5**Entry point 1 — prices + positions (recommended for active portfolios):**
7Use :class:`~jquantstats.portfolio.Portfolio` when you have price series and
8position sizes. Portfolio compiles the NAV curve from raw inputs and exposes
9the full analytics suite via ``.stats``, ``.plots``, and ``.report``.
11```python
12from jquantstats import Portfolio
13import polars as pl
15pf = Portfolio.from_cash_position(
16 prices=prices_df,
17 cash_position=positions_df,
18 aum=1_000_000,
19)
20pf.stats.sharpe()
21pf.plots.snapshot()
22```
24**Entry point 2 — returns series (for arbitrary return streams):**
26Use :class:`~jquantstats.data.Data` when you already have a returns series
27(e.g. downloaded from a data vendor) and want benchmark comparison or
28factor analytics.
30```python
31from jquantstats import Data
32import polars as pl
34data = Data.from_returns(returns=returns_df, benchmark=bench_df)
35data.stats.sharpe()
36data.plots.plot_snapshot(title="Performance")
37```
39The two APIs are layered: ``portfolio.data`` returns a :class:`~jquantstats.data.Data`
40object so you can always drop into the returns-series API from a Portfolio.
42For more information, visit the `jQuantStats Documentation <https://tschm.github.io/jquantstats/book>`_.
43"""
45import importlib.metadata
47from ._cost_model import CostModel as CostModel
48from ._types import NativeFrame as NativeFrame
49from ._types import NativeFrameOrScalar as NativeFrameOrScalar
50from .data import Data as Data
51from .portfolio import Portfolio as Portfolio
53__version__ = importlib.metadata.version("jquantstats")
55__all__ = [
56 "CostModel",
57 "Data",
58 "NativeFrame",
59 "NativeFrameOrScalar",
60 "Portfolio",
61]