https://github.com/cvxgrp/exp_util_gm_portfolio_opt
Minimal entropic value at risk (EVaR) portfolio construction under a Gaussian mixture model of returns.
Science Score: 13.0%
This score indicates how likely this project is to be science-related based on various indicators:
-
○CITATION.cff file
-
✓codemeta.json file
Found codemeta.json file -
○.zenodo.json file
-
○DOI references
-
○Academic publication links
-
○Academic email domains
-
○Institutional organization owner
-
○JOSS paper metadata
-
○Scientific vocabulary similarity
Low similarity (8.6%) to scientific vocabulary
Repository
Minimal entropic value at risk (EVaR) portfolio construction under a Gaussian mixture model of returns.
Basic Info
- Host: GitHub
- Owner: cvxgrp
- Language: Python
- Default Branch: main
- Size: 23.4 KB
Statistics
- Stars: 20
- Watchers: 4
- Forks: 3
- Open Issues: 1
- Releases: 0
Metadata Files
README.md
exputilgmportfolioopt
Exponential utility and entropic value at risk (EVaR) portfolio construction under a Gaussian mixture model of returns in Python. This repository implements the exponential utility and EVaR objective portfolio optimization problems described in the paper Portfolio construction with Gaussian mixture returns and exponential utility via convex optimization.
Optimizing a portfolio with the exponential utility
To run a minimal example, simply load example problem data defined in problem_data.py via
from problem_data import mus, Sigmas, pi, n, k.
This defines mus, Sigmas, and pi as lists of the respective mixture component means, covariance matrices, and mixture weights of a Gaussian mixture return model with 4 components, for an 11 dimensional return distribution. The, the following code from section 3.2 in the paper solves the EGM portfolio construcion problem:
``` import cvxpy as cvx
gamma = 1
def K(w): u = cvx.vstack([cvx.log(pi[i]) - gamma * mus[i] @ w + (gamma**2/2) * cvx.quadform(w, Sigmas[i]) for i in range(k)]) return cvx.logsum_exp(u)
w = cvx.Variable(n) objective = cvx.Minimize(K(w)) constraints = [ w >= 0, cvx.sum(w) == 1 ] egmprob = cvx.Problem(objective, constraints) egmprob.solve() w.value ```
Optimizing a portfolio with EVaR
After loading the EVaR portfolio optimization code via from gm_evar_portfolio import min_EVaR_portfolio
and with L the leverage limit and alpha the EVaR level, simply run
w,delta,evar = min_EVaR_portfolio(alpha,L,mus,Sigmas,pi)
to generate the minimum EVaR portfolio.
Citing
If you use gm_evar_portfolio in your research, please consider citing us by using the following bibtex:
@article{luxenberg2024portfolio,
title={Portfolio Construction with Gaussian Mixture Returns and Exponential Utility via Convex Optimization},
author={Luxenberg, Eric and Boyd, Stephen},
journal={Optimization and Engineering},
volume={25},
number={1},
pages={555--574},
year={2024},
publisher={Springer}
}
Owner
- Name: Stanford University Convex Optimization Group
- Login: cvxgrp
- Kind: organization
- Location: Stanford, CA
- Website: www.stanford.edu/~boyd
- Repositories: 102
- Profile: https://github.com/cvxgrp
GitHub Events
Total
- Watch event: 1
Last Year
- Watch event: 1
Issues and Pull Requests
Last synced: about 1 year ago
All Time
- Total issues: 1
- Total pull requests: 0
- Average time to close issues: N/A
- Average time to close pull requests: N/A
- Total issue authors: 1
- Total pull request authors: 0
- Average comments per issue: 0.0
- Average comments per pull request: 0
- Merged pull requests: 0
- Bot issues: 0
- Bot pull requests: 0
Past Year
- Issues: 0
- Pull requests: 0
- Average time to close issues: N/A
- Average time to close pull requests: N/A
- Issue authors: 0
- Pull request authors: 0
- Average comments per issue: 0
- Average comments per pull request: 0
- Merged pull requests: 0
- Bot issues: 0
- Bot pull requests: 0
Top Authors
Issue Authors
- BlockWaving (1)