Advanced multi-asset portfolio optimization platform using Modern Portfolio Theory (Markowitz). Combines traditional equities, cryptocurrencies, and commodities to construct optimal portfolios with maximum risk-adjusted returns.
This application implements quantitative portfolio optimization techniques to help investors construct diversified portfolios. Using historical market data and mathematical optimization, it identifies the portfolio composition that maximizes the Sharpe ratio—the excess return per unit of risk.
- Multi-Asset Class Support: Stocks, cryptocurrencies, commodities, and indices
- AI-Powered Asset Selection: Automatic selection of best-performing assets based on Sharpe ratio analysis
- Efficient Frontier Visualization: Interactive 3000-portfolio Monte Carlo simulation
- Sharpe Ratio Maximization: Constrained optimization for optimal risk-return balance
- Correlation Analysis: Asset correlation heatmaps for diversification insights
- Capital Allocation Engine: Discrete share recommendations with exact dollar amounts
- Comprehensive Risk Metrics: VaR, CVaR, volatility, and individual asset analysis
- Historical Performance Analysis: Normalized price tracking and returns distribution
- Data Persistence: Automatic CSV export of prices, returns, and allocations
- Interactive Visualizations: Plotly-based interactive charts and real-time analysis
- Python 3.11 or higher
- pip package manager
- Clone the repository:
git clone https://github.com/yourusername/portfolio-optimizer.git
cd portfolio-optimizer- Create a virtual environment:
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate- Install dependencies:
pip install -r requirements.txtStart the application:
streamlit run app.pyNavigate to http://localhost:8501 in your web browser.
-
Select Mode:
- Manual Selection: Choose specific assets from predefined categories
- AI Selection: Let the algorithm automatically select 5-10 best assets
-
Configure Parameters:
- Historical Period: 1, 2, 5, or 10 years
- Capital to Invest: Initial portfolio value
- Risk-Free Rate: Reference rate for Sharpe ratio calculation
- Minimum Weight: Minimum allocation per asset
-
Optimize Portfolio: Click "Optimize" to generate optimal allocation
-
Analyze Results:
- View portfolio composition and metrics
- Explore efficient frontier
- Analyze asset correlations
- Get capital allocation recommendations
- Review historical performance
- Examine risk metrics
- Language: Python 3.11
- Web Framework: Streamlit 1.50+
- Portfolio Optimization: PyPortfolioOpt 1.5.5
- Data Source: yfinance
- Data Processing: Pandas, NumPy
- Visualization: Plotly, Seaborn
- Optimization Engine: CVXPY
Handles all optimization logic:
- Data fetching from Yahoo Finance
- Returns and covariance calculations
- Efficient frontier computation
- Capital allocation
Analyzes all available assets:
- Downloads 2-year historical data
- Calculates individual Sharpe ratios
- Ranks assets by risk-adjusted performance
- Returns top N performers
Six comprehensive analysis tabs:
Composition Tab
- Portfolio weights table
- Allocation pie chart
- CSV/TXT export options
Efficient Frontier Tab
- 3000 simulated portfolios
- Color-coded by Sharpe ratio
- Interactive hover information
- Optimal portfolio highlighted
Correlations Tab
- Asset correlation heatmap
- Values from -1.0 to +1.0
- Diversification indicators
Capital Allocation Tab
- Share quantity recommendations
- Current market prices
- Dollar allocation per asset
- Cash utilization metrics
Historical Analysis Tab
- Normalized price performance (Base 100)
- Daily returns distribution histogram
- Multi-year performance comparison
Risk Metrics Tab
- Individual asset statistics
- Portfolio VaR and CVaR
- Sharpe ratio analysis
- Risk decomposition
The application implements Markowitz's mean-variance optimization:
- Expected Return Calculation: Annual returns based on historical data (252 trading days)
- Volatility Estimation: Standard deviation of daily returns, annualized
- Correlation Matrix: Asset co-movement patterns
- Optimization Objective: Maximize (Return - Risk-Free Rate) / Volatility (Sharpe Ratio)
- Constraints:
- Minimum weight: 5% per asset (configurable)
- Maximum weight: 50% per asset
- Full capital investment
- No short selling
AAPL, MSFT, GOOGL, NVDA, TSLA, META, AMZN, AMD, INTC, CSCO
JPM, BAC, WFC, GS, MS, BLK, SCHW, ICE, CME
JNJ, UNH, PFE, MRK, ABBV, TMO, LLY, BMY
XOM, CVX, COP, SLB, MPC, PSX, EOG
WMT, TM, NKE, SBUX, HD, LOW, COST, PG
BTC-USD, ETH-USD, SOL-USD, XRP-USD, ADA-USD, DOGE-USD, MATIC-USD, LINK-USD
portfolio-optimizer/
├── app.py # Main application entry point
├── requirements.txt # Python dependencies
├── README.md # This file
├── .gitignore # Git ignore rules
├── venv/ # Virtual environment
├── data/ # Data storage
│ ├── prices_latest.csv
│ └── returns_latest.csv
└── plots/ # Exported visualizations
├── efficient_frontier.html
├── price_performance.html
└── returns_distribution.html
streamlit run app.py- Push code to GitHub:
git add .
git commit -m "Portfolio Optimizer v1.0"
git push origin main-
Deploy on Streamlit Cloud:
- Visit https://share.streamlit.io
- Sign in with GitHub account
- Click "New app"
- Select repository and branch
- Set main file to
app.py - Click "Deploy"
-
Share public URL (format:
https://username-portfolio-optimizer-randomid.streamlit.app)
See requirements.txt for complete dependency list:
pandas==2.2.3
numpy==2.2.1
yfinance==0.2.66
pyportfolioopt==1.5.5
matplotlib==3.7.1
seaborn==0.13.0
plotly==5.17.0
streamlit==1.50.0
scikit-learn==1.3.2
scipy==1.11.4
The application uses:
- yfinance: Free Yahoo Finance API for market data
- CVXPY: Convex optimization solver for portfolio weights
- Plotly: Interactive web-based visualization library
- Data caching: CSV files stored in
data/directory - Efficient frontier: 3000 Monte Carlo simulations (configurable)
- Asset analysis: Parallel processing of up to 50+ assets
- Response time: <5 seconds for optimization (typical)
This application is provided for educational and informational purposes only. Past performance does not guarantee future results. Portfolio optimization is based on historical data and mathematical models with inherent limitations:
- Historical correlations may not persist
- Market regimes change unpredictably
- Optimization assumes normal return distributions
- Unforeseen events can disrupt market relationships
- Backtested performance may differ from actual results
Always consult with qualified financial advisors before making investment decisions.
- Individual Investors: Construct diversified portfolios with minimum effort
- Financial Advisors: Analyze client risk tolerance and asset allocation
- Quant Researchers: Test portfolio optimization strategies
- Academic Study: Learn Modern Portfolio Theory implementation
- Portfolio Rebalancing: Determine optimal weight adjustments
- Machine learning-based return forecasting
- Black-Litterman model for subjective views
- Factor-based asset pricing
- Real-time portfolio monitoring
- Multi-period optimization
- Risk parity portfolios
- Scenario analysis tools
Contributions welcome! Areas for improvement:
- Additional asset classes
- Alternative optimization objectives
- Enhanced visualizations
- Performance optimizations
- Additional risk metrics
Please submit pull requests or issues via GitHub.
MIT License - See LICENSE file for details
If you use this application for research, please cite:
Portfolio Optimizer: Multi-Asset Portfolio Optimization Platform
Author: David H
Year: 2025
Repository: https://github.com/Sugusdaddy
For questions, suggestions, or collaboration opportunities:
- Email: vchapixbusiness@gmail.com
- LinkedIn: https://www.linkedin.com/in/david-humada-iglesias-18932a291/
Built with:
- Modern Portfolio Theory (Harry Markowitz)
- CVXPY optimization library
- Streamlit framework
- yfinance data provider
This software is provided "as is" without warranty of any kind. Users assume all responsibility for investment decisions. The authors are not liable for any financial losses resulting from the use of this application.
Last Updated: October 2025 Version: 1.0.0 Status: Production Ready