CVaR

Expected Shortfall (ES): también llamado VaR Condicional (CVaR – conditional VaR), tail conditional expectation, conditional loss o expected tail loss.

Indica la pérdida potencial más allá del VaR. El Expected Shortfall o CVaR es un promedio de la cola de las pérdidas (tail loss).

Al igual que el VaR el CVaR es una función de dos parámetros: el horizonte de tiempo y el nivel de confianza.

Importar datos.

datos = read.csv("Tres acciones.csv", sep = ";", header = T)
head(datos)
tail(datos)
A data.frame: 6 × 4
FechaECOPFBCOLOMISA
<fct><int><int><int>
111/01/20081995168007000
214/01/20081960163806810
315/01/20081905158806890
416/01/20081860159806710
517/01/20081755159006590
618/01/20081725153406320
A data.frame: 6 × 4
FechaECOPFBCOLOMISA
<fct><int><int><int>
281122/07/201930304126019000
281223/07/201930154202019160
281324/07/201930004128019300
281425/07/201930004130019800
281526/07/201929804116019200
281629/07/201929804130018960

Matriz de precios.

precios=datos[,-1]
precios = ts(precios)

Nombres de las acciones

nombres = colnames(precios)
nombres
  1. 'ECO'
  2. 'PFBCOLOM'
  3. 'ISA'

Matriz de rendimientos.

rendimientos = diff(log(precios))

Cantidad de acciones

acciones = ncol(precios)
acciones
3

Cantidad de rendimientos

numero_rendimientos = nrow(rendimientos)
numero_rendimientos
2815

CVaR

CVaR diario con un nivel de confianza del 95% NC = 0.95 #### Proporciones de inversión. proporciones=c(0.25, 0.4, 0.35)

ECO: 25%

PFBCOLOM: 40%

ISA: 35%

NC = 0.95
proporciones = c(0.25, 0.4, 0.35)
valor_portafolio = 100000000
valor_mercado_acciones = proporciones*valor_portafolio

El CVaR es el promedio de los valores menores de la cola de la izquierda de la distribución empírica de los rendimientos. Con un nivel de confianza del 95%, el CVaR es el promedio del 5% de los rendimientos más bajos.

Se tienen 2815 rendimientos por cada acción, el 5% de los rendimientos representa 140,75 rendimientos, se debe escoger el entero menor, es decir, el rendimiento 140 entre los rendimientos más bajos será el VaR en porcentaje y el CVaR en porcentaje será el promedio de estos 140 rendimientos.

Con sort(rendimientos[,i], decreasing = T) se está ordenando de mayor a menor valor cada columna de la matriz rendimientos. nrow(rendimientos)*(1 - NC) calcula la cantidad de rendimientos que representa el 5% del total de los rendimientos y la función floor() aproxima al entero menor. En este caso se tiene el valor de 140.

tail() extrae los valores de la parte inferior de cada columna. Dentro de la función tail() se indicó que extraiga los 140 rendimientos más bajos. De los valores que extrae, el VaR en porcentaje corresponde al primer valor y el CVaR en porcentaje es el promedio de los 140 rendimientos más bajos. Luego, al multiplicar por valor_mercado_acciones se obtiene el resultado en términos monetarios.

El CVaR siempre es mayor que el VaR porque tiene en cuenta todos los valores de la cola y obtiene un promedio.

CVaR = vector()

for(i in 1:acciones){

  CVaR[i] = abs(mean(tail(sort(rendimientos[,i], decreasing = T), floor(nrow(rendimientos)*(1 - NC))))*valor_mercado_acciones[i])
}
CVaR
  1. 1122434.60465592
  2. 1419147.26751319
  3. 1293658.09899953

Rendimientos del portafolio de inversión

rendimientos_portafolio = vector()

for(i in 1:numero_rendimientos){

  rendimientos_portafolio[i] = sum(rendimientos[i,]*proporciones)
}

CVaR portafolio de inversión

CVaR_portafolio = abs(mean(tail(sort(rendimientos_portafolio,decreasing = T), floor(nrow(rendimientos)*(1 - NC))))*valor_portafolio)
CVaR_portafolio
2841126.68189997