Single Arrow MT4
- Indicateurs
-
Ahmed Hamed Hamed Eadwan
FRENCH TRANSLATION — FRANÇAIS
===============================
TITLE:
Développeur MQL5 & Trader | Fondateur de R protocols
ABOUT:
Bonjour, je suis Ahmed — un trader et développeur MQL5 basé aux
Émirats Arabes Unis, et fondateur de R protocols. - Version: 1.0
- Activations: 5
Un fichier. Une flèche. Une décision.
SingleArrow MTF est un indicateur professionnel et autonome de signaux de divergence pour MetaTrader 4. Il combine un moteur ZigZag maison en temps linéaire, un filtre de divergence Williams %R avec séparation des jambes, une couche optionnelle de protection des pivots, un tableau d'accord multi-unités de temps et des supports/résistances automatiques — le tout compilé dans un seul fichier, sans indicateurs externes, sans bibliothèques et sans DLL.
Édition MT4 — même moteur, signaux identiques vérifiés
Ceci est la version MetaTrader 4 de SingleArrow MTF. Elle exécute le moteur identique à l'édition MetaTrader 5 — mêmes entrées, mêmes valeurs par défaut, mêmes 7 buffers, mêmes règles anti-repeint — et ses signaux ont été vérifiés un à un face à l'édition MT5 : même symbole, même timeframe et mêmes réglages produisent les mêmes flèches sur les deux plateformes.
- WPR et ATR natifs par barre : les valeurs Williams %R et ATR sont lues directement barre par barre (iWPR / iATR) sans handles d'indicateur, ce qui garde l'indicateur fluide dans le terminal en direct et dans le Testeur de Stratégie MT4.
- Intégration EA inchangée : les 7 noms de buffers et les Variables Globales SA_REP_ / SA_POST_ sont identiques à l'édition MT5, les EA et scripts écrits pour elle fonctionnent sans modification (iCustom + CopyBuffer, disponibles depuis le build 600 de MT4).
Pour qui
- Traders discrétionnaires qui veulent des flèches de divergence propres et fondées sur des règles, plutôt que des oscillateurs bruts.
- Développeurs d'EAs qui ont besoin d'une source de signaux lisible par machine et transparente sur le repaint (tampons + canal GlobalVariable).
- Backtesteurs et stratèges qui ont besoin d'un flux de signaux confirmé et stable dans l'historique (mode Confirm).
L'architecture en une image
- Couche structure : le moteur ZigZag interne extrait les pivots du prix.
- Couche analyse : le filtre de divergence Williams %R valide chaque paire de pivots avec séparation des jambes.
- Couche présentation : flèches, tableau MTF, niveaux S/R, alertes et compteurs de transparence.
1) Le moteur ZigZag interne (pourquoi pas celui de la plateforme ?)
- Temps linéaire O(n) : tout l'historique chargé est traité en une seule passe ; chaque nouveau tick coûte O(1) de travail, l'indicateur reste donc léger sur ticks rapides et historique profond.
- Trio classique, cœur moderne : Deviation / Depth / Backstep gardent leur sens habituel, tandis que la gestion interne des pivots (suppression bornée du Backstep, insertion sûre des pivots en tête) est implémentée de zéro et durcie contre les cas limites.
- Sans iCustom, sans tampons manquants : le moteur est embarqué ; le pipeline de signal ne dépend jamais d'un autre indicateur présent sur le graphique ou dans le dossier du terminal. L'EX4 compilé fonctionne partout, y compris en location Market.
- Déterministe : des paramètres identiques produisent des pivots identiques sur chaque graphique, symbole et build du terminal.
2) Divergence Williams %R avec séparation des jambes
Un simple franchissement de niveau par l'oscillateur n'est pas un signal ici. L'indicateur compare les jambes de prix (mouvements de pivot à pivot) aux jambes d'oscillateur sur la même portion :
- Divergence baissière : le prix marque un plus-haut plus haut tandis que la jambe Williams %R marque un plus-haut plus bas → flèche de vente au plus-haut confirmé.
- Divergence haussière : le prix marque un plus-bas plus bas tandis que la jambe Williams %R marque un plus-bas plus haut → flèche d'achat au plus-bas confirmé.
- Séparation des jambes : les oscillations internes à une jambe sont exclues de la comparaison ; un pic parasite en milieu de jambe ne peut ni falsifier ni masquer une divergence — et deux pivots consécutifs de même direction ne sont jamais comparés, la source classique de faux signaux des combos ZigZag/divergence meilleur marché.
- Seul un pivot qui passe les règles structurelles du ZigZag et le test de divergence WPR produit une flèche. Chaque flèche est une décision complète, pas un indice brut.
3) Modes de signal : Confirm vs Live (à lire attentivement)
Confirm (par défaut, InpConfirmBars > 0) — flux stable dans l'historique. L'indicateur attend N bougies (InpConfirmBars) avant de peindre la flèche : une divergence candidate reste en attente jusqu'à ce que le pivot déclencheur soit confirmé par l'action du prix suivante. Une fois engagée, la flèche est gelée : elle ne bouge jamais, ne disparaît jamais et ne change jamais de direction*. Avec InpConfirmBars = 0, vous passez en mode Live.
Live — la lecture la plus précoce possible. La flèche s'affiche dans la bougie en formation. Par conception, elle peut se déplacer ou s'effacer tant que la bougie n'est pas terminée ; les compteurs de transparence intégrés signalent chaque événement de ce type (section 7).
*Matrice de garantie sans repaint (mode Confirm) :
- Deviation/Depth/Backstep = Manual → garanti, sans condition.
- Depth/Backstep adaptatifs ATR + verrouillage des pivots activé → garanti.
- Adaptatifs + verrouillage désactivé → l'indicateur active le verrouillage automatiquement et vous en informe, précisément pour préserver la garantie.
Cette garantie conditionnelle est déclarée honnêtement dans les métadonnées du produit et imposée par validation des entrées au démarrage.
4) Verrouillage des pivots
Les pivots confirmés sont gelés dans un registre interne ; recalculs ultérieurs, pics de volatilité ou modifications de paramètres ne peuvent les déplacer. C'est le mécanisme qui rend possible la garantie du mode adaptatif, et il est recommandé dès que vous utilisez Live.
5) Paramètres ZigZag adaptatifs ATR
La volatilité change selon les sessions et les symboles. Au lieu de régler Deviation/Depth/Backstep à la main, le mode adaptatif les met à l'échelle de l'ATR actuel dans des bornes configurables (par ex. DepthMax plafonne la Depth adaptative). La structure reste pertinente sur l'or, les cryptos, les indices et le FX sans tutelle manuelle par symbole.
6) Tableau multi-unités de temps
Le même moteur tourne en arrière-plan sur jusqu'à 23 unités de temps supplémentaires (M5/M15/H1/H4/D1 par défaut, entièrement configurables via InpMTFTimeframes, avec InpMTFLookback comme fenêtre d'analyse). Le tableau de bord affiche, par unité de temps, le signal live/confirmé, l'état de divergence et le statut du pivot, afin de ne trader que lorsque votre timeframe s'accorde avec la vue d'ensemble — p. ex. prendre les flèches haussières M15 quand H1/H4 montrent un contexte haussier.
7) Outils de transparence (pour développeurs d'EAs)
- SA_RepaintBars (tampon 5) : compteur continu des événements de repaint en Live — 0 par conception en Confirm.
- SA_PostCommitBars (tampon 6) : compteur continu des ajustements post-confirmation — il audite le mode Confirm lui-même.
- Ce sont des compteurs vivants monotones, pas des séries historiques : seule la valeur courante (2–3 dernières bougies) a un sens. Lisez la barre 0 ou les Global Variables miroir SA_REP_ / SA_POST_ + symbole + unité de temps ; ne scannez jamais l'historique.
- SA_PivotState (tampon 3) indique en plus si le pivot de cette barre est confirmé (1) ou encore en formation (0).
8) Supports/résistances automatiques
L'indicateur regroupe les pivots (de l'unité de temps du graphique, ou de toutes les unités surveillées via InpSRUseAllTF) en niveaux de support/résistance classés avec étiquettes de nombre de contacts, tracés en lignes horizontales, rayons ou zones ombrées (InpSRMode 0/1/2). Les niveaux donnent un contexte immédiat : une flèche haussière qui se forme sur un support classé porte plus d'information qu'une flèche au milieu de nulle part.
9) Alertes
Des alertes optionnelles se déclenchent sur les signaux nouvellement confirmés via les crochets alerte/push/mail de la plateforme. Les textes d'alerte sont en anglais uniquement par conception, en cohérence avec les règles du Market.
10) Référence complète des réglages (groupée)
- Moteur de signal : InpConfirmBars (0 = Live, N = Confirm), InpLiveMargin, InpLockPivots + InpLockAfterBars, InpShowDiag.
- ZigZag : InpDepth / InpBackstep / InpDeviation ; Manual ou adaptatif ATR par paramètre via InpDevMode / InpDepthMode / InpBackstepMode, plus InpATRPeriod, InpATRMult, InpDepthATRMult, InpDepthMin/InpDepthMax, InpBackstepATRMult, InpBackstepMin/InpBackstepMax.
- Divergence : InpWPRPeriod, InpUseDivergence, InpLookback — validé contre le minimum interne du moteur ; les valeurs invalides sont rejetées au démarrage avec un message clair en anglais.
- Tableau MTF : InpMTFEnabled, InpMTFTimeframes (ex. "M5,M15,H1,H4,D1", jusqu'à 23), InpMTFLookback, InpDashEnabled, InpDashCorner, InpDashX/Y, InpDashFontSize.
- S/R : InpSREnabled, InpSRLevelsCount, InpSRTolPts, InpSRMinTouches, InpSRSupportClr/InpSRResistClr, InpSRShowLabel, InpSRMode (0=HLine, 1=Ray, 2=Zone), InpSRUseAllTF.
11) Installation et premier lancement
- Installez depuis l'onglet Market de votre terminal (locations et licences à vie gérées par MetaTrader 4).
- Attachez-le à n'importe quel graphique et n'importe quelle unité de temps.
- Commencez avec les réglages par défaut en Confirm, observez le tableau, puis ajustez le trio ZigZag ou activez le mode adaptatif ATR.
12) Guides pratiques
- Intraday : flèches M15 filtrées par l'accord du tableau H1 ; entrées en Confirm sur replis vers les S/R projetés.
- Swing : pivots H4 en contexte, flèches H1 en déclencheurs.
- EA : lisez les tampons de signal sur la barre 1 pour les flèches engagées ; surveillez l'activité Live via les compteurs de transparence sur la barre 0.
13) Performance et prérequis
- MetaTrader 4, tout symbole, toute unité de temps. Sans DLL, sans fichiers externes, sans indicateurs supplémentaires.
- Cœur en temps linéaire avec traitement incrémental des ticks — conçu pour des flux de ticks rapides sans gel du graphique.
- Désinitialisation propre : les objets du graphique sont retirés au détachement/changement d'unité de temps.
14) Ce que ce produit n'est pas
Il ne place pas d'ordres, ne gère pas d'argent et ne garantit aucun profit. La divergence est une lecture probabiliste et contextuelle. En mode Live, le repaint est voulu et toujours signalé par les compteurs.
15) Journal des modifications
- v1.03 : validation unifiée du Lookback avec le minimum interne du moteur (supprime les cas silencieux sans signal) ; insertion des pivots en tête durcie ; reconstruction S/R renforcée.
- v1.01 : première publication sur le Market.
16) FAQ
- Est-ce qu'il repaint ? En Confirm, sous les conditions de garantie (section 3), non. En Live, les changements sont voulus et comptés en transparence.
- Fonctionne-t-il sur tous les symboles ? Oui ; le mode adaptatif ATR est construit précisément pour garder la structure pertinente d'un symbole à l'autre.
- Mon EA peut-il l'utiliser ? Oui — tampons de signal, canal GlobalVariable et compteurs de repaint le rendent convivial pour les EAs.
- Pourquoi une flèche plutôt que beaucoup d'indices ? Chaque flèche a passé la validation structure + divergence ; moins de signaux, de meilleure qualité, par conception.
- Faut-il le ZigZag de la plateforme sur mon graphique ? Non. Le moteur est embarqué.
17) Intégration iCustom & liaison EA (tampons, code, Global Variables)
SingleArrow MTF publie 7 tampons, lisibles par tout EA via iCustom() + CopyBuffer() — MetaTrader charge l'indicateur automatiquement au premier appel iCustom ; sans attache manuelle.
// BUFFER MAP (index -> content) // 0 SA_Buy BUY arrow price (0.0 = none) // 1 SA_Sell SELL arrow price (0.0 = none) // 2 SA_Signal +1 buy / -1 sell / 0 none // 3 SA_PivotState 1 = confirmed pivot, 0 = still forming // 4 SA_WPR Williams %R value // 5 SA_RepaintBars live-repaint counter (0 by design in Confirm) // 6 SA_PostCommitBars post-commit counter (audits Confirm mode) int h = iCustom(_Symbol, PERIOD_CURRENT, "SingleArrow_MTF_MT4", 34, // InpDepth 8, // InpBackstep 13, // InpDeviation 14, // InpWPRPeriod 5000, // InpLookback false, // InpUseDivergence 1); // InpConfirmBars (0 = Live, 1+ = Confirm) double sig[]; ArraySetAsSeries(sig, true); CopyBuffer(h, 2, 0, 3, sig); // buffer 2 = SA_Signal if(sig[1] == 1) { /* confirmed buy on last closed bar */ } if(sig[1] == -1) { /* confirmed sell on last closed bar */ } // Repaint counters via Global Variables (no CopyBuffer needed): double rep = GlobalVariableGet("SA_REP_" + _Symbol + "_" + IntegerToString((int)PERIOD_CURRENT)); double post = GlobalVariableGet("SA_POST_" + _Symbol + "_" + IntegerToString((int)PERIOD_CURRENT));
// FULL iCustom SIGNATURE (positional order - every declared input) iCustom(symbol, timeframe, "SingleArrow_MTF_MT4", 34, // InpDepth int default 34 8, // InpBackstep int default 8 13, // InpDeviation int default 13 14, // InpWPRPeriod int default 14 5000, // InpLookback int default 5000 false, // InpUseDivergence bool default false 1, // InpConfirmBars int default 1 (0 = Live) 12, // InpLiveMargin int default 12 true, // InpShowDiag bool default true 0, // InpDevMode enum 0=Manual 1=ATR-Adaptive 14, // InpATRPeriod int default 14 0.15, // InpATRMult double default 0.15 0, // InpDepthMode enum 0=Manual 1=ATR-Adaptive 1.0, // InpDepthATRMult double default 1.0 15, // InpDepthMin int default 15 80, // InpDepthMax int default 80 0, // InpBackstepMode enum 0=Manual 1=ATR-Adaptive 1.0, // InpBackstepATRMult double default 1.0 3, // InpBackstepMin int default 3 30, // InpBackstepMax int default 30 false, // InpLockPivots bool default false 3, // InpLockAfterBars int default 3 true, // InpMTFEnabled bool default true "M5,M15,H1,H4,D1", // InpMTFTimeframes string 1200, // InpMTFLookback int default 1200 true, // InpSREnabled bool default true 5, // InpSRLevelsCount int default 5 15, // InpSRTolPts int default 15 2, // InpSRMinTouches int default 2 clrDodgerBlue, // InpSRSupportClr clrOrangeRed, // InpSRResistClr true, // InpSRShowLabel bool default true 0, // InpSRMode int 0=HLine 1=Ray 2=Zone false, // InpSRUseAllTF bool default false true, // InpDashEnabled bool default true CORNER_LEFT_UPPER, // InpDashCorner 10, // InpDashX int default 10 30, // InpDashY int default 30 7); // InpDashFontSize int default 7
- Cycle de vie du handle : créez-le une fois dans OnInit et libérez-le par IndicatorRelease() dans OnDeinit ; jamais d'iCustom par tick.
- Flux engagé sur la barre 1 : lisez SA_Signal / SA_Buy / SA_Sell sur la dernière bougie clôturée — flux stable et cohérent avec le backtest ; SA_PivotState sépare les pivots confirmés (1) de la pointe en formation (0).
- Les compteurs sont des valeurs vivantes monotones : les tampons 5/6 (et les Global Variables SA_REP_/SA_POST_) n'ont de sens que sur les 2–3 dernières bougies — lisez la barre 0, ne scannez jamais l'historique.
- Astuce de performance EA seul : passez InpDashEnabled=false et InpSREnabled=false pour sauter tout le dessin d'objets et garder le handle purement computationnel.
- Deux instances sur le même symbole+unité de temps partagent l'unique canal Global Variables ; cela n'affecte que la lecture de confort, jamais le calcul du signal.
