Let op! Deze versie van de ZigZag-indicator is gebaseerd op de ZigZag-code en is hier gepubliceerd met toestemming van de auteur, PPC. Ik heb deze versie getest en een fout in het algoritme gecorrigeerd.
Deze code is de MQL5-versie van de Zigzag-indicator voor MetaTrader 4.
Let op! De AlexSTAL_OutsideBar.mqh-bibliotheek moet zich bevinden in ..\MQL5\Include-map van de MetaTrader 5-clientterminal.
Is dat alles?
Ik zie de ZigZag-indicator als een manier om de prijsgrafiek te comprimeren. De ZigZag kan worden berekend met de prijs van de bar (bijvoorbeeld de slotprijs) of de hoogste/laagste prijzen van de bar (de meest gebruikte methode).
Tijdens het werken met de standaard ZigZag, voorgesteld door MetaQuotes, kwam ik enkele fouten tegen. Het grootste probleem is dat de standaard ZigZag geen rekening houdt met de buitenste bar.
In 2007 heeft Rashid Umarov (Rosh) de Zigzag2 R code gepubliceerd die rekening houdt met buitenste bars (DRAW_ZIGZAG-stijl in plaats van DRAW_SECTION).
Laten we de kenmerken van de "correcte" ZigZag-implementatie definiëren:
- De hoogste en laagste punten moeten strikt om en om verschijnen;
- De hoogste moet hoger (of gelijk) zijn aan alle bars aan de rechterkant tot aan de volgende (tegenovergestelde) laag;
- De laagste moet lager (of gelijk) zijn aan alle bars aan de linkerkant tot aan de volgende (tegenovergestelde) hoog.
We bekijken een voorbeeld (EURUSD, H1, 8-13 december 2006). Hier hebben we twee gevallen met de buitenste bar. De typische ZigZag kan het "correcte" beeld niet construeren.
![Figuur 1. Typische ZigZag met invoerparameters [12;5;3] en [12;0;0] Figuur 1. Typische ZigZag met invoerparameters [12;5;3] en [12;0;0]](https://dailyforexmap.s3.ap-northeast-1.amazonaws.com/forum/202511/1763923773916-zz_011.webp)
Figuur 1. Typische ZigZag met invoerparameters [12;5;3] en [12;0;0]
![Figuur 2. Zigzag2 R met invoerparameters [12;5;3] Figuur 2. Zigzag2 R met invoerparameters [12;5;3]](https://dailyforexmap.s3.ap-northeast-1.amazonaws.com/forum/202511/1763923774923-zz_031.webp)
Figuur 2. Zigzag2 R met invoerparameters [12;5;3]
![Figuur 3. Zigzag2 R met invoerparameters [12;0;0] Figuur 3. Zigzag2 R met invoerparameters [12;0;0]](https://dailyforexmap.s3.ap-northeast-1.amazonaws.com/forum/202511/1763923775902-zz_021.webp)
Figuur 3. Zigzag2 R met invoerparameters [12;0;0]
Op het eerste gezicht lijkt de juiste constructie te worden gepresenteerd in Figuur 3, maar hier zijn enkele kenmerken:
- In dit geval is het correct geconstrueerd vanwege de invoerparameters, maar in het algemeen moet het algoritme met elke parameter kunnen werken.
- De buitenste bar aan de linkerkant is niet correct vanwege de volgorde van de vorming van de bar's hoog/laag:

De ZigZag-segmenten moeten op deze manier worden geconstrueerd.
Ik heb veel gevallen getest van de volgende ZigZag-algoritmen: 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. Maar geen van hen heeft het probleem correct opgelost.
Hier zijn de figuren met deze indicator:
![Figuur 4. Professionele ZigZag met invoerparameters [12;0] Figuur 4. Professionele ZigZag met invoerparameters [12;0]](https://dailyforexmap.s3.ap-northeast-1.amazonaws.com/forum/202511/1763923777684-zz_051.webp)
Figuur 4. Professionele ZigZag met invoerparameters [12;0]
![Figuur 5. Professionele ZigZag met invoerparameters [23;0] Figuur 5. Professionele ZigZag met invoerparameters [23;0]](https://dailyforexmap.s3.ap-northeast-1.amazonaws.com/forum/202511/1763923778688-zz_061.webp)
Figuur 5. Professionele ZigZag met invoerparameters [23;0]
Enkele kenmerken van deze versie:
- één-pass algoritme
- het herschrijft en hertekent alleen het laatste segment (het segment kan niet worden geannuleerd behalve bij een geschiedenis-update)
- het heeft een optimalisatie-algoritme voor de berekeningen binnen de bar (het gebruikt geen herberekening bij de tick, als de prijs is veranderd binnen de 0 (onvoltooide) bar of prijsverandering lager is dan de drempel, gedefinieerd door de MinMotion-invoerparameter)
- het heeft twee algoritmes voor de ordening van de hoog/laag vorming: gebruikmakend van het type bar (snel maar niet nauwkeurig) of gebruikmakend van gegevens van de lagere tijdsframe (het heeft geschiedenis nodig, je moet controleren of deze aanwezig en correct is of je moet de OutsideBar bibliotheek aanpassen)
De ProExtra-versie is niet gepubliceerd, omdat de juistheid van de MetaTrader 5-citaten niet is gecontroleerd.
Hier zijn enkele aanvullende voorbeelden van incorrecte constructies van de ZigZag:
![Figuur 6. EURUSD, H1, 29 november - 7 december. (Rode lijn: ZigZag met invoerparameters [7;0;0]. Blauwe lijn: Zigzag2 R met invoerparameters [7;0;0].) Figuur 6. EURUSD, H1, 29 november - 7 december. (Rode lijn: ZigZag met invoerparameters [7;0;0]. Blauwe lijn: Zigzag2 R met invoerparameters [7;0;0].)](https://dailyforexmap.s3.ap-northeast-1.amazonaws.com/forum/202511/1763923779494-zz_071.webp)
Figuur 6. EURUSD, H1, 29 november - 7 december. (Rode lijn: ZigZag met invoerparameters [7;0;0]. Blauwe lijn: Zigzag2 R met invoerparameters [7;0;0].)

Figuur 7. EURUSD, H1, 2010, 29 november - 7 december. De correcte constructie van ZigZag-segmenten.
Conclusie
Helaas is deze versie niet perfect, maar ik werk eraan.
Vanwege het kanaalalgoritme (iHighest/iLowest) worden soms de toppen gemist.
Laat me alsjeblieft weten over bugs en kenmerken van deze indicator.
Gerelateerde berichten
- BykovTrend_HTF_Signal: Dé Indicator voor MetaTrader 5 voor Trendanalyse
- Master Tools - De ultieme indicator voor MetaTrader 4
- Open Range Breakout Indicator voor MetaTrader 5: Ontdek de Kracht van deze Tool
- Prijs in het Poolse Coördinatensysteem - Indicator voor MetaTrader 5
- Alerts op Nieuwe Bar: Een Handige Indicator voor MetaTrader 4