Skip to content

radhapawar/cvar-portfolio-optimization

Repository files navigation

Portfolio Optimization — CVaR Minimization

Course: MSBA Optimization

Overview

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.

Key Analyses

  1. 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.

  2. 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).

  3. 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%.

  4. 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.

  5. 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).

Files

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

Technologies

  • Python (pandas, numpy, scipy / cvxpy for optimization, matplotlib)
  • Jupyter Notebook / Google Colab

How to Run

  1. Install dependencies: pip install pandas numpy matplotlib cvxpy
  2. Open OptimizationProject1.ipynb in Jupyter or Colab
  3. Ensure stocks2019.csv and stocks2020.csv are in the same directory
  4. Run all cells top to bottom

Key Results

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

About

CVaR-based portfolio optimization using NASDAQ-100 stocks with minimax strategies, beta sensitivity analysis, and rolling monthly rebalancing

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors