Modelos GARCH.¿Qué son los Modelos GARCH?

💚 Los Modelos GARCH son un tipo de modelo econométricos, usados principalmente para la modelización de la volatilidad de las series financieras. 

👌 Su principal objetivo es evitar la limitaciones que tiene el uso de la varianza tradicional como medida de riesgo(volatilidad). 

En los Modelos GARCH encontramos una nueva forma de cálculo de la volatilidad donde la varianza condicional depende de las observaciones pasadas. 

En el siguiente vídeo tutorial explico algunos ejemplos y paquetes que se pueden usar en R studio para modelizar con GARCH. volatilidad. También puedes copiar el código usado justo debajo.

Codigo R

 

### VÍDEO MODELOS GARCH


#(MOdelos de Autoregresivos de HEterocedasticidad Condicional)

# Buscan realizar una modelacion de la volatilidad(varianza),en la
# cuál ésta dependerá de sus observaciones pasadas
# La volatilidad no será la volatilidad clásica sino que tendremos una
# nueva forma de calcularla y ver como se comporta

 

#1. Surgen para ilimimar las limitaciones de la varianza como indicador de volatilidad

#2. Modelos Garch como su nombre indican,se basan en que la estructura
# de la varianza puede ser autorregresiva y puede estar autocorrelacionada

# Por tanto los valores del presente pueden depender del pasado.


#file:///C:/Users/Victor-PC/Documents

tabla1<-read.table(«C:/Users/Victor-PC/Documents/divisasmulti15M.txt»,header=T,sep=»»)


tabla<-tabla1[(nrow(tabla1)-1000):nrow(tabla1),]

################################################3

library(«quantmod»)
library(«tseries»)
library(«fImport»)

#install.packages(«tseries»)
library(tseries)
#install.packages(«forecast»)
library(forecast)
#install.packages(«TSA»)
library(TSA)

library(quantmod)

library(lmtest)

 

 

##VENTANA DE TIEMPO PARA DESVIACIONES


AUDUSD<- tabla$AUDUSD_my #audusd

rAud<-na.omit(returns(AUDUSD))*100

plot(rAud,type=»l»)
sd(rAud)
var(rAud)

hist(rAud)

 

vent<- 50
vent2<- vent-1


varianza=c()
for(i in vent:length(rAud))
{f=var(rAud[(i-vent2):i])
varianza[i]=(f)}

plot(varianza,type=»l»)

y<-rAud

STDM=c()
for(i in vent:length(y))
{f=sd(y[(i-vent2):i])
STDM[i]=(f)}
STDM
STDM2<-STDM*2

MM=c()
for(i in vent:length(y))
{f=mean(y[(i-vent2):i])
MM[i]=(f)}
MM

#desviacion típica

#sd(na.omit(y))
#2*sd(na.omit(y))

sd1= MM+ STDM
sd1
sd11= MM-STDM
sd11
sd2<-MM+STDM2
sd22<-MM-STDM2


plot(rAud,type=»l»)
lines(MM, col=»blue»)
lines(sd11, col=»green»)
lines(sd1,col=»green»)
lines(sd2,col=»red»)
lines(sd22,col=»red»)

####################################
######### MODELOS GARCH ############

#install.packages(«fGarch»)
library(fGarch)
library(rugarch)


AoveSem<-AUDUSD

plot(AoveSem,type=»l»)
AOVEvol<-na.omit(returns(AoveSem))*100 ### Retornos
plot(AOVEvol,type=»l»)

#?returns

#GARCH ESTANDAR (1,1)

AOVEgarch <- garchFit(~ garch(1,1),cond.dist=»norm», data = (AOVEvol),include.mean = FALSE, trace = FALSE)


### Cosas que se pueden Optimizar = 1. (p,q) y 2. Distribución


#AOVEgarch <- garchFit(~ garch(1,1),cond.dist=»norm», data = (AOVEvol), trace = FALSE)

AOVEgarch
summary(AOVEgarch)
plot(AOVEgarch)

?garchFit

vc <- AOVEgarch@h.t ## variación Condicional
plot(vc,type=»l»)

