Skip to content
13

Negative Skewness

PortfolioOptimisers.NSkeFormulations Type
julia
const NSkeFormulations = Union{<:NSkeQuadFormulations, <:SOCRiskExpr}

Union of valid optimisation formulations for the NegativeSkewness risk measure.

Related

source
PortfolioOptimisers.NegativeSkewness Type
julia
struct NegativeSkewness{__T_settings, __T_mp, __T_sk, __T_V, __T_alg, __T_window} <: RiskMeasure

Represents the Negative Skewness risk measure.

NegativeSkewness quantifies the portfolio's exposure to negative asymmetry in returns by computing a quadratic or SOC (second-order cone) form of the coskewness matrix. It penalises portfolio constructions that exhibit heavy left-tail behaviour.

Mathematical definition

Let w be the portfolio weight vector and V the negative semi-definite coskewness matrix (spectral decomposition of the negative part of the sample coskewness tensor). The Negative Skewness risk measure is:

NSke(w)={wVw(SOC formulation)wVw(Quadratic formulation).

Where:

  • NSke(w): Negative Skewness risk measure.

  • w: Portfolio weights vector N×1.

  • V: Negative semi-definite coskewness matrix (spectral decomposition of the negative part of the sample coskewness tensor).

Fields

  • settings: Risk measure settings.

  • mp: Matrix processing estimator.

  • sk: Coskewness matrix features × features^2.

  • V: Sum of the negative spectral slices of the cokurtosis matrix features × features.

  • alg: Risk measure optimisation formulation algorithm.

  • window: Observation window.

Constructors

julia
NegativeSkewness(;
    settings::RiskMeasureSettings = RiskMeasureSettings(),
    mp::AbstractMatrixProcessingEstimator = MatrixProcessing(),
    sk::Option{<:MatNum} = nothing,
    V::Option{<:MatNum} = nothing,
    alg::NSkeFormulations = SOCRiskExpr(),
    window::Option{<:Int_VecInt} = nothing
) -> NegativeSkewness

Keywords correspond to the struct's fields.

Validation

Functor

julia
(r::NegativeSkewness)(w::VecNum)

Computes the Negative Skewness risk of a portfolio weight vector w.

Arguments

  • w::VecNum: Portfolio weights vector.

Examples

julia
julia> NegativeSkewness()
NegativeSkewness
  settings ┼ RiskMeasureSettings
           │   scale ┼ Float64: 1.0
           │      ub ┼ nothing
           │     rke ┴ Bool: true
        mp ┼ MatrixProcessing
           │     pdm ┼ Posdef
           │         │      alg ┼ UnionAll: NearestCorrelationMatrix.Newton
           │         │   kwargs ┴ @NamedTuple{}: NamedTuple()
           │      dn ┼ nothing
           │      dt ┼ nothing
           │     alg ┼ nothing
           │   order ┴ NTuple{4, Symbol}: (:pdm, :dn, :dt, :alg)
        sk ┼ nothing
         V ┼ nothing
       alg ┼ SOCRiskExpr()
    window ┴ nothing

Related

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

Create an instance of NegativeSkewness by selecting the coskewness matrix and spectral decomposition matrix from the risk-measure instance or falling back to a HighOrderPrior result.

Related

source
PortfolioOptimisers.factory Method
julia
factory(
    r::NegativeSkewness,
    ::LowOrderPrior,
    args...;
    kwargs...
) -> NegativeSkewness

Return the NegativeSkewness risk measure r unchanged.

Coskewness is not available in LowOrderPrior results; the existing risk measure is used as-is.

Related

source