Single Arrow MTF
- Indikatoren
-
Ahmed Hamed Hamed Eadwan
GERMAN TRANSLATION — DEUTSCH
==============================
TITLE:
MQL5 Entwickler & Trader | Gründer von R protocols
ABOUT:
Hallo, ich bin Ahmed — ein Trader und MQL5-Entwickler aus
den Vereinigten Arabischen Emiraten und Gründer von R protocols. - Version: 1.0
- Aktivierungen: 5
Eine Datei. Ein Pfeil. Eine Entscheidung.
SingleArrow MTF ist ein professioneller, eigenständiger Divergenz-Signalindikator für MetaTrader 5. Er kombiniert eine eigene lineare ZigZag-Engine, einen Williams-%R-Divergenzfilter mit Bein-Trennung, eine optionale Pivot-Schutzschicht, ein Multi-Timeframe-Zustimmungsdashboard und automatische Unterstützungs-/Widerstandslinien — alles in eine einzige Datei kompiliert, ohne externe Indikatoren, Bibliotheken oder DLLs.
Für wen
- Diskretionäre Trader, die saubere, regelbasierte Divergenzpfeile statt roher Oszillatoren wollen.
- EA-Entwickler, die eine maschinenlesbare, repaint-transparente Signalquelle brauchen (Puffer + GlobalVariable-Kanal).
- Backtester und Strategen, die einen bestätigten, historien-stabilen Signalstrom benötigen (Confirm-Modus).
Die Architektur in einem Bild
- Strukturschicht: die interne ZigZag-Engine extrahiert Pivots aus dem Preis.
- Analyseschicht: der Williams-%R-Divergenzfilter validiert jedes Pivot-Paar mit Bein-Trennung.
- Präsentationsschicht: Pfeile, MTF-Dashboard, S/R-Level, Alerts und Transparenzzähler.
1) Die interne ZigZag-Engine (warum nicht die der Plattform?)
- Lineare Zeit O(n): die gesamte geladene Historie wird in einem Durchlauf verarbeitet; jeder neue Tick kostet O(1) Arbeit — der Indikator bleibt leicht bei schnellen Ticks und tiefer Historie.
- Klassisches Tripel, moderner Kern: Deviation / Depth / Backstep behalten ihre gewohnte Bedeutung, während die interne Pivot-Verwaltung (begrenzte Backstep-Unterdrückung, sicheres Einfügen von Pivots vorn) von Grund auf implementiert und gegen Randfälle gehärtet ist.
- Kein iCustom, keine fehlenden Puffer: die Engine ist eingebettet; die Signalpipeline hängt nie davon ab, dass ein anderer Indikator auf dem Chart oder im Terminal-Ordner liegt. Das kompilierte EX5 funktioniert überall, auch bei Market-Mieten.
- Deterministisch: identische Parameter erzeugen identische Pivots auf jedem Chart, Symbol und Terminal-Build.
2) Williams-%R-Divergenz mit Bein-Trennung
Ein bloßes Oszillator-Levelkreuzen ist hier kein Signal. Der Indikator vergleicht Preis-Beine (Bewegungen von Pivot zu Pivot) mit Oszillator-Beinen auf derselben Spanne:
- Bärische Divergenz: der Preis setzt ein höheres Hoch, während das Williams-%R-Bein ein niedrigeres Hoch setzt → Verkaufspfeil am bestätigten Hoch.
- Bullische Divergenz: der Preis setzt ein tieferes Tief, während das Williams-%R-Bein ein höheres Tief setzt → Kaufpfeil am bestätigten Tief.
- Bein-Trennung: Ausschläge innerhalb eines Beins sind vom Vergleich ausgeschlossen; ein rauschender Ausschlag in der Beinmitte kann eine Divergenz weder vortäuschen noch verdecken — und zwei aufeinanderfolgende gleichgerichtete Pivots werden niemals verglichen, die klassische Falschsignal-Quelle billigerer ZigZag/Divergenz-Kombos.
- Nur ein Pivot, der die ZigZag-Strukturregeln und den WPR-Divergenztest besteht, erzeugt einen Pfeil. Jeder Pfeil ist eine vollständige Entscheidung, kein roher Hinweis.
3) Signalmodi: Confirm vs Live (bitte sorgfältig lesen)
Confirm (Standard, InpConfirmBars > 0) — historien-stabiler Strom. Der Indikator wartet N Kerzen (InpConfirmBars), bevor er einen Pfeil zeichnet: Eine Kandidaten-Divergenz bleibt pending, bis der auslösende Pivot durch die folgende Preisbewegung bestätigt ist. Nach dem Commit ist der Pfeil eingefroren: er bewegt sich nie, verschwindet nie und ändert nie die Richtung*. Mit InpConfirmBars = 0 wechseln Sie in den Live-Modus.
Live — die frühestmögliche Lesart. Der Pfeil erscheint in der laufenden Kerze. Konstruktionsbedingt kann er sich verschieben oder verschwinden, solange die Kerze unfertig ist; die integrierten Transparenzzähler melden jedes solche Ereignis (Abschnitt 7).
*Garantiematrix gegen Repainting (Confirm-Modus):
- Deviation/Depth/Backstep = Manual → unbedingt garantiert.
- ATR-adaptive Depth/Backstep + Pivot-Sperre EIN → garantiert.
- Adaptiv + Sperre AUS → der Indikator aktiviert die Sperre automatisch und informiert Sie — genau um die Garantie zu wahren.
Diese bedingte Garantie ist in den Produkt-Metadaten ehrlich angegeben und wird zur Startzeit durch Eingabevalidierung durchgesetzt.
4) Pivot-Sperre
Bestätigte Pivots werden in einem internen Register eingefroren; spätere Neuberechnungen, Volatilitätsspitzen oder Parameteränderungen können sie nicht verschieben. Sie ist der Mechanismus, der die Garantie des Adaptivmodus ermöglicht, und wird immer empfohlen, wenn Sie Live fahren.
5) ATR-adaptive ZigZag-Parameter
Die Volatilität ändert sich zwischen Sitzungen und Symbolen. Statt Deviation/Depth/Backstep von Hand nachzustellen, skaliert der adaptive Modus sie mit der aktuellen ATR innerhalb konfigurierbarer Grenzen (z. B. begrenzt DepthMax die adaptive Depth). Die Struktur bleibt auf Gold, Krypto, Indizes und FX aussagekräftig — ohne Einzelbetreuung je Symbol.
6) Multi-Timeframe-Dashboard
Dieselbe Engine läuft im Hintergrund auf bis zu 23 zusätzlichen Timeframes (Standard M5/M15/H1/H4/D1, vollständig konfigurierbar über InpMTFTimeframes, mit InpMTFLookback als Analysefenster). Das Chart-Dashboard zeigt je Timeframe Live-/bestätigtes Signal, Divergenzzustand und Pivot-Status, damit Sie nur handeln, wenn Ihr Timeframe zum größeren Bild passt — z. B. bullische M15-Pfeile nur nehmen, wenn H1/H4 bullischen Kontext zeigen.
7) Transparenz-Werkzeuge (für EA-Entwickler)
- SA_RepaintBars (Puffer 5): laufender Zähler für Live-Repainting-Ereignisse — im Confirm-Modus konstruktionsbedingt 0.
- SA_PostCommitBars (Puffer 6): laufender Zähler für Post-Commit-Anpassungen — er auditiert den Confirm-Modus selbst.
- Beides sind lebende monotone Zähler, keine Historienreihen: aussagekräftig ist nur der aktuelle Wert (letzte 2–3 Kerzen). Lesen Sie Balken 0 oder die gespiegelten Global Variables SA_REP_ / SA_POST_ + Symbol + Timeframe; niemals die Historie scannen.
- SA_PivotState (Puffer 3) meldet zusätzlich, ob der Pivot dieser Kerze bestätigt (1) oder noch in Bildung (0) ist.
8) Automatische Unterstützungs-/Widerstandslinien
Der Indikator clustert Pivots (vom Chart-Timeframe oder von allen überwachten Timeframes via InpSRUseAllTF) zu gerankten Unterstützungs-/Widerstandsleveln mit Touch-Zähler-Labels, gezeichnet als horizontale Linien, Rays oder schattierte Zonen (InpSRMode 0/1/2). Level geben sofortigen Kontext: Ein bullischer Divergenzpfeil an einem gerankten Support trägt mehr Information als ein Pfeil im Nirgendwo.
9) Alerts
Optionale Alerts feuern bei neu bestätigten Signalen über die Alert-/Push-/Mail-Hooks der Plattform. Alert-Texte sind konstruktionsbedingt englisch, passend zu den Market-Regeln.
10) Vollständige Einstellungsreferenz (gruppiert)
- Signal-Engine: InpConfirmBars (0 = Live, N = Confirm), InpLiveMargin, InpLockPivots + InpLockAfterBars, InpShowDiag.
- ZigZag: InpDepth / InpBackstep / InpDeviation; je Parameter Manual oder ATR-adaptiv über InpDevMode / InpDepthMode / InpBackstepMode, dazu InpATRPeriod, InpATRMult, InpDepthATRMult, InpDepthMin/InpDepthMax, InpBackstepATRMult, InpBackstepMin/InpBackstepMax.
- Divergenz: InpWPRPeriod, InpUseDivergence, InpLookback — gegen das interne Minimum der Engine validiert; ungültige Werte werden beim Start mit klarer englischer Meldung verworfen.
- MTF-Dashboard: InpMTFEnabled, InpMTFTimeframes (z. B. "M5,M15,H1,H4,D1", bis 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 & erster Start
- Installieren Sie über den Market-Tab Ihres Terminals (Mieten und Lifetime-Lizenzen verwaltet MetaTrader 5).
- Auf beliebigen Chart und beliebiges Timeframe legen.
- Mit den Defaults im Confirm-Modus starten, das Dashboard beobachten, dann das ZigZag-Tripel feinjustieren oder den ATR-adaptiven Modus einschalten.
12) Praxis-Playbooks
- Intraday: M15-Pfeile, gefiltert über die H1-Dashboard-Zustimmung; Confirm-Einstiege an Pullbacks zu den projizierten S/R.
- Swing: H4-Pivots als Kontext, H1-Pfeile als Trigger.
- EA: Signalpuffer auf Balken 1 für committete Pfeile lesen; Live-Aktivität über die Transparenzzähler auf Balken 0 überwachen.
13) Leistung & Anforderungen
- MetaTrader 5, jedes Symbol, jedes Timeframe. Keine DLLs, keine externen Dateien, keine Zusatzindikatoren.
- Linearzeit-Kern mit inkrementeller Tick-Verarbeitung — ausgelegt für schnelle Tick-Ströme ohne Chart-Freezes.
- Saubere Deinitialisierung: Chart-Objekte werden beim Entfernen/Timeframe-Wechsel gelöscht.
14) Was dieses Produkt nicht ist
Es platziert keine Trades, verwaltet kein Geld und gibt keine Gewinnversprechen. Divergenz ist eine probabilistische, kontextuelle Lesart. Im Live-Modus ist Repainting beabsichtigt und wird stets von den Zählern gemeldet.
15) Änderungsprotokoll
- v1.03: einheitliche Lookback-Validierung mit dem internen Minimum der Engine (beseitigt stille Signallos-Randfälle); Pivot-Vorne-Einfügen gehärtet; S/R-Neuaufbau verstärkt.
- v1.01: erste öffentliche Market-Veröffentlichung.
16) FAQ
- Repaintet er? Im Confirm-Modus unter den Garantiebedingungen (Abschnitt 3) nein. Im Live-Modus sind Änderungen beabsichtigt und werden transparent gezählt.
- Funktioniert er auf jedem Symbol? Ja; der ATR-adaptive Modus ist genau dafür gebaut, die Struktur über Symbole hinweg aussagekräftig zu halten.
- Kann meine EA ihn nutzen? Ja — Signalpuffer, GlobalVariable-Kanal und Repainting-Zähler machen ihn EA-freundlich.
- Warum ein Pfeil statt vieler Hinweise? Jeder Pfeil hat Struktur- + Divergenzvalidierung bestanden; weniger, dafür hochwertigere Signale — mit Absicht.
- Brauche ich den Plattform-ZigZag auf meinem Chart? Nein. Die Engine ist eingebettet.
17) iCustom- & EA-Anbindung (Puffer, Code, Global Variables)
SingleArrow MTF veröffentlicht 7 Puffer, lesbar von jeder EA über iCustom() + CopyBuffer() — MetaTrader lädt den Indikator beim ersten iCustom-Aufruf automatisch; kein manuelles Anheften nötig.
// 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", 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", 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
- Handle-Lebenszyklus: Handle einmal in OnInit erzeugen und in OnDeinit per IndicatorRelease() freigeben; niemals iCustom pro Tick.
- Committeter Feed auf Balken 1: SA_Signal / SA_Buy / SA_Sell auf der letzten geschlossenen Kerze lesen — stabiler, backtest-konsistenter Strom; SA_PivotState trennt bestätigte Pivots (1) von der laufenden Spitze (0).
- Zähler sind lebende monotone Werte: Puffer 5/6 (und die Global Variables SA_REP_/SA_POST_) sind nur auf den letzten 2–3 Kerzen aussagekräftig — Balken 0 lesen, niemals Historie scannen.
- Performance-Tipp für reine EAs: InpDashEnabled=false und InpSREnabled=false übergeben, um sämtliche Chartobjekt-Zeichnungen zu überspringen; der Handle bleibt rein rechnerisch.
- Zwei Instanzen auf demselben Symbol+Timeframe teilen sich den einen Global-Variable-Kanal; betroffen ist nur die Komfort-Auslesung, nie die Signalberechnung.
