https://github.com/eldaduzman/numeric-optimization-project
https://github.com/eldaduzman/numeric-optimization-project
Last synced: 3 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/eldaduzman/numeric-optimization-project
- Owner: eldaduzman
- Created: 2025-06-06T12:54:56.000Z (4 months ago)
- Default Branch: main
- Last Pushed: 2025-06-21T17:52:08.000Z (4 months ago)
- Last Synced: 2025-06-21T18:36:37.567Z (4 months ago)
- Language: Jupyter Notebook
- Size: 1.4 MB
- Stars: 2
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Numerical Optimization with Python - Portfolio Optimization Project
## Authors
- Eldad Uzman
- Tom Ron
- Liron Zarhay## Overview
This project implements advanced portfolio optimization techniques using numerical optimization methods in Python. The focus is on Conditional Value-at-Risk (CVaR) optimization and Mean-Variance optimization for financial portfolio management, with additional features for risk attribution and walk-forward analysis.
## Features
- **CVaR Optimization**: Implements Rockafellar & Uryasev's linear CVaR minimization approach
- **Mean-Variance Optimization**: Traditional Markowitz portfolio optimization
- **Risk Attribution**: Sharpe-style risk contribution analysis for portfolio components
- **Walk-Forward Analysis**: Time-series backtesting with rolling optimization windows
- **Top-N Momentum Strategy**: Simple momentum-based portfolio strategy for comparison
- **Interactive Visualizations**: Plotly-based charts for risk attribution and performance analysis
- **Performance Profiling**: Built-in profiling tools for optimization performance analysis## Core Algorithms
### CVaR Optimization
The project implements Rockafellar & Uryasev's linear formulation for CVaR minimization:
```python
def optimise_cvar(R, beta=0.95, target_return=None, short_cap=None):
"""
Rockafellar-&-Uryasev linear CVaR minimisation.
Parameters:
- R: Returns DataFrame
- beta: Confidence level (0, 1)
- target_return: Optional return constraint
- short_cap: Optional short selling constraint
"""
```### Mean-Variance Optimization
Traditional Markowitz portfolio optimization:
```python
def optimize_mean_variance(R, target_return=None, short_cap=None):
"""
Mean-variance optimisation with optional constraints.
"""
```### Risk Attribution
Sharpe-style risk contribution analysis:
```python
def cvar_risk_contributions(R, weights, beta=0.95):
"""Sharpe-equivalent attribution for portfolio CVaR."""
def variance_risk_contributions(cov, weights):
"""Sharpe (Euler) attribution for portfolio variance."""
```## Data Format
The project expects stock price data in CSV format with:
- Date column (automatically detected)
- Price data in wide format (one column per stock)
- Or long format with columns: date, company, priceExample data structure:
```csv
date,MSFT,GOOGL,AAPL,...
2015-02-01,40.12,520.45,120.34,...
2015-02-02,40.89,525.12,121.67,...
...
```## Research Background
This project is based on academic research in portfolio optimization, particularly:
- Rockafellar & Uryasev (1999): CVaR optimization
- Markowitz (1952): Mean-variance optimization
- Sharpe value theory for risk attribution