Estoy tratando de programar una regla de actualización de la volatilidad utilizando la iteración. Empiezo con el conocido modelo Heston-Nandi donde la dinámica de los retornos es :
con es una variable randome normal iid, donde es la volatilidad cuadrada variable en el tiempo, , y .
Lo que quiero hacer es escribir el código asociado a la regla de actualización de la volatilidad, explicar en este algoritmo :
- Definir es igual a la varianza incondicional dada que es constante,
- Iteración para :
para obtener la aproximación basada en los rendimientos de las desviaciones al contado . Lo que da lugar a una función de actualización que implica exclusivamente la observación :
Mi programa (código r) es el siguiente:
library(fGarch)
T=3000
# For the example I simulate a GARCH
#process parameters
eta = 0.2 #eta = 0 is equivalent to Geometric Brownian Motion
mu = 100 #the mean of the process
#GARCH volatility model
specs = garchSpec(model = list(omega = 0.000001, alpha = 0.5, beta = 0.4))
sigma = garchSim(spec = specs, n = T)
P_0 = mu #starting price, known
P = rep(P_0,T)
for(i in 2:T){
P[i] = P[i-1] + eta * (mu - P[i-1]) + sigma[i] * P[i-1]
}
# Set the parameters :
para<-c(0.1,0.2,0.3,0.4,0.5,0.7) # (beta_0,beta_1, beta_2, beta_3, r, gamma)
# Iteration to obtain the volatility associate to the model :
vol = c()
vol[1]=sd(P)
for (i in 2:length(P)){
para_vol <- para[1:6]
vol[i]=para_vol[1]+ (para_vol[2]*vol[i-1])+ (para_vol[3]/vol[i-1])*(P[i-1]-para_vol[5]-(para_vol[4]+para_vol[6])*vol[i-1])
}
vol
Este es un ejemplo donde simulo un GARCH (como conjunto de datos), el estoy tratando de extraer la volatilidad asociada al modelo Heston-Nandi.
Lo sé, estoy usando un montón de cosas malas para r, pero no pude encontrar una solución mejor. Así que mi pregunta es correcta?
Cualquier corrección y sugerencia para mejorar este proceso! por favor, siéntase libre de compartir su código existente en R.
¡Muchas gracias!