Attenzione! Questa versione dell'indicatore ZigZag è basata sul codice ZigZag, pubblicata qui con il permesso del suo autore, PPC. Ho testato questa versione e corretto un errore nell'algoritmo.
Questo codice è la versione MQL5 dell'indicatore Zigzag per MetaTrader 4.
Attenzione! La libreria AlexSTAL_OutsideBar.mqh deve trovarsi nella cartella ..\MQL5\Include
del terminale client MetaTrader 5.
È tutto qui?
Credo che il ZigZag rappresenti una sorta di compressione del grafico dei prezzi. Il ZigZag può essere calcolato utilizzando il prezzo della barra (ad esempio, il prezzo di chiusura) o i prezzi massimi/minimi della barra (metodo più comune).
Mentre lavoravo con il ZigZag standard proposto da MetaQuotes, ho riscontrato alcuni errori. Il problema principale è che il ZigZag standard non gestisce il caso della barra esterna.
Nel 2007, Rashid Umarov (Rosh) ha pubblicato il codice Zigzag2 R con elaborazione della barra esterna (stile DRAW_ZIGZAG invece di DRAW_SECTION).
Definiamo le caratteristiche di una implementazione "corretta" del ZigZag:
- I massimi e i minimi devono alternarsi rigorosamente;
- Il massimo deve essere superiore (o uguale) a tutti i bar a destra fino al prossimo minimo (opposto);
- Il minimo deve essere inferiore (o uguale) a tutti i bar a sinistra fino al prossimo massimo (opposto).
Consideriamo un esempio (EURUSD, H1, 2006, 8-13 dicembre). Qui abbiamo due casi con la barra esterna. Il ZigZag tipico non riesce a costruire l'immagine "corretta".
![Figura 1. ZigZag tipico con parametri di input [12;5;3] e [12;0;0] Figura 1. ZigZag tipico con parametri di input [12;5;3] e [12;0;0]](https://dailyforexmap.s3.ap-northeast-1.amazonaws.com/forum/202511/1763923773916-zz_011.webp)
Figura 1. ZigZag tipico con parametri di input [12;5;3] e [12;0;0]
![Figura 2. Zigzag2 R con parametri di input [12;5;3] Figura 2. Zigzag2 R con parametri di input [12;5;3]](https://dailyforexmap.s3.ap-northeast-1.amazonaws.com/forum/202511/1763923774923-zz_031.webp)
Figura 2. Zigzag2 R con parametri di input [12;5;3]
![Figura 3. Zigzag2 R con parametri di input [12;0;0] Figura 3. Zigzag2 R con parametri di input [12;0;0]](https://dailyforexmap.s3.ap-northeast-1.amazonaws.com/forum/202511/1763923775902-zz_021.webp)
Figura 3. Zigzag2 R con parametri di input [12;0;0]
Ad un primo sguardo, la costruzione corretta è presentata in Figura 3 ma qui ci sono alcune caratteristiche:
- In questo caso è stata costruita correttamente a causa dei parametri di input, ma in generale l'algoritmo deve funzionare con qualsiasi parametro.
- La barra esterna sul lato sinistro non è corretta, a causa dell'ordine di formazione di massimi/minimi della barra:

I segmenti ZigZag devono essere costruiti in questo modo.
Ho testato molti casi dei seguenti algoritmi 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. Ma nessuno di essi ha risolto il problema correttamente.
Qui ci sono le figure con questo indicatore:
![Figura 4. ZigZag Professionale con parametri di input [12;0] Figura 4. ZigZag Professionale con parametri di input [12;0]](https://dailyforexmap.s3.ap-northeast-1.amazonaws.com/forum/202511/1763923777684-zz_051.webp)
Figura 4. ZigZag Professionale con parametri di input [12;0]
![Figura 5. ZigZag Professionale con parametri di input [23;0] Figura 5. ZigZag Professionale con parametri di input [23;0]](https://dailyforexmap.s3.ap-northeast-1.amazonaws.com/forum/202511/1763923778688-zz_061.webp)
Figura 5. ZigZag Professionale con parametri di input [23;0]
Alcune caratteristiche di questa versione:
- algoritmo a passaggio singolo
- ricompila e ridisegna solo l'ultimo segmento (il segmento non può essere annullato tranne che per l'aggiornamento della cronologia)
- ha l'algoritmo di ottimizzazione per i calcoli all'interno della barra (non utilizza la ricompilazione sul tick, se il prezzo è cambiato all'interno della barra 0 (non completata) o se la variazione di prezzo è inferiore alla soglia, definita dal parametro di input MinMotion)
- ha due algoritmi per ordinare la formazione di massimi/minimi: utilizzando il tipo di barra (veloce ma impreciso) utilizzando i dati da un timeframe inferiore (richiede la cronologia, devi controllare la sua presenza e correttezza oppure modificare la libreria OutsideBar)
Ecco alcuni esempi aggiuntivi di costruzioni errate del ZigZag:
![Figura 6. EURUSD, H1, 29 novembre - 7 dicembre. (Linea rossa: ZigZag con parametri di input [7;0;0]. Linea blu: Zigzag2 R con parametri di input [7;0;0].) Figura 6. EURUSD, H1, 29 novembre - 7 dicembre. (Linea rossa: ZigZag con parametri di input [7;0;0]. Linea blu: Zigzag2 R con parametri di input [7;0;0].)](https://dailyforexmap.s3.ap-northeast-1.amazonaws.com/forum/202511/1763923779494-zz_071.webp)
Figura 6. EURUSD, H1, 29 novembre - 7 dicembre. (Linea rossa: ZigZag con parametri di input [7;0;0]. Linea blu: Zigzag2 R con parametri di input [7;0;0].)

Figura 7. EURUSD, H1, 2010, 29 novembre - 7 dicembre. La costruzione corretta dei segmenti ZigZag.
Conclusione
Purtroppo, questa versione non è perfetta, ma ci sto lavorando.
A causa dell'algoritmo del canale (iHighest/iLowest), a volte salta i massimi.
Ti prego di informarmi riguardo a bug e caratteristiche di questo indicatore.
Post correlati
- Indice di Volatilità Chaikin: Scegli il Giusto Algoritmo di Smussamento per MetaTrader 5
- Volatilità Stocastica: Indicatore per MetaTrader 5 da Utilizzare sul Grafico
- Indice di Vigorità Relativa (RVI): Guida all'Utilizzo su MetaTrader 5
- Notis: L'Indicatore per Misurare la Volatilità su MetaTrader 5
- Utilità per Serie e Informazioni sulle Rate in MetaTrader 5