Calcular Zig Zag

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 4

Este código de Pine Script implementa una función para calcular un Zigzag en una serie de

precios. El Zigzag es un indicador técnico que se utiliza para identificar cambios significativos
en las tendencias de precios eliminando movimientos menores. A continuación se explica el
código línea por línea:
1. Definición de la función:
pinescript
Copy code
calculate_zigzag(simple string resolution, simple int period, float hsrc, float lsrc, int max_pivots)
=>
La función calculate_zigzag recibe los siguientes parámetros:
o resolution: resolución temporal de los datos.

o period: período para calcular los pivotes.

o hsrc: fuente de datos para los máximos (high).

o lsrc: fuente de datos para los mínimos (low).

o max_pivots: número máximo de pivotes a almacenar.

2. Detección de un nuevo bar:


pinescript
Copy code
newbar = ta.change(time(resolution)) != 0
bi = ta.valuewhen(newbar, bar_index, period - 1)
len = bar_index - bi + 1
o newbar detecta si hay un cambio en la barra actual comparado con la resolución
dada.
o bi obtiene el índice de la barra donde ocurrió el cambio.

o len calcula la longitud del período actual.

3. Inicialización de variables para pivotes:


pinescript
Copy code
float ph = na
float pl = na
ph := ta.highestbars(hsrc, nz(len, 1)) == 0 ? hsrc : na
pl := ta.lowestbars(lsrc, nz(len, 1)) == 0 ? lsrc : na
o ph y pl inicializan los posibles pivotes altos y bajos como no disponibles (na).

o ph se actualiza con el valor máximo dentro del período si es el más alto.

o pl se actualiza con el valor mínimo dentro del período si es el más bajo.

4. Determinación de la dirección del Zigzag:


pinescript
Copy code
var dir = 0
dir := ph and na(pl) ? 1 : pl and na(ph) ? -1 : dir
var zigzag = array.new_float(0)
oldzigzag = array.copy(zigzag)
o dir inicializa la dirección del Zigzag.

o La dirección se establece en 1 si se detecta un nuevo pivote alto, y en -1 si se


detecta un nuevo pivote bajo.
o Se crean los arrays zigzag y oldzigzag para almacenar los pivotes actuales y
anteriores.
5. Detección de cambio de dirección:
pinescript
Copy code
bool dirchanged = (dir != dir[1])
if ph or pl
if dirchanged
bindex = bar_index
value = dir == 1 ? ph : pl
array.unshift(zigzag, bindex)
array.unshift(zigzag, value)
if array.size(zigzag) > max_pivots
array.pop(zigzag)
array.pop(zigzag)
else
bindex = bar_index
value = dir == 1 ? ph : pl
if array.size(zigzag) == 0
array.unshift(zigzag, bindex)
array.unshift(zigzag, value)
if array.size(zigzag) > max_pivots
array.pop(zigzag)
array.pop(zigzag)
else
if (dir == 1 and value > array.get(zigzag, 0)) or (dir == -1 and value < array.get(zigzag,
0))
array.set(zigzag, 0, value)
array.set(zigzag, 1, bindex)
o dirchanged detecta si la dirección del Zigzag ha cambiado.

o Si se detecta un pivote (ph o pl), se actualiza el array zigzag:

 Si la dirección cambió, se añade el nuevo pivote.


 Si no cambió, se actualiza el pivote existente si el nuevo valor es más
extremo.
 Se eliminan pivotes antiguos si se supera el número máximo
(max_pivots).
6. Devolución de resultados:
pinescript
Copy code
[zigzag, oldzigzag, dir]
La función devuelve los arrays de pivotes actuales y anteriores (zigzag y oldzigzag), y la
dirección actual (dir).
Este código efectivamente calcula los pivotes altos y bajos en una serie de precios,
almacenándolos en un array y ajustando estos pivotes según el cambio de dirección de la
tendencia. El objetivo es simplificar la serie de precios y destacar los cambios significativos
eliminando el ruido menor.

También podría gustarte