8 votos

Comprendiendo el estimador de volatilidad de Yang-Zhang

Estoy utilizando TTR en R y estoy tratando de entender el estimador de volatilidad Yang Zhang (sin deriva). Las siguientes ecuaciones parecen implicar un único valor:

$$ \sigma = \sqrt{{\sigma_o^2}+k\sigma_c^2+(1-k)\sigma_{rs}^2} $$

$$\sigma_o^2 = \frac{1}{N-1}\sum_{i=1}^{N}ln{\frac{o_i}{c_{i-1}}^2}$$ $$\sigma_c^2 = \frac{1}{N-1}\sum_{i=1}^{N}ln{\frac{c_i}{o_{i-1}}^2}$$ $$\sigma_{rs}^2 = \frac{1}{N-1}\sum_{i=1}^{N}(ln{\frac{h_i}{c_i}})(ln{\frac{h_i}{o_i}}) + (ln{\frac{l_i}{c_i}})(ln{\frac{l_i}{o_i}})$$ $$k = \frac{0.34}{1.34 + \frac{N+1}{N-1}}$$

Sin embargo, cuando ejecuto volatility(my_data, n = 100, calc = "yang.zhang") obtengo un vector con una serie de NA al principio. ¿Cuál es mi estimación de volatilidad? ¿Es el último valor en el marco de datos, si es así, cuáles son los valores restantes en los otros puntos de datos? Me disculpo si esta pregunta es trivial, pero no parece encontrar nada en la documentación de TTR.

¡Gracias!

1 votos

Creo que hay un error tipográfico en la fórmula de k, que debería ser $ k = \frac{0.34}{1.34 + \frac{n+1}{n-1}} $

0 votos

También hay un error tipográfico en $\sigma_c^2$: el término de suma debería ser $ln{\frac{c_i}{o_i}}^2$

8voto

BMundell Puntos 101

El n=100 especifica el número de períodos (rodantes) para la estimación de volatilidad - consulta el enlace original https://web.archive.org/web/20100326215050/http://www.sitmo.com/eq/409 donde el n se refiere como Número de precios históricos utilizados para la estimación de volatilidad

Un ejemplo en R:

library(TTR)
library(quantmod)

getSymbols("AAPL")
nrow(AAPL) # tenemos 2384 puntos de precio

vol <- volatility(AAPL, n = 100, calc = "yang.zhang")
# si n = 100, entonces tenemos 2384 - 100 = 2284 estimaciones de volatilidad para todo el "período rodante de 100 días"
nrow(na.omit(vol))
# y tenemos 100 NA para los primeros 100 períodos
sum(is.na(vol))

# si n = 2383 entonces tenemos solo una única estimación de volatilidad (es decir, una ventana masiva de 2383 períodos)
vol2 <- volatility(AAPL, n = 2383, calc = "yang.zhang")
nrow(na.omit(vol2))
sum(is.na(vol2))

produce

[1] "AAPL"
> nrow(AAPL) # tenemos 2384 puntos de precio
[1] 2384
> 
> 
> vol <- volatility(AAPL, n = 100, calc = "yang.zhang")
> # si n = 100, entonces tenemos 2384 - 100 = 2284 estimaciones de volatilidad para todo el "período rodante de 100 días"
> nrow(na.omit(vol))
[1] 2284
> # y tenemos 100 NA para los primeros 100 períodos
> sum(is.na(vol))
[1] 100
> 
> # si n = 2383 entonces tenemos solo una única estimación de volatilidad (es decir, una ventana masiva de 2383 períodos)
> vol2 <- volatility(AAPL, n = 2383, calc = "yang.zhang")
> nrow(na.omit(vol2))
[1] 1
> sum(is.na(vol2))
[1] 2383

Finanhelp.com

FinanHelp es una comunidad para personas con conocimientos de economía y finanzas, o quiere aprender. Puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X