SD<-AOVEgarch@sigma.t # Desviación estándar condicional
plot(SD,type=»l»)
MediaSD<- mean(SD)
abline( MediaSD,0,col=»red»)

Residuos<- AOVEgarch@residuals #residuos
plot(Residuos,type=»l»)


#Comp<-cbind(AOVEvol,Residuos)

 

### PREDICCIÓN CON GARCH


fcst<-(predict(AOVEgarch,n.ahead=10))
fcst
plot(fcst$standardDeviation)
abline(MediaSD,0,col=»red»)

 


### OTRA FORMA CON tseries

?garch

 

fit<-garch(AOVEvol,order=c(1,1))
fit
coef(fit) ### Coeficientes

 

#### Rugarch para Garch y SImulaciones


library(rugarch)

#?ugarchspec

gspec.ru <- ugarchspec(variance.model = list(model = «sGARCH», garchOrder = c(1, 1)),mean.model=list(
armaOrder=c(0,0),include.mean = FALSE), distribution=»norm»)

gfit.ru <- ugarchfit(gspec.ru, AOVEvol)
gfit.ru


plot(gfit.ru)


coef(gfit.ru) # coeficientes estimados
vcov(gfit.ru) # matriz de covarianzas
infocriteria(gfit.ru) # criterios bayesianos
residuals(gfit.ru) # residuos del modelo
newsimpact(gfit.ru) # curva de impacto
fitted(gfit.ru) #valores fijados
uncvariance(gfit.ru) #variaza incondicional( de largo plazo)
uncmean(gfit.ru) # media incondicional (de Largo plazo)

 


##### Simmulaciones con GARCH

sim<-ugarchsim(gfit.ru, n.sim=100, n.start=1, m.sim=1, startMethod=»sample»)
plot(sim)
head(sigma(sim))

#?ugarchsim

SIMU<-sim@simulation

plot(SIMU$sigmaSim,type=»l»,xlab= «Horizonte»,ylab=»VOLATILIDAD»,col=»blue»)

 

 

## Faltaría hacer un backtest de la efectividad del Modelos

### Crear nuevas series Simuladas
### Predicciones también de las series


##################################################################################


getSymbols(«^IBEX»,quote=»Close»,from = «2014-06-20»)
IBEX= IBEX[,4]
IBEX1<-na.omit(IBEX)
dIBEX1<-na.omit(returns(IBEX1))*100
plot(dIBEX1,type=»l»)
#install.packages(«fGarch»)
library(fGarch)

spec = ugarchspec()
fit = ugarchfit(dIBEX1, spec = spec)

plot(fit)
desv<-fit@fit$sigma
desv

sim = ugarchsim(fit,n.sim=1, n.start=1, m.sim=1, startMethod=»sample»)
sim@simulation$sigmaSim

 

SIM<-c()
SERIE<-c()
set.seed(10)


for(i in 1:100){
sim <- ugarchsim(fit,n.sim=1, n.start=1, m.sim=1, startMethod=»sample»)
SIM[i]<- sim@simulation$sigmaSim
SERIE[i]<-sim@simulation$seriesSim
}


SERIE
SIM
plot(SIM,type=»l»)
orden<-sort(SIM)

plot(SERIE,type=»l»)


orden<0.9505

S=S[ , colSums(is.na(S)) == 0]
S

############################# SERIE DE RUIDO BLANCO ##########

#Ejemplo Ruido Blanco
#Generamos los datos

ruido_blanco=rnorm(1000,0,1)

#Graficamos la serie de tiempo

plot.ts(ruido_blanco, main=»Ejemplo de Ruido Blanco», xlab=»Tiempo», ylab=»Valores»,col=»6″)

#Graficamos su correlograma

acf(ruido_blanco,main=»Correlograma»,col=»2″,lag=50)

#Calculamos la media

mean(ruido_blanco)
#[1] 0.03784017


#Ejemplo Ruido Blanco
#Prueba Ljung-Box

Box.test(ruido_blanco)

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Scroll al inicio