Skip to content
13

Conditional X at Risk

PortfolioOptimisers.ConditionalValueatRisk Type
julia
struct ConditionalValueatRisk{__T_settings, __T_alpha, __T_w} <: RiskMeasure

Represents the Conditional Value-at-Risk (CVaR) risk measure, also known as Expected Shortfall (ES).

ConditionalValueatRisk computes the expected loss given that the loss exceeds the Value-at-Risk at level alpha. It provides a coherent risk measure for tail risk quantification.

Mathematical definition

Let x=(x1,,xT) be the portfolio returns vector. The CVaR (also known as Expected Shortfall) at level α is the expected loss in the worst α fraction of scenarios:

CVaRα(x)=minν{ν+1αTt=1Tmax(xtν,0)}.

Where:

  • CVaRα(x): Conditional Value-at-Risk (Expected Shortfall) at level α.

  • x: Portfolio returns vector T×1.

  • α: Significance level (left tail probability), α(0,1).

  • T: Number of observations.

  • ν: Auxiliary variable (Value-at-Risk threshold).

Equivalently, it is the expected loss conditional on exceeding the VaR:

CVaRα(x)=E[xxVaRα(x)].

Where:

  • CVaRα(x): CVaR as the expected loss conditional on exceeding the VaR threshold.

  • x: Portfolio returns vector T×1.

  • α: Significance level (left tail probability), α(0,1).

  • VaRα(x): Value-at-Risk at level α.

Fields

  • settings: Risk measure settings.

  • alpha: Quantile level for the lower tail.

  • w: Optional observation weights vector observations × 1, or a concrete subtype of DynamicAbstractWeights. If nothing, the computation is unweighted.

Constructors

julia
ConditionalValueatRisk(;
    settings::RiskMeasureSettings = RiskMeasureSettings(),
    alpha::Number = 0.05,
    w::Option{<:ObsWeights} = nothing
) -> ConditionalValueatRisk

Keywords correspond to the struct's fields.

Validation

  • 0 < alpha < 1.

  • If w is not nothing: !isempty(w).

Functor

julia
(r::ConditionalValueatRisk)(x::VecNum)

Computes the CVaR of a portfolio returns vector x.

Arguments

  • x::VecNum: Portfolio returns vector.

Examples

julia
julia> ConditionalValueatRisk()
ConditionalValueatRisk
  settings ┼ RiskMeasureSettings
           │   scale ┼ Float64: 1.0
           │      ub ┼ nothing
           │     rke ┴ Bool: true
     alpha ┼ Float64: 0.05
         w ┴ nothing

Related

source
PortfolioOptimisers.factory Method
julia
factory(
    r::ConditionalValueatRisk,
    pr::AbstractPriorResult,
    args...;
    kwargs...
) -> ConditionalValueatRisk{RiskMeasureSettings{__T_scale, __T_ub, __T_rke}, <:Number} where {__T_scale, __T_ub, __T_rke}

Create an instance of ConditionalValueatRisk by selecting observation weights from the risk-measure instance or falling back to the prior result.

Related

source
PortfolioOptimisers.DistributionallyRobustConditionalValueatRisk Type
julia
struct DistributionallyRobustConditionalValueatRisk{__T_settings, __T_alpha, __T_l, __T_r, __T_w} <: RiskMeasure

Represents the Distributionally Robust Conditional Value-at-Risk (DR-CVaR) risk measure.

DistributionallyRobustConditionalValueatRisk is a robust variant of CVaR that accounts for distributional uncertainty using Wasserstein ambiguity sets. It provides robustness against model misspecification in the tails of the return distribution.

Mathematical definition

The DR-CVaR with Wasserstein ambiguity parameter l and radius r is a robust upper bound on CVaR under distributional uncertainty within a Wasserstein ball of radius r:

DR-CVaRα,l,r(x)=CVaRα(x)+lr.

Where:

  • DR-CVaRα,l,r(x): Distributionally Robust CVaR.

  • x: Portfolio returns vector T×1.

  • α: Significance level (left tail probability), α(0,1).

  • l: Wasserstein ambiguity scale factor.

  • r: Wasserstein ball radius.

Fields

  • settings: Risk measure settings.

  • alpha: Quantile level for the lower tail.

  • l: Wasserstein ambiguity scale factor.

  • r: Wasserstein radius parameter.

  • w: Optional observation weights vector observations × 1, or a concrete subtype of DynamicAbstractWeights. If nothing, the computation is unweighted.

