El indicador ZigZag es una herramienta popular en el análisis técnico que se utiliza para identificar puntos de reversión significativos en los movimientos de precios de un activo. Este indicador simplifica la acción del precio al filtrar el «ruido» del mercado y destacar las tendencias subyacentes. A continuación, se presenta una explicación detallada del script ZigZag.
Configuración Inicial del Script
El script comienza definiendo el nombre del instrumento y los parámetros de entrada necesarios para calcular el ZigZag.
luaCopiar códigoinstrument { name = "ZigZag", overlay = true }
percentage = input (1, "Percentage", input.double, 0.01, 100, 1.0) / 100
period = 3
input_group {
"front.ind.dpo.generalline",
up_color = input { default = "#FF7700", type = input.color },
down_color = input { default = "#57A1D0", type = input.color },
width = input { default = 1, type = input.line_width }
}
- percentage: El porcentaje de reversión necesario para que el indicador ZigZag marque un nuevo punto.
- period: Período de tiempo que el indicador utilizará para calcular los cambios de precio (en este caso, es constante en 3).
- up_color: Color para las líneas ZigZag que indican una tendencia alcista.
- down_color: Color para las líneas ZigZag que indican una tendencia bajista.
- width: Grosor de las líneas ZigZag.
Series y Variables Locales
El script crea varias series y variables locales para rastrear los valores de referencia y determinar la dirección de la tendencia.
luaCopiar códigolocal reference = make_series ()
reference:set(nz(reference[1], high))
local is_direction_up = make_series ()
is_direction_up:set(nz(is_direction_up[1], true))
local htrack = make_series ()
local ltrack = make_series ()
local pivot = make_series ()
reverse_range = reference * percentage / 100
- reference: Serie que almacena el valor de referencia para el cálculo del ZigZag.
- is_direction_up: Serie que determina la dirección actual de la tendencia.
- htrack: Serie que rastrea el valor más alto durante una tendencia alcista.
- ltrack: Serie que rastrea el valor más bajo durante una tendencia bajista.
- pivot: Serie que almacena los puntos de reversión del ZigZag.
- reverse_range: Rango de reversión basado en el porcentaje definido por el usuario.
Lógica de Cálculo del ZigZag
El siguiente bloque de código determina si el precio ha alcanzado un punto de reversión, actualizando las series en consecuencia.
luaCopiar códigoif get_value (is_direction_up) then
htrack:set (max(high, nz(htrack[1], high)))
if close < htrack[1] - reverse_range then
pivot:set (htrack)
is_direction_up:set (false)
reference:set(htrack)
end
else
ltrack:set (min(low, nz(ltrack[1], low)))
if close > ltrack[1] + reverse_range then
pivot:set (ltrack)
is_direction_up:set(true)
reference:set (ltrack)
end
end
- is_direction_up: Si la dirección es alcista, actualiza htrack con el valor más alto. Si el precio de cierre es menor que htrack menos el rango de reversión, marca un punto de pivote y cambia la dirección a bajista.
- else: Si la dirección es bajista, actualiza ltrack con el valor más bajo. Si el precio de cierre es mayor que ltrack más el rango de reversión, marca un punto de pivote y cambia la dirección a alcista.
Visualización del ZigZag
Finalmente, el script dibuja el ZigZag en el gráfico.
luaCopiar códigocolor = is_direction_up() and up_color or down_color
plot(pivot, 'ZZ', color, width, -1, style.solid_line, na_mode.continue)
- color: Determina el color de la línea según la dirección de la tendencia.
- plot: Dibuja el ZigZag en el gráfico con el color y el grosor especificados.
Conclusión
El indicador ZigZag es una herramienta eficaz para identificar y visualizar los puntos de reversión en un gráfico de precios. Al filtrar los movimientos menores del mercado, ayuda a los traders a enfocarse en las tendencias más significativas. Utiliza este indicador junto con otros análisis técnicos para obtener una perspectiva más clara de la dirección del mercado y tomar decisiones de trading informadas.
Script Completo
instrument { name = "ZigZag", overlay = true }
percentage = input (1, "Percentage", input.double, 0.01, 100, 1.0) / 100
period = 3
input_group {
"front.ind.dpo.generalline",
up_color = input { default = "#FF7700", type = input.color },
down_color = input { default = "#57A1D0", type = input.color },
width = input { default = 1, type = input.line_width }
}
local reference = make_series ()
reference:set(nz(reference[1], high))
local is_direction_up = make_series ()
is_direction_up:set(nz(is_direction_up[1], true))
local htrack = make_series ()
local ltrack = make_series ()
local pivot = make_series ()
reverse_range = reference * percentage / 100
if get_value (is_direction_up) then
htrack:set (max(high, nz(htrack[1], high)))
if close < htrack[1] - reverse_range then
pivot:set (htrack)
is_direction_up:set (false)
reference:set(htrack)
end
else
ltrack:set (min(low, nz(ltrack[1], low)))
if close > ltrack[1] + reverse_range then
pivot:set (ltrack)
is_direction_up:set(true)
reference:set (ltrack)
end
end
color = is_direction_up() and up_color or down_color
plot(pivot, 'ZZ', color, width, -1, style.solid_line, na_mode.continue)