File size: 2,959 Bytes
9e89154 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 | #!/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")
|