El Indicador de Volatilidad Relativa (Relative Volatility Index, RVI) es una herramienta técnica utilizada por los traders para medir la volatilidad de un activo financiero en relación con su tendencia. Este indicador se basa en el concepto de desviación estándar y la suavización de promedios móviles. A continuación, se explica el script que implementa este indicador.
Configuración Inicial del Script
El script define el nombre del indicador y los parámetros iniciales necesarios para su cálculo.
luaCopiar códigoinstrument { name = "Relative Volatility" }
input_group {
"front.ind.dpo.generalline",
stdev_period = input (10, "front.newind.stddev", input.double, 1),
avg_period = input (14, "front.newind.smoothingperiod", input.double, 1),
source = input (1, "front.ind.source", input.string_selection, inputs.titles),
fn = input (averages.ema, "front.newind.smoothingfunction", input.string_selection, averages.titles),
color = input { default = "#2CAC40", type = input.color },
width = input { default = 1, type = input.line_width}
}
- stdev_period: Período para el cálculo de la desviación estándar.
- avg_period: Período para la suavización de los promedios.
- source: Fuente de datos utilizada para el cálculo (por ejemplo, el precio de cierre).
- fn: Función de suavización seleccionada, en este caso la media móvil exponencial (EMA).
- color y width: Parámetros visuales del indicador.
Configuración de Líneas de Soporte
Se configuran los parámetros visuales de las líneas de soporte y resistencia, así como los colores de relleno.
luaCopiar códigoinput_group {
"front.newind.supportlines",
overbought = input (70, "front.overbought", input.double, 1, 100, 1, false),
oversold = input (30, "front.oversold", input.double, 1, 100, 1, false),
zero_color = input { default = rgba(255,255,255,0.15), type = input.color },
overbought_color = input { default = rgba(37,225,84,0.50), type = input.color },
oversold_color = input { default = rgba(255,108,88,0.50), type = input.color },
bg_color = input { default = rgba(37,225,84,0.20), type = input.color },
support_width = input { default = 1, type = input.line_width}
}
- overbought y oversold: Niveles de sobrecompra y sobreventa.
- zero_color, overbought_color, oversold_color, bg_color: Colores para las líneas y el relleno.
- support_width: Grosor de las líneas de soporte.
Cálculo del Indicador de Volatilidad Relativa
Se realizan los cálculos necesarios para obtener el valor del RVI.
luaCopiar códigolocal sourceSeries = inputs [source]
local averageFunction = averages [fn]
dev = stdev (sourceSeries, stdev_period)
up = iff (nz (get_value (change (sourceSeries))) >= 0, dev, 0)
down = iff (nz (get_value (change (sourceSeries))) < 0, dev, 0)
up_sum = averageFunction (up, avg_period)
down_sum = averageFunction (down, avg_period)
res = 100 * up_sum / (up_sum + down_sum)
- dev: Desviación estándar del período especificado.
- up y down: Componentes de la volatilidad relativa, dependiendo de si el cambio en el precio es positivo o negativo.
- up_sum y down_sum: Valores suavizados de las componentes de volatilidad.
- res: Resultado final del indicador de volatilidad relativa.
Visualización del Indicador
Finalmente, se trazan las líneas y se rellena el área según los valores calculados.
luaCopiar códigoif nz(res, 50) > overbought then
fill (overbought, res, "", bg_color)
else
fill (overbought, res, "", "#0000000")
end
if nz(res, 50) < oversold then
fill (res, oversold, "", bg_color)
else
fill (res, oversold, "", "#0000000")
end
hline { value = overbought, color = overbought_color, width = support_width }
hline { value = oversold, color = oversold_color, width = support_width }
hline { value = 50, color = zero_color, width = support_width }
plot (res, "RVI", color, width)
hline { value = 90, color = "#0000000", show_label = false }
hline { value = 10, color = "#0000000", show_label = false }
- fill: Rellena el área entre el nivel de sobrecompra/sobreventa y el valor calculado del RVI.
- hline: Dibuja las líneas de sobrecompra, sobreventa y la línea base.
- plot: Traza el valor del indicador RVI en el gráfico.
Interpretación del Indicador
El Relative Volatility Index (RVI) se utiliza para identificar la dirección y la magnitud de la volatilidad en relación con su tendencia. Aquí algunos puntos clave para su interpretación:
- Valores altos del RVI (por encima de 70): Indican una alta volatilidad relativa, lo que puede señalar un posible sobrecalentamiento del mercado.
- Valores bajos del RVI (por debajo de 30): Indican una baja volatilidad relativa, lo que puede señalar una posible consolidación o estabilidad en el mercado.
- Relleno del área: Ayuda a visualizar mejor las zonas de alta y baja volatilidad relativa.
Conclusión
El Relative Volatility Index (RVI) es una herramienta útil para medir la volatilidad relativa en comparación con la tendencia del mercado. Al ajustar los períodos y los niveles de sobrecompra y sobreventa, los traders pueden adaptar este indicador a sus necesidades específicas y estrategias de trading.
Script Completo
instrument { name = "Relative Volatility" }
input_group {
"front.ind.dpo.generalline",
stdev_period = input (10, "front.newind.stddev", input.double, 1),
avg_period = input (14, "front.newind.smoothingperiod", input.double, 1),
source = input (1, "front.ind.source", input.string_selection, inputs.titles),
fn = input (averages.ema, "front.newind.smoothingfunction", input.string_selection, averages.titles),
color = input { default = "#2CAC40", type = input.color },
width = input { default = 1, type = input.line_width}
}
input_group {
"front.newind.supportlines",
overbought = input (70, "front.overbought", input.double, 1, 100, 1, false),
oversold = input (30, "front.oversold", input.double, 1, 100, 1, false),
zero_color = input { default = rgba(255,255,255,0.15), type = input.color },
overbought_color = input { default = rgba(37,225,84,0.50), type = input.color },
oversold_color = input { default = rgba(255,108,88,0.50), type = input.color },
bg_color = input { default = rgba(37,225,84,0.20), type = input.color },
support_width = input { default = 1, type = input.line_width}
}
local sourceSeries = inputs [source]
local averageFunction = averages [fn]
dev = stdev (sourceSeries, stdev_period)
up = iff (nz (get_value (change (sourceSeries))) >= 0, dev, 0)
down = iff (nz (get_value (change (sourceSeries))) < 0, dev, 0)
up_sum = averageFunction (up, avg_period)
down_sum = averageFunction (down, avg_period)
res = 100 * up_sum / (up_sum + down_sum)
if nz(res, 50) > overbought then
fill (overbought, res, "", bg_color)
else
fill (overbought, res, "", "#0000000")
end
if nz(res, 50) < oversold then
fill (res, oversold, "", bg_color)
else
fill (res, oversold, "", "#0000000")
end
hline { value = overbought, color = overbought_color, width = support_width }
hline { value = oversold, color = oversold_color, width = support_width }
hline { value = 50, color = zero_color, width = support_width }
plot (res, "RVI", color, width)
hline { value = 90, color = "#0000000", show_label = false }
hline { value = 10, color = "#0000000", show_label = false }