
Avantages :
- La fonction la plus gourmande en ressources, iBarShift, remplace complètement tous les cycles nécessaires pour récupérer les sommets.
- Toutes les informations nécessaires pour construire le ZigZag pour chaque barre sont accessibles non seulement à chaque moment, mais également pour chaque code externe.
- Pas de sommets suspendus.
- Méthode efficace pour trouver les sommets.
- Extrêmement rapide.
- Fonctionne correctement lors des insertions d'historique et lors du changement de timeframe.
- Idéal pour une utilisation dans un EA.
Inconvénients :
1. Exigences en mémoire : Cet indicateur utilise 5 buffers au lieu de 2 (ou même 1) dans d'autres implémentations similaires. Mais, à mon avis, cela vaut le coût pour les avantages #6 et #7. Aucun ZigZag rapide que j'ai vu ne peut traiter les insertions d'historique sans une reconstruction complète. Le mien le fait efficacement.
2. Lignes supplémentaires : Ces lignes sont nécessaires pour rendre les données visibles pour tout code externe. Elles ne devraient jamais être visibles.
Principe :
Le ZigZag est tracé selon le principe de canalisation. La largeur du canal peut être définie en Points (XLab_ZZ) ou en Pourcentage (XLab_ZZP).
Récupération des sommets :
extern int ChannelWidth = 100; #property indicator_chart_window #property indicator_buffers 1 #property indicator_color1 Red #property indicator_width1 3 datetime LastTime; int init() { LastTime = 0; return(0); } bool GetValue(double dir, int bar, int prevBar, double& peak, int& peakBar, datetime& peakTime) { if (dir < 0) { datetime t = iCustom(Symbol(), 0, "XLab_ZZ", ChannelWidth, 2, bar); int i = iBarShift(Symbol(), 0, t); if (i == prevBar) { t = iCustom(Symbol(), 0, "XLab_ZZ", ChannelWidth, 2, bar + 1); i = iBarShift(Symbol(), 0, t); } double v = iCustom(Symbol(), 0, "XLab_ZZ", ChannelWidth, 1, i); if (v == EMPTY_VALUE) { t = iCustom(Symbol(), 0, "XLab_ZZ", ChannelWidth, 2, bar + 1); i = iBarShift(Symbol(), 0, t); v = iCustom(Symbol(), 0, "XLab_ZZ", ChannelWidth, 1, i); } peak = v; peakBar = i; peakTime = t; } else if (dir > 0) { t = iCustom(Symbol(), 0, "XLab_ZZ", ChannelWidth, 3, bar); i = iBarShift(Symbol(), 0, t); if (i == prevBar) { t = iCustom(Symbol(), 0, "XLab_ZZ", ChannelWidth, 3, bar + 1); i = iBarShift(Symbol(), 0, t); } v = iCustom(Symbol(), 0, "XLab_ZZ", ChannelWidth, 0, i); if (v == EMPTY_VALUE) { t = iCustom(Symbol(), 0, "XLab_ZZ", ChannelWidth, 3, bar + 1); i = iBarShift(Symbol(), 0, t); v = iCustom(Symbol(), 0, "XLab_ZZ", ChannelWidth, 0, i); } peak = v; peakBar = i; peakTime = t; } else { return (false); } return (true); } int start() { if (LastTime == Time[0]) return (0); LastTime = Time[0]; double dir = iCustom(Symbol(), 0, "XLab_ZZ", ChannelWidth, 4, 1); double rdir = -dir; if (dir == EMPTY_VALUE) return (0); double v1, v2, v3, v4, v5; int i1, i2, i3, i4, i5; datetime t1, t2, t3, t4, t5; GetValue(dir, 1, 0, v1, i1, t1); GetValue(rdir, i1, 0, v2, i2, t2); GetValue(dir, i2, i1, v3, i3, t3); GetValue(rdir, i3, i2, v4, i4, t4); GetValue(dir, i4, i3, v5, i5, t5); SetPt("1", v1, t1); SetPt("2", v2, t2); SetPt("3", v3, t3); SetPt("4", v4, t4); SetPt("5", v5, t5); Print(v1, " ", v2, " ", v3, " ", v4, " ", v5, " ", i1, " ", i2, " ", i3, " ", i4, " ", i5); return(0); } void SetPt(string name, double price, datetime time) { ObjectCreate(name, OBJ_ARROW, 0, time, price); ObjectSet(name, OBJPROP_ARROWCODE, 108); ObjectSet(name, OBJPROP_PRICE1, price); ObjectSet(name, OBJPROP_TIME1, time); }
Ce code est un indicateur qui marque (une fois par barre) les cinq premiers sommets (y compris celui en cours de formation).
Attention ! Ce code peut fonctionner de manière incorrecte si le mode 0th Bar est activé.
Mode 0th Bar :
Il est réglé avec la variable DrawZeroBar. Désactivé par défaut.
Il n'est pas recommandé d'utiliser cette option, surtout si l'indicateur est utilisé dans un EA.
Amusez-vous bien avec son utilisation ;) N'hésitez pas à poser vos questions.
Si vous trouvez des bugs, merci de me les signaler. Merci !
Articles connexes
- iMAX3 : Détecteur de Tendances Rapides pour Traders
- Découvrez l'indicateur Tymen STARC Bands MTF pour MetaTrader 5
- Découvrez l'Indicateur ZigZag Amélioré pour MetaTrader 4
- Découvrez l'indicateur 3 en 1 Stochastic pour MetaTrader 5
- Améliorez vos graphiques avec ClearView : Indicateurs et modèles pour MetaTrader 5