Constructors

julia
DistributionallyRobustConditionalValueatRisk(;
    settings::RiskMeasureSettings = RiskMeasureSettings(),
    alpha::Number = 0.05,
    l::Number = 1.0,
    r::Number = 0.02,
    w::Option{<:ObsWeights} = nothing
) -> DistributionallyRobustConditionalValueatRisk

Keywords correspond to the struct's fields.

Validation

  • 0 < alpha < 1.

  • l > 0.

  • r > 0.

  • If w is not nothing: !isempty(w).

Functor

julia
(r::DistributionallyRobustConditionalValueatRisk)(x::VecNum)

Computes the DR-CVaR of a portfolio returns vector x.

Arguments

  • x::VecNum: Portfolio returns vector.

Examples

julia
julia> DistributionallyRobustConditionalValueatRisk()
DistributionallyRobustConditionalValueatRisk
  settings ┼ RiskMeasureSettings
           │   scale ┼ Float64: 1.0
           │      ub ┼ nothing
           │     rke ┴ Bool: true
     alpha ┼ Float64: 0.05
         l ┼ Float64: 1.0
         r ┼ Float64: 0.02
         w ┴ nothing

Related

source
PortfolioOptimisers.factory Method
julia
factory(
    r::DistributionallyRobustConditionalValueatRisk,
    pr::AbstractPriorResult,
    args...;
    kwargs...
) -> DistributionallyRobustConditionalValueatRisk{RiskMeasureSettings{__T_scale, __T_ub, __T_rke}, <:Number, <:Number, <:Number} where {__T_scale, __T_ub, __T_rke}

Create an instance of DistributionallyRobustConditionalValueatRisk by selecting observation weights from the risk-measure instance or falling back to the prior result.

Related

source
PortfolioOptimisers.RMCVaR Type
julia
const RMCVaR{T} = Union{...}

Parameterised union of ConditionalValueatRisk and DistributionallyRobustConditionalValueatRisk sharing the same observation-weight type parameter T.

Used for unified dispatch on CVaR computation methods.

Related

source
PortfolioOptimisers.ConditionalValueatRiskRange Type
julia
struct ConditionalValueatRiskRange{__T_settings, __T_alpha, __T_beta, __T_w} <: RiskMeasure

Represents the Conditional Value-at-Risk Range (CVaR Range) risk measure.

ConditionalValueatRiskRange computes the difference between the lower-tail CVaR (at level alpha) and the upper-tail CVaR (at level beta), measuring the spread between downside and upside expected tail risks.

Mathematical definition

CVaRRangeα,β(x)=CVaRα(x)CVaRβ(x).

Where:

  • CVaRRangeα,β(x): CVaR range (tail spread).

  • x: Portfolio returns vector T×1.

  • CVaRα(x): Lower-tail expected shortfall at level α.

  • CVaRβ(x): Upper-tail expected surplus at level β.

Fields

  • settings: Risk measure settings.

  • alpha: Quantile level for the lower tail.

  • beta: Quantile level for the upper tail.

  • w: Optional observation weights vector observations × 1, or a concrete subtype of DynamicAbstractWeights. If nothing, the computation is unweighted.

Constructors

julia
ConditionalValueatRiskRange(;
    settings::RiskMeasureSettings = RiskMeasureSettings(),
    alpha::Number = 0.05,
    beta::Number = 0.05,
    w::Option{<:ObsWeights} = nothing
) -> ConditionalValueatRiskRange

Keywords correspond to the struct's fields.

Validation

  • 0 < alpha < 1.

  • 0 < beta < 1.

  • If w is not nothing: !isempty(w).

Functor

julia
(r::ConditionalValueatRiskRange)(x::VecNum)

Computes the CVaR Range of a portfolio returns vector x.

Arguments

  • x::VecNum: Portfolio returns vector.

Examples

julia
julia> ConditionalValueatRiskRange()
ConditionalValueatRiskRange
  settings ┼ RiskMeasureSettings
           │   scale ┼ Float64: 1.0
           │      ub ┼ nothing
           │     rke ┴ Bool: true
     alpha ┼ Float64: 0.05
      beta ┼ Float64: 0.05
         w ┴ nothing

Related

