Hybrid Quantum-Classical Portfolio Optimization with IBM Qiskit
Project description
Quantfolio 🚀⚛️
Hybrid Quantum-Classical Portfolio Optimization powered by IBM Qiskit and Deep Learning.
Quantfolio combines classical machine learning (Transformers/LSTM) with quantum optimization algorithms (QAOA) to optimize financial portfolios, offering a cutting-edge approach to asset allocation.
✨ Features
- 🌌 Quantum Optimization: QAOA (Quantum Approximate Optimization Algorithm) for portfolio selection
- 🧠 Classical ML: Transformer and LSTM models for return prediction
- 📊 Hybrid Approach: Best of both worlds - ML predictions + quantum optimization
- 📈 Financial Metrics: Sharpe Ratio, Sortino Ratio, VaR, CVaR, Maximum Drawdown
- 🎨 Visualization: Beautiful plots for weights, efficient frontier, and portfolio evolution
- ⚡ Easy API: Simple interface for quick prototyping and production use
🔧 Installation
pip install quantum-portfolio-opt
Requirements: Python 3.9+
🚀 Quick Start
Simple Optimization
import quantfolio as qf
# Optimize portfolio with quantum algorithm
optimizer = qf.HybridOptimizer(
tickers=['AAPL', 'MSFT', 'GOOGL', 'AMZN'],
method='quantum'
)
weights = optimizer.optimize(risk_aversion=0.5)
print("Optimal Portfolio:")
for ticker, weight in zip(optimizer.tickers, weights):
print(f" {ticker}: {weight*100:.1f}%")
Advanced Usage
import quantfolio as qf
# Hybrid optimization with ML prediction
optimizer = qf.HybridOptimizer(
tickers=['AAPL', 'MSFT', 'GOOGL', 'AMZN', 'JPM', 'JNJ'],
classical_model='transformer', # or 'lstm'
use_quantum=True,
risk_aversion=0.5,
max_weight=0.30 # Max 30% per asset
)
# Train predictor and optimize
result = optimizer.optimize(
train_predictor=True,
epochs=50
)
# Visualize results
optimizer.plot_weights()
optimizer.plot_efficient_frontier()
# View metrics
print(f"Expected Return: {result['expected_return']*100:.2f}%")
print(f"Risk (Volatility): {result['risk']*100:.2f}%")
print(f"Sharpe Ratio: {result['sharpe_ratio']:.2f}")
Compare Methods
import quantfolio as qf
# Compare quantum vs classical vs hybrid
comparison = qf.compare_methods(
tickers=['AAPL', 'MSFT', 'GOOGL'],
methods=['quantum', 'classical', 'hybrid']
)
print(comparison)
📊 Available Optimizers
| Optimizer | Description | Use Case |
|---|---|---|
| QAOA | Quantum Approximate Optimization | Complex constraints, exploration |
| Markowitz | Mean-Variance Optimization | Classical baseline, proven |
| Equal Weight | 1/N allocation | Simple diversification |
| Min Variance | Minimize risk only | Conservative portfolios |
| Max Sharpe | Maximize risk-adjusted return | Optimal risk/return |
🎓 Examples
Check out the examples/ directory for:
basic_usage.py- Quick start tutorialcustom_portfolio.py- Advanced configurationscomparison_demo.py- Method comparisonsbacktesting.py- Historical performance testing
📖 Documentation
Main API
HybridOptimizer
optimizer = qf.HybridOptimizer(
tickers: List[str], # Stock symbols
method: str = 'hybrid', # 'quantum', 'classical', or 'hybrid'
classical_model: str = 'lstm', # 'transformer' or 'lstm'
use_quantum: bool = True, # Use QAOA optimization
risk_aversion: float = 0.5, # 0=aggressive, 1=conservative
max_weight: float = 0.30, # Maximum weight per asset
min_weight: float = 0.05 # Minimum weight per asset
)
Methods
optimize(**kwargs)- Run optimizationplot_weights()- Visualize portfolio weightsplot_efficient_frontier()- Plot risk-return trade-offplot_evolution()- Show portfolio value over time
🧪 Technical Details
Quantum Component
- Algorithm: QAOA (Quantum Approximate Optimization Algorithm)
- Backend: IBM Qiskit Aer Simulator (portable to real quantum hardware)
- Qubits: Configurable based on number of assets
- Encoding: Binary representation of portfolio weights
Classical Component
- Transformers: Multi-head attention for time series
- LSTM: Bidirectional LSTM for sequence modeling
- Features: Price history, technical indicators
- Framework: PyTorch
Optimization Problem
Maximizes: Expected Return - λ * Risk
Subject to:
- Σ weights = 1 (fully invested)
- 0 ≤ weight_i ≤ max_weight
- Minimum diversification constraints
⚠️ Disclaimer
This software is for educational and research purposes only.
- Not financial advice
- No guarantee of returns
- Past performance ≠ future results
- Consult a qualified financial advisor before investing
🤝 Contributing
Contributions are welcome! Please see CONTRIBUTING.md for guidelines.
Development Setup
git clone https://github.com/quantfolio/quantfolio.git
cd quantfolio
pip install -e ".[dev]"
pytest tests/
📚 Citation
If you use Quantfolio in academic research, please cite:
@software{quantfolio2025,
title = {Quantfolio: Hybrid Quantum-Classical Portfolio Optimization},
author = {Quantfolio Contributors},
year = {2025},
url = {https://github.com/quantfolio/quantfolio}
}
📄 License
MIT License - see LICENSE file for details.
🌟 Acknowledgments
Built with:
- IBM Qiskit - Quantum computing framework
- PyTorch - Deep learning
- yfinance - Financial data
📬 Contact
- Issues: GitHub Issues
- Discussions: GitHub Discussions
Made with ❤️ and ⚛️ by the Quantfolio team
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file quantum_portfolio_opt-0.1.0.tar.gz.
File metadata
- Download URL: quantum_portfolio_opt-0.1.0.tar.gz
- Upload date:
- Size: 27.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f2b2a9420290ac4893066a305ebd884d7edbd182722dc0459534687868749bd2
|
|
| MD5 |
13e405b268c12a1bf5f349fd014de7d5
|
|
| BLAKE2b-256 |
4573ec21494b8d2cbb68121a6a04664834aea12d5bd0a8d66edb774c6bd691ba
|
File details
Details for the file quantum_portfolio_opt-0.1.0-py3-none-any.whl.
File metadata
- Download URL: quantum_portfolio_opt-0.1.0-py3-none-any.whl
- Upload date:
- Size: 27.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
01cfaa3e08c0d6d89e1927973f42dc2ae0a5b60e5dcdb08a951b7d8e95437c71
|
|
| MD5 |
4f9945afdbffb8782b51776f91865891
|
|
| BLAKE2b-256 |
ca62f49661f83ee17ac7cc0847ee5b31eb66261930fd1425c4fb35903b30be4d
|