Portfawn: Optimizing Financial Portfolios with Classical and Quantum Techniques
Portfawn is an advanced library for constructing and optimizing financial portfolios using state-of-the-art classical and quantum optimization methods. Designed for flexibility, it allows you to fine-tune portfolio construction with customizable objectives, adaptable risk models, and cutting-edge optimization techniques—all through a single, streamlined package.
Why Choose Portfawn?
- Optimize Your Way: Achieve your portfolio goals with customizable optimization objectives:
- Classical Objectives: Minimum variance, maximum Sharpe ratio, target returns, and more.
- Quantum Objectives: Innovative quantum optimization for complex problems.
- Flexibility: Configure every aspect—risk models, constraints, backend systems, and more.
- Single-Command Installation: Install the package with tailored dependencies for quantum or classical setups using optional tags.
- Seamless Backtesting: Validate your strategies with automated workflows.
- User-Friendly API: Designed to simplify complex financial engineering tasks.
Key Features
Advanced Portfolio Optimization
-
Classical Optimization Objectives:
- Minimum Variance Portfolio (MVP): Minimize portfolio risk.
- Maximum Return Portfolio (MRP): Maximize portfolio return.
- Maximum Sharpe Ratio Portfolio (MSRP): Maximize returns per unit risk.
- Customizable Parameters: Define constraints, target returns, risk-free rates, and optimization precision.
-
Quantum Optimization Objectives:
- Binary Mean-Optimal Portfolio (BMOP): Solve portfolio problems using quantum annealing.
- Backend flexibility:
- Simulated annealing via
neal. - Quantum processing units (QPUs) via D-Wave.
- Simulated annealing via
Unified Interface
Portfawn provides a unified API for both classical and quantum optimization, making it easy to switch between methods with minimal code changes.
Installation
You can install Portfawn and its dependencies in a single command:
pip install portfawn
Getting Started
This example demonstrates how to use Portfawn to optimize portfolios with classical and quantum objectives, run backtests, and visualize results.
1. Import Libraries
import dafin
import matplotlib.pyplot as plt
from portfawn import (
BackTest,
EquallyWeightedPortfolio,
MeanVariancePortfolio,
RandomPortfolio,
OptimizationModel,
)
2. Define Assets and Load Data
# Define assets and date range
asset_list = ["SPY", "GLD", "BND"]
date_start = "2010-01-01"
date_end = "2022-12-30"
# Load returns data
returns_data = dafin.ReturnsData(asset_list).get_returns(date_start, date_end)
3. Create and Configure Portfolios
portfolio_list = [
RandomPortfolio(),
EquallyWeightedPortfolio(),
MeanVariancePortfolio(name="Minimum Variance Portfolio", optimization_model=OptimizationModel(objective="MVP")),
MeanVariancePortfolio(name="Maximum Return Portfolio", optimization_model=OptimizationModel(objective="MRP")),
MeanVariancePortfolio(name="Maximum Sharpe Ratio Portfolio", optimization_model=OptimizationModel(objective="MSRP")),
MeanVariancePortfolio(name="Binary Multi-Objective Portfolio", optimization_model=OptimizationModel(objective="BMOP")),
]
4. Run Backtesting
backtest = BackTest(
portfolio_list=portfolio_list,
asset_list=asset_list,
date_start=date_start,
date_end=date_end,
fitting_days=22,
evaluation_days=5,
n_jobs=2,
)
backtest.run()
5. Visualize and Save Results
fig, ax = backtest.plot_cum_returns()
plt.savefig("plot_cum_returns.png")
fig, ax = backtest.plot_dist_returns()
plt.savefig("plot_dist_returns.png")
fig, ax = backtest.plot_corr()
plt.savefig("plot_corr.png")
fig, ax = backtest.plot_cov()
plt.savefig("plot_cov.png")
Demo
Check out the demos in demo/.
License
This project is licensed under the MIT License.
Support
Need help or have feedback? Get in touch:
- Email: mkareshk@outlook.com
- Issues: GitHub Issues
Metadata
Release files for PortFawn 0.0.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| portfawn-0.0.3.tar.gz | 31.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| PortFawn-0.0.3-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 65.2 kB
Release files / portfawn-0.0.3.tar.gz
| Download URL | portfawn-0.0.3.tar.gz |
|---|---|
| Size | 31.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
5b8c7c6fa47f79027a96fd3e1ee071e7c86be5ec26f417ef02861ba2597226d7
|
|
BLAKE2b-256 checksum How to use checksums |
8dcc634fd45fdf0a1b453e0076f8a4f6c5ce9078149fb5c1aa30b61d9be0e8ab
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.10.11
|
Release files / PortFawn-0.0.3-py3-none-any.whl
| Download URL | PortFawn-0.0.3-py3-none-any.whl |
|---|---|
| Size | 34.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
109e8bd88bd9b3a5e0674706bb911f6886ef74c5a2f74ad4572db6d96a5d6f47
|
|
BLAKE2b-256 checksum How to use checksums |
39bd155fc6a243474a9fc4303c725bb350b725cc31ea9df2259bbb929b3bab87
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.10.11
|