Ulcer Index Constraints: private API

PortfolioOptimisers.set_risk_constraints!Method
set_risk_constraints!(
    model::Model,
    ,
    r::UlcerIndex,
    opt::RiskJuMPOptimisationEstimator,
    pr::AbstractPriorResult,
    args...;
    prefix,
    kwargs...
) -> Any

Add Ulcer Index risk constraints to model.

Introduces a scalar variable uci and the SOC constraint [sc * uci; sc * dd[2:T+1]] in SecondOrderCone(), then defines uci_risk = uci / sqrt(T). Returns the existing expression if already present.

Mathematical definition

\[\begin{align} \mathrm{UCI}(\boldsymbol{w}) &= \frac{\lVert \boldsymbol{dd} \rVert_2}{\sqrt{T}} = \sqrt{\frac{1}{T}\sum_{t=1}^T dd_t^2}\,. \end{align}\]

Where:

  • $\mathrm{UCI}(\boldsymbol{w})$: Ulcer index.
  • $\boldsymbol{dd}$: Drawdown vector.
  • $T$: Number of observations.
  • $dd_t$: Portfolio drawdown at time $t$.

where $dd_t$ is the portfolio drawdown at time $t$.

Arguments

  • model::JuMP.Model: The JuMP optimisation model.
  • r::UlcerIndex: Ulcer index risk measure instance.
  • opt::RiskJuMPOptimisationEstimator: Risk-based optimisation estimator.
  • pr::AbstractPriorResult: Prior result containing the returns matrix X.

Returns

  • nothing.

Related

source