pkges<-c("pdfetch","tseries","tidyverse","forecast")
#install.packages(pkges)
lapply(pkges,"library",character.only=T)
## Warning: package 'pdfetch' was built under R version 3.6.3
## Warning: package 'tseries' was built under R version 3.6.3
## Registered S3 method overwritten by 'quantmod':
##   method            from
##   as.zoo.data.frame zoo
## Warning: package 'tidyverse' was built under R version 3.6.3
## -- Attaching packages --------------------------------------- tidyverse 1.3.0 --
## v ggplot2 3.3.1     v purrr   0.3.4
## v tibble  3.0.1     v dplyr   0.8.5
## v tidyr   1.1.0     v stringr 1.4.0
## v readr   1.3.1     v forcats 0.5.0
## Warning: package 'tibble' was built under R version 3.6.3
## Warning: package 'tidyr' was built under R version 3.6.3
## Warning: package 'readr' was built under R version 3.6.3
## Warning: package 'purrr' was built under R version 3.6.3
## Warning: package 'dplyr' was built under R version 3.6.3
## Warning: package 'stringr' was built under R version 3.6.3
## Warning: package 'forcats' was built under R version 3.6.3
## -- Conflicts ------------------------------------------ tidyverse_conflicts() --
## x dplyr::filter() masks stats::filter()
## x dplyr::lag()    masks stats::lag()
## Warning: package 'forecast' was built under R version 3.6.3
## [[1]]
## [1] "pdfetch"   "stats"     "graphics"  "grDevices" "utils"     "datasets" 
## [7] "methods"   "base"     
## 
## [[2]]
## [1] "tseries"   "pdfetch"   "stats"     "graphics"  "grDevices" "utils"    
## [7] "datasets"  "methods"   "base"     
## 
## [[3]]
##  [1] "forcats"   "stringr"   "dplyr"     "purrr"     "readr"     "tidyr"    
##  [7] "tibble"    "ggplot2"   "tidyverse" "tseries"   "pdfetch"   "stats"    
## [13] "graphics"  "grDevices" "utils"     "datasets"  "methods"   "base"     
## 
## [[4]]
##  [1] "forecast"  "forcats"   "stringr"   "dplyr"     "purrr"     "readr"    
##  [7] "tidyr"     "tibble"    "ggplot2"   "tidyverse" "tseries"   "pdfetch"  
## [13] "stats"     "graphics"  "grDevices" "utils"     "datasets"  "methods"  
## [19] "base"

#DATOS DE EXAS Exact SCIENCE

EXASdata <- pdfetch_YAHOO("EXAS",from = as.Date("2019-01-01"),to = as.Date("2020-01-01"), interval = '1d')

#USANDO LA FUNCION SUMMARY PARA OBTERNER LA SERIE DE DATOS ESTADISTICOS

summary(EXASdata)
##      Index              EXAS.open        EXAS.high         EXAS.low     
##  Min.   :2019-01-02   Min.   : 61.88   Min.   : 64.43   Min.   : 60.95  
##  1st Qu.:2019-04-02   1st Qu.: 87.55   1st Qu.: 89.57   1st Qu.: 85.92  
##  Median :2019-07-02   Median : 93.88   Median : 95.93   Median : 91.66  
##  Mean   :2019-07-02   Mean   : 97.02   Mean   : 98.80   Mean   : 95.10  
##  3rd Qu.:2019-10-01   3rd Qu.:109.75   3rd Qu.:111.81   3rd Qu.:107.50  
##  Max.   :2019-12-31   Max.   :122.83   Max.   :123.99   Max.   :120.40  
##    EXAS.close     EXAS.adjclose     EXAS.volume      
##  Min.   : 61.98   Min.   : 61.98   Min.   :  355400  
##  1st Qu.: 87.83   1st Qu.: 87.83   1st Qu.: 1201825  
##  Median : 93.83   Median : 93.83   Median : 1562900  
##  Mean   : 97.06   Mean   : 97.06   Mean   : 1838430  
##  3rd Qu.:108.81   3rd Qu.:108.81   3rd Qu.: 2090625  
##  Max.   :122.49   Max.   :122.49   Max.   :14692800

#UTILIZAREMOS LOS PRECIOS AJUSTADOS COREESPONDIENTES A LA QUINTA COLUMNA (CIERRE) TAMBIEN UTILIZAREMOS LA FUNCION HEAD, TAIL PARA OBTENER EL PRIMER Y ULTIMO DATO PARA LUEGO OBTENER NUESTRA SERIE DE TIEMPO

EXAS <- EXASdata[,5]
head(EXAS,1)
##            EXAS.adjclose
## 2019-01-02         64.14
tail(EXAS,1)
##            EXAS.adjclose
## 2019-12-31         92.48

#CREANDO NUESTRA SERIE DE TIEMPO

ts.EXAS <- ts(EXAS, start = c(2019,1), frequency = 365)
summary(ts.EXAS)
##  EXAS.adjclose   
##  Min.   : 61.98  
##  1st Qu.: 87.83  
##  Median : 93.83  
##  Mean   : 97.06  
##  3rd Qu.:108.81  
##  Max.   :122.49

#LUEGO HALLAREMOS LOS RETORNOS DISCRETOS Y CONTINUOS RESPECTIVAMENTE

tprecios <- length(ts.EXAS)
ret.dis <- numeric(length = tprecios)
for (i in 2:tprecios) {
  ret.dis[i] <- (ts.EXAS[i]/ts.EXAS[i - 1]) - 1
}
ts.plot(ret.dis)

#RETORNOS CONTINUOS

ret.con<-diff(log(ts.EXAS))
ts.plot(ret.con)

#MOVIMIENTO BROWNIANO GEOMETRICO

