Cipherline Confluence
- Experten
-
Noel Anjao Alube
Dedicated to developing smart, data-driven trading solutions with a strong focus on performance, risk management, and innovation. Committed to transforming trading ideas into automated strategies. - Version: 2.0
- Aktivierungen: 5
Übersicht
CIPHER ist ein automatisiertes Handelssystem für MetaTrader 5 mit mehreren Engines und mehreren Zeitrahmen, das auf einer Konfluenz-Bewertungsarchitektur basiert. Anstatt sich auf eine einzige Strategie zu verlassen, nutzt es drei unabhängige Engines zur Signalerzeugung – Adaptive Support/Resistance (A2SR), „Smart Money Concepts“ (SMC) und „Liquidity“ – die jeweils gleichzeitig über vier separate Zeitrahmen hinweg ausgewertet werden und nur dann aktiv wird, wenn eine konfigurierbare Mindestanzahl dieser Engines und Zeitrahmen hinsichtlich der Richtung übereinstimmt. Auf dem Signalkern aufbauend integriert es Risikomanagement, Positionskontrolle, Korrelationsfilterung, Sitzungs-/Nachrichtenfilterung, gridbasierte Mittelwertbildung, ein Wiederherstellungssystem sowie ein Live-Informationsfeld direkt im Chart, ergänzt durch eine vollständige Handelsprotokollierung im CSV-Format. Der EA ist so konzipiert, dass er pro Chart-Instanz nur ein einziges Symbol verarbeitet, verfolgt jedoch die Korrelation zu einem festen Korb anderer Hauptwährungspaare (XAUUSD, USDJPY, EURUSD, GBPUSD), um eine Anhäufung korrelierter Risiken zu vermeiden.
Hauptsteuerung
- InpMasterEnable: globaler Ein-/Aus-Schalter für alle Handelsaktivitäten. Bei „false“ initialisiert sich der EA zwar weiterhin und kann das Informationsfeld anzeigen, gibt jedoch keine Orders ab.
- InpPrimaryTF: Der Zeitrahmen, der für die EA-eigenen Signalantriebe zum Schlusskurs (A2SR, SMC, Liquidity) verwendet wird, die auf der „primären“ Instanz laufen – getrennt von den vier Konfluenz-Zeitrahmen.
Engine-Umschalter
Neun unabhängige boolesche Schalter ermöglichen es dem Benutzer, jedes Teilsystem zu aktivieren oder zu deaktivieren, ohne den Code zu verändern: A2SR-Engine, SMC-Engine, Liquidity-Engine, Volatility-Engine, Confluence-Scoring, Smart Recovery, Smart Grid, Chart-Panel und Trade-Logging. Durch das Deaktivieren eines Moduls wird dessen Beitrag zur Konfluenzbewertung entfernt und dessen Berechnung vollständig übersprungen, was zudem die CPU-Auslastung pro Tick verringert.
Risikomanagement
- Positionsgröße: risikoprozentbasiert oder festes Lot. Ist InpFixedLot größer als Null, wird bei jedem Trade dieses feste Volumen verwendet; ansonsten wird die Lotgröße aus „InpRiskPercent“ des aktuellen Kontoguthabens abgeleitet, geteilt durch den Geldwert der Stop-Loss-Distanz in Punkten, unter Verwendung des tatsächlichen Tick-Werts und der Tick-Größe des Symbols (kein fest codierter Pip-Wert), und anschließend auf die Volumenschritte, das Minimum und das Maximum des Brokers normiert.
- Tägliche Drawdown-Obergrenze (InpMaxDailyDrawdown): wird anhand einer Kapital-Basislinie verfolgt, die nach Ablauf eines Tages zurückgesetzt wird, ausgedrückt als prozentualer Verlust gegenüber dieser Basislinie.
- Obergrenze für den Gesamt-/Spitzen-Kapitalrückgang (InpMaxEquityDrawdown): wird ausgehend vom höchsten jemals während der Laufzeit des EAs beobachteten Kapitalwerts verfolgt und als prozentualer Rückgang gegenüber diesem Höchststand ausgedrückt.
- Exposure-Obergrenze pro Symbol (InpMaxExposurePct): Das gesamte offene Volumen des gehandelten Symbols, umgerechnet in einen Prozentsatz des Kontokapitals, wird vor der Zulassung neuer Trades gegen eine Obergrenze abgeglichen.
- Globale Risikobegrenzung (InpGlobalMaxExposure): dieselbe Berechnung, jedoch summiert über alle offenen Positionen auf dem Konto unabhängig vom Symbol, um vor einer übermäßigen Risikopositionierung zu schützen, wenn mehrere EA-Instanzen oder manuelle Positionen gleichzeitig aktiv sind.
Sowohl die Drawdown-Prüfungen als auch die beiden Risikolimit-Prüfungen werden bei jedem Tick durchgeführt, bevor eine neue Order berücksichtigt wird; bei einer Überschreitung wird der Handel für diesen Tick blockiert, ohne dass bestehende Positionen geschlossen werden.
Filter
- Spread-Filter (InpMaxSpread): Der aktuelle Spread in Punkten muss bei oder unter diesem Wert liegen, andernfalls werden neue Trades blockiert.
- Slippage-Filter (InpMaxSlippage): Wird als maximal zulässige Abweichung in Punkten bei der Orderausführung an das Trade-Objekt übergeben; wird auch nach Ausführungsversuchen auf Slippage-bezogene Fehlercodes überwacht.
- Korrelationsfilter (InpCorrelationThreshold): Wird anhand eines gleitenden Pearson-Korrelationskoeffizienten zwischen dem gehandelten Symbol und einem Korb von Hauptwährungspaaren (standardmäßig XAUUSD, USDJPY, EURUSD, GBPUSD standardmäßig), der bei jedem Tick und alle 60 Sekunden über den Timer aktualisiert wird, über ein 100-Bar-H1-Rückblickfenster. Wenn die Korrelation mit einem beliebigen Korbmitglied den Schwellenwert überschreitet, werden neue Trades unterdrückt, um eine Doppelung desselben Richtungsrisikos unter einem anderen Symbolnamen zu vermeiden.
- Sitzungsfilter (InpEnableSessionFilter): Klassifiziert die aktuelle Serverzeit anhand der Tageszeitengrenzen in die Sitzungen Asien, London, New York oder „Off“ (00:00–09:00 Asien, 09:00–16:00 Uhr London, 16:00–24:00 Uhr New York). Der Filter ist derzeit sowohl im Test- als auch im Live-Modus freigegeben, die Sitzungsklassifizierung wird jedoch für das Bedienfeld und zukünftige Einschränkungslogik bereitgestellt.
- Nachrichtenfilter (InpEnableNewsFilter): Ein Platzhalter-Hook, der derzeit immer meldet, dass kein Nachrichtenereignis vorliegt; er ist so konzipiert, dass er in einen externen Wirtschaftskalender-Feed eingebunden werden kann, ohne die übrige Logik des EAs zu verändern.
Confluence-Bewertungssystem
Vier unabhängige Zeitrahmen (InpTF1 bis InpTF4, standardmäßig M5, M15, H1, H4) erhalten jeweils ihren eigenen vollständigen Satz an A2SR-, SMC- und Liquiditäts-Engine-Instanzen – insgesamt zwölf Engine-Instanzen, die alle unabhängig voneinander initialisiert und beendet werden. Bei jedem neuen Balken im primären Zeitrahmen führt der Confluence-Scorer folgende Schritte aus:
- Befragt jede der drei Engines in jedem der vier Zeitrahmen nach einem Richtungssignal (+1, -1 oder 0).
- addiert die Richtungen der drei Engines pro Zeitrahmen, um eine Netto-Richtung pro Zeitrahmen zu erhalten.
- zählt, wie viele der vier Zeitrahmen in positiver Richtung im Vergleich zur negativen Richtung übereinstimmen.
- Er bestimmt eine Gesamtrichtung (je nachdem, welche Seite mehr übereinstimmende Zeitrahmen aufweist).
- Weist einen Konfluenzgrad von 1 bis 6 zu, basierend darauf, wie viele Zeitrahmen übereinstimmen, und auf der Stärke des Ergebnisses des stärksten Zeitrahmens: Stufe 6 erfordert eine einstimmige Übereinstimmung von 4 von 4, Stufe 5 erfordert 3 von 4 mit einem starken Führungswert, Stufe 4 erfordert 2 von 4 mit einem moderaten Führungswert, und die Stufen 3, 2 und 1 stehen für zunehmend schwächere Übereinstimmungsgrade.
- Ein Handel wird nur berücksichtigt, wenn die Konfluenzstufe den Wert „InpConfluenceMinLevel“ (Standardwert 4) erreicht oder überschreitet und die Gesamtrichtung ungleich Null ist.
Signal-Engines (Detail)
A2SR-Engine (Adaptive Support/Resistance): Verwendet ein EMA-Crossover mit 20/50 Perioden im angegebenen Zeitrahmen in Kombination mit einem 14-Perioden-RSI-Momentumfilter und einem Swing-High/Swing-Low-Unterstützungs-/Widerstandsdetektor (5-Bar-Pivot-Erkennung über einen 100-Bar-Rückblick). Ein Kaufsignal setzt einen EMA-Cross nach oben voraus, wobei sich der RSI nicht im überverkauften, momentumnegativen Bereich befinden darf und der Kurs entweder nahe einem erkannten Unterstützungsniveau liegt oder aus einem erkannten Widerstandsniveau ausbricht; der Verkaufsszenario spiegelt dies wider. Erkannte Zonen werden in einer dedizierten CZoneManager-Instanz pro Engine für eine mögliche Chartvisualisierung erfasst.
SMC-Engine (Smart Money Concepts): Erkennt einen „Break of Structure“ (BOS) durch den Vergleich der Höchst- und Tiefststände des aktuellen Bars mit den Höchst- und Tiefstständen der beiden vorherigen Bars (5-Bar-Rückblick über CopyHigh / CopyLow), erkennt einen „Change of Character“ (CHOCH) durch Überprüfung eines 4-Balken-Schlusskursmusters und berechnet einen Premium-/Discount-Prozentsatz, der angibt, wo sich der aktuelle Kurs innerhalb der Spanne vom höchsten Hoch bis zum tiefsten Tief der letzten 50 Balken befindet. Ein Kaufsignal setzt einen bullischen BOS, kein CHOCH und einen Kurs in der „Discount“-Zone (unter 40 Prozent der Spanne) voraus; das Verkaufsszenario ist das Spiegelbild davon mit der „Premium“-Zone (über 60 Prozent).
Liquiditäts-Engine: Derzeit ein vorläufiger Stub, der seinen eigenen Zonenmanager sowie den Symbol-/Zeitrahmen-Kontext initialisiert, jedoch kein Richtungssignal zurückgibt (immer 0). Er ist so strukturiert, dass er um eine Logik zur Erkennung von Liquiditäts-Sweeps und Stop-Hunts erweitert werden kann, ohne dass Änderungen an anderen Stellen im Code erforderlich sind, da der Confluence-Scorer ihn bereits als eine von drei gleichgewichteten Stimmen behandelt.
Volatilitäts-Engine: Berechnet sowohl einen schnellen (14-Perioden-) als auch einen langsamen (50-Perioden-) ATR, ein normalisiertes Volatilitätsverhältnis im Vergleich zu einer gleitenden Historie von 100 Werten vergangener Volatilitätsmessungen und markiert einen „Volatilitätssprung“, wenn die aktuelle Volatilität das Doppelte des historischen Durchschnitts übersteigt. Bietet ATR-basierte Berechnungen für Stop-Loss- und Take-Profit-Kurse (Standardmultiplikatoren von 1,5x ATR für SL und 2x ATR für TP), die als Ausweichlösung dienen, wenn eine Engine keine eigenen SL/TP-Werte liefert, und deren Spike-Erkennung fließt direkt in den Safety Filter ein.
Priorität der Handelsausführung
Wenn die Konfluenzbedingungen erfüllt sind, sucht der EA nach einem konkreten Einstiegskurs und Stop-Niveaus in einer festgelegten Prioritätsreihenfolge: Zuerst das A2SR-Signal (sofern aktiviert und dessen Richtung mit der Konfluenzrichtung übereinstimmt), dann das SMC-Signal, anschließend das Liquiditätssignal und schließlich – falls der Konfluenzgrad 5 oder höher ist, aber keine einzelne Engine ein passendes Richtungssignal geliefert hat – ein Fallback-Markteinstieg bei „starker Konfluenz“ unter Verwendung von ATR-basierten SL/TP. Die Quelle, die den Vorrang erhält, liefert den Einstiegskurs, Stop-Loss, Take-Profit sowie eine für Menschen lesbare Begründungszeichenfolge, die dem Orderkommentar und dem Protokolleintrag hinzugefügt wird.
Smart Recovery System
Wenn aktiviert und nicht im Strategietester-Modus ausgeführt, überwacht das Recovery-System den Drawdown vom Höchstkapitalstand. Liegt der aktuelle Drawdown zwischen 5 Prozent und der konfigurierten Obergrenze „InpRecoveryMaxDrawdown“ und liegt die Anzahl der bereits platzierten Recovery-Trades unter „InpRecoveryMaxTrades“, wird ein zusätzlicher Trade mit einer Größe von „CalculateRecoveryLot()“ eröffnet, wobei das Basislot um einen Multiplikator skaliert wird, der proportional zum aktuellen Drawdown ist (begrenzt auf das 3-Fache des Basis-Lots und zusätzlich durch „InpRecoveryMaxLot“ begrenzt). Alle Erholungstrades werden in einem internen Ticket-Array erfasst; ein Basket-Take-Profit-Mechanismus überprüft alle 60 Sekunden über den Timer den kombinierten schwebenden Gewinn aller erfassten Erholungstrades und schließt den gesamten Basket in dem Moment, in dem der kombinierte Gewinn positiv wird.
Smart-Grid-System
Wenn diese Funktion aktiviert ist, wird bei jeder ausgeführten Order auch eine Grid-Stufe (Kurs, Lotgröße, Ordertyp) in einem internen Array registriert, das auf `InpGridMaxLevels` begrenzt ist (Standardwert 5). Die Grid-Lotgrößen skalieren pro Stufe geometrisch um den Faktor `InpGridMultiplier` (Standardwert 1,5x). Bei jedem Tick, bei dem bereits eine Position offen ist, prüft der EA, ob der Kurs den Auslösepreis einer ausstehenden, noch nicht ausgeführten Grid-Stufe erreicht hat, und führt diese gegebenenfalls aus. Der Status der Grid-Stufe (einschließlich des resultierenden Order-Tickets) wird über spezielle Zugriffsmethoden (GetLevel, SetLevelTicket, GetLevelTicket) gespeichert und aktualisiert, anstatt über direkten Zeigerzugriff, da MQL5 keine Zeiger auf einfache Strukturtypen zulässt. Eine Take-Profit-Berechnung für den Grid-Korb (CalculateGridTP) ist ebenfalls verfügbar; dabei wird ein gewichteter durchschnittlicher Einstiegskurs über alle aktiven Grid-Ebenen berechnet und ein kombiniertes Ziel abgeleitet, wenn der Korb im Minus ist.
Sicherheitsfilter
Ein zentraler Gatekeeper (CSafetyFilter), der außerhalb des Tester-Modus jede aktivierte Teilprüfung – Spread, Slippage, Korrelation, Volatilitätsspitzen und Drawdown – durchführt, bevor die Haupt-Tick-Logik mit der Signalauswertung fortfahren darf. Jede Teilprüfung kann über `SetChecks()` unabhängig ein- und ausgeschaltet werden. Im Testmodus wird der Sicherheitsfilter vollständig umgangen (`CheckAll` gibt bedingungslos „true“ zurück), um Störungen bei Backtesting- und Strategievalidierungsläufen zu vermeiden, während die Prüfungen auf Tages-/Kapital-Drawdown und das Engagement (die separat vom Risikomanager abgewickelt werden) weiterhin gelten.
Protokollierungssystem
Jeder Trade-Einstieg und jedes Ereignis bei einem geschlossenen Trade wird in einen Ringpuffer im Arbeitsspeicher mit einer Kapazität von bis zu 1.000 Einträgen geschrieben (SLogEntry-Datensätze: Zeit, Symbol, Einstiegsgrund, Ausstiegsgrund, Einstiegskurs, Ausstiegskurs, Volumen und Gewinn) und gleichzeitig in das Terminal-Protokoll ausgegeben. Außerhalb des Tester-Modus wird der Puffer regelmäßig über FileOpen / FileWrite in eine CSV-Datei (Cipher_<symbol>_<magic>.csv oder einen benutzerdefinierten Dateinamen) geschrieben, und zwar sowohl in festen Intervallen (alle 10 abgeschlossenen Trades, überprüft in OnTrade) als auch alle 60 Sekunden über den Timer sowie bei der Deinitialisierung des EAs.
On-Chart-Panel
Ein Panel mit dunklem Design, das sich in Echtzeit aktualisiert (Umschaltung über `InpEnablePanel`, Positionierung über `SetPosition`), das aus den Chart-Objekten `OBJ_RECTANGLE_LABEL` und `OBJ_LABEL` aufgebaut ist. Es zeigt an: Symbol, Magic Number, Anzeige für Live-/Tester-Modus; Kontoguthaben, Saldo, schwankender Gewinn (farblich gekennzeichnet in Grün/Rot) und Anzahl der offenen Positionen; das aktuelle Konfluenzniveau von 6, die ermittelte Richtung (KAUF/VERKAUF/NEUTRAL, farblich gekennzeichnet) sowie die textuelle Begründung für das letzte Signal; außerdem den aktuellen Spread (farblich gekennzeichnet im Vergleich zum Max-Spread-Filter), den Namen der aktiven Handelssitzung und etwaige anstehende Nachrichten. Das Panel zeichnet seine Beschriftungen bei jedem Aktualisierungszyklus vollständig neu, anstatt sie an Ort und Stelle zu ändern, und wird bei der Deinitialisierung des EAs zusammen mit allen Chart-Objekten mit dem Präfix „Cipher_“ sauber entfernt.
Premium-Funktionen
- Auto Settings Loader (InpAutoSettingsLoader): Ein Hook, der einmalig bei der Initialisierung ausgeführt wird und dazu dient, symbolspezifische Parametervoreinstellungen zu laden; protokolliert derzeit eine Bestätigungsmeldung und ist für die zukünftige Integration von Voreinstellungstabellen vorbereitet (zu diesem Zweck existiert bereits eine SPreset-Struktur im Quellcode).
- Equity-Schock-Pause (InpAutoPauseOnEquityShock): Außerhalb des Tester-Modus verfolgt diese Funktion die prozentuale Veränderung des Eigenkapitals von Tick zu Tick; wenn das Eigenkapital in einer einzelnen Auswertung um 5 Prozent oder mehr sinkt, wird der Handel vollständig unterbrochen, bis sich das Eigenkapital um mehr als 2 Prozent gegenüber dem Tiefststand während der Pause erholt hat.
- Smart Time Exit (InpSmartTimeExit) und Partial Close (InpPartialClose, wobei InpTP1Ratio/InpTP2Ratio die Aufteilung des Teilausstiegs steuern): Sowohl die Parameter als auch ihre Konfigurationswerte werden an die Klasse `CPremiumFeatures` weitergeleitet, doch die zugrunde liegenden Methoden (`SmartTimeExit`, `PartialClose`) sind derzeit als Stubs implementiert, die `false` bzw. keine Operation zurückgeben; sie sind für eine zukünftige Version reserviert, in der gestaffelte Teilschließungen bei TP1 und zeitbasierte erzwungene Ausstiege implementiert werden.
Korrelations-Engine
Verwaltet einen rollierenden H1-Schlusskursverlauf mit 100 Stichproben für bis zu zehn verfolgte Symbole (das gehandelte Symbol sowie standardmäßig XAUUSD, USDJPY, EURUSD, GBPUSD), berechnet bei jedem Tick und alle 60 Sekunden über den Timer eine vollständige paarweise Pearson-Korrelationsmatrix neu und stellt sowohl eine direkte Abfrage der paarweisen Korrelation als auch eine vom Sicherheitsfilter verwendete IsCorrelated()-Prüfung bereit. Die Korrelationsprüfung gibt derzeit bedingungslos „false“ zurück, bis die vollständige, auf Schwellenwerten basierende Verknüpfung vorliegt; die zugrunde liegende Matrixberechnung ist jedoch bereits vollständig live und steht der Funktion „CheckCorrelation“ des Sicherheitsfilters zur Verfügung, sobald diese letzte Schaltung aktiviert ist.
Lebenszyklusfunktionen
OnInit() erkennt den Tester-/Visualisierungsmodus, generiert eine eindeutige Magic Number aus einem Hash des Symbolnamens in Kombination mit der Chart-ID, reserviert und initialisiert jedes Modul (mit einer „Hard Failure“-Rückgabe bei jedem Allokationsfehler), legt die Parameter für die Handelsausführung fest (Magic Number, Slippage-Abweichung, „Fill-or-Kill“-Auftragsausführung, synchroner Modus), füllt den Korrelationskorb und erstellt das Panel, sofern aktiviert. OnDeinit() leert die Protokolle, zerstört das Panel und alle Chart-Objekte mit dem Präfix „EA“ und löscht sauber jeden zugewiesenen Modulzeiger in umgekehrter Abhängigkeitsreihenfolge. OnTick() führt die vollständige Pipeline pro Tick durch: Aktualisierung der Symboldaten, Aktualisierung des Equity-Höchstwerts, Aktualisierung der Volatilitäts- und Korrelationsverläufe, Überprüfung der Equity-Shock-Pause, Ausführung des Sicherheitsfilters sowie der Exposition-, Sitzungs- und Nachrichtenprüfungen, Verwaltung der Grid-Ebenen bereits offener Positionen sowie Auswertung der Konfluenz-Engines an den Grenzen neuer Balken und Ausführung neuer Trades, sofern die Bedingungen erfüllt sind. OnTrade() erfasst die Historie abgeschlossener Geschäfte, die mit der Magic Number des EAs übereinstimmen, und protokolliert den daraus resultierenden Gewinn/Verlust. OnTimer() führt einen Wartungszyklus im 60-Tick-Intervall durch, der den Log-Export, die Aktualisierung der Korrelationsmatrix, die Aktualisierung der Volatilitätshistorie sowie Take-Profit-Prüfungen für den Recovery-Korb umfasst. OnTester() gibt den Kontogewinn als Optimierungskriterium für den Strategietester zurück.
