Course: MSBA Optimization
This project applies mathematical optimization techniques to construct risk-minimized stock portfolios using Conditional Value at Risk (CVaR) as the primary risk measure. Using NASDAQ-100 (NDX) constituent stocks, the project builds and evaluates portfolios in-sample (2019) and out-of-sample (2020), with analysis of how COVID-19 market conditions impacted portfolio performance.
-
CVaR Minimization (Part 2): Optimize a portfolio to minimize average daily CVaR using 2019 returns. Achieved an in-sample CVaR of 0.0111 vs. NDX's 0.0248.
-
Sensitivity to Confidence Level β (Part 3): Tested β ∈ {0.90, 0.95, 0.99}. Higher β leads to more concentrated, conservative portfolios (fewer stocks, more weight in defensive assets like XEL and CHTR).
-
Minimax Optimization (Part 4): Changed objective to minimize the maximum monthly CVaR across 2019, producing a flat monthly CVaR of 0.0124 and reducing worst-month tail risk by 22%.
-
Rolling Monthly Rebalancing (Part 5): Re-optimized the portfolio each month in 2020. Average daily CVaR dropped from 0.0466 (static) to 0.0323 (rolling), demonstrating the value of dynamic rebalancing.
-
Stability Check (Part 6): Identified months where portfolio weights shifted by more than 5%, flagging 43 violations across 9 months — concentrated in the COVID volatility period (March–November 2020).
| File | Description |
|---|---|
OptimizationProject1.ipynb |
Main optimization notebook |
stocks2019.csv |
Daily returns for NDX stocks in 2019 (in-sample) |
stocks2020.csv |
Daily returns for NDX stocks in 2020 (out-of-sample) |
Optimization_Project_1_Report.pdf |
Full written report with results and analysis |
Optimization_Project_1 .pdf |
Assignment instructions / problem statement |
project 1 - cvar - overview.pdf |
CVaR methodology overview |
project1.ipynb - Colab.pdf |
Exported Colab notebook PDF |
- Python (pandas, numpy, scipy / cvxpy for optimization, matplotlib)
- Jupyter Notebook / Google Colab
- Install dependencies:
pip install pandas numpy matplotlib cvxpy - Open
OptimizationProject1.ipynbin Jupyter or Colab - Ensure
stocks2019.csvandstocks2020.csvare in the same directory - Run all cells top to bottom
| Measure | Value |
|---|---|
| In-sample CVaR 2019 (β=0.95) | 0.01109 |
| Out-of-sample CVaR 2020 (static) | 0.04656 |
| Out-of-sample CVaR 2020 (rolling) | 0.03233 |
| NDX CVaR 2019 | 0.02475 |
| NDX CVaR 2020 | 0.05650 |