Skip to content
13

Relaxed risk budgeting

PortfolioOptimisers.RelaxedRiskBudgetingAlgorithm Type
julia
abstract type RelaxedRiskBudgetingAlgorithm <: OptimisationAlgorithm

Abstract supertype for relaxed risk budgeting algorithm variants.

Related Types

source
PortfolioOptimisers.BasicRelaxedRiskBudgeting Type
julia
struct BasicRelaxedRiskBudgeting <: RelaxedRiskBudgetingAlgorithm

Basic Relaxed Risk Budgeting formulation.

Uses the basic Second Order Cone (SOC) relaxation of the risk budgeting problem without additional regularisation.

Related Types

source
PortfolioOptimisers.RegularisedRelaxedRiskBudgeting Type
julia
struct RegularisedRelaxedRiskBudgeting <: RelaxedRiskBudgetingAlgorithm

Regularised Relaxed Risk Budgeting formulation.

Extends the basic SOC formulation with a regularisation term to improve numerical stability.

Related Types

source
PortfolioOptimisers.RegularisedPenalisedRelaxedRiskBudgeting Type
julia
struct RegularisedPenalisedRelaxedRiskBudgeting{__T_p} <: RelaxedRiskBudgetingAlgorithm

Regularised and penalised Relaxed Risk Budgeting formulation.

Extends the regularised formulation with a penalty on deviations from target risk budgets, controlled by parameter p.

Fields

  • p: Power or order parameter.

Constructors

julia
RegularisedPenalisedRelaxedRiskBudgeting(;
    p::Number = 1.0
) -> RegularisedPenalisedRelaxedRiskBudgeting

Keywords correspond to the struct's fields.

Validation

  • isfinite(p) and p > 0.

Related Types

source
PortfolioOptimisers.RelaxedRiskBudgeting Type
julia
struct RelaxedRiskBudgeting{__T_opt, __T_rba, __T_wi, __T_alg, __T_fb} <: JuMPOptimisationEstimator

Relaxed Risk Budgeting (RRB) portfolio optimiser.

RelaxedRiskBudgeting implements a relaxed formulation of the risk budgeting problem using a Second Order Cone constraint on the portfolio variance. Unlike RiskBudgeting, it does not require a logarithmic or mixed-integer formulation, making it computationally more tractable.

Fields

  • opt: JuMP optimiser configuration.

  • rba: Risk budget algorithm.

  • wi: Initial portfolio weights for warm-starting the solver.

  • alg: Relaxed risk budgeting algorithm variant.

  • fb: Fallback result or estimator.

Constructors

julia
RelaxedRiskBudgeting(;
    opt::JuMPOptimiser = JuMPOptimiser(),
    rba::RiskBudgetingAlgorithm = AssetRiskBudgeting(),
    wi::Option{<:VecNum} = nothing,
    alg::RelaxedRiskBudgetingAlgorithm = BasicRelaxedRiskBudgeting(),
    fb::Option{<:OptE_Opt} = nothing
) -> RelaxedRiskBudgeting

Keywords correspond to the struct's fields.

Validation

  • If wi is provided: !isempty(wi).

Mathematical definition

The Relaxed Risk Budgeting (RRB) formulation replaces the non-convex risk-parity constraint with a second-order cone (SOC) relaxation. Let G be the Cholesky factor of Σ (so GG=Σ). Introduce auxiliary variables ζ=Σw, ψ0, γ0:

minw,ψ,γ,ζψγ,s.t.ζ=Σw,(wi+ζi2γbiwiζi)KSOC,i.

The risk cone constraint (basic variant): (ψ,Gw)KSOC, i.e. ψGw2=wΣw.

Where:

  • w: Portfolio weight vector.

  • ψ, γ: Scalar auxiliary variables.

  • ζ: Auxiliary vector equal to Σw.

  • bi: Risk budget for asset i.

  • G: Cholesky factor of Σ (so GG=Σ).

  • Σ: Covariance matrix.

  • KSOC: Second-order cone.

Related

source
PortfolioOptimisers.needs_previous_weights Method
julia
needs_previous_weights(opt::RelaxedRiskBudgeting) -> Any

Return true if the JuMP optimiser or fallback requires previous portfolio weights.

source
PortfolioOptimisers.factory Method
julia
factory(
    rrb::RelaxedRiskBudgeting,
    w::AbstractVector
) -> RelaxedRiskBudgeting

Build an updated RelaxedRiskBudgeting with all estimators that track previous weights updated via factory using w.

source
PortfolioOptimisers.port_opt_view Method
julia
port_opt_view(
    rrb::RelaxedRiskBudgeting,
    i,
    X::AbstractMatrix{<:Union{var"#s20", var"#s19"} where {var"#s20"<:Number, var"#s19"<:AbstractJuMPScalar}},
    args...
) -> RelaxedRiskBudgeting

Return a cluster-sliced copy of RelaxedRiskBudgeting for asset index set i and returns matrix X.

source
PortfolioOptimisers.set_relaxed_risk_budgeting_alg_constraints! Function
julia
set_relaxed_risk_budgeting_alg_constraints!(alg, model, w, sigma, chol)

Add algorithm-specific second-order cone constraints for Relaxed Risk Budgeting.

Dispatches based on the RRB algorithm variant. Adds second-order cone constraints implementing the basic, regularised, or regularised-penalised RRB formulation.

Arguments

Returns

  • nothing.

Related

source
PortfolioOptimisers._set_relaxed_risk_budgeting_constraints! Method
julia
_set_relaxed_risk_budgeting_constraints!(model, ...)

Internal function to set relaxed risk budgeting constraints in the JuMP model.

Configures inequality constraints for the relaxed risk budgeting formulation, allowing small deviations from exact budget targets.

Arguments

  • model: JuMP model.

  • Additional relaxed risk budgeting parameters.

Returns

  • nothing.

Related

source
PortfolioOptimisers.set_relaxed_risk_budgeting_constraints! Function
julia
set_relaxed_risk_budgeting_constraints!(model, rrb, pr, wb, args...)

Add Relaxed Risk Budgeting (RRB) constraints and weight variables to the JuMP model.

Dispatches based on the risk budgeting algorithm type. Configures weight variables, budget constraints, second-order cone constraints, and weight bounds.

Arguments

  • model::JuMP.Model: JuMP optimisation model.

  • rrb::RelaxedRiskBudgeting: RRB estimator configuration.

  • pr::AbstractPriorResult: Prior result with asset moments.

  • wb::WeightBounds: Weight bounds configuration.

  • args...: Additional arguments (e.g. returns data for factor risk budgeting).

Returns

  • Processed risk budgeting attributes.

Related

source
PortfolioOptimisers.optimise Function
julia
optimise(rrb::RelaxedRiskBudgeting{<:Any, <:Any, <:Any, <:Any, Nothing},
         rd::ReturnsResult = ReturnsResult(); dims::Int = 1,
         str_names::Bool = false, save::Bool = true, kwargs...) -> RiskBudgetingResult

Run the Relaxed Risk Budgeting portfolio optimisation.

Arguments

  • rrb: The relaxed risk budgeting optimiser to use.

  • rd: The returns result to use. If isa(rrb.opt.pe, AbstractPriorResult), rd is not necessary if doing a standalone optimisation, but may be required/desired by fallbacks and/or clusterisation.

  • dims: The dimension along which observations advance in time.

  • str_names: Whether to use string names for the assets in the optimisation.

  • save: Whether to save the JuMP model in the optimisation result.

  • kwargs: Additional keyword arguments passed to the optimisation function.

Related

source