¡Atención! Esta versión del indicador ZigZag se basa en el código de ZigZag, y se publica aquí con el permiso de su autor, PPC. He probado esta versión y corregido un error en el algoritmo.
Este código es la versión MQL5 del indicador ZigZag para MetaTrader 4.
¡Atención! La biblioteca AlexSTAL_OutsideBar.mqh debe ubicarse en ..\MQL5\Include carpeta del terminal cliente de MetaTrader 5.
¿Eso es todo?
Para mí, el ZigZag es como una compresión del gráfico de precios. El ZigZag se puede calcular usando el precio de la barra (por ejemplo, el precio de cierre) o los precios más altos/bajos de la barra (el método más comúnmente utilizado).
Al trabajar con el ZigZag estándar propuesto por MetaQuotes, he encontrado algunos errores. El problema principal es que el ZigZag estándar no maneja correctamente el caso de la barra externa.
En 2007, Rashid Umarov (Rosh) publicó el código Zigzag2 R que incluye el tratamiento de la barra externa (estilo DRAW_ZIGZAG en lugar de DRAW_SECTION).
Definamos las características de una implementación "correcta" del ZigZag:
- Los máximos y mínimos deben alternarse estrictamente;
- El máximo debe ser mayor (o igual) que todos los bares a la derecha hasta el siguiente mínimo (opuesto);
- El mínimo debe ser menor (o igual) que todos los bares a la izquierda hasta el siguiente máximo (opuesto).
Veamos un ejemplo usando el par EURUSD en H1, del 8 al 13 de diciembre de 2006. Aquí tenemos dos casos con la barra externa. El ZigZag típico no puede construir la "imagen correcta".
![Figura 1. ZigZag Típico con parámetros de entrada [12;5;3] y [12;0;0] Figura 1. ZigZag Típico con parámetros de entrada [12;5;3] y [12;0;0]](https://dailyforexmap.s3.ap-northeast-1.amazonaws.com/forum/202511/1763923773916-zz_011.webp)
Figura 1. ZigZag Típico con parámetros de entrada [12;5;3] y [12;0;0]
![Figura 2. Zigzag2 R con parámetros de entrada [12;5;3] Figura 2. Zigzag2 R con parámetros de entrada [12;5;3]](https://dailyforexmap.s3.ap-northeast-1.amazonaws.com/forum/202511/1763923774923-zz_031.webp)
Figura 2. Zigzag2 R con parámetros de entrada [12;5;3]
![Figura 3. Zigzag2 R con parámetros de entrada [12;0;0] Figura 3. Zigzag2 R con parámetros de entrada [12;0;0]](https://dailyforexmap.s3.ap-northeast-1.amazonaws.com/forum/202511/1763923775902-zz_021.webp)
Figura 3. Zigzag2 R con parámetros de entrada [12;0;0]
De primera vista, la construcción correcta se presenta en Figura 3, pero hay algunas características:
- En este caso, se ha construido correctamente debido a los parámetros de entrada, pero en general el algoritmo debe funcionar con cualquier parámetro.
- La barra externa en el lado izquierdo no es correcta, debido al orden de formación de máximos/mínimos de la barra:

Los segmentos de ZigZag deben construirse de esta manera.
He probado muchos casos de los siguientes algoritmos ZigZag: ZigZag MT3, ZigZag, Zigzag R, Zigzag2 R, ZigZag_NK, ZigZag_ZUP89_nen, ZigZag_new_nen4, CZigZag, Swing_ZZ_1, DT_ZZ_nen, ZigZag_Talex, Reverse_ZZ, Points_ZZ_1, i_MF_Fractal_ZZ_3in1, ang_Amp_ZZ, ZigzagFr_v1, NonLagZigZag_v2, ZZ_FF_v3, ZigZag Ensign, ZigZag tauber, SQZZ Товаровед, ZZ_2L_nen wellx, Channel ZZ, Azzx_larryzz_3_0, RPoint, RPoint-m v2, ZigZagTF. Pero ninguno de ellos ha resuelto el problema correctamente.
Aquí están las figuras con este indicador:
![Figura 4. ZigZag Profesional con parámetros de entrada [12;0] Figura 4. ZigZag Profesional con parámetros de entrada [12;0]](https://dailyforexmap.s3.ap-northeast-1.amazonaws.com/forum/202511/1763923777684-zz_051.webp)
Figura 4. ZigZag Profesional con parámetros de entrada [12;0]
![Figura 5. ZigZag Profesional con parámetros de entrada [23;0] Figura 5. ZigZag Profesional con parámetros de entrada [23;0]](https://dailyforexmap.s3.ap-northeast-1.amazonaws.com/forum/202511/1763923778688-zz_061.webp)
Figura 5. ZigZag Profesional con parámetros de entrada [23;0]
Algunas características de esta versión:
- algoritmo de un solo pase
- recalcula y redibuja solo el último segmento (el segmento no puede ser cancelado excepto por la actualización de historial)
- tiene un algoritmo de optimización para los cálculos dentro de la barra (no utiliza el recalculo en el tick, si el precio ha cambiado dentro de la barra 0 (no completada) o si el cambio de precio es menor que el umbral, definido por el parámetro de entrada MinMotion)
- posee dos algoritmos para el ordenamiento de la formación de máximos/mínimos: usando el tipo de barra (rápido pero impreciso) o usando los datos de un marco temporal inferior (necesita el historial, debes verificar su presencia y corrección o debes modificar la biblioteca OutsideBar)
Aquí hay algunos ejemplos adicionales de construcciones incorrectas de ZigZag:
![Figura 6. EURUSD, H1, del 29 de noviembre al 7 de diciembre. (Línea roja: ZigZag con parámetros de entrada [7;0;0]. Línea azul: Zigzag2 R con parámetros de entrada [7;0;0].) Figura 6. EURUSD, H1, del 29 de noviembre al 7 de diciembre. (Línea roja: ZigZag con parámetros de entrada [7;0;0]. Línea azul: Zigzag2 R con parámetros de entrada [7;0;0].)](https://dailyforexmap.s3.ap-northeast-1.amazonaws.com/forum/202511/1763923779494-zz_071.webp)
Figura 6. EURUSD, H1, del 29 de noviembre al 7 de diciembre. (Línea roja: ZigZag con parámetros de entrada [7;0;0]. Línea azul: Zigzag2 R con parámetros de entrada [7;0;0].)

Figura 7. EURUSD, H1, 2010, del 29 de noviembre al 7 de diciembre. La construcción correcta de segmentos de ZigZag.
Conclusión
Desafortunadamente, esta versión no es perfecta, pero estoy trabajando en ello.
Debido al algoritmo de canal (iHighest/iLowest), a veces se saltan los máximos.
Por favor, infórmame sobre los errores y características de este indicador.
Publicaciones relacionadas
- ID Lite Info MA: Tu Nuevo Aliado en MetaTrader 5
- Índice ms-Candle: Potencia tu Análisis de Velas en MetaTrader 5
- Índice de Swing de Acumulación (ASI): Tu guía para MetaTrader 5
- Alertas de Señales con el Indicador Iin_MA para MetaTrader 5
- iStochKomposterAlert: El Indicador de Señales para MetaTrader 5 con Alertas