NUM DE SIMULACIONES: 10000

UTILIZAREMOS EL PRECIO INICIAL

t<-365
tseq <- 1:t
dt <- 1/t
mu<-mean(ret.con)
s<-sd(ret.con)
P0<-64.14
nsim<-10000
m <- matrix(ncol = nsim, nrow = t)
for (i in 1:nsim) {
  m[1,i] <- P0
  for (h in 2:t) {
    e <- rnorm(1)
    m[h, i]<- m[(h-1),i]*exp((mu-(s^2)/2)*dt+s*e*sqrt(dt))
  }
}

#GRAFICA DE LAS SIMULACIONES DE GBM

gbm_df <- as.data.frame(m) %>%
  mutate(ix = 1:nrow(m)) %>%
  pivot_longer(-ix, names_to = 'sim', values_to = 'price')

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

#VAR MONTECARLO -> alpha: 0.01

t<-365
tseq <- 1:t
dt <- 1/t
mu<-mean(ret.con)
s<-sd(ret.con)
P0<-64.14
nsim<-10000
m1 <- matrix(ncol = nsim, nrow = t)
for (i in 1:nsim) {
  m1[1,i] <- P0
  for (h in 2:t) {
    e1 <- rnorm(1)
    m1[h, i]<- m1[(h-1),i]*exp((mu-(s^2)/2)*dt+s*e1*sqrt(dt))
  }
}
gbm_df1 <- as.data.frame(m1) %>%
  mutate(ix = 1:nrow(m1)) %>%
  pivot_longer(-ix, names_to = 'sim', values_to = 'Precio')

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

VAR_99 <- numeric(length = nsim)
for(i in 1:nsim){
  sim.ts <- m1[, i]
  sim.R <- diff(log(sim.ts))
  sim.q <- quantile(sim.R, 0.01, na.rm = TRUE)
  sim.var <- exp(sim.q) - 1
  VAR_99[i]<-  sim.var
}
plot (density (VAR_99), main = "VaR 99%")

quantile(VAR_99,0.025)
##         2.5% 
## -0.003947643
quantile(VAR_99,0.975)
##        97.5% 
## -0.002888132
mean(VAR_99)
## [1] -0.003384331
sd(VAR_99)
## [1] 0.0002673521
mean_mon_99<-c(mean(VAR_99)*100000)
sd_mon_99<-c(sd(VAR_99)*100000)
quantile_mon_99_1<-quantile(VAR_99,0.025)*100000
quantile_mon_99_2<-quantile(VAR_99,0.975)*100000
mean_mon_99
## [1] -338.4331
sd_mon_99
## [1] 26.73521
quantile_mon_99_1
##      2.5% 
## -394.7643
quantile_mon_99_2
##     97.5% 
## -288.8132

#LA PERDIDA MEDIA ESPERADA AL 99% DE CONFIANZA ES 393.82

####VAR MONTECARLO -> alpha: 0.05

t<-365
tseq <- 1:t
dt <- 1/t
mu<-mean(ret.con)
s<-sd(ret.con)
P0<-64.14
nsim<-10000
m2 <- matrix(ncol = nsim, nrow = t)
for (i in 1:nsim) {
  m2[1,i] <- P0
  for (h in 2:t) {
    e2 <- rnorm(1)
    m2[h, i]<- m2[(h-1),i]*exp((mu-(s^2)/2)*dt+s*e2*sqrt(dt))
  }
}
gbm_df2 <- as.data.frame(m2) %>%
  mutate(ix = 1:nrow(m2)) %>%
  pivot_longer(-ix, names_to = 'sim', values_to = 'Precio')

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

VAR_95 <- numeric(length = nsim)
for(i in 1:nsim){
  sim.ts <- m2[, i]
  sim.R <- diff(log(sim.ts))
  sim.q <- quantile(sim.R, 0.05, na.rm = TRUE)
  sim.var <- exp(sim.q) - 1
  VAR_95[i] <-  sim.var
}
plot (density (VAR_95), main = "VaR 95%")

#OBTENIENDO LOS QUANTILES, MEDIA, DES. ESTANDAR

quantile(VAR_95,0.025)
##         2.5% 
## -0.002748879
quantile(VAR_95,0.975)
##        97.5% 
## -0.002120617
mean(VAR_95)
## [1] -0.002428639
sd(VAR_95)
## [1] 0.0001599658
mean_mon_95<-c(mean(VAR_99)*100000)
sd_mon_95<-c(sd(VAR_99)*100000)
quantile_mon_95_1<-quantile(VAR_95,0.025)*100000
quantile_mon_95_2<-quantile(VAR_95,0.975)*100000

#VAR MONTECARLO -> alpha: 0.1

t<-365
tseq <- 1:t
dt <- 1/t
mu<-mean(ret.con)
s<-sd(ret.con)
P0<-64.14
nsim<-10000
m3 <- matrix(ncol = nsim, nrow = t)
for (i in 1:nsim) {
  m3[1,i] <- P0
  for (h in 2:t) {
    e3 <- rnorm(1)
    m3[h, i]<- m3[(h-1),i]*exp((mu-(s^2)/2)*dt+s*e3*sqrt(dt))
  }
}
gbm_df3 <- as.data.frame(m3) %>%
  mutate(ix = 1:nrow(m3)) %>%
  pivot_longer(-ix, names_to = 'sim', values_to = 'Precio')

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

VAR_90 <- numeric(length = nsim)
for(i in 1:nsim){
  sim.ts <- m3[, i]
  sim.R <- diff(log(sim.ts))
  sim.q <- quantile(sim.R, 0.1, na.rm = TRUE)
  sim.var <- exp(sim.q) - 1
  VAR_90[i] <-  sim.var
}
plot (density (VAR_90), main = "VaR 90%")