quantum-hybrid-portfolio / examples /basic_qsw_example.py
rocRevyAreGoals15's picture
Initial HF Space deployment
9e89154
Raw
History Blame Contribute Delete
2.96 kB
#!/usr/bin/env python3
"""
Basic example of using the portfolio optimization API.
Uses the unified run_optimization service with notebook-based methods
(hybrid, QUBO-SA, VQE) and classical optimizers.
"""
import numpy as np
import pandas as pd
import yfinance as yf
from datetime import datetime, timedelta
from services.portfolio_optimizer import run_optimization
def download_sample_data():
"""Download sample S&P 500 data for testing."""
symbols = ['AAPL', 'MSFT', 'GOOGL', 'AMZN', 'META', 'TSLA', 'BRK-B', 'JNJ',
'JPM', 'V', 'PG', 'UNH', 'HD', 'MA', 'DIS', 'NVDA', 'PYPL', 'BAC',
'VZ', 'ADBE', 'NFLX', 'KO', 'NKE', 'PFE', 'PEP', 'T', 'MRK', 'WMT',
'ABT', 'CVX']
end_date = datetime.now()
start_date = end_date - timedelta(days=3*365)
print(f"Downloading data for {len(symbols)} stocks...")
raw_data = yf.download(symbols, start=start_date, end=end_date, progress=False, auto_adjust=True)
if isinstance(raw_data.columns, pd.MultiIndex):
if 'Close' in raw_data.columns.get_level_values(0):
data = raw_data['Close']
else:
data = raw_data[raw_data.columns.get_level_values(0)[0]]
else:
data = raw_data
data = data.ffill().bfill()
data = data.dropna(axis=1, how='all')
print(f"Successfully downloaded {len(data.columns)} stocks with {len(data)} days of data")
return data
def run_basic_optimization():
"""Run basic portfolio optimization example."""
print("="*60)
print("PORTFOLIO OPTIMIZATION")
print("="*60)
market_data = download_sample_data()
print(f"Downloaded data for {len(market_data.columns)} stocks")
print(f"Date range: {market_data.index[0]} to {market_data.index[-1]}")
returns = market_data.pct_change().mean() * 252
covariance = market_data.pct_change().cov() * 252
print("\nRunning hybrid pipeline optimization...")
result = run_optimization(
returns=returns.values,
covariance=covariance.values,
objective='hybrid',
)
print("\n" + "-"*40)
print("OPTIMIZATION RESULTS")
print("-"*40)
print(f"Expected Return: {result.expected_return*100:.2f}%")
print(f"Volatility: {result.volatility*100:.2f}%")
print(f"Sharpe Ratio: {result.sharpe_ratio:.3f}")
print(f"Number of active assets: {np.sum(result.weights > 0.001)}")
print("\nTop 10 Holdings:")
top_holdings = pd.DataFrame({
'Asset': market_data.columns,
'Weight': result.weights
}).sort_values('Weight', ascending=False).head(10)
for _, row in top_holdings.iterrows():
print(f" {row['Asset']}: {row['Weight']*100:.2f}%")
return result
if __name__ == "__main__":
optimization_result = run_basic_optimization()
print("\nOptimization complete!")
print("Run the API server: python middleware/api.py")
print("Or explore examples: python examples/quantum_integration_example.py")