source
PortfolioOptimisers.factory Method
julia
factory(
    r::ConditionalValueatRiskRange,
    pr::AbstractPriorResult,
    args...;
    kwargs...
) -> ConditionalValueatRiskRange{RiskMeasureSettings{__T_scale, __T_ub, __T_rke}, <:Number, <:Number} where {__T_scale, __T_ub, __T_rke}

Create an instance of ConditionalValueatRiskRange by selecting observation weights from the risk-measure instance or falling back to the prior result.

Related

source
PortfolioOptimisers.DistributionallyRobustConditionalValueatRiskRange Type
julia
struct DistributionallyRobustConditionalValueatRiskRange{__T_settings, __T_alpha, __T_l_a, __T_r_a, __T_beta, __T_l_b, __T_r_b, __T_w} <: RiskMeasure

Represents the Distributionally Robust Conditional Value-at-Risk Range (DR-CVaR Range) risk measure.

DistributionallyRobustConditionalValueatRiskRange computes the difference between the lower-tail DR-CVaR (at level alpha) and the upper-tail DR-CVaR (at level beta), with separate Wasserstein ambiguity parameters for each tail.

Mathematical definition

DR-CVaRRange(x)=DR-CVaRα,la,ra(x)DR-CVaRβ,lb,rb(x).

Where:

  • DR-CVaRRange(x): DR-CVaR range.

  • x: Portfolio returns vector T×1.

  • DR-CVaRα,la,ra(x): Lower-tail DR-CVaR with Wasserstein parameters (la,ra).

  • DR-CVaRβ,lb,rb(x): Upper-tail DR-CVaR with Wasserstein parameters (lb,rb).

Fields

  • settings: Risk measure settings.

  • alpha: Quantile level for the lower tail.

  • l_a: Risk aversion parameter for the lower tail.

  • r_a: Radius parameter for the lower tail.

  • beta: Quantile level for the upper tail.

  • l_b: Risk aversion parameter for the upper tail.

  • r_b: Radius parameter for the upper tail.

  • w: Optional observation weights vector observations × 1, or a concrete subtype of DynamicAbstractWeights. If nothing, the computation is unweighted.

Constructors

julia
DistributionallyRobustConditionalValueatRiskRange(;
    settings::RiskMeasureSettings = RiskMeasureSettings(),
    alpha::Number = 0.05,
    l_a::Number = 1.0,
    r_a::Number = 0.02,
    beta::Number = 0.05,
    l_b::Number = 1.0,
    r_b::Number = 0.02,
    w::Option{<:ObsWeights} = nothing
) -> DistributionallyRobustConditionalValueatRiskRange

Keywords correspond to the struct's fields.

Validation

  • 0 < alpha < 1.

  • 0 < beta < 1.

  • l_a > 0, r_a > 0, l_b > 0, r_b > 0.

  • If w is not nothing: !isempty(w).

Functor

julia
(r::DistributionallyRobustConditionalValueatRiskRange)(x::VecNum)

Computes the DR-CVaR Range of a portfolio returns vector x.

Arguments

  • x::VecNum: Portfolio returns vector.

Examples

julia
julia> DistributionallyRobustConditionalValueatRiskRange()
DistributionallyRobustConditionalValueatRiskRange
  settings ┼ RiskMeasureSettings
           │   scale ┼ Float64: 1.0
           │      ub ┼ nothing
           │     rke ┴ Bool: true
     alpha ┼ Float64: 0.05
       l_a ┼ Float64: 1.0
       r_a ┼ Float64: 0.02
      beta ┼ Float64: 0.05
       l_b ┼ Float64: 1.0
       r_b ┼ Float64: 0.02
         w ┴ nothing

Related

source
PortfolioOptimisers.factory Method
julia
factory(
    r::DistributionallyRobustConditionalValueatRiskRange,
    pr::AbstractPriorResult,
    args...;
    kwargs...
) -> DistributionallyRobustConditionalValueatRiskRange{RiskMeasureSettings{__T_scale, __T_ub, __T_rke}, <:Number, <:Number, <:Number, <:Number, <:Number, <:Number} where {__T_scale, __T_ub, __T_rke}

Create an instance of DistributionallyRobustConditionalValueatRiskRange by selecting observation weights from the risk-measure instance or falling back to the prior result.

Related

source
PortfolioOptimisers.RMCVaRRg Type
julia
const RMCVaRRg{T} = Union{...}

Parameterised union of ConditionalValueatRiskRange and DistributionallyRobustConditionalValueatRiskRange sharing the same observation-weight type parameter T.

