8 votos

Comprender el estimador de volatilidad de Yang-Zhang

Estoy usando TTR en R y estoy tratando de entender el estimador de volatilidad de 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") Me sale un vector con un montón de NAs delante. ¿Cuál es mi estimación de la 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 esto es trivial - pero no puedo encontrar nada en la documentación de TTR.

Gracias.

1 votos

Creo que hay una errata 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 una errata en $\sigma_c^2$ el término sumatorio debe ser $ln{\frac{c_i}{o_i}}^2$

8voto

BMundell Puntos 101

El n=100 especifica el número de periodos (rolling) para la estimación de vol - véase el enlace original https://web.archive.org/web/20100326215050/http://www.sitmo.com/eq/409 donde el n se denomina Número de precios históricos utilizados para la estimación de la volatilidad

Un ejemplo en R:

library(TTR)
library(quantmod)

getSymbols("AAPL")
nrow(AAPL) # we have 2384 price points

vol <- volatility(AAPL, n = 100, calc = "yang.zhang")
# if n = 100, then we have 2384 - 100 = 2284 vol estimates for all the "100-day rolling period"
nrow(na.omit(vol))
# and we have 100 NA for the initial 100 periods
sum(is.na(vol))

# if n = 2383 then we have only a single vol estimae (i.e. massive 2383 period window)
vol2 <- volatility(AAPL, n = 2383, calc = "yang.zhang")
nrow(na.omit(vol2))
sum(is.na(vol2))

produce

[1] "AAPL"
> nrow(AAPL) # we have 2384 price points
[1] 2384
> 
> 
> vol <- volatility(AAPL, n = 100, calc = "yang.zhang")
> # if n = 100, then we have 2384 - 100 = 2284 vol estimates for all the "100-day rolling period"
> nrow(na.omit(vol))
[1] 2284
> # and we have 100 NA for the initial 100 periods
> sum(is.na(vol))
[1] 100
> 
> # if n = 2383 then we have only a single vol estimae (i.e. massive 2383 period window)
> 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