https://github.com/cvxgrp/exp_util_gm_portfolio_opt

Minimal entropic value at risk (EVaR) portfolio construction under a Gaussian mixture model of returns.

https://github.com/cvxgrp/exp_util_gm_portfolio_opt

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
Last synced: 10 months ago · JSON representation

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
Created about 4 years ago · Last pushed about 2 years ago
Metadata Files
Readme

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

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)
Pull Request Authors
Top Labels
Issue Labels
Pull Request Labels