Dow Jones Industrial Average, Inc, es un índice Bursátil, compuesto por 30 empresas no solo de la industria, sino también de sectores financieros e informáticos. En Yahoo Finance podemos encontrar su ticker como DJI.

Necesitaremos instalar algunos comandos, tales como:

require(quantmod)
## Loading required package: quantmod
## Loading required package: xts
## Loading required package: zoo
## 
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
## Loading required package: TTR
## Registered S3 method overwritten by 'quantmod':
##   method            from
##   as.zoo.data.frame zoo
## Version 0.4-0 included new data defaults. See ?getSymbols.
require(PerformanceAnalytics)
## Loading required package: PerformanceAnalytics
## 
## Attaching package: 'PerformanceAnalytics'
## The following object is masked from 'package:graphics':
## 
##     legend
require(ggplot2)
## Loading required package: ggplot2
require(tidyverse)
## Loading required package: tidyverse
## -- Attaching packages ------------------------------------------------------------------------------------------------ tidyverse 1.3.0 --
## v tibble  3.0.1     v dplyr   1.0.0
## v tidyr   1.1.0     v stringr 1.4.0
## v readr   1.3.1     v forcats 0.5.0
## v purrr   0.3.4
## -- Conflicts --------------------------------------------------------------------------------------------------- tidyverse_conflicts() --
## x dplyr::filter() masks stats::filter()
## x dplyr::first()  masks xts::first()
## x dplyr::lag()    masks stats::lag()
## x dplyr::last()   masks xts::last()
require(dplyr)

El comando getSymbols, nos permite extraer la base de datos de los precios al cierre ajustados del índice bursatil Dow Jones Industrial Average, Inc. (DJI)

require(quantmod)
getSymbols("^DJI",from="2019-01-01",to="2020-01-01")
## 'getSymbols' currently uses auto.assign=TRUE by default, but will
## use auto.assign=FALSE in 0.5-0. You will still be able to use
## 'loadSymbols' to automatically load data. getOption("getSymbols.env")
## and getOption("getSymbols.auto.assign") will still be checked for
## alternate defaults.
## 
## This message is shown once per session and may be disabled by setting 
## options("getSymbols.warning4.0"=FALSE). See ?getSymbols for details.
## [1] "^DJI"
DJI = DJI[,"DJI.Adjusted"]
head(DJI)
##            DJI.Adjusted
## 2019-01-02     23346.24
## 2019-01-03     22686.22
## 2019-01-04     23433.16
## 2019-01-07     23531.35
## 2019-01-08     23787.45
## 2019-01-09     23879.12

Gráficamos los precios de las acciones de cierre ajustados de DJI

plot(DJI)

En el ejercio indican que debemos calcular el valor de la media y desviación estándar de retornos continuos, es por ello que se usará la opción log. Finalmente graficaremos.

rDJI = Return.calculate(DJI, method="log")
plot(rDJI)

Definimos los parámetros

nsim=10000
date=365
mat.time = 1:date
inv.mat.time = 1/date
P.inicial = 28.54
median = mean(na.omit(rDJI))
sd=sd(na.omit(rDJI))

Risk at Value para \(\alpha = 0.01\)

Matriz donde guardaremos los valores de las simulaciones.

mat.0.01 = matrix(ncol = nsim, nrow = date)

Matriz para los valores del VaR

VaR.0.01 = numeric(length = nsim)

Simulación para \(\alpha = 0.01\)

for (i in 1:nsim) {
  mat.0.01[1,i] = P.inicial
  for (h in 2:date) {
    e <- rnorm(1)
    mat.0.01[h , i] = mat.0.01[(h - 1), i] * exp((median - (sd^2) / 2)* sd + sd * e * sqrt(inv.mat.time))
  } 
}

Gráficamos

Realizamos el gráfico de las simulaciones obtenidas de un Movimiento Browniano.

gbm_df <- as.data.frame(mat.0.01) %>%
  dplyr::mutate(ix=1:nrow(mat.0.01)) %>%
  tidyr::pivot_longer(-ix, names_to = 'Simulacion', values_to = 'Precio')

gbm_df %>%
  ggplot(aes(x=ix, y=Precio, color=Simulacion)) +
  geom_line() +
  theme(legend.position = 'none')

Ahora calculamos el VaR de cada simulación y guardamos el resultado en un vector de datos

for(i in 1:mat.0.01){
  vec <- mat.0.01[, i]
  sim.R <- diff(log(vec))
  sim.q <- quantile(sim.R, 0.01, na.rm = TRUE)
  sim.var <- exp(sim.q) - 1
  VaR.0.01[i] <-  sim.var
}
## Warning in 1:mat.0.01: numerical expression has 3650000 elements: only the first
## used

Finalmente nos solicitan el valor de la media de los VaR simulados:

mean(VaR.0.01)
## [1] -2.656714e-06

El valor de la desviación estándar de los VaR simulados:

sd(VaR.0.01)
## [1] 5.032497e-05

Asi también, nos piden graficar la distribución de los VaR simulados:

plot(density(VaR.0.01))

El gráfico muetra que los retornos tienen valores muy cercanos a cero, y se concentra alrededor de este valor. El gráfico de la curva de la distribución, determina que es asimétrica, ademas tiene una distribución negativa y leptocurtica

El percentil 0.025:

quantile(VaR.0.01,0.025)
## 2.5% 
##    0

