Lorentzian Classification Open Source
- Indikatoren
- Version: 1.0
Die offizielle MetaTrader-5-Portierung des Lorentzian-Classification-Indikators von jdehorty prognostiziert anhand historischer Kursdaten und unter Verwendung des Lorentz-Abstands die Richtung zukünftiger Kursbewegungen.
Übersicht
Ein Lorentzian Distance Classifier (LDC) ist ein Klassifizierungsalgorithmus des maschinellen Lernens, der historische Daten aus einem mehrdimensionalen Merkmalsraum kategorisieren kann. Dieser Indikator veranschaulicht, wie die Lorentz-Klassifizierung zur Vorhersage der Richtung zukünftiger Kursbewegungen genutzt werden kann. Jede Kerze wird anhand der Kursrichtung über einen festen Horizont von vier Kerzen klassifiziert, wobei der Lorentz-Abstand als Maß für die abstandsbasierte Klassifizierung dient.
Der vollständige Quellcode ist auf GitHub unter der Organisation „AI Edge“ (artificial-intelligence-edge) veröffentlicht. Dies ist die offizielle AI-Edge-Implementierung für MetaTrader 5, die auf demselben Lorentzschen Klassifikationsalgorithmus basiert, der ursprünglich für TradingView entwickelt wurde.
Hintergrund
In der Physik ist der Lorentz-Raum wohl am besten bekannt für seine Rolle bei der Beschreibung der Krümmung der Raumzeit in Einsteins allgemeiner Relativitätstheorie (2). Dieses abstrakte Konzept aus der theoretischen Physik findet auch konkrete Anwendungen bei der Analyse von finanziellen Zeitreihendaten.
Es wurde die Hypothese aufgestellt, dass sich der Lorentz-Raum gut für die Analyse von Zeitreihendaten eignet (4), (5). Mehrere empirische Studien stützen dies: Der Lorentz-Abstand ist gegenüber Ausreißern und Rauschen robuster als der häufig verwendete euklidische Abstand (1), (3), (6) und hat sich gegenüber Dutzenden anderer Abstandsmaße, darunter der Manhattan-Abstand, die Bhattacharyya-Ähnlichkeit und die Kosinus-Ähnlichkeit, als überlegen erwiesen (1), (3). Über eine Vielzahl von Zeitreihendatensätzen hinweg erzielt die Lorentz-Distanz-Metrik durchweg Ergebnisse im oberen Bereich der mittleren Genauigkeitswerte (1).
Der euklidische Abstand wird häufig als Standardmetrik zur Messung der Musterähnlichkeit verwendet, ist jedoch für Finanzmarktdaten möglicherweise nicht optimal geeignet. Finanzdaten können durch die Nähe zu bedeutenden Ereignissen – FOMC-Sitzungen, Ankündigungen der Zentralbanken, geopolitische Schocks – erheblich verzerrt werden. Diese ereignisbedingte Verzerrung lässt sich analog zu der gravitationsbedingten Krümmung beschreiben, die ein massereiches Objekt auf das Raum-Zeit-Kontinuum ausübt. Für Finanzmärkte ist das analoge Kontinuum „Preis-Zeit“.
Ein direkter Vergleich, wie sich Nachbarschaften ähnlicher historischer Punkte im dreidimensionalen euklidischen Raum und im Lorentzschen Raum darstellen, ist in der Galerie (S1) enthalten.
In diesem Vergleich berücksichtigt der Lorentz-Raum die Krümmung von Preis-Zeit besser, da die Lorentz-Abstandsfunktion die euklidische Nachbarschaft so komprimiert, dass sich die neue Nachbarschaftsverteilung zusätzlich zum Ursprung selbst um jede der Hauptmerkmalsachsen gruppiert. Das bedeutet, dass zwar einige nächste Nachbarn unabhängig von der verwendeten Metrik identisch sind, der Lorentz-Raum jedoch auch historische Punkte zulässt, die eine euklidische Metrik niemals zutage fördern würde.
Intuitiv macht dies Sinn. Die Kursentwicklung, die in den Stunden nach einer Rede der Zentralbank eintritt, wird einigen früheren Fällen ähneln, in denen dasselbe Ereignis stattfand – unabhängig davon, ob der Markt überkauft oder überverkauft war oder ob die makroökonomischen Bedingungen insgesamt bullisch oder bärisch waren. Der euklidische Abstand übersieht diese „Nachbarn“ und bringt stattdessen oft irrelevante Daten vom Tag vor dem Ereignis zutage. Der Lorentz-Abstand berücksichtigt die durch das Ereignis verursachte Verzerrung von Preis und Zeit und befreit das Modell von der zeitlichen Verzerrung, die durch die Struktur einer rohen Zeitreihe auferlegt wird.
Einzelheiten zur Implementierung des Klassifizierungsalgorithmus finden Sie im Quellcode.
Anwendung
Der Indikator zeichnet eine farbcodierte Balkenüberlagerung, zwei Kernel-Regressionsschätzlinien sowie Beschriftungen für bullische/bärische Signale direkt im Chart ein. Eine Handelsstatistiktabelle in der Ecke zeigt Echtzeit-Feedback zur Gewinnquote für die Verwendung im Feature Engineering an. Alle visuellen Elemente und ihre Steuerelemente, einschließlich der Tabelle mit den Handelsstatistiken, sind in der Galerie dargestellt (S2, S3).
Die Signale lesen
Jedem Balken wird vom Modell ein ganzzahliger Vorhersagewert zugewiesen. Positivere Werte entsprechen einer eher bullischen Stimmung, negativere Werte einer eher bärischen Stimmung – sequenzielle Muster in diesen Werten können dabei helfen, Fraktale zu identifizieren und potenzielle Wendepunkte vom Rauschen zu unterscheiden, anstatt sich allein auf die Klassifizierung eines einzelnen Balkens zu verlassen.
Die Kernel-Schätzlinien werden mittels Kernel-Regression unter Verwendung eines rationalen quadratischen Kernels berechnet. Sie dienen als zusätzliche Bestätigung der Bar-für-Bar-Vorhersagen des Modells.
Vorgeschlagene Ausstiegspunkte können über das Einstellungsmenü aktiviert werden. Strenge Ausstiege basieren auf dem Trainingsintervall des Modells (4 Balken), während dynamische Ausstiege Vorschläge auf der Grundlage einer Kernel-Regression in Echtzeit liefern.
Die Handelsstatistiktabelle ist eine Echtzeit-Anzeige der Handelsperformance für die ausgewählte Anzahl historischer Balken (Standard: 2000). Es handelt sich dabei nicht um eine robuste Backtesting-Methode – standardmäßig gibt sie lediglich wieder, ob ein historischer Trade 4 Balken nach dem Einstieg profitabel war oder, im Modus „Dynamische Ausstiege“, ob er nach der Ausführung des dynamischen Ausstiegs profitabel war. Sie dient zur Unterstützung des Feature-Engineering in Echtzeit und hilft dabei, die Modelleinstellungen an ein bestimmtes Chart anzupassen.
„Early Flips“, die in der Handelsstatistiktabelle angezeigt werden, zählen Fälle, in denen ein neues ML-Signal generiert wurde, bevor der Ausstieg aus dem vorherigen Handel erreicht wurde. Eine hohe Anzahl kann auf einen unruhigen Markt hindeuten und die Aktivierung zusätzlicher Signalfilter nahelegen.
Allgemeine Einstellungen
- Quelle – Standard: „Schlusskurs“. Steuert die Quelle der Eingabedaten.
- Anzahl der Nachbarn – Standard: 8, min: 1, max: 100. Legt die Anzahl der zu berücksichtigenden Nachbarn fest.
- Max. Anzahl der vergangenen Balken – Standard: 2000.
- Anzahl der Merkmale – Standard: 5, min: 2, max: 5. Legt die Anzahl der für Vorhersagen verwendeten Merkmale fest.
- Farbkompression – Standard: 1, min: 1, max: 10. Legt den Kompressionsfaktor für die Intensität der Farbskala fest.
- Ausstiege anzeigen — Standard: false. Zeigt Ausstiegspfeile im Chart an. Strenge Ausstiege basieren auf dem Trainingsintervall des Modells (4 Balken); siehe „Dynamische Ausstiege verwenden“ weiter unten für kernelbasierte Ausstiege.
- „Dynamische Ausstiegspunkte verwenden “ – Standard: false. Legt fest, ob der Ausstiegsschwellenwert basierend auf einer Kernel-Regression dynamisch erweitert wird, um vorzeitige Ausstiege zu reduzieren.
- Vollständigen Verlauf einbeziehen — Standard: false. Wenn aktiviert, wird der gesamte Balkenverlauf für das Training durchsucht; wenn deaktiviert, werden nur die letzten „Max Bars Back“-Balken verwendet.
- „Handelsstatistiken anzeigen “ — Standard: true. Legt fest, ob die Tabelle mit den Handelsstatistiken angezeigt wird (nur bei der Kalibrierung – kein Backtest). Standardmäßig wird die Rentabilität 4 Balken nach dem Einstieg oder beim dynamischen Ausstieg angezeigt, sofern „Dynamische Ausstiege verwenden“ aktiviert ist.
- „Worst-Case-Schätzung verwenden “ – Standard: false. Wenn diese Option aktiviert ist, wird für Einträge in der Handelsstatistik der Schlusskurs des Balkens anstelle des Mittelkurses verwendet, was zu einer konservativeren Schätzung führt, die mit traditionellen Backtest-Ergebnissen übereinstimmt.
Filtereinstellungen
- Volatilitätsfilter verwenden – Standard: true. Legt fest, ob der Volatilitätsfilter angewendet werden soll.
- Regime-Filter verwenden – Standard: „true“. Legt fest, ob der Trenderkennungsfilter angewendet werden soll.
- ADX-Filter verwenden – Standard: „false“. Legt fest, ob der ADX-Filter angewendet werden soll.
- Regime-Schwellenwert – Standard: -0,1, min: -10, max: 10. Steuert den Regime-Erkennungsfilter zur Unterscheidung zwischen Trend- und Seitwärtsbedingungen.
- ADX-Schwellenwert – Standard: 20, min: 0, max: 100. Legt den ADX-Schwellenwert fest, um Trend- und Seitwärtsphasen zu unterscheiden.
- EMA-Filter verwenden – Standard: false. Wenn diese Option aktiviert ist, erfordern Long-Positionen einen Schlusskurs über dem EMA und Short-Positionen einen Schlusskurs unterhalb des EMA.
- EMA-Periode — Standard: 200. Periode des EMA, der für den EMA-Filter verwendet wird.
- SMA-Filter verwenden – Standard: false. Wenn diese Option aktiviert ist, erfordern Long-Positionen einen Schlusskurs über dem SMA und Short-Positionen einen Schlusskurs unterhalb des SMA.
- SMA-Periode – Standard: 200. Periode des SMA, der für den SMA-Filter verwendet wird.
Einstellungen für die Kernel-Regression
- Mit Kernel handeln — Standard: true. Legt fest, ob mit dem Kernel gehandelt werden soll.
- Kernel-Schätzung anzeigen – Standard: true. Legt fest, ob die Kernel-Schätzung im Chart angezeigt wird.
- Kernel-Glättung verwenden – Standard: false. Crossover-basierte Glättung: weniger Farbwechsel, mehr ML-Einstiege.
- Rückblickfenster – Standard: 8, Min.: 3. Legt die Anzahl der für die Schätzung verwendeten Balken fest. Empfohlener Bereich: 3–50.
- Relative Gewichtung – Standard: 8. Legt die relative Gewichtung der Zeitrahmen fest. Empfohlener Bereich: 0,25–25.
- Regression ab Balken starten – Standard: 25. Legt den Balkenindex fest, ab dem die Regression beginnt. Empfohlener Bereich: 2–25.
- Kernel-Verzögerung – Standard: 2. Verzögerung, die für die Kreuzungserkennung verwendet wird; niedrigere Werte führen zu früheren Kreuzungen. Empfohlener Bereich: 1–2.
Einstellungen für das Feature Engineering
Hinweis: Der Abschnitt „Feature Engineering“ dient der Feinabstimmung der für Vorhersagen verwendeten Merkmale. Die Standardwerte sind für die Zeitrahmen von 4H bis 12H bei den meisten Charts optimiert, sollten aber auch in anderen Zeitrahmen recht gut funktionieren.
Es gibt fünf Merkmalsslots (Merkmal 1–5), die jeweils unabhängig voneinander konfigurierbar sind. Die Einstellung „Merkmalsanzahl“ (unter „Allgemeine Einstellungen“) legt fest, wie viele Merkmalsslots verwendet werden. Beträgt die Merkmalsanzahl beispielsweise 3, werden Merkmal 1, Merkmal 2 und Merkmal 3 verwendet. Mindestens 2 Merkmale müssen aktiv sein. Für jeden Slot wählen Sie aus den folgenden vier Optionen den zu verwendenden Merkmalstyp aus: RSI, WT, CCI und ADX. Nachdem Sie einen Typ ausgewählt haben, legen Sie die beiden Parameter dieses Slots fest: Parameter A und Parameter B. Was diese Parameter steuern, hängt von dem Typ ab, den Sie für diesen Slot ausgewählt haben:
- RSI – Parameter A: RSI-Periode. Parameter B: EMA-Glättungsperiode, die auf den RSI angewendet wird.
- WT (WaveTrend) – Parameter A: Kanallänge. Parameter B: Durchschnittslänge (Glättung der zweiten Stufe).
- CCI – Parameter A: CCI-Periode. Parameter B: EMA-Glättungsperiode, die auf den CCI angewendet wird.
- ADX – Parameter A: ADX-Periode. Parameter B: wird nicht verwendet – ADX ignoriert ihn.
Die Verwendung desselben Typs in mehr als einem Slot (z. B. RSI sowohl in Merkmal 1 als auch in Merkmal 5) ist zulässig und zählt als zwei separate Merkmale, typischerweise mit unterschiedlichen Parameterwerten.
Standardwerte pro Feld:
- Merkmal 1 – RSI. Parameter A (Periode): 14. Parameter B (Glättung): 1.
- Feature 2 – WT. Parameter A (Kanallänge): 10. Parameter B (durchschnittliche Länge): 11.
- Merkmal 3 – CCI. Parameter A (Periode): 20. Parameter B (Glättung): 1.
- Merkmal 4 – ADX. Parameter A (Periode): 20. Parameter B: wird nicht verwendet.
- Merkmal 5 – RSI. Parameter A (Periode): 9. Parameter B (Glättung): 1.
Anzeigeeinstellungen
- Balkenfarben anzeigen – Standard: true. Legt fest, ob Balkenfarben angezeigt werden sollen.
- Balken-Prognosewerte anzeigen — Standard: true. Legt fest, ob die Modellbewertung jedes Balkens als Ganzzahl angezeigt wird.
- ATR-Offset verwenden — Standard: „false“. Legt fest, ob anstelle des Balkenprognose-Offsets ein ATR-basierter Offset verwendet werden soll.
- Balkenprognose-Offset — Standard: 0, Min.: 0. Legt den Offset der Balkenprognosen als Prozentsatz vom Höchst- bzw. Tiefstwert des Balkens fest.
Quellcode
Der vollständige MQL5-Quellcode ist auf GitHub unter der Organisation „AI Edge“ veröffentlicht. Die GitHub-Seite ist in der Galerie (S4) abgebildet.
Risikohinweis
Der Handel birgt ein erhebliches Verlustrisiko. Dieser Indikator klassifiziert historische Marktzustände und liefert Signale zur Bewertung durch den Trader. Er garantiert keine gewinnbringenden Ergebnisse. Die vergangene Klassifizierungsleistung lässt keine Rückschlüsse auf zukünftige Ergebnisse zu.
Literaturverzeichnis
- R. Giusti und G. E. A. P. A. Batista, „An Empirical Comparison of Dissimilarity Measures for Time Series Classification“, Brasilianische Konferenz für Intelligente Systeme 2013, Okt. 2013, DOI: 10.1109/bracis.2013.22.
- Y. Kerimbekov, H. S. Bilge und H. H. Ugurlu, „The use of Lorentzian distance metric in classification problems“, Pattern Recognition Letters, Bd. 84, S. 170–176, Dez. 2016, DOI: 10.1016/j.patrec.2016.09.006.
- A. Bagnall, A. Bostrom, J. Large und J. Lines, „The Great Time Series Classification Bake Off: Eine experimentelle Bewertung kürzlich vorgeschlagener Algorithmen“, ResearchGate, 4. Februar 2016.
- H. S. Bilge, Yerzhan Kerimbekov und Hasan Huseyin Ugurlu, „A new classification method by using Lorentzian distance metric“, ResearchGate, 2. September 2015.
- Y. Kerimbekov und H. Sakir Bilge, „Lorentzian Distance Classifier for Multiple Features“, Tagungsband der 6. Internationalen Konferenz über Anwendungen und Methoden der Mustererkennung, 2017, DOI: 10.5220/0006197004930501.
- V. Surya Prasath et al., „Auswirkungen der Wahl der Abstandsmetrik auf die Leistung des KNN-Klassifikators – Ein Überblick.“ [Online].
Danksagungen
Ursprünglicher Indikator:
- veryfid – Für viele wertvolle Erkenntnisse, Diskussionen und Ratschläge, die zur Gestaltung dieses Projekts beigetragen haben.
- capissimo – Für Open-Source-Ideen zu verschiedenen Implementierungen des „Nearest-Neighbor“-Verfahrens, von denen einige als Inspiration für das ursprüngliche Vorhaben dienten.
- RikkiTavi – Für viele wertvolle Gespräche zum Thema Physik und für die Hilfe bei der Entwicklung eines Mechanismus zur Visualisierung verschiedener Abstandsalgorithmen in 3D mithilfe von JavaScript.
- jlaurel – Für wertvolle Literaturempfehlungen, die dazu beigetragen haben, die zugrunde liegende Thematik zu untermauern.
- annutara – Für das Beta-Testen des ursprünglichen Indikators und den Austausch hilfreicher Ideen und Erkenntnisse bereits in einer frühen Entwicklungsphase.
- jasontaylor7 – Für das Beta-Testen des ursprünglichen Indikators und viele hilfreiche Gespräche, die den Backtesting-Workflow geprägt haben.
- meddymarkusvanhala – Für das Beta-Testing des ursprünglichen Indikators.
- dlbnext – Für das detaillierte Backtesting des ursprünglichen Indikators und den Austausch von Ideen zur Verbesserung der Benutzererfahrung.
