Metadata-Version: 2.4
Name: tiportfolio
Version: 1.0.0
Summary: A portfolio management tool with built-in state-of-the-art portfolio optimization algorithms, with extensibility for different use cases for both institutes and retail traders.
Project-URL: homepage, https://github.com/TradeInsight-Info/TiPortfolio
Author: tim-hub
License: Apache-2.0
License-File: LICENSE
Keywords: Algorithm Trading,Backtesting,Portfolio Optimization
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Topic :: Office/Business :: Financial
Classifier: Topic :: Office/Business :: Financial :: Investment
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Requires-Python: <=3.14,>=3.10
Requires-Dist: alpaca-py>=0.43.2
Requires-Dist: diskcache>=5.6.3
Requires-Dist: joblib>=1.5.2
Requires-Dist: matplotlib>=3.10.8
Requires-Dist: numpy>=2.2.6
Requires-Dist: pandas-market-calendars>=5.1.3
Requires-Dist: pandas>=2.3.3
Requires-Dist: progressbar>=2.5
Requires-Dist: tqdm>=4.67.1
Requires-Dist: yfinance>=0.2.66
Provides-Extra: erc
Requires-Dist: riskfolio-lib>=7.0.1; extra == 'erc'
Provides-Extra: interactive
Requires-Dist: kaleido; extra == 'interactive'
Requires-Dist: plotly>=5.0.0; extra == 'interactive'
Description-Content-Type: text/markdown

# TiPortfolio

A portfolio management tool with built-in state-of-the-art portfolio optimization algorithms, with extensibility for different use cases for both institutes and retail traders.

## Installation

```bash
pip install tiportfolio

# For interactive Plotly charts:
pip install tiportfolio[interactive]

# For Equal Risk Contribution (ERC) weighting:
pip install tiportfolio[erc]
```

## Quick Start

```python
import tiportfolio as ti

# 1. Fetch data (Yahoo Finance by default, or Alpaca if API keys are set)
data = ti.fetch_data(["QQQ", "BIL", "GLD"], start="2019-01-01", end="2024-12-31")

# 2. Define strategy using the algo stack: Signal → Select → Weigh → Action
portfolio = ti.Portfolio(
    "monthly_equal_weight",
    [
        ti.Signal.Monthly(),    # WHEN to rebalance
        ti.Select.All(),        # WHAT to include
        ti.Weigh.Equally(),     # HOW MUCH to allocate
        ti.Action.Rebalance(),  # EXECUTE trades
    ],
    ["QQQ", "BIL", "GLD"],
)

# 3. Run backtest
result = ti.run(ti.Backtest(portfolio, data))

# 4. View results
result.summary()       # key metrics: Sharpe, CAGR, max drawdown, etc.
result.plot()          # equity curve + drawdown chart
```

- More [examples](examples/README.md)

## Requirements

- Python 3.10+
- pandas, numpy, matplotlib

Data fetching uses Yahoo Finance by default. For Alpaca, set `ALPACA_API_KEY` and `ALPACA_API_SECRET` in your environment (see `.env.example`).

## Development

```bash
uv sync
uv run python -m pytest
```

## License

Apache 2.0
