| 3 | //! |
| 4 | //! References: Markowitz (1952), *Portfolio selection*; AFML Chapter 16, §16.2 (the problem |
| 5 | //! with convex portfolio optimisation) and §16.3 (Markowitz's curse) for why these portfolios |
| 6 | //! are fragile; Stellato et al. (2020), OSQP, for the solver formulation; Michaud (1989) on |
| 7 | //! error maximisation. |
| 8 | //! |
| 9 | //! | `solution` | Problem | |
| 10 | //! | --- | --- | |
| 11 | //! | `"inverse_variance"` | `w_i ∝ 1 / Sigma_ii` (correlation ignored), then projected onto the bounds | |
| 12 | //! | `"min_volatility"` | `min w'Σw` s.t. `1'w = 1`, `l <= w <= u` | |
| 13 | //! | `"max_sharpe"` | maximise `(mu'w - rf) / sqrt(w'Σw)` s.t. `1'w = 1`, `l <= w <= u` | |
| 14 | //! | `"efficient_risk"` | `min w'Σw` s.t. `mu'w >= target_return`, `1'w = 1`, `l <= w <= u` | |
| 15 | //! |
| 16 | //! The three optimisations are solved as quadratic programmes by an internal dense ADMM |
nothing calls this directly
no outgoing calls
no test coverage detected