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)
Fecha | ECO | PFBCOLOM | ISA | |
---|---|---|---|---|
<fct> | <int> | <int> | <int> | |
1 | 11/01/2008 | 1995 | 16800 | 7000 |
2 | 14/01/2008 | 1960 | 16380 | 6810 |
3 | 15/01/2008 | 1905 | 15880 | 6890 |
4 | 16/01/2008 | 1860 | 15980 | 6710 |
5 | 17/01/2008 | 1755 | 15900 | 6590 |
6 | 18/01/2008 | 1725 | 15340 | 6320 |
Fecha | ECO | PFBCOLOM | ISA | |
---|---|---|---|---|
<fct> | <int> | <int> | <int> | |
2811 | 22/07/2019 | 3030 | 41260 | 19000 |
2812 | 23/07/2019 | 3015 | 42020 | 19160 |
2813 | 24/07/2019 | 3000 | 41280 | 19300 |
2814 | 25/07/2019 | 3000 | 41300 | 19800 |
2815 | 26/07/2019 | 2980 | 41160 | 19200 |
2816 | 29/07/2019 | 2980 | 41300 | 18960 |
Matriz de precios.#
precios=datos[,-1]
precios = ts(precios)
Nombres de las acciones#
nombres = colnames(precios)
nombres
- 'ECO'
- 'PFBCOLOM'
- 'ISA'
Matriz de rendimientos.#
rendimientos = diff(log(precios))
Cantidad de acciones#
acciones = ncol(precios)
acciones
Cantidad de rendimientos#
numero_rendimientos = nrow(rendimientos)
numero_rendimientos
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
- 1122434.60465592
- 1419147.26751319
- 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