Used for unified dispatch on CVaR-range computation methods.

Related

source
PortfolioOptimisers.ConditionalDrawdownatRisk Type
julia
struct ConditionalDrawdownatRisk{__T_settings, __T_alpha, __T_w} <: RiskMeasure

Represents the Conditional Drawdown-at-Risk (CDaR) risk measure, also known as Expected Maximum Drawdown.

ConditionalDrawdownatRisk computes the expected drawdown given that the drawdown exceeds the Drawdown-at-Risk at level alpha. It provides a coherent risk measure for drawdown tail risk.

Mathematical definition

Define the absolute drawdown series:

ct=s=1txs,dt=ctmax0stcs0.

Where:

  • x: Portfolio returns vector T×1.

  • ct: Cumulative simple portfolio return at period t.

  • dt0: Absolute drawdown at period t.

The CDaR is the CVaR of the drawdown series d=(d1,,dT):

CDaRα(x)=minν{ν+1αTt=1Tmax(dtν,0)}.

Where:

  • CDaRα(x): Conditional Drawdown-at-Risk (Expected Maximum Drawdown).

  • α: Significance level (left tail probability), α(0,1).

  • T: Number of observations.

  • dt0: Absolute drawdown at period t.

  • ν: Auxiliary variable (DaR threshold).

Fields

  • settings: Risk measure settings.

  • alpha: Quantile level for the lower tail.

  • w: Optional observation weights vector observations × 1, or a concrete subtype of DynamicAbstractWeights. If nothing, the computation is unweighted.

Constructors

julia
ConditionalDrawdownatRisk(;
    settings::RiskMeasureSettings = RiskMeasureSettings(),
    alpha::Number = 0.05,
    w::Option{<:ObsWeights} = nothing
) -> ConditionalDrawdownatRisk

Keywords correspond to the struct's fields.

Validation

  • 0 < alpha < 1.

  • If w is not nothing: !isempty(w).

Functor

julia
(r::ConditionalDrawdownatRisk)(x::VecNum)

Computes the CDaR of a portfolio returns vector x.

Arguments

  • x::VecNum: Portfolio returns vector.

Examples

julia
julia> ConditionalDrawdownatRisk()
ConditionalDrawdownatRisk
  settings ┼ RiskMeasureSettings
           │   scale ┼ Float64: 1.0
           │      ub ┼ nothing
           │     rke ┴ Bool: true
     alpha ┼ Float64: 0.05
         w ┴ nothing

Related

source
PortfolioOptimisers.factory Method
julia
factory(
    r::ConditionalDrawdownatRisk,
    pr::AbstractPriorResult,
    args...;
    kwargs...
) -> ConditionalDrawdownatRisk{RiskMeasureSettings{__T_scale, __T_ub, __T_rke}, <:Number} where {__T_scale, __T_ub, __T_rke}

Create an instance of ConditionalDrawdownatRisk by selecting observation weights from the risk-measure instance or falling back to the prior result.

Related

source
PortfolioOptimisers.DistributionallyRobustConditionalDrawdownatRisk Type
julia
struct DistributionallyRobustConditionalDrawdownatRisk{__T_settings, __T_alpha, __T_l, __T_r, __T_w} <: RiskMeasure

Represents the Distributionally Robust Conditional Drawdown-at-Risk (DR-CDaR) risk measure.

DistributionallyRobustConditionalDrawdownatRisk is a robust variant of CDaR that accounts for distributional uncertainty using Wasserstein ambiguity sets, applied to drawdown sequences.

Mathematical definition

DR-CDaRα,l,r(x)=CDaRα(x)+lr.

Where:

  • DR-CDaRα,l,r(x): Distributionally Robust CDaR.

  • x: Portfolio returns vector T×1.

  • α: Significance level (left tail probability), α(0,1).

  • l: Wasserstein ambiguity scale factor.

  • r: Wasserstein ball radius.

Fields

  • settings: Risk measure settings.

  • alpha: Quantile level for the lower tail.

  • l: Wasserstein ambiguity scale factor.

  • r: Wasserstein radius parameter.

  • w: Optional observation weights vector observations × 1, or a concrete subtype of DynamicAbstractWeights. If nothing, the computation is unweighted.

Constructors

