Rejoignez notre page de fans
- Vues:
- 338
- Note:
- Publié:
- Mise à jour:
-
Besoin d'un robot ou d'un indicateur basé sur ce code ? Commandez-le sur Freelance Aller sur Freelance
Attention ! Cet indicateur a été créé à partir d’une des versions du code « Prosto ZZ » (zigzag) et est publié ici avec l’autorisation de son auteur, PPC (j’ai participé directement à son test et au signalement des erreurs dans l’algorithme). Ce code est une transposition fidèle de l'indicateur pour la plateforme MetaTrader 4.
Attention ! La bibliothèque « AlexSTAL_OutsideBar.mqh » doit être placée dans le dossier du terminal ..\MQL5\Include\
Qu'est-ce que le ZigZag ?
De mon point de vue, le ZigZag est une sorte de compression du graphique des cours. La construction du ZigZag peut reposer soit sur un seul cours de la barre (par exemple, uniquement le cours de clôture), soit sur les cours haut et bas (type de construction le plus courant).
Au cours de l'étude et de l'utilisation de l'indicateur ZigZag standard, certaines erreurs et lacunes de la solution type proposée par MetaQuotes ont été mises en évidence. Le principal problème réside dans le fait que le ZigZag standard ne prend pas en compte le cas des barres externes (outside bar).
En 2007, Rosh a publié une version de l’indicateur Zigzag2 R, qui devait utiliser un algorithme de traitement des barres extérieures (en utilisant le style de dessin DRAW_ZIGZAG au lieu de DRAW_SECTION, ce qui permet de placer les extrêmes du ZigZag sur une seule barre), mais pour une raison qui lui est elle-même inconnue, la version disponible sur le site ne contient pas le code nécessaire.
Pour poursuivre la discussion, j’aimerais formuler ma propre définition de la construction correcte d’un ZigZag type :
- Les extrêmes High et Low doivent s'alterner strictement ;
- L'extrémum High doit avoir la valeur maximale (ou égale) parmi toutes les barres situées à droite, jusqu'à l'extrémum Low suivant (opposé) ;
- Le plus bas (Low) doit présenter la valeur minimale (ou égale) parmi toutes les barres situées à droite, jusqu’au prochain plus haut (High) opposé .
Examinons un exemple très parlant (EURUSD H1, du 8 au 13 décembre 2006), où se présentent simultanément deux situations impliquant une barre externe, qui ne sont pas correctement traitées par les indicateurs classiques.
![Figure 1. ZigZag type avec les paramètres [12 ; 5 ; 3] et [12 ; 0 ; 0] Figure 1. ZigZag type avec les paramètres [12 ; 5 ; 3] et [12 ; 0 ; 0]](https://c.mql5.com/18/459/zz_01s__1.png)
Figure 1. ZigZag standard avec les paramètres [12;5;3] et [12;0;0]
![Figure 2. Zigzag2 R avec les paramètres [12;5;3] Figure 2. Zigzag2 R avec les paramètres [12 ; 5 ; 3]](https://c.mql5.com/18/459/zz_03s__1.png)
Figure 2. Zigzag2 R avec les paramètres [12 ; 5 ; 3]
![Figure 3. Zigzag2 R avec les paramètres [12;0;0] Figure 3. Zigzag2 R avec les paramètres [12;0;0]](https://c.mql5.com/18/459/zz_02s__3.png)
Figure 3. Zigzag2 R avec les paramètres [12;0;0]
À première vue, on pourrait penser que tout est correct sur la figure 3, mais :
- Les paramètres sont prédéfinis, alors que la construction doit rester correcte quel que soit le choix des paramètres.
- La barre externe de gauche n'est pas traitée correctement, car l'ordre de formation des barres High/Low a son importance :

et, par conséquent, l’ordre d’apparition des segments du ZigZag.
Au cours de l'étude, les ZigZag suivants ont été testés (pas uniquement sur la période publiée) : 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 Tovaroved, ZZ_2L_nen wellx, Channel ZZ, Azzx_larryzz_3_0, RPoint, RPoint-m v2, ZigZagTF. Aucun d'entre eux n'a réussi à remplir entièrement la tâche qui lui était confiée.
Graphiques de cet indicateur sur la période étudiée :
![Figure 4. Paramètres [12;0] Figure 4. Paramètres [12;0]](https://c.mql5.com/18/459/zz_05s__1.png)
Figure 4. Paramètres [12;0]
![Figure 5. Paramètres [23;0] Figure 5. Paramètres [23;0]](https://c.mql5.com/18/459/zz_06s__1.png)
Figure 5. Paramètres [23;0]
Caractéristiques et particularités de la version publiée de ZigZag :
- En un seul passage ;
- Seul le dernier segment est recalculé et redessiné (un segment ne peut pas être annulé, sauf en cas de chargement différé de l'historique) ;
- Mécanisme d’optimisation des calculs à l’intérieur de la barre (pas de recalcul à chaque tick si le cours a varié à l’intérieur d’une barre nulle ou si ses variations n’ont pas dépassé le seuil minimal défini dans la variable MinMotion) ;
- Deux algorithmes permettent de déterminer l’ordre de formation des hauts et des bas d’une barre : en fonction du type de barre (rapide, mais non fiable) et à partir des données d’une période plus courte (historiques requis : vérification indépendante de leur disponibilité et de leur pertinence ou modification de la bibliothèque OutsideBar).
La version ProExtra n’est pas publiée, car la question de l’exactitude des cotations dans MetaTrader 5 n’a pas encore été étudiée.
Exemples supplémentaires de dysfonctionnements d'autres indicateurs ZigZag
![Figure 6. EURUSD H1, du 29 novembre au 7 décembre 2010. Ligne rouge ZigZag avec les paramètres [7;0;0]. Ligne bleue Zigzag2 R avec les paramètres [7;0;0]. Figure 6. EURUSD H1, du 29 novembre au 7 décembre 2010. Ligne rouge ZigZag avec les paramètres [7;0;0]. Ligne bleue Zigzag2 R avec les paramètres [7;0;0].](https://c.mql5.com/18/459/zz_07__2.gif)
Figure 6. EURUSD H1, du 29 novembre au 7 décembre 2010. Ligne rouge ZigZag avec les paramètres [7;0;0]. Ligne bleue Zigzag2 R avec les paramètres [7;0;0]

Figure 7. EURUSD H1, du 29 novembre au 7 décembre 2010. Tracé correct
Conclusion
Malheureusement, cette version n'est pas exempte de défauts. Mais j'y travaille.
Et comme cet indicateur fonctionne selon le même principe de canaux iHighest/iLowest (à l'instar du ZigZag classique), il arrive parfois que certains sommets soient omis.
Je vous invite vivement à signaler tous les bugs et toutes les fonctionnalités que vous remarquez dans cet indicateur.Traduit du russe par MetaQuotes Ltd.
Code original : https://www.mql5.com/ru/code/263
Show Positions on Custom Chart (or standard chart) for MT5
Cet indicateur est un utilitaire qui permet d'afficher des niveaux de transaction étiquetés sur n'importe quel graphique. Si vous souhaitez remplacer vos niveaux de prix natifs sur un graphique natif, désactivez l'option "Show trade levels" dans les propriétés du graphique F8 et attachez cet indicateur. Si vous souhaitez afficher les niveaux de transaction sur un graphique personnalisé (où les niveaux de transaction natifs ne peuvent pas être affichés), attachez simplement cet indicateur. BaseSymbol - spécifie le symbole à partir duquel les données de niveau de transaction seront tirées - pratique pour les symboles personnalisés uniques. TextBarsBack - spécifie le nombre de barres en arrière dans l'historique à partir de la barre actuelle où les étiquettes de niveau seront dessinées. Note : Bien que le nombre magique soit référencé dans le code, il n'est pas actuellement inclus dans les lignes de transaction. Si vous exécutez plusieurs EA sur le même symbole, vous pouvez modifier le code pour afficher les nombres magiques et exécuter plusieurs instances de l'indicateur sur un graphique. Vous pouvez également modifier la taille des polices et l'espacement du texte dans les propriétés de l'objet en fonction des différentes résolutions d'affichage.
Baseline: iMA + ATR Bands
Combine une moyenne mobile avec des bandes supérieures et inférieures basées sur l'ATR pour agir comme un filtre de tendance et un canal de volatilité.
Export Indicator's Values
Ce script exporte les valeurs de l'indicateur vers un fichier CSV.
Bibliothèque de fonctions de hachage et de conversions vers d'autres systèmes de numération
La bibliothèque contient des algorithmes de fonctions de hachage à usage général : adler32, CRC-32, MaHash8v64. Elle comprend également des fonctions permettant de convertir des nombres décimaux en chaînes de caractères au format Base, et inversement.