Neuronale Netze im Trading: LSTM-Optimierung für die multivariate Zeitreihenprognose (letzter Teil)
Einführung
Im vorherigen Artikel haben wir die theoretischen Grundlagen des DA-CG-LSTM-Frameworks untersucht, das speziell für komplexe Prognoseaufgaben mit dynamischen multivariaten Zeitreihen entwickelt wurde.
Moderne Finanzmärkte sind komplexe dynamische Systeme, in denen zahlreiche Faktoren kontinuierlich interagieren: makroökonomische Indikatoren, Nachrichtenereignisse, Zinsänderungen, das Verhalten wichtiger Marktteilnehmer und viele andere, oft latente Variablen. Zeitreihen, die Kurs- und Handelsvolumendynamiken darstellen, dienen als primäre Informationsquelle über diese Prozesse. Die Analyse solcher Daten erfordert jedoch ein Modell, das in der Lage ist, sowohl langfristige Trends als auch kurzfristige Schwankungen gleichzeitig zu erfassen und gleichzeitig wirklich signifikante Signale vom Hintergrundrauschen zu unterscheiden.
Herkömmliche Methoden der Zeitreihenanalyse erweisen sich oft als nicht flexibel genug und lassen die Sensibilität für die Vielzahl der beteiligten Marktfaktoren vermissen. Ihre begrenzte Fähigkeit, sich selektiv auf Schlüsselmerkmale und Zeitintervalle zu konzentrieren, führt zu einer Verschlechterung der Prognosegenauigkeit unter hochvolatilen Marktbedingungen. Diese Einschränkungen bildeten den Ausgangspunkt für die Entwicklung des DA-CG-LSTM-Frameworks – einer Architektur, die einen dualen Aufmerksamkeitsmechanismus mit einer modifizierten rekurrenten Blockstruktur kombiniert.
Eine der Hauptstärken von DA-CG-LSTM ist seine Flexibilität bei der Verarbeitung multimodaler Daten. In realen Handelsszenarien ist es unerlässlich, nicht nur Kursniveaus, sondern auch abgeleitete Indikatoren und externe wirtschaftliche Ereignisse zu analysieren. Das betrachtete Framework kann sich dynamisch an Änderungen der Merkmalswichtigkeit bei jedem Zeitschritt anpassen und die Aufmerksamkeit automatisch auf die relevantesten Informationsquellen umverteilen. Infolgedessen kann das Modell komplexe Beziehungen zwischen zahlreichen Merkmalen effektiv identifizieren und seine Prognosen an den aktuellen Marktkontext anpassen.
Besonders wertvoll ist der in der Architektur implementierte zweistufige Aufmerksamkeitsmechanismus. Auf der ersten Ebene konzentriert sich das Modell auf Merkmale und bestimmt, welche Eigenschaften derzeit den größten Einfluss auf die Marktdynamik haben. Auf der zweiten Ebene verlagert sich die Aufmerksamkeit auf zeitliche Intervalle. Das Modell bewertet, welche Segmente historischer Daten am informativsten für die Prognose der wahrscheinlichsten Bewegung sind. Dieser zweistufige Prozess ermöglicht eine tiefe Informationsfilterung, wodurch das System sekundäre Daten ignorieren und sich auf wirklich signifikante Signale konzentrieren kann, unabhängig davon, ob es sich um größere Trendwenden oder lokalisierte Anomalien handelt.
Ein weiterer wichtiger Vorteil von DA-CG-LSTM ist seine hohe Robustheit gegenüber verrauschten Daten, was für den praktischen Einsatz in realen Marktumgebungen entscheidend ist. Finanzzeitreihen enthalten typischerweise zahlreiche zufällige Schwankungen, die nicht durch zugrunde liegende Marktmechanismen, sondern durch verschiedene externe oder interne stochastische Faktoren verursacht werden. Der modifizierte CG-LSTM-Block innerhalb des Frameworks fungiert als adaptiver Filter, der in der Lage ist, den Einfluss verrauschter Merkmale dynamisch zu reduzieren. Durch seine internen Mechanismen zur Verwaltung von Merkmals- und Zeitschrittgewichten konzentriert sich das Modell auf die Identifizierung stabiler, wiederkehrender Kursverhaltensmuster, wodurch die Prognoseleistung erheblich verbessert wird.
Ein weiteres charakteristisches Merkmal von DA-CG-LSTM ist seine Fähigkeit, lange Zeitreihen effizient zu verarbeiten, ohne die Sensitivität gegenüber kurzfristigen Änderungen zu verlieren. Bei herkömmlichen rekurrenten Netzwerken führt eine Erhöhung der Länge der analysierten Sequenz oft zu verschwindenden Gradienten und einem Rückgang der Qualität der Modellierung langfristiger Abhängigkeiten. In der von den Autoren des Frameworks vorgeschlagenen Architektur wird dieses Problem durch einen frühzeitigen Informationsfilterungsprozess auf Basis primärer Aufmerksamkeit und eine spezialisierte Speicherorganisation im CG-LSTM-Block angegangen. Dies ermöglicht es dem Modell, den Fokus auf langfristige Trends beizubehalten und gleichzeitig schnell auf kurzfristige Schwankungen zu reagieren, wie etwa Nachrichtenveröffentlichungen oder Intraday-Volatilitätsspitzen.
Infolgedessen kombiniert das DA-CG-LSTM-Framework erfolgreich Anpassungsfähigkeit an mehrdimensionale Daten, tiefe Informationsfilterungsfähigkeiten, Rauschrobustheit und gute Trainierbarkeit über lange zeitliche Horizonte. Diese Qualitäten machen es zu einem leistungsstarken Werkzeug für den Aufbau moderner Zeitreihenprognosesysteme.
Der DA-CG-LSTM-Algorithmus basiert auf der sequenziellen Verarbeitung von Daten durch mehrere Schlüsselmodule.
In der ersten Stufe durchläuft die ursprüngliche Darstellung einer multivariaten Zeitreihe ein primäres Aufmerksamkeitsmodul, das die Bedeutung einzelner Merkmale zu jedem Zeitschritt gewichtet. Dies ermöglicht es dem Modell, die relevantesten Informationen zu komprimieren und hervorzuheben, während unnötiges Informationsrauschen eliminiert wird.
In der nächsten Stufe werden die Daten an ein sekundäres Aufmerksamkeitsmodul weitergeleitet, bei dem sich der Fokus auf zeitliche Intervalle verlagert. Das Modell bewertet, welche Segmente historischer Daten eine entscheidende Rolle bei der Erstellung zukünftiger Vorhersagen spielen.
Die verarbeiteten Daten werden dann in einen modifizierten CG-LSTM-Block eingespeist, in dem Merkmale entsprechend ihrer intrinsischen Bedeutung und Interaktionen aggregiert werden. Der CG-LSTM-Block unterscheidet sich von einem herkömmlichen LSTM dadurch, dass er zusätzliche Kontrollmechanismen enthält, die Speicherzellenoperationen basierend auf der Signifikanz sowohl von Merkmalen als auch von Zeitintervallen beeinflussen. Dies ermöglicht eine genauere Modellierung komplexer mehrdimensionaler Abhängigkeiten zwischen Marktfaktoren.
Die endgültige aggregierte Darstellung, die durch die beiden Aufmerksamkeitsebenen und den CG-LSTM-Block gebildet wird, dient anschließend der Vorhersage der Zielvariable – zum Beispiel des zukünftigen Kurses eines Vermögenswerts oder der Richtung seiner Kursbewegung.
Diese mehrstufige Architektur ermöglicht es dem Modell, gleichzeitig kurzfristige und langfristige Abhängigkeiten zu erfassen, den Einfluss von Rauschen zu minimieren und seine Datenverarbeitungsstrategie adaptiv an den aktuellen Marktkontext anzupassen.
Die Visualisierung des DA-CG-LSTM-Frameworks durch die Autoren ist nachfolgend dargestellt.

