Se define un conjunto de datos que contienen los nombres:“pdfetch”,“tseries”,“tidyverse”,“forecast”, que luego son installados y habilitados con sus funciones correspondientes.
## [[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"
Es importa datos de yahoo finance mediante pdfetch_YAHOO (el pdftech previamente instalado) de la empresa Energy Services Holdings (KLXE) desde el 01/01/2019 hasta el 01/01/2020, para ello definicermos nuestra base de datos como KLXEdata, posteriormente vamos a crear la serie de tiempo con la data importada con la funcion TS para la columna KLXE.close de nuestra base de datos desde el 01/2019, esto para su postior analisis.
KLXEdata <- pdfetch_YAHOO("KLXE",from = as.Date("2019-01-01"),to = as.Date("2020-01-01"), interval = '1d') #DATOS DE Energy Services Holdings
tsKLXE <- ts(KLXEdata$`KLXE.close`,start = c(2019,1),frequency=356.25)
Para el calculo de retornos discretos y continuos se ejecuta las diferencias mendiante la funcion “diff” a la serite de tiempo creada con anterioridad tsKLXE, para el retorno continuo se utiliza la funcion de logaritmos “log”. Graficamos mediante el comando “plot” a la serie discreta y logaritmica.
d_KLXE <- diff(tsKLXE)/tsKLXE[-length(tsKLXE)]
plot(d_KLXE)
l_KLXE<-diff(log(tsKLXE))
plot(l_KLXE)
Las funciones para el calculo de media, varianza y desviacion estandar utilizadas son mean, var, sd; los resultados obtenidos son -0.005315146, 0.002492259,0.04992253, respectivamente. Graficamos un histograma de la serite de tiempo continua analizada.
De lo obtenido podemos ver que no existe una distribucion normal visual, su varianza es menor y desviacion estanda tiene un comportamiento mas volatil que la varianza.
#Media
mu<-mean(l_KLXE)
mu
## [1] -0.005315146
#Varianza
s2<-var(l_KLXE)
s2
## KLXE.close
## KLXE.close 0.002492259
#Desviacion Estandar
s<-sd(l_KLXE)
s
## [1] 0.04992253
hist(l_KLXE)
Para realizar el analisis decriptivo creamos un histograma de los retornos continuos y mediante la funcion de lineas “lines” veremos el comportamiento de su densidad,luego de ellos haremos una curva normal para su comparacion.
La distribucion de los retornos continuos de la serie muestra un comportamiento normal visualmente, lo que en primero momento nos arrojaria que sus resultados cercanos a la normalidad de la serie.
x<-seq(-0.1,0.1,by=0.01)
hist(
l_KLXE,prob=TRUE,ylim=c(0,20),xlim = c(-0.1,0.1),breaks = 50,col = "blue",
main = c("Histograma de los retornos"),
xlab = expression(r==ln(P[t]/P[t-1])),
ylab=c("Densidad"),
)
lines(density(l_KLXE),lwd=1.5,lty=2)
curve(dnorm(x,mean=mu,sd=s),lwd=2,lty=2,col="red",add = T)
Se realizaran los siguientes test de normalidad, Spahiro-Wilk ,Kolmogorov-Smirnov, y el test de curtosis Jarque-Bera.
Spahiro-Wilk, nos indica un pvalue menor al 0.05 de significancia, lo que indica que la serie no es normal.
Kolmogorov-Smirnov, nos muestra tambien un pvalue menos al nivel de significancia por lo que se se rechaza la hipotesis nula de normalidad.
Jarque-Bera, tiene un pvalue es menor al 0.05 para aceptar la hipotesis nula, de simetria, por lo que la serie es asimetrica y tampoco tiende a una normal.
shapiro.test(l_KLXE)
##
## Shapiro-Wilk normality test
##
## data: l_KLXE
## W = 0.87652, p-value = 0.0000000000002199
ks.test(l_KLXE,"pnorm", mean=mu, sd=s)
## Warning in ks.test(l_KLXE, "pnorm", mean = mu, sd = s): ties should not be
## present for the Kolmogorov-Smirnov test
##
## One-sample Kolmogorov-Smirnov test
##
## data: l_KLXE
## D = 0.10275, p-value = 0.009983
## alternative hypothesis: two-sided
jarque.bera.test(l_KLXE)
##
## Jarque Bera Test
##
## data: l_KLXE
## X-squared = 990.16, df = 2, p-value < 0.00000000000000022
A - Calculo de VAR con un nivel de significancia de 0.01, 0.05 y 0.1 para una cartera de 100 000.
W<-100000
alpha <- 0.01
q1 <- quantile(x=l_KLXE, alpha)
mean(exp(q1)-1)
## [1] -0.1233758
VAR1 <- W*(exp(q1)-1)
VAR1
## 1%
## -12337.58
W<-100000
alpha <- 0.05
q1 <- quantile(x=l_KLXE, alpha)
mean(exp(q1)-1)
## [1] -0.07060856
VAR1 <- W*(exp(q1)-1)
VAR1
## 5%
## -7060.856
W<-100000
alpha <- 0.1
q1 <- quantile(x=l_KLXE, alpha)
mean(exp(q1)-1)
## [1] -0.05866667
VAR1 <- W*(exp(q1)-1)
VAR1
## 10%
## -5866.667
B - Calculo de VAR asumiendo distribucion normal.
La perdida seria de -0.1214523 al 10%.
set.seed(1000)
VARp<-qnorm(0.01,mean = mu,sd = s,lower.tail = T);VARp
## [1] -0.1214523
#En términos discretos
exp(VARp)-1
## [1] -0.1143667
VARp
## [1] -0.1214523
C - VAR Montecarlo
Para desarrolar el VAR Montercarlo primero se ha establecido la cantidad de simulaciones, 10 000, posterimente se establece la normalidad de la serie discreta en terminos monetarios,
VAR.mc <- numeric()
for (i in 1:10000) {
changes <- rnorm(length(l_KLXE),mean=1+mu,sd=s)
sim.ts <- cumprod(c(as.numeric(tsKLXE[1]),changes))
sim.R <- diff(log(sim.ts))
sim.q <- quantile(sim.R,0.01,na.rm = T)
sim.VAR <- exp(sim.q)-1
VAR.mc[i] <- sim.VAR
}
VAR.mc[i]
## [1] -0.1284402
mean(VAR.mc)
## [1] -0.1175676
sd(VAR.mc)
## [1] 0.01057643
plot(density(VAR.mc))
quantile(VAR.mc,0.025)
## 2.5%
## -0.1398959
quantile(VAR.mc,0.975)
## 97.5%
## -0.09845262
Los resultados nos dan que la suma de los coeficientes a0 0.00010425, a0 0.00010425 y b1 0.81961200 no son mayores que 1, lo que significa que nuestro proceso es estacionario y no es volatil.
El Box-Ljung test nos nuestra la independencia de la variables, al ser mayor a 0.05 signifca que las variables son independientes.
Retornos <- diff(log(tsKLXE))
Retornos <- na.omit(Retornos)
plot.ts(Retornos)
ts.garch <-garch(Retornos,c(1,1))
##
## ***** ESTIMATION WITH ANALYTICAL GRADIENT *****
##
##
## I INITIAL X(I) D(I)
##
## 1 2.243033e-03 1.000e+00
## 2 5.000000e-02 1.000e+00
## 3 5.000000e-02 1.000e+00
##
## IT NF F RELDF PRELDF RELDX STPPAR D*STEP NPRELDF
## 0 1 -6.316e+02
## 1 6 -6.320e+02 6.29e-04 8.39e-04 1.2e-03 3.9e+07 1.2e-04 1.63e+04
## 2 7 -6.321e+02 1.58e-04 1.93e-04 1.1e-03 2.0e+00 1.2e-04 7.38e+00
## 3 8 -6.321e+02 2.48e-05 2.56e-05 1.1e-03 2.0e+00 1.2e-04 7.27e+00
## 4 13 -6.356e+02 5.53e-03 9.00e-03 3.7e-01 2.0e+00 6.0e-02 7.19e+00
## 5 14 -6.366e+02 1.47e-03 1.70e-03 2.7e-01 2.0e+00 6.0e-02 1.73e-01
## 6 16 -6.379e+02 2.00e-03 3.06e-03 3.8e-01 1.9e+00 1.4e-01 1.07e-01
## 7 19 -6.498e+02 1.84e-02 5.68e-03 5.3e-01 0.0e+00 5.7e-01 5.69e-03
## 8 24 -6.514e+02 2.54e-03 3.08e-03 2.0e-05 8.9e+00 3.2e-05 1.39e-02
## 9 25 -6.516e+02 2.84e-04 8.60e-04 2.0e-05 2.0e+00 3.2e-05 8.87e-02
## 10 26 -6.518e+02 2.54e-04 3.28e-04 1.7e-05 2.0e+00 3.2e-05 2.02e-01
## 11 27 -6.518e+02 1.19e-05 1.18e-05 1.9e-05 2.0e+00 3.2e-05 1.80e-01
## 12 33 -6.524e+02 9.82e-04 1.92e-03 1.6e-02 2.0e+00 2.6e-02 1.75e-01
## 13 34 -6.526e+02 1.75e-04 1.03e-04 7.3e-03 0.0e+00 1.3e-02 1.03e-04
## 14 35 -6.526e+02 1.27e-04 1.57e-04 1.6e-02 0.0e+00 3.0e-02 1.57e-04
## 15 36 -6.526e+02 1.17e-05 1.43e-05 3.2e-03 0.0e+00 5.5e-03 1.43e-05
## 16 37 -6.526e+02 2.55e-07 3.39e-07 5.7e-04 0.0e+00 1.2e-03 3.39e-07
## 17 48 -6.526e+02 -8.71e-15 2.00e-15 1.4e-14 1.3e+06 2.3e-14 7.00e-09
##
## ***** FALSE CONVERGENCE *****
##
## FUNCTION -6.526468e+02 RELDX 1.387e-14
## FUNC. EVALS 48 GRAD. EVALS 17
## PRELDF 2.002e-15 NPRELDF 7.005e-09
##
## I FINAL X(I) D(I) G(I)
##
## 1 1.042465e-04 1.000e+00 5.747e+01
## 2 1.542142e-01 1.000e+00 4.588e-02
## 3 8.196120e-01 1.000e+00 1.127e-02
summary(ts.garch)
##
## Call:
## garch(x = Retornos, order = c(1, 1))
##
## Model:
## GARCH(1,1)
##
## Residuals:
## Min 1Q Median 3Q Max
## -4.58749 -0.61118 -0.03322 0.42640 4.83511
##
## Coefficient(s):
## Estimate Std. Error t value Pr(>|t|)
## a0 0.00010425 0.00002886 3.612 0.000304 ***
## a1 0.15421419 0.03319426 4.646 0.00000339 ***
## b1 0.81961200 0.03094469 26.486 < 0.0000000000000002 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Diagnostic Tests:
## Jarque Bera Test
##
## data: Residuals
## X-squared = 195.72, df = 2, p-value < 0.00000000000000022
##
##
## Box-Ljung test
##
## data: Squared.Residuals
## X-squared = 0.095572, df = 1, p-value = 0.7572