Skip to main content

Hybrid Quantum-Classical Portfolio Optimization with IBM Qiskit

Project description

Quantfolio 🚀⚛️

PyPI version Python 3.9+ License: MIT

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 tutorial
  • custom_portfolio.py - Advanced configurations
  • comparison_demo.py - Method comparisons
  • backtesting.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 optimization
  • plot_weights() - Visualize portfolio weights
  • plot_efficient_frontier() - Plot risk-return trade-off
  • plot_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:


📬 Contact


Made with ❤️ and ⚛️ by the Quantfolio team

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

quantum_portfolio_opt-0.1.1.tar.gz (27.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

quantum_portfolio_opt-0.1.1-py3-none-any.whl (27.4 kB view details)

Uploaded Python 3

File details

Details for the file quantum_portfolio_opt-0.1.1.tar.gz.

File metadata

  • Download URL: quantum_portfolio_opt-0.1.1.tar.gz
  • Upload date:
  • Size: 27.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.11

File hashes

Hashes for quantum_portfolio_opt-0.1.1.tar.gz
Algorithm Hash digest
SHA256 cf049f36954e0396e2ca931f3848eda016bab8395e1155484e0e35ae453d21cf
MD5 a7595fc5763dff1c0e49c134f97af1a1
BLAKE2b-256 06cd2c0b91ddace88bfceaf6a70e2462f5ed7a38c0de1cd53c10d330d0c57108

See more details on using hashes here.

File details

Details for the file quantum_portfolio_opt-0.1.1-py3-none-any.whl.

File metadata

File hashes

Hashes for quantum_portfolio_opt-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 bb2fcc0afeddbb62117c56ad0c3a08de9ba76f72be9affd8faffe172856d5572
MD5 35765e52222f60d356df514a03594392
BLAKE2b-256 ab0ffa6915889a05b57a1a31b1def83e628d96700b8fdeec6a3f8236a7e082a9

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page