This project focuses on building a diversified cross-asset portfolio using historical financial data. The goal is to maximize risk-adjusted returns while minimizing portfolio risk and drawdowns.
It applies modern portfolio theory concepts such as log returns, covariance analysis, and efficient frontier simulation.
-
Multi-asset portfolio construction (stocks, crypto, commodities, indices)
-
Data preprocessing and cleaning
-
Log return calculation
-
Covariance and correlation analysis
-
Monte Carlo simulation (5000 portfolios)
-
Efficient Frontier visualization
-
Optimal portfolio selection:
- Maximum Sharpe Ratio
- Minimum Volatility
-
Portfolio backtesting
-
Drawdown analysis
-
Rolling Sharpe Ratio
-
Stress testing (high volatility periods)
-
Portfolio performance metrics
portfolio-optimization/
│
├── data/ # CSV files (asset price data)
├── notebook.ipynb # Main analysis notebook
├── requirements.txt # Required libraries
└── README.md # Project documentation
- Python
- Pandas
- NumPy
- Matplotlib
- Seaborn
- Clone the repository:
git clone https://github.com/your-username/portfolio-optimization.git
cd portfolio-optimization
- Install dependencies:
pip install -r requirements.txt
jupyter notebook notebook.ipynb
python main.py
- Load multiple CSV files
- Convert
Datecolumn to datetime - Set
Dateas index - Keep only
Pricecolumn - Handle missing values
- Convert prices to float
- Compute log returns:
returns = np.log(prices / prices.shift(1))
- Mean returns
- Covariance matrix
- Correlation heatmap
-
Simulate 5000 random portfolios
-
Compute:
- Expected return
- Volatility
- Sharpe ratio
- Max Sharpe Portfolio
- Min Volatility Portfolio
- Plot risk vs return
- Highlight optimal portfolios
- Compute portfolio value over time
- Compare performance
- Drawdown calculation
- Rolling Sharpe Ratio
- Stress testing during high volatility
| Metric | Max Sharpe | Min Volatility |
|---|---|---|
| Annual Return | 20.2% | 17.7% |
| Volatility | 24.34% | 23.57% |
| Sharpe Ratio | 0.83 | 0.75 |
| Max Drawdown | -44.39% | -40.99% |
| Sortino Ratio | 1.04 | - |
- Asset price trends
- Efficient Frontier
- Portfolio equity curves
- Drawdown plots
- Rolling Sharpe Ratio
- Correlation heatmap
- Risk-free rate = 0%
- No transaction costs
- Daily rebalancing
- Missing data dropped (no interpolation)
- Log returns used for calculations
- The Max Sharpe Portfolio provides higher returns but comes with higher risk.
- The Min Volatility Portfolio offers more stability with lower returns.
- Diversification plays a crucial role in reducing portfolio risk.
- Correlated assets increase overall portfolio volatility.
- Include transaction costs
- Add dynamic portfolio rebalancing
- Use machine learning for asset allocation
- Implement regime-switching models
- Stress test with extreme market scenarios
Dharshini D