robertmartin8 / PyPortfolioOpt

Financial portfolio optimisation in python, including classical efficient frontier, Black-Litterman, Hierarchical Risk Parity
https://pyportfolioopt.readthedocs.io/
MIT License
4.51k stars 956 forks source link

Feature request: Portfolio optimisation with Omega ratio #310

Closed CarloNicolini closed 3 years ago

CarloNicolini commented 3 years ago

In a paper of Shadwick and Keating in 2002, describes the Omega Ratio as an alternative to the classical Sharpe ratio for the estimation of portfolio performance. It should encompass higher moments of the returns distribution in one simple number, and it has some nice properties. Its functional formula is

$$\frac{ \int_r^b (1 - F(r) ) dr}{\int_a^r F(r) dr}$$

where $F(r)$ is the cumulative distribution of returns, $a,b$ are the lower- and upper- bounds of returns, relatively.

The parameter "r" could be interpreted as the minimum acceptable return (or "mar").

I was wondering if it is possible to implement Omega optimisation in PyPortfolioOpt, following the same structure provided in some of the tests.

The link is here: Omega ratio

robertmartin8 commented 3 years ago

Hi @CarloNicolini,

Thanks for raising this! Unfortunately, because the omega ratio is quite a complex objective it's not easy for a user to implement it via PyPortfolioOpt (e.g you can't just pass it as an objective function).

Omega ratio optimisation can be formulated as a linear program (see here), so in future it could be added to the list of frontiers that we support (along with EfficientSemivariance, EfficientCVaR, EfficientCDaR).

Best, Robert