Si se define el VaR como un cuantil de la distribución de los distribución de los rendimientos de la cartera en torno a la media de esos rendimientos, entonces la cartera de mínima varianza es lo que se busca minimiza la volatilidad en torno a la media, sea cual sea esta media. Cuando los rendimientos son conjuntamente normal, la maximización del VaR, tal como se acaba de definir, hace lo mismo.
En cuanto a mi segundo comentario: los procedimientos numéricos para el VaR suelen maximizar directamente una estadística de orden dada en una muestra de los rendimientos de la cartera. Pero entonces no hay garantía que en la muestra la cartera óptima de VaR sea la misma cartera óptima de VaR sea la misma que la cartera de varianza mínima. Por lo tanto, para probar un procedimiento numérico conocer la verdadera distribución y generar datos a partir de ella puede no ser suficiente. Ejemplo (utilizando R):
Creo 2000 escenarios para 10 activos; cada uno puede tener un peso entre 0 y 25%. Los rendimientos utilizan rendimientos medios ridículamente altos de manera que la distribución se aleja de cero. cero.
library("NMOF") ## https://github.com/enricoschumann/NMOF
library("neighbours") ## https://github.com/enricoschumann/neighbours
set.seed(32923)
## create random data
na <- 10 ## number of assets
ns <- 2000 ## number of scenarios
k <- ceiling(ns*0.1) ## order statistic to maximise
R <- randomReturns(na = na, ns = ns,
mean = runif(na, 200/100/255, 300/100/255),
sd = runif(na, 0.005, 0.02),
rho = 0.6)
## minimum-variance solution
x.qp <- minvar(cov(R), wmin = 0, wmax = 0.25)
La optimización del VaR. El algoritmo que utilizo minimiza, por lo que pongo un menos delante del VaR.
### 1) objective function
of_var <- function(x, R, k, ...)
-(sort(R %*% x, partial = k)[k] - sum(R %*% x)/nrow(R))
### 2) optimisation with Threshold Accepting
x.ta <- TAopt(
OF = of_var, ## SETTINGS
list(nI = 20000, ### number of iterations
neighbour = neighbourfun( ### neighbourhood function
min = 0,
max = 0.25,
stepsize = 1/100),
x0 = rep(1/na, na) ### initial solution: equal weights
),
R = R, k = k)$xbest
Podemos comparar las carteras resultantes y sus rendimientos y sus distribuciones: las carteras son muy similares.
## compare weights
data.frame(MV = round(100*x.qp, 2),
VaR = round(100*x.ta, 2))
## compare returns distributions under given sample
plot(ecdf(R %*% rep(1/na, na)),
main = "distribution of portfolio returns")
lines(ecdf(R %*% x.qp), col = "blue")
lines(ecdf(R %*% x.ta), col = "darkgreen")
Por último, evalúo la función objetivo VaR en la cartera de de mínima varianza y en la cartera de mínimo VaR.
of_var(rep(1/na, na), R, k) ## equal weight
## [1] 0.01316127
of_var(x.qp, R, k) ## minimum variance
## [1] 0.008222392
of_var(x.ta, R, k) ## minimum VaR
## [1] 0.008178637
Como puede ver, la aceptación del umbral encontró una cartera que proporciona una pequeña ventaja sobre la cartera de mínima varianza en esta muestra en particular. (Esto probablemente podría ser mejorado, pero sólo sirve para hacer el punto aquí). En la verdadera distribución, ambas carteras deberían ser iguales.
También se puede definir el VaR como un cuantil de la distribución de los rendimientos sin centrarlo. No se puede maximizar cualquier cuantil de la distribución de de la distribución de los rendimientos. Piense en la mediana: si puede utilizar apalancamiento y la cartera tiene una rentabilidad positiva, se puede puede aumentar la mediana (que es lo mismo que la media en la distribución gaussiana) sin límite. Así que es mejor definir el VaR como un cuantil inferior. cuantil inferior. Maximizarlo es, en un mundo gaussiano gaussiana, equivale a maximizar
$$\mu'x - \lambda \sqrt{x' \Sigma x}$$
en el que $\lambda$ es un multiplicador apropiado para la desviación estándar, como por ejemplo 1.645
para el VaR del 5%:
> qnorm(0.05)
## [1] -1.644854
Este modelo no debería plantear muchas dificultades a un solucionador numérico numérico. (Para la mediana, $\lambda$ sería cero).