2 votos

¿Cuál es la fórmula de la volatilidad intradía y nocturna?

Soy un novato tratando de calcular la Volatilidad IntraDay y Overnight.

Para Volatilidad intradía podemos obtener el factor de anualización con lo siguiente:

Duración (horas, de apertura a cierre): 6,5

Plazos por día: 24 / 6,5 = 3,6923

Plazos por año: 252 * 3.6923 = 930.4596

Factor de anualización: SQRT(930.4596) = 30.5034

Para Durante la noche volatilidad, el factor de anualización es:

Duración (horas, de cierre a apertura): 17,5

Cuadros de tiempo por día: 24 / 17,5 = 1,3714

Plazos por año: 252 * 1.3714 = 345.5928

Factor de anualización: SQRT(345.5928) = 18.5901

Con estos parámetros, puedo calcular volatilidad intradía como la desviación estándar de los 20 últimos abrir-cerrar las variaciones de los precios, multiplicadas por el factor de anualización, 30.5034

Y la volatilidad a un día puede calcularse mediante la desviación estándar de los 20 últimos cerca-abierto las variaciones de los precios, multiplicadas por el factor de anualización, 18.5901

Parece que esto debería ser bastante sencillo ya que tengo todas las entradas pero no estoy seguro de si lo estoy haciendo bien, especialmente en thinkorswim.

Por ejemplo, probé a editar el estudio de volatilidad histórica por defecto de ThinkorSwim a lo siguiente (sólo cambié las dos últimas líneas desde el fondo):

#
# TD Ameritrade IP Company, Inc. (c) 2007-2017
#

declare lower;

input length = 20;
input basis = {default Annual, Monthly, Weekly, Daily};

def ap = getAggregationPeriod();

assert(ap >= AggregationPeriod.MIN, "Study can only be calculated for time-aggregated charts: " + ap);

def barsPerDay = (regularTradingEnd(getYyyyMmDd()) - regularTradingStart(getYyyyMmDd())) / ap;
def barsPerYear =
    if ap > AggregationPeriod.WEEK then 12
    else if ap == AggregationPeriod.WEEK then 52
    else if ap >= AggregationPeriod.DAY then 252 * AggregationPeriod.DAY / ap
    else 252 * barsPerDay;

def basisCoeff;
switch (basis) {
case Annual:
    basisCoeff = 1;
case Monthly:
    basisCoeff = 12;
case Weekly:
    basisCoeff = 52;
case Daily:
    basisCoeff = 252;
}

def clLog = log(open / close[1]);
plot HV = stdev(clLog, length) * 30.5;
HV.SetDefaultColor(GetColor(0));

¿Es esto correcto? ¿Existe un thinkscript/fórmula más sencillo? Muchas gracias. Se lo agradezco.

** Aquí está el gráfico que escupe: enter image description here

2voto

Abdelraouf Adjal Puntos 11

Me parece correcto, la apertura de la última barra dividida por el cierre de la barra anterior.

def clLog = log(open / close[1]);

Para el intradía sería...

def clLog = log(open / close);

Además, para responder a tu comentario, cuando se combinan los gráficos, todas las líneas se escalan para utilizar todo el espacio vertical del gráfico (es decir, 0-100%), por lo que un valor numérico inferior de una línea puede aparecer por encima de un valor superior de otra línea.

2voto

Jónás Balázs Puntos 203

Puede encontrar un amplio resumen sobre la estimación de la volatilidad aquí .

También sugiero familiarizarse con la volatilidad de Garman-Klass. Discutido aquí y en este artículo .

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