In diesem Artikel werden wir den nächsten Schritt bei der Entwicklung unserer eigenen Implementierung der von den Autoren des DA-CG-LSTM-Frameworks vorgeschlagenen Ansätze unter Verwendung von MQL5 machen. Der Hauptfokus liegt auf dem Entwurf der Modellarchitekturen.
Modellarchitektur
Wie bereits erwähnt, basiert das DA-CG-LSTM-Framework auf zwei grundlegenden Komponenten: Aufmerksamkeitsmodulen und dem modifizierten rekurrenten CG-LSTM-Block. Zusammen bilden diese Elemente eine robuste Architektur, die dem Modell die Flexibilität, Rauschresistenz und die Fähigkeit verleiht, komplexe mehrstufige zeitliche Abhängigkeiten zu erfassen, die für Finanzmarktanwendungen erforderlich sind. Unter Bedingungen hoher Volatilität und Marktunsicherheit sind solche Eigenschaften nicht nur wünschenswert – sie sind für den Aufbau zuverlässiger Handelssysteme unerlässlich.
Im praktischen Teil des vorherigen Artikels haben wir den Prozess der Implementierung des CG-LSTM-Blocks in MQL5 gründlich untersucht. Die resultierende Komponente erfüllt erfolgreich drei kritische Funktionen: Merkmalsfilterung zur Eliminierung unnötigen Rauschens, effiziente Verwaltung des internen Zustands des Modells zur Bewahrung langfristiger Informationen und Datenaggregation über mehrere zeitliche Skalen hinweg. Ihre Fähigkeit, unstrukturiertes Rauschen zu unterdrücken und gleichzeitig stabile Lerndynamiken aufrechtzuerhalten, ermöglicht die Entwicklung von Modellen, die die Prognosegenauigkeit über längere historische Zeiträume bewahren.
Um Beziehungen zwischen Merkmalen und zeitlichen Sequenzen zu identifizieren und zu analysieren, schlugen die Autoren von DA-CG-LSTM eine verbesserte Version des linearen Aufmerksamkeitsmechanismus vor. Bei unserer Implementierung haben wir uns entschieden, das zuvor entwickelte CNeuronLinearAttention-Objekt zu verwenden, das während der Entwicklung des Hidformer-Frameworks erstellt wurde. Obwohl sich die architektonischen Details der beiden Lösungen unterscheiden, bleibt ihr zugrunde liegendes Konzept gleich.
Angesichts dieser Überlegungen haben wir uns entschieden, das bestehende Aufmerksamkeitsmodul ohne zusätzliche Modifikationen zu verwenden. Dies beschleunigte den Entwicklungsprozess erheblich und minimierte die Risiken, die mit der Integration neuer, unzureichend getesteter Lösungen verbunden sind. Als Ergebnis verfügen wir nun über einen vollständigen Satz an Komponenten, die für den Aufbau des DA-CG-LSTM-Frameworks erforderlich sind.
Der nächste logische Schritt besteht darin, die Architektur trainierbarer Modelle auf Basis dieser Komponenten zu entwerfen. Hier sind wir über die traditionelle Aufgabe der Vorhersage zukünftiger Zeitreihenwerte hinausgegangen. Auf Finanzmärkten ist es wichtig, nicht nur die Kursdynamik vorherzusagen, sondern diese Vorhersagen auch effektiv bei Handelsentscheidungen zu nutzen, um sowohl das Risiko als auch die potenziellen Renditen zu optimieren.
Um dieses Ziel zu erreichen, haben wir die besten Ideen aus der HiSSD-Architektur integriert, die eine hohe Wirksamkeit bei der Rauschunterdrückung und der Verarbeitung komplexer nichtlinearer Abhängigkeiten gezeigt hat. Die Struktur DA-CG-LSTM wurde in den Encoder integriert, indem ein latenter Raum globaler und lokaler Agenten-Skills konstruiert wurde, die den Zustand des Marktumfelds beschreiben. Dieser latente Raum dient als Grundlage für nachfolgende Phasen der Analyse und Entscheidungsfindung.
Auf dieser Basisstruktur haben wir ein Akteur–Direktor–Kritiker-Framework für bestärkendes Lernen implementiert. Diese Integration ermöglicht es dem System, nicht nur Prognosen zu erstellen, sondern auch strategisch Aktionen auszuwählen, die die erwarteten Erträge maximieren.
Die Architektur der trainierbaren Modelle wird in der Methode CreateDescriptions definiert. Ihre Parameter erhalten Zeiger auf sechs dynamische Array-Objekte, die jeweils einer separaten Ebene der gesamten Modellarchitektur entsprechen:
- Environment State Encoder – verantwortlich für die Konstruktion des latenten Raums der globalen Skills der Agenten. Er verallgemeinert Informationen über den aktuellen Marktzustand und deckt verborgene Beziehungen zwischen den Faktoren auf, die die Marktdynamik beeinflussen.
- Low-Level Controller – generiert lokale Skills der Agenten basierend auf den analysierten Umweltmerkmalen. Durch deren Interpretation im Kontext globaler Skills synthetisiert der Controller einen Tensor möglicher Aktionen, der die vielversprechendsten Handelsszenarien darstellt, während sowohl kurzfristige als auch langfristige Markttrends berücksichtigt werden.
- Akteur – empfängt den Aktionstensor vom Controller und generiert, unter Bewertung im Kontext des aktuellen Kontostands, des Risikoniveaus und vordefinierter strategischer Ziele, die endgültige Handelsentscheidung, die auf die Maximierung des Gewinns bei gleichzeitiger Kontrolle akzeptabler Verluste abzielt.
- Probabilistisches Trendprognosemodell – trägt zur Bildung informativerer globaler Agenten-Skills bei, indem es diese mit einer probabilistischen Darstellung der erwarteten Marktrichtung anreichert. Dies ermöglicht es dem Modell, die probabilistische Natur von Marktprozessen zu berücksichtigen und robustere Strategien zu konstruieren.
- Direktor – führt eine vorläufige Aktionsfilterung durch und verringert die Wahrscheinlichkeit von Entscheidungen, die mit übermäßig hohem Risiko verbunden sind. Er leitet die Policy des Akteurs hin zu konservativeren und zuverlässigeren Szenarien, die mit den aktuellen Marktbedingungen im Einklang stehen.
- Kritiker – bewertet die Effektivität ausgewählter Strategien über den zukünftigen Zeithorizont und passt das Agentenverhalten an, um den kumulativen langfristigen Gewinn zu maximieren und gleichzeitig ein angemessenes Risikoniveau beizubehalten.
Die Methode CreateDescriptions führt eine strikte Validierung aller eingehenden Zeiger durch. Bei Bedarf werden neue Instanzen von beschreibenden Objekten erstellt, wodurch die Integrität und Korrektheit der Modellarchitektur während jeder Phase ihrer Konstruktion sichergestellt wird.
bool CreateDescriptions(CArrayObj *&encoder, CArrayObj *&task, CArrayObj *&actor, CArrayObj *&probability, CArrayObj *&director, CArrayObj *&critic ) { //--- CLayerDescription *descr; //--- if(!encoder) { encoder = new CArrayObj(); if(!encoder) return false; } if(!task) { task = new CArrayObj(); if(!task) return false; } if(!actor) { actor = new CArrayObj(); if(!actor) return false; } if(!probability) { probability = new CArrayObj(); if(!probability) return false; } if(!director) { director = new CArrayObj(); if(!director) return false; } if(!critic) { critic = new CArrayObj(); if(!critic) return false; }
Beginnen wir mit der Beschreibung der Architektur des Environment State Encoders. Wie in unserer früheren Arbeit werden die rohen Eingabedaten in eine vollständig verbundene Schicht mit ausreichender Dimensionalität eingespeist. Diese Schicht dient als Gateway zum Modell und akzeptiert Rohdaten ohne vorherige manuelle Vorverarbeitung.
//--- Encoder encoder.Clear(); //--- Input layer if(!(descr = new CLayerDescription())) return false; descr.type = defNeuronBaseOCL; int prev_count = descr.count = (HistoryBars * BarDescr); descr.activation = None; descr.optimization = ADAM; if(!encoder.Add(descr)) { delete descr; return false; }
Die Informationsquelle besteht aus Daten, die direkt vom Handelsterminal bezogen werden: Kurse, Handelsvolumina, Marktstimmungsindikatoren und andere relevante Parameter. Wir haben bewusst auf jegliche Vorverarbeitung verzichtet, die außerhalb des Modells durchgeführt wird. Diese Strategie verkompliziert zweifellos den Trainingsprozess, da sie wesentlich höhere Anforderungen an die Fähigkeit des Modells stellt, selbst zu lernen und Rauschen herauszufiltern. Dieser Ansatz führt jedoch letztendlich zu einer weitaus größeren Robustheit während des realen Produktiveinsatzes.
Es ist wichtig zu verstehen, dass ein trainiertes Modell nur dann zuverlässige und reproduzierbare Ergebnisse liefert, wenn die Daten, die es während des Echtbetriebs erhält, einer Verteilung folgen, die der während des Trainings verwendeten ähnelt. Eine manuelle Vorverarbeitung, die außerhalb des Modells durchgeführt wird, erhöht das Risiko unvorhersehbarer Abweichungen. Selbst geringfügige Änderungen an Filtern oder deren Parametern können die Art der Eingabedaten radikal verändern. Daher muss die Datenvorverarbeitung zu einem integralen Bestandteil der Modellarchitektur selbst werden.
Um diese Risiken zu minimieren und die Trainingsqualität zu verbessern, haben wir die anfängliche Datenverarbeitungsstufe direkt in die Encoder-Struktur integriert. Diese Funktion wird von einer Batch-Normalisierungsschicht mit einem kontrollierten Rausch-Injektionsmechanismus CNeuronBatchNormWithNoise ausgeführt. Die Batch-Normalisierung bringt heterogene multimodale Daten auf eine gemeinsame Skala, was die Trainingsstabilität verbessert und die Modellkonvergenz beschleunigt. Zusätzlich verbessert eine geringe Menge an rauschbasierter Augmentierung die Generalisierungsfähigkeit des Modells und verringert das Risiko einer Überanpassung bei der Arbeit mit begrenzten Datensätzen.
//--- layer 1 if(!(descr = new CLayerDescription())) return false; descr.type = defNeuronBatchNormWithNoise; descr.count = prev_count; descr.batch = 1e4; descr.activation = None; descr.optimization = ADAM; if(!encoder.Add(descr)) { delete descr; return false; }
Die normalisierten Daten werden dann an ein lineares Aufmerksamkeitsmodul weitergeleitet, das für die Analyse der gegenseitigen Abhängigkeiten zwischen einzelnen Merkmalen innerhalb jedes Zeitschritts verantwortlich ist.
In dieser Phase wird besonderer Wert auf die korrekte Interpretation der internen Struktur der Daten gelegt. Obwohl das Modell eine Zeitreihe verarbeitet, befasst es sich bei jedem einzelnen Zeitschritt mit demselben festen Satz von Merkmalen, die den Zustand der Umgebung beschreiben.
Angesichts der repetitiven Natur der Datenstruktur bei jedem zeitlichen Ausschnitt haben wir uns entschieden, eine einzige gemeinsame Matrix trainierbarer Parameter zu verwenden, um alle Zeitschritte zu analysieren. Mit anderen Worten: Das Modell wendet einen gemeinsamen, universellen Aufmerksamkeitsmechanismus auf die gesamte Zeitreihe an. Dies ermöglicht es uns, mehrere kritisch wichtige Effekte zu erzielen:
- verbesserte Konsistenz bei der Merkmalsinterpretation über verschiedene Zeitintervalle hinweg;
- eine signifikante Reduzierung der Anzahl trainierbarer Parameter, was besonders wichtig ist, wenn die Trainingsdaten begrenzt sind;
- verbesserte Verallgemeinerungsfähigkeit durch Minimierung von Overfitting;
- schnelleres Training durch Optimierung der Berechnungen.
//--- layer 2 if(!(descr = new CLayerDescription())) return false; descr.type = defNeuronLinerAttention; prev_count = descr.count = HistoryBars; descr.window = BarDescr; descr.layers = 1; descr.window_out = 32; descr.batch = 1e4; descr.optimization = ADAM; descr.activation = None; if(!encoder.Add(descr)) { delete descr; return false; }
Nach der Analyse der Merkmalsinterdependenzen bei jedem Zeitschritt ist die nächste wichtige Stufe die zeitliche Analyse der Eingabedaten. Um dies zu erreichen, transponieren wir zunächst den ursprünglichen Tensor, wodurch jedes einzelne Merkmal als eine Sequenz von Beobachtungen über die Zeit behandelt werden kann.
Der transponierte Tensor wird dann an ein zweites lineares Aufmerksamkeitsmodul weitergeleitet, das speziell für die Analyse zeitlicher Dynamiken entwickelt wurde.
Es ist zu beachten, dass wir nach der Transposition effektiv eine Sammlung univariater Zeitreihen erhalten, von denen jede die Entwicklung eines einzelnen Merkmals über die Zeit darstellt. Diese Merkmale können zu unterschiedlichen Datenmodalitäten gehören. Wichtig ist, dass verschiedene Modalitäten unterschiedliche Reaktionsmuster auf identische Marktereignisse aufweisen können. Daher verfolgen wir in dieser Phase einen flexibleren Ansatz: Jeder univariaten Sequenz wird eine eigene trainierbare Parametermatrix zugewiesen. Dieser Mechanismus ermöglicht es uns:
- die spezifischen Merkmale jeder Modalität bei der Interpretation ihrer zeitlichen Dynamik zu berücksichtigen;
- einzigartige Reaktionsmuster verschiedener Merkmale auf dieselben Marktauslöser zu identifizieren;
- die Empfindlichkeit des Modells gegenüber schwachen, aber wichtigen Signalen innerhalb einzelner Datenkanäle zu erhöhen;
- das Vermischen von Informationen zu vermeiden, die aus grundlegend unterschiedlichen Arten von Merkmalen stammen.
Eine solche Architektur ist besonders effektiv auf Finanzmärkten, wo heterogene Datenquellen mit unterschiedlichen Geschwindigkeiten, Amplituden und Richtungstendenzen auf fundamentale oder technische Ereignisse reagieren können.
//--- layer 3 if(!(descr = new CLayerDescription())) return false; descr.type = defNeuronTransposeOCL; descr.count = HistoryBars; descr.window = BarDescr; descr.batch = 1e4; descr.optimization = ADAM; descr.activation = None; if(!encoder.Add(descr)) { delete descr; return false; } //--- layer 4 if(!(descr = new CLayerDescription())) return false; descr.type = defNeuronLinerAttention; descr.count = 1; descr.window = HistoryBars; descr.layers = BarDescr; descr.window_out = 32; descr.batch = 1e4; descr.optimization = ADAM; descr.activation = None; if(!encoder.Add(descr)) { delete descr; return false; }
Nach dem Durchlaufen der beiden Aufmerksamkeitsschichten erhalten die analysierten Daten eine wesentlich reichhaltigere Repräsentation. Sie enthält nun Informationen sowohl über die internen Beziehungen zwischen den Merkmalen als auch über die für jede Modalität charakteristischen zeitlichen Abhängigkeiten. Um jedoch eine effektive Entscheidungsstrategie für Finanzmärkte zu entwickeln, müssen diese Daten zu einer kompakteren und aussagekräftigeren Repräsentation zusammengefasst werden.
Die intern angereicherten Daten werden an den CG-LSTM-Block weitergeleitet, wo die in der vorherigen Phase gebildeten univariaten Sequenzen unabhängig voneinander analysiert werden. Es ist erwähnenswert, dass sich dieser Ansatz erheblich von dem ursprünglichen Entwurf unterscheidet, der von den Autoren des DA-CG-LSTM-Frameworks vorgeschlagen wurde. In der klassischen DA-CG-LSTM-Architektur verarbeiten rekurrente Zellen multimodale Repräsentationen, die einzelnen Zeitschritten entsprechen. Dieser Ansatz ermöglicht es, komplexe modalitätsübergreifende Abhängigkeiten zu erfassen.
In unserem Projekt haben wir uns jedoch bewusst für eine alternative Strategie entschieden. Wir entwickeln die Ideen der HiSSD-Architektur weiter, bei der ein besonderer Schwerpunkt auf der unabhängigen Vorhersage univariater Sequenzen liegt, die mit einzelnen Agenten assoziiert sind. Dieser Ansatz ermöglicht es uns, modalitätsspezifische Verhaltensmuster flexibler und genauer zu erfassen, während gleichzeitig der Einfluss potenziellen modalitätsübergreifenden Rauschens aus verschiedenen Datenquellen minimiert wird.
Dieses Datenverarbeitungsschema in CG-LSTM bietet:
- eine explizitere Spezialisierung der verborgenen Zustände des Modells auf spezifische Aspekte der Daten;
- eine verbesserte Modellrobustheit gegenüber Änderungen in der Struktur von Marktinformationen;
- eine verbesserte Interpretierbarkeit globaler Skills, da jeder Skill-Vektor mit einer spezifischen Modalität der analysierten Daten assoziiert ist.
Beim Entwurf des rekurrenten Blocks trafen wir eine wichtige architektonische Entscheidung: Die Dimension des verborgenen Zustands jedes CG-LSTM-Elements wurde gleich der Größe des globalen Skill-Vektors eines einzelnen Agenten gesetzt. Dies ermöglicht es jeder univariaten Sequenz, eine Ausgaberepräsentation fester Größe zu erzeugen, die die wichtigsten Aspekte ihres langfristigen Verhaltens kodiert. Diese Repräsentationen bilden anschließend die Grundlage für weitere Entscheidungsprozesse.
Es ist wichtig zu betonen, dass die globale Skill-Matrix auf eine vollständig trainierbare Weise konstruiert wird. Das Modell bestimmt unabhängig, welche Aspekte des Merkmalsverhaltens für einen erfolgreichen Betrieb unter realen Handelsbedingungen am bedeutendsten sind.
//--- layer 5 if(!(descr = new CLayerDescription())) return false; descr.type = defNeuronCGLSTMOCL; descr.count = NSkills; // Common Skkills descr.window = HistoryBars; // Sequence descr.layers = BarDescr; // Variables descr.batch = 1e4; descr.activation = None; descr.optimization = ADAM; if(!encoder.Add(descr)) { delete descr; return false; }
Wir sollten uns auch daran erinnern, dass der High-Level-Planer des HiSSD-Frameworks lernt, globale Skills durch die Kodierung eines latenten Zustands zu konstruieren, um den nächsten Systemzustand präzise vorherzusagen. Ähnlich ist das Hauptziel des DA-CG-LSTM-Frameworks, multimodale Zeitreihen so präzise wie möglich vorherzusagen. Seine gesamte Architektur ist um dieses Ziel herum aufgebaut: Ein ausgeklügelter Aufmerksamkeitsmechanismus, leistungsstarke rekurrente Blöcke und ein Decoder sind alle darauf ausgelegt, verborgene Muster zu extrahieren und die Vorhersageleistung zu verbessern.
Wir verfolgen jedoch einen grundlegend anderen Ansatz und nutzen die Architektur absichtlich für eine andere Aufgabe: das Erlernen einer maximal informativen latenten Repräsentation – der sogenannten globalen Agenten-Skills. Unsere Priorität ist es nicht, jeden nachfolgenden Zeitreihenwert präzise vorherzusagen, sondern vielmehr eine interne Marktrepräsentation zu schaffen, die als robuste Grundlage für das Erlernen einer optimalen Agenten-Policy dient.
In diesem Zusammenhang haben wir die komplexe Architektur des ursprünglichen DA-CG-LSTM-Decoders bewusst aufgegeben. Seine tiefgreifenden Mechanismen zur Analyse des latenten Raums könnten die globalen Skills potenziell verzerren oder neu interpretieren, wodurch sie für Aufgaben der Agentensteuerung weniger geeignet wären.
Stattdessen wählten wir einen minimalistischen Decoder, der aus zwei aufeinanderfolgenden Faltungsschichten besteht. Dieses Design ermöglicht eine unkomplizierte Verarbeitung verborgener Repräsentationen, minimale Interferenzen mit der Struktur globaler Skills, eine hohe Interpretierbarkeit der Ergebnisse und eine unabhängige Verarbeitung univariater Merkmalssequenzen.
Dieser Ansatz bewahrt die Integrität und den Wert des erlernten latenten Raums und ebnet den Weg für ein effektiveres Training der Akteur-Policy.
//--- layer 6 if(!(descr = new CLayerDescription())) return false; descr.type = defNeuronConvOCL; descr.count = 1; descr.window = NSkills; descr.step = NSkills; int prev_out = descr.window_out = 4 * NForecast; prev_count=descr.layers = BarDescr; descr.activation = SoftPlus; if(!encoder.Add(descr)) { delete descr; return false; } //--- layer 7 if(!(descr = new CLayerDescription())) return false; descr.type = defNeuronConvOCL; descr.count = 1; descr.window = prev_out; descr.step = prev_out; prev_out = descr.window_out = NForecast; descr.layers = prev_count; descr.activation = TANH; if(!encoder.Add(descr)) { delete descr; return false; }
Um die prognostizierten Werte korrekt mit den tatsächlichen Daten abzugleichen, transponieren wir in der letzten Phase der Decoder-Verarbeitung den Ausgabetensor zurück in seine ursprüngliche Struktur.
//--- layer 8 if(!(descr = new CLayerDescription())) return false; descr.type = defNeuronTransposeOCL; descr.count = prev_count; descr.window = prev_out; descr.activation = None; if(!encoder.Add(descr)) { delete descr; return false; }
Doch selbst nach der Wiederherstellung seiner Form bleiben die Prognosewerte in normalisierter Form. Daher ist der nächste wichtige Schritt die inverse Transformation: Die statistischen Parameter der ursprünglichen Merkmalsverteilung, die während der Batch-Normalisierung aufgezeichnet wurden, werden wiederhergestellt.
//--- layer 9 if(!(descr = new CLayerDescription())) return false; descr.type = defNeuronRevInDenormOCL; descr.count = prev_count * prev_out; descr.layers = 1; descr.activation = None; if(!encoder.Add(descr)) { delete descr; return false; }
Wir fahren nun mit der Architektur des Low-Level-Controllers fort. Dieses Modell spielt eine Schlüsselrolle bei der Konstruktion lokaler Agentenstrategien basierend auf der Analyse der Umgebung zu jedem spezifischen Zeitpunkt.
Der Controller empfängt rohe Umgebungsdaten als Eingabe, ähnlich wie der globale Skill-Encoder. Tatsächlich basiert seine Architektur auf derselben zugrunde liegenden Struktur: anfängliche Datennormalisierung mit Injektion von Zufallsrauschen, ein zweistufiger Analyseprozess, der durch lineare Aufmerksamkeitsmodule implementiert wird, und ein CG-LSTM-Block für die sequentielle Verarbeitung.
Der grundlegende Unterschied zwischen globalen und lokalen Skills liegt nicht in ihrem Konstruktionsmechanismus, sondern in den Aufgaben, die die Agenten während des Trainings lösen müssen. Bei globalen Skills liegt der Schwerpunkt auf der Schaffung eines verallgemeinerten latenten Raums, der in der Lage ist, langfristige Abhängigkeiten und wichtige Marktmerkmale zu integrieren. Lokale Skills hingegen sind auf eine schnelle Anpassung an die aktuelle Marktlage und die Generierung spezifischer Handelsaktionen für jeden einzelnen Zeitschritt ausgerichtet.
Daher replizieren wir einfach die Architektur des Skill-Encoders.
//--- Task task.Clear(); //--- Task Encoder for(int i = 0; i <= LatentLayer; i++) if(!task.Add(encoder.At(i))) return false;
Nach der Generierung der lokalen Skills besteht der nächste Schritt darin, sie mit den Kontextinformationen anzureichern, die in den globalen Skills der Agenten enthalten sind. Um dies zu erreichen, verwenden wir einen zweischichtigen Aufmerksamkeitsblock.
Die lokalen Skills der Agenten fungieren als Queries, während die globalen Skills aller Agenten als Keys und Values dienen. Das Grundprinzip hierbei ist, dass die lokalen Skills jedes Agenten nicht isoliert, sondern im breiteren Kontext des latenten Raums des gesamten Systems interpretiert werden. Dies ermöglicht fundiertere Entscheidungsfindungen.
Ein charakteristisches Merkmal dieses Blocks ist sein zweistufiger Aufmerksamkeitsmechanismus. In der ersten Stufe wird eine standardmäßige Aufmerksamkeitsoperation durchgeführt. Lokale Abfragen extrahieren die relevantesten Fragmente globaler Informationen. Dies ermöglicht es Agenten, ihr kurzfristiges Verhalten flexibel an den aktuellen Zustand der Umgebung sowie an die in den globalen Skills kodierten strategischen Trends anzupassen.
In der zweiten Stufe wird die Integration durch eine zusätzliche Aufmerksamkeitsschicht weiter gestärkt, die tiefere und komplexere Beziehungen zwischen kurzfristigen Zielen und langfristiger strategischer Steuerung aufdeckt.
Genau diese Integration von lokalen und globalen Kontexten ermöglicht es dem Modell, ausgewogenere und fundiertere Handelsentscheidungen zu generieren, was die Widerstandsfähigkeit der Agenten gegenüber falschen Signalen und kurzfristigem Marktrauschen erhöht.
//--- layer LatentLayer+1 if(!(descr = new CLayerDescription())) return false; descr.type = defNeuronCrossDMHAttention; { int temp[] = {NSkills, NSkills}; // WIndow if(ArrayCopy(descr.windows, temp) < (int)temp.Size()) return false; } { int temp[] = {BarDescr, BarDescr}; // Units if(ArrayCopy(descr.units, temp) < (int)temp.Size()) return false; } descr.step = 4; descr.window_out = 32; descr.layers = 2; descr.batch = 1e4; descr.optimization = ADAM; descr.activation = None; if(!task.Add(descr)) { delete descr; return false; }
Die mit globalem Kontext angereicherten lokalen Skills werden dann an den Entscheidungsblock weitergeleitet. Hier spielen zwei aufeinanderfolgende konvolutive Schichten eine zentrale Rolle. Diese Architektur ermöglicht die effiziente parallele Ausführung unabhängiger MLPs für jeden einzelnen Agenten.
Jeder Agent interpretiert seinen eigenen lokalen latenten Raum und trifft Entscheidungen, ohne direkt in die Arbeitsweise anderer Agenten einzugreifen. Die konvolutive Struktur sorgt für eine hohe Recheneffizienz, da alle Agenten gleichzeitig verarbeitet werden können, während jeder Agent mit seiner eigenen dedizierten Parametermatrix arbeitet.
Die Abfolge von zwei konvolutiven Schichten bietet zusätzliche architektonische Flexibilität: Die erste Schicht führt eine anfängliche Merkmalsaggregation und -transformation durch, während die zweite Schicht die lokalen Repräsentationen verfeinert und den endgültigen Aktionstensor generiert. Dieser Ansatz verbessert sowohl die Anpassungsfähigkeit als auch die Robustheit des Agentenverhaltens unter hochvolatilen Finanzmarktbedingungen.
//--- layer LatentLayer+2 if(!(descr = new CLayerDescription())) return false; descr.type = defNeuronConvOCL; descr.count = 1; descr.window = NSkills; descr.step = NSkills; prev_out = descr.window_out = 4 * NActions; prev_count=descr.layers = BarDescr; descr.activation = SoftPlus; if(!task.Add(descr)) { delete descr; return false; } //--- layer LatentLayer+3 if(!(descr = new CLayerDescription())) return false; descr.type = defNeuronConvOCL; descr.count = 1; descr.window = prev_out; descr.step = prev_out; prev_out = descr.window_out = NActions; descr.layers = prev_count; descr.activation = SIGMOID; if(!task.Add(descr)) { delete descr; return false; }
Die Architekturen der übergeordneten Modelle von Akteur, Direktor und Kritiker wurden vollständig aus unserer früheren Arbeit übernommen. Detaillierte Beschreibungen dazu finden Sie unter diesem Link. Deshalb werden wir uns jetzt nicht mit ihnen befassen. Eine vollständige Beschreibung aller Modellarchitekturen ist im Anhang enthalten.
Modelltraining
Der Modelltrainingsprozess ist in drei Phasen unterteilt: Datensatzgenerierung, Offline-Training aller Modellkomponenten und anschließendes Online-Fine-Tuning. Dieser Ansatz kombiniert die grundlegende Stabilität, die aus historischen Daten gewonnen wurde, mit einer flexiblen Anpassung an die aktuellen Marktbedingungen.
Alle während des Trainings verwendeten Programme wurden unverändert aus unserer früheren Arbeit übernommen; daher werden wir ihre Algorithmen nicht im Detail erörtern. Stattdessen werden wir nur die grundlegenden Prinzipien des Prozesses erneut betrachten.
Das Modelltraining beginnt mit der Erstellung eines Trainingsdatensatzes. Zu diesem Zweck verwenden wir den Expert Advisor Research.mq5, den wir im MetaTrader 5 Strategietester ausführen, um historische Daten für das Währungspaar EURUSD auf dem Ein-Minuten-Zeitrahmen für das gesamte Jahr 2024 zu sammeln. Um die Rechenlast zu minimieren, ist jeder Durchlauf auf einen Monat historischer Daten begrenzt, während die Verhaltensvielfalt unter den Agenten durch randomisierte Policys erreicht wird. Nach dem Abschluss jeder Kerze werden Marktstatus, Indikatorwerte, Kontokennzahlen und Agentenaktionen aufgezeichnet, wodurch vollständige Trajektorien für den Experience-Replay-Puffer gebildet werden.
Die gesammelten Daten dienen als Grundlage für das Offline-Training aller Komponenten, das mit dem Expert Advisor Study.mq5 durchgeführt wird. Trajektorien und Startpunkte werden zufällig aus dem Replay-Puffer entnommen, um Trainings-Batches aus sequenziellen Zuständen zu konstruieren. Um die Konvergenz zu beschleunigen, wird eine Near-Perfect-Trajectory-Technik eingesetzt, die es dem Encoder ermöglicht, mehrere Schritte im Voraus vorherzusagen. Während dieser Phase werden die Skill Encoders, der Akteur, der Direktor und der Kritiker trainiert, wodurch die grundlegende Policy des Agenten etabliert wird.
Nach Abschluss des Offline-Trainings gehen wir zur Online-Feinabstimmungsphase über. Hierfür verwenden wir den Expert Advisor StudyOnline.mq5. Der Hauptfokus liegt auf dem Training des Akteurs unter der Aufsicht des Direktors und des Kritikers. Nachdem jede neue Kerze geschlossen wurde, analysiert das System den Umgebungszustand, aktualisiert die Aktionsbewertungen und passt die Modellparameter an. Regelmäßige Soft-Updates der Zielmodelle helfen dabei, ein Gleichgewicht zwischen strategischer Stabilität und Anpassungsfähigkeit zu wahren.
Dieser mehrstufige Ansatz, der die Offline-Wissensansammlung mit der Online-Anpassung kombiniert, sorgt für hohe Effizienz und Robustheit beim Betrieb unter realen Marktbedingungen.
Tests
Eine objektive Bewertung der implementierten Lösungen und der resultierenden Handelsstrategie kann nur anhand von Daten erfolgen, die nicht in den Trainingsprozess einbezogen wurden. Zu diesem Zweck wurde ein Testzeitraum von Januar bis März 2025 ausgewählt. Die Verwendung historischer Daten außerhalb des Trainingssatzes eliminiert das Risiko einer Überanpassung und verleiht den Ergebnissen echte praktische Bedeutung.
Alle anderen experimentellen Parameter (die Marktumgebung, der Zeitrahmen und die Terminaleinstellungen) wurden unverändert gelassen. Dies stellte sicher, dass die Bewertung nur die Qualität der erlernten Strategie maß, ohne Beeinflussung durch externe Faktoren.
Die Testergebnisse werden unten präsentiert und demonstrieren deutlich das Verhaltensmodell des Agenten unter realen Bedingungen.

Während des Testzeitraums führte das Modell 37 Handelsgeschäfte aus. Etwas mehr als 40 % davon wurden mit Gewinn geschlossen. Dennoch konnte das Modell einen Gesamtgewinn erzielen, da der durchschnittliche Gewinn-Trade mehr als doppelt so groß war wie der durchschnittliche Verlust-Trade. Der Gewinnfaktor (Profit Factor) erreichte 1,67.
Schlussfolgerung
In dieser Arbeit untersuchten wir die theoretischen Grundlagen des DA-CG-LSTM-Frameworks, das sich von herkömmlichen Modellen durch die Einführung innovativer Komponenten wie CG-LSTM und eines dualen Aufmerksamkeitsmechanismus unterscheidet. Diese Elemente ermöglichen eine genauere Extraktion zeitlicher Abhängigkeiten und erlauben es dem Modell, sowohl kurzfristige Schwankungen als auch langfristige Trends zu erfassen.
Im praktischen Teil stellten wir eine modifizierte Architektur vor, die für das Training von Handelsagenten angepasst wurde. Die Vereinfachung des Decoders zugunsten von Faltungsblöcken ermöglichte es dem Trainingsprozess, sich auf die Extraktion globaler Skills zu konzentrieren, ein Schlüsselfaktor beim Aufbau einer robusten und adaptiven Handelsstrategie.
Die Wirksamkeit der implementierten Ansätze wurde anhand eines Testdatensatzes außerhalb des Trainingszeitraums bewertet. Obwohl der Anteil profitabler Handelsgeschäfte leicht über 40 % lag, war das Verhältnis zwischen durchschnittlichen Gewinnen und durchschnittlichen Verlusten ausreichend, um ein insgesamt positives Ergebnis zu erzielen.
Es sollte betont werden, dass die in dieser Arbeit beschriebenen Modelle explorativer Natur sind. Bevor sie in Live-Handelsumgebungen eingesetzt werden, müssen sie mit repräsentativeren Datensätzen trainiert und umfassenden Tests unter einer Vielzahl von Marktbedingungen unterzogen werden.
Referenzen
- A Dual-Staged Attention Based Conversion-Gated Long Short Term Memory for Multivariable Time Series Prediction
- Andere Artikel dieser Serie
In diesem Artikel verwendete Programme
| # | Name | Typ | Beschreibung |
|---|---|---|---|
| 1 | Research.mq5 | Expert Advisor | Expert Advisor für die Datenerfassung |
| 2 | ResearchRealORL.mq5 | Expert Advisor | Expert Advisor für die Datenerfassung mit der Methode Real-ORL |
| 3 | Study.mq5 | Expert Advisor | Expert Advisor für das Offline-Modelltraining |
| 4 | StudyOnline.mq5 | Expert Advisor | Expert Advisor für das Online-Modelltraining |
| 4 | Test.mq5 | Expert Advisor | Expert Advisor für das Modelltesten |
| 5 | Trajectory.mqh | Klassenbibliothek | Struktur der Beschreibung des Systemzustands und der Modellarchitektur |
| 6 | NeuroNet.mqh | Klassenbibliothek | Eine Bibliothek von Klassen zur Erstellung eines neuronalen Netzes |
| 7 | NeuroNet.cl | Codebibliothek | OpenCL-Programmcode |
Übersetzt aus dem Russischen von MetaQuotes Ltd.
Originalartikel: https://www.mql5.com/ru/articles/17939
Warnung: Alle Rechte sind von MetaQuotes Ltd. vorbehalten. Kopieren oder Vervielfältigen untersagt.
Dieser Artikel wurde von einem Nutzer der Website verfasst und gibt dessen persönliche Meinung wieder. MetaQuotes Ltd übernimmt keine Verantwortung für die Richtigkeit der dargestellten Informationen oder für Folgen, die sich aus der Anwendung der beschriebenen Lösungen, Strategien oder Empfehlungen ergeben.
Neuronale Netze in der Praxis: Übung macht den Meister
Von der Grundstufe zur Mittelstufe: Objekte (IV)
Von der Grundstufe bis zur Mittelstufe: Objektereignisse (I)
Marktsimulation (Teil 24): Positionsansicht (II)
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
|
Ich habe in Research einen Monat lang 5-Minuten-Runden durchlaufen lassen, dabei entstand die Datei „DACGLSTM.bd“ mit einer Größe von 300 MB. Ich habe Study gestartet. Die Fehlerquoten sind erschreckend hoch. Oder ist das bei einem allerersten Durchlauf normal?
Nach dem „Study“ sind die .nnw-Dateien des neuronalen Netzes erschienen. Ich habe einen weiteren Datenerfassungszyklus gestartet, doch bereits im nächsten Monat hat „Research“ aufgehört, Handelsgeschäfte durchzuführen...
Hurra! Nach einigen Wochen voller Probleme haben sich die Fehlerwerte in Study endlich normalisiert! Jetzt lernt das neuronale Netz wirklich.

Ich musste den Belohnungs- und Bestrafungsalgorithmus erweitern


Außerdem mussten die Eingabeparameter für „Trajectory“ stark angepasst werden
Hurra! Nach einigen Wochen voller Probleme haben sich die Fehlerwerte in Study endlich normalisiert! Jetzt lernt das neuronale Netz wirklich.
Jetzt wird es erst richtig spannend – wie wird es mit den neuen Daten handeln? Ich arbeite mit einfachen Modellen – die sind leichter zu verstehen. Aber bei den neuen Daten ist der Handel fast zufällig, da es keine aussagekräftigen Merkmale gibt.
Jetzt kommt der spannende Teil – wie wird der Handel mit den neuen Daten aussehen? Ich arbeite mit Holzmodellen – die sind leichter zu verstehen. Aber bei den neuen Daten ist der Handel fast zufällig, da es keine aussagekräftigen Merkmale gibt.
Bis zum echten Handel habe ich noch einen weiten Weg vor mir.) Nach einigen Durchläufen von „Research-Study“ werden die Trades sehr schnell geschlossen. Das neuronale Netz lernt, zu überleben, statt Geld zu verdienen. Und je kürzer der Trade, desto mehr scheint es ihm, als würde es weniger Strafen erhalten. Der Tanz mit den Tamburinen geht weiter. Man muss den Algorithmus für Belohnungen und Strafen richtig aufbauen, und das ist anscheinend das Schwierigste. Im Moment versuche ich einfach, strenge Beschränkungen zu setzen. Zum Beispiel, keine Stopps und Take-Profits unterhalb eines Schwellenwerts zuzulassen. Außerdem versuche ich, die Mindestlaufzeit der Trades zu begrenzen, damit sie nicht fast sofort nach der Eröffnung wieder geschlossen werden. Ich nutze entweder LLM, Grok oder ChatGPT 4.1, aber manchmal sind sie so unglaublich langsam, dass man es kaum fassen kann. Doch nach und nach geht es immerhin voran. Viel Zeit fließt in die Trainingsrunden. Es wäre toll, wenn man sich mit jemandem zusammentun könnte, das Thema ist ja sehr vielversprechend.