mvskPortfolio: Higher Moment Efficient Portfolios

Description Usage Arguments Details Author(s) References Examples

View source: R/mvskPortfolio.R

Description

function for determining risk-based portfolios that are mean-variance-skewness-kurtosis efficient.

Usage

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
mvskPortfolio(
  m1 = NULL,
  M2 = NULL,
  M3 = NULL,
  M4 = NULL,
  w0 = NULL,
  g = NULL,
  lb = NULL,
  ub = NULL,
  lin_eq = NULL,
  lin_eqC = NULL,
  nlin_eq = NULL,
  lin_ieq = NULL,
  lin_ieqC = NULL,
  nlin_ieq = NULL,
  href = NULL,
  kappa = NULL,
  relative = FALSE,
  param = NULL,
  options = list(),
  mompref = NULL
)

Arguments

m1

mean vector; not used if NULL

M2

covariance matrix

M3

coskewness matrix; not used if NULL

M4

cokurtosis matrix; not used if NULL

w0

weight of the benchmark portfolio / initial portfolio name, see details

g

vector with preferences for the moments, see details

lb

lower bound for the weights, default rep(0, p)

ub

upper bound for the weights, default rep(1, p)

lin_eq

equality constraints: eq w = eqC (should be matrix!), see details

lin_eqC

equality constraints: eq w = eqC, see details

nlin_eq

function with non-linear equality constraint (returns objective value and jacobian)

lin_ieq

inequality constraints: ieq w leq ieqC (should be matrix!)

lin_ieqC

inequality constraints: ieq w leq ieqC

nlin_ieq

function with non-linear inequality constraints (returns objective value and jacobian)

href

reference function to keep into account while tilting the portfolios (name or function)

kappa

vector of values indicating maximum deviation of the reference objective

relative

boolean indicating if kappa is absolute or relative

param

list with extra arguments for the href function

options

optimization options

mompref

direction of preference for the moments, defaults to higher mean and skewnes, lower variance and kurtosis

Details

All moments with NULL are ignored as tilting constraints. The default uses the most diversified portfolio of houeifaty & Coignard (2008) as initial portfolio. For unconstrained portfolio tilting, set kappa to 1, which allows 100 is g = (0, sigma_^2_w0, abs(phi_w0), psi_w0). Additional linearity and non-linearity constraints can be included in the optimization procedure with the arguments lin_eq, lin_eqC, nlin_eq, lin_ieq, lin_ieqC and nlin_ieq. The default includes a full investment constraint (sum of weights equal to 1), overriding lin_eq and lin_eqC removes the default constraint.

Author(s)

Dries Cornilly

References

Boudt, K., Cornilly, D., Van Holle, F., & Willems, J. (2020). Algorithmic portfolio tilting to harvest higher moment gains. Heliyon, 6(3).

Briec, W., Kerstens, K., & Jokung, O. (2007). Mean-variance-skewness portfolio performance gauging: a general shortage function and dual approach. Management science, 53(1), 135-149.

Choueifaty, Y., & Coignard, Y. (2008). Toward maximum diversification. Journal of Portfolio Management, 35(1), 40.

Examples

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# load data
library(PerformanceAnalytics)
data(edhec)
x <- edhec[, 1:5]

# estimate moments
m1 <- colMeans(x)
M2 <- cov(x)
M3 <- PerformanceAnalytics:::M3.MM(x, as.mat = FALSE)
M4 <- PerformanceAnalytics:::M4.MM(x, as.mat = FALSE)

# MVSK tilting - starting from "DR", tilting with margin on "DR"
resMVSK <- mvskPortfolio(m1 = m1, M2 = M2, M3 = M3, M4 = M4, w0 = "DR",
                         g = "mvsk", ub = rep(0.3, 5), href = "DR",
                         kappa = c(0, 0.01, 0.025, 0.05))

# show weights
barplot(resMVSK$w, beside = TRUE)

# VSK tiltin - starting from "DR", tilting with maximum tracking error
# volatility
resVSK <- mvskPortfolio(M2 = M2, M3 = M3, M4 = M4, w0 = "DR",
                        g = "mvsk", ub = rep(0.3, 5), href = "TEvol",
                        kappa = c(0, 0.001, 0.025))

# show weights
barplot(resVSK$w, beside = TRUE)

cdries/mvskPortfolios documentation built on Feb. 10, 2021, 7:31 p.m.