El percentil 0.975:

quantile(VaR.0.01,0.975)
## 97.5% 
##     0

Risk at Value para \(\alpha = 0.05\)

Matriz donde guardaremos los valores de las simulaciones.

mat.0.05 = matrix(ncol = nsim, nrow = date)

Matriz para los valores del VaR

VaR.0.05 = numeric(length = nsim)

Simulación para \(\alpha = 0.05\)

for (i in 1:nsim) {
  mat.0.05[1,i] = P.inicial
  for (h in 2:date) {
    e <- rnorm(1)
    mat.0.05[h , i] = mat.0.05[(h - 1), i] * exp((median - (sd^2) / 2)* sd + sd * e * sqrt(inv.mat.time))
  } 
}

Gráficamos

Realizamos el gráfico de las simulaciones obtenidas de un Movimiento Browniano.

gbm_df <- as.data.frame(mat.0.05) %>%
  dplyr::mutate(ix=1:nrow(mat.0.05)) %>%
  tidyr::pivot_longer(-ix, names_to = 'Simulacion', values_to = 'Precio')

gbm_df %>%
  ggplot(aes(x=ix, y=Precio, color=Simulacion)) +
  geom_line() +
  theme(legend.position = 'none')

Ahora calculamos el VaR de cada simulación y guardamos el resultado en un vector de datos

for(i in 1:mat.0.05){
  vec <- mat.0.05[, i]
  sim.R <- diff(log(vec))
  sim.q <- quantile(sim.R, 0.05, na.rm = TRUE)
  sim.var <- exp(sim.q) - 1
  VaR.0.05[i] <-  sim.var
}
## Warning in 1:mat.0.05: numerical expression has 3650000 elements: only the first
## used

Finalmente nos solicitan el valor de la media de los VaR simulados:

mean(VaR.0.05)
## [1] -1.850911e-06

El valor de la desviación estándar de los VaR simulados:

sd(VaR.0.05)
## [1] 3.499748e-05

Asi también, nos piden graficar la distribución de los VaR simulados:

plot(density(VaR.0.05))

El gráfico muetra que los retornos tienen valores muy cercanos a cero, y se concentra alrededor de este valor. El gráfico de la curva de la distribución, determina que es asimétrica, ademas tiene una distribución negativa y leptocurtica

El percentil 0.025:

quantile(VaR.0.05,0.025)
## 2.5% 
##    0

El percentil 0.975:

quantile(VaR.0.05,0.975)
## 97.5% 
##     0

Risk at Value para \(\alpha = 0.1\)

Matriz donde guardaremos los valores de las simulaciones.

mat.0.1 = matrix(ncol = nsim, nrow = date)

Matriz para los valores del VaR

VaR.0.1 = numeric(length = nsim)

Simulación para \(\alpha = 0.1\)

for (i in 1:nsim) {
  mat.0.1[1,i] = P.inicial
  for (h in 2:date) {
    e <- rnorm(1)
    mat.0.1[h , i] = mat.0.1[(h - 1), i] * exp((median - (sd^2) / 2)* sd + sd * e * sqrt(inv.mat.time))
  } 
}

Gráficamos

Realizamos el gráfico de las simulaciones obtenidas de un Movimiento Browniano.

gbm_df <- as.data.frame(mat.0.1) %>%
  dplyr::mutate(ix=1:nrow(mat.0.1)) %>%
  tidyr::pivot_longer(-ix, names_to = 'Simulacion', values_to = 'Precio')

gbm_df %>%
  ggplot(aes(x=ix, y=Precio, color=Simulacion)) +
  geom_line() +
  theme(legend.position = 'none')

Ahora calculamos el VaR de cada simulación y guardamos el resultado en un vector de datos

for(i in 1:mat.0.1){
  vec <- mat.0.1[, i]
  sim.R <- diff(log(vec))
  sim.q <- quantile(sim.R, 0.1, na.rm = TRUE)
  sim.var <- exp(sim.q) - 1
  VaR.0.05[i] <-  sim.var
}
## Warning in 1:mat.0.1: numerical expression has 3650000 elements: only the first
## used

Finalmente nos solicitan el valor de la media de los VaR simulados:

mean(VaR.0.1)
## [1] 0

El valor de la desviación estándar de los VaR simulados:

sd(VaR.0.1)
## [1] 0

Asi también, nos piden graficar la distribución de los VaR simulados:

plot(density(VaR.0.1))

El gráfico muetra que los retornos tienen valores muy cercanos a cero, y se concentra alrededor de este valor. El gráfico de la curva de la distribución, determina que es asimétrica, ademas tiene una distribución negativa y leptocurtica

El percentil 0.025:

quantile(VaR.0.1,0.025)
## 2.5% 
##    0

El percentil 0.975:

quantile(VaR.0.1,0.975)
## 97.5% 
##     0

Al representar el VaR una medida d eriesgo de mercado para un activo o una cartera, esta nos indica la máxima pérdida que se pueda experimentar

Para un valor de alfa = 0.01 en valores monetarios es de: el VaR es de -2.57559*10-6

Para un valor de alfa = 0.05 en valores monetarios es de: el VaR es de -1.84188*10-6

Para un valor de alfa = 0.1 en valores monetarios es de: el VaR es de 0

El valor toma estos valores explicados por su asimetría, y su distribución negativa qu se concentra alrededor del valor cero, en valores monetarios estos valores son muy bajos.