Negative Skewness
PortfolioOptimisers.NSkeFormulations Type
const NSkeFormulations = Union{<:NSkeQuadFormulations, <:SOCRiskExpr}Union of valid optimisation formulations for the NegativeSkewness risk measure.
Related
sourcePortfolioOptimisers.NegativeSkewness Type
struct NegativeSkewness{__T_settings, __T_mp, __T_sk, __T_V, __T_alg, __T_window} <: RiskMeasureRepresents 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
Where:
: Negative Skewness risk measure. : Portfolio weights vector . : 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 matrixfeatures × features^2.V: Sum of the negative spectral slices of the cokurtosis matrixfeatures × features.alg: Risk measure optimisation formulation algorithm.window: Observation window.
Constructors
NegativeSkewness(;
settings::RiskMeasureSettings = RiskMeasureSettings(),
mp::AbstractMatrixProcessingEstimator = MatrixProcessing(),
sk::Option{<:MatNum} = nothing,
V::Option{<:MatNum} = nothing,
alg::NSkeFormulations = SOCRiskExpr(),
window::Option{<:Int_VecInt} = nothing
) -> NegativeSkewnessKeywords correspond to the struct's fields.
Validation
If
skorVis provided, both must be provided, non-empty, withsize(sk, 1)^2 == size(sk, 2)andVsquare.windowis validated withassert_nonempty_nonneg_finite_val.
Functor
(r::NegativeSkewness)(w::VecNum)Computes the Negative Skewness risk of a portfolio weight vector w.
Arguments
w::VecNum: Portfolio weights vector.
Examples
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 ┴ nothingRelated
sourcePortfolioOptimisers.factory Method
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
sourcePortfolioOptimisers.factory Method
factory(
r::NegativeSkewness,
::LowOrderPrior,
args...;
kwargs...
) -> NegativeSkewnessReturn the NegativeSkewness risk measure r unchanged.
Coskewness is not available in LowOrderPrior results; the existing risk measure is used as-is.
Related
source