julia
DistributionallyRobustConditionalDrawdownatRisk(;
    settings::RiskMeasureSettings = RiskMeasureSettings(),
    alpha::Number = 0.05,
    l::Number = 1.0,
    r::Number = 0.02,
    w::Option{<:ObsWeights} = nothing
) -> DistributionallyRobustConditionalDrawdownatRisk

Keywords correspond to the struct's fields.

Validation

  • 0 < alpha < 1.

  • l > 0.

  • r > 0.

  • If w is not nothing: !isempty(w).

Functor

julia
(r::DistributionallyRobustConditionalDrawdownatRisk)(x::VecNum)

Computes the DR-CDaR of a portfolio returns vector x.

Arguments

  • x::VecNum: Portfolio returns vector.

Examples

julia
julia> DistributionallyRobustConditionalDrawdownatRisk()
DistributionallyRobustConditionalDrawdownatRisk
  settings ┼ RiskMeasureSettings
           │   scale ┼ Float64: 1.0
           │      ub ┼ nothing
           │     rke ┴ Bool: true
     alpha ┼ Float64: 0.05
         l ┼ Float64: 1.0
         r ┼ Float64: 0.02
         w ┴ nothing

Related

source
PortfolioOptimisers.factory Method
julia
factory(
    r::DistributionallyRobustConditionalDrawdownatRisk,
    pr::AbstractPriorResult,
    args...;
    kwargs...
) -> DistributionallyRobustConditionalDrawdownatRisk{RiskMeasureSettings{__T_scale, __T_ub, __T_rke}, <:Number, <:Number, <:Number} where {__T_scale, __T_ub, __T_rke}

Create an instance of DistributionallyRobustConditionalDrawdownatRisk by selecting observation weights from the risk-measure instance or falling back to the prior result.

Related

source
PortfolioOptimisers.RMCDaR Type
julia
const RMCDaR{T} = Union{...}

Parameterised union of ConditionalDrawdownatRisk and DistributionallyRobustConditionalDrawdownatRisk sharing the same observation-weight type parameter T.

Used for unified dispatch on CDaR computation methods.

Related

source
PortfolioOptimisers.RelativeConditionalDrawdownatRisk Type
julia
struct RelativeConditionalDrawdownatRisk{__T_settings, __T_alpha, __T_w} <: HierarchicalRiskMeasure

Represents the Relative Conditional Drawdown-at-Risk risk measure for hierarchical optimisation.

RelativeConditionalDrawdownatRisk computes the expected relative (compounded) drawdown given that the drawdown exceeds the Relative Drawdown-at-Risk at level alpha.

Mathematical definition

Define the compounded wealth process and relative drawdown series:

Ct=s=1t(1+xs),rdt=Ctmax0stCs10.

Where:

  • x: Portfolio returns vector T×1.

  • Ct: Compound wealth process at period t.

  • rdt0: Relative drawdown at period t.

The Relative CDaR is the CVaR of the relative drawdown series rd:

RCDaRα(x)=minν{ν+1αTt=1Tmax(rdtν,0)}.

Where:

  • RCDaRα(x): Relative Conditional Drawdown-at-Risk.

  • α: Significance level (left tail probability), α(0,1).

  • T: Number of observations.

  • rdt0: Relative drawdown at period t.

  • ν: Auxiliary variable (RDaR threshold).

Fields

  • settings: Risk measure settings.

  • alpha: Quantile level for the lower tail.

  • w: Optional observation weights vector observations × 1, or a concrete subtype of DynamicAbstractWeights. If nothing, the computation is unweighted.

Constructors

julia
RelativeConditionalDrawdownatRisk(;
    settings::HierarchicalRiskMeasureSettings = HierarchicalRiskMeasureSettings(),
    alpha::Number = 0.05,
    w::Option{<:ObsWeights} = nothing
) -> RelativeConditionalDrawdownatRisk

Keywords correspond to the struct's fields.

Validation

  • 0 < alpha < 1.

  • If w is not nothing: !isempty(w).

Functor

julia
(r::RelativeConditionalDrawdownatRisk)(x::VecNum)

Computes the Relative CDaR of a portfolio returns vector x.

Arguments

  • x::VecNum: Portfolio returns vector.

Examples

julia
julia> RelativeConditionalDrawdownatRisk()
RelativeConditionalDrawdownatRisk
  settings ┼ HierarchicalRiskMeasureSettings
           │   scale ┴ Float64: 1.0
     alpha ┼ Float64: 0.05
         w ┴ nothing

Related

source