
Generative Adversarial Networks (GANs) für synthetische Daten in der Finanzmodellierung (Teil 2): Erstellen eines synthetischen Symbols für Tests
Einführung
Bei der Finanzmodellierung stehen die Händler vor einer großen Herausforderung: In den meisten Fällen sind nur wenige Daten verfügbar. Diese Einschränkung kann die Entwicklung und Bewertung von Handelstechniken erschweren, insbesondere wenn Crashs, hohe Volatilität oder lange Marktkonsolidierungen in den Datensätzen nicht gut repräsentiert sind. Aus diesem Grund sind die Daten bei der Anwendung dieser Strategien selten vielfältig oder umfassend genug, um die Leistung zu verallgemeinern, insbesondere in der realen Welt. Außerdem wird die Struktur der Finanzmärkte durch verschiedene Faktoren wie geopolitische Verschiebungen und wirtschaftspolitische Veränderungen beeinflusst. Historische Daten können die verschiedenen Marktvariablen nur begrenzt erfassen, sodass sich Händler auf Algorithmen mit guten Backtest-Ergebnissen verlassen müssen, die jedoch nicht in der Lage sind, sich an neue oder unvorhersehbare Marktkonsolidierungen anzupassen.
Um all diese Herausforderungen zu bewältigen, gilt die Verwendung künstlicher Daten inzwischen als die beste Lösung. Synthetische Daten können herkömmliche historische Daten ersetzen oder ergänzen, indem sie eine realistische und reichhaltige Vielfalt von Marktbedingungen, einschließlich asymmetrischer Bedingungen, bieten. Dies trägt dazu bei, Handelsstrategien zu erweitern und zu stärken, da Stresstests und die Fähigkeit, Modelle zu verallgemeinern, hier verbessert werden.
In Teil 1 haben wir die Vielfalt der Datensätze und die Robustheit der Modelle verbessert. In diesem zweiten Teil unserer Serie geht es nun um die GANs als Werkzeug zur Erstellung synthetischer Daten, die auf Finanzdaten angewendet werden. GANs sind ein hochmoderner Ansatz des maschinellen Lernens, um genaue Vorhersagen zu treffen. Sie sind in der Lage, bestehende numerische Aufzeichnungen der Finanzgeschichte abzubilden und Daten zu synthetisieren, die reale Markttrends realistisch nachbilden. Dieser Artikel zeigt, wie man synthetische Symbole mit Hilfe fortschrittlicher maschineller Lerntechniken wie GANs (Generative Adversarial Networks) erstellt und ihre Ähnlichkeit mit realen Marktdaten durch statistische Methoden wie Shapiro-Wilk, Students t-test und Levene überprüft. Durch die Sicherstellung der Datenintegrität können Händler vertrauensvoll synthetische Daten in ihren Handelssystemen verwenden.
GANs in der Finanzmodellierung verstehen
Generative Adversarial Networks (GANs) stellen einen bedeutenden Fortschritt im Bereich des maschinellen Lernens dar und konzentrieren sich auf die Erzeugung künstlicher Daten, die realen Datensätzen sehr ähnlich sind. GANs bestehen aus zwei neuronalen Netzen, dem Generator und dem Discriminator, und arbeiten mit einer wettbewerbsorientierten Lerndynamik. Der Generator erzeugt Daten, die von realen Daten nicht zu unterscheiden sind, während der Discriminator zwischen realen und synthetischen Daten differenziert. Dieses Zusammenspiel führt zu einer kontinuierlichen Verbesserung beider Netze, wodurch sehr realistische synthetische Daten entstehen.
Bei der Finanzmodellierung lösen GANs effektiv grundlegende Probleme im Zusammenhang mit Datenknappheit. Historische Finanzdaten, insbesondere in Bezug auf die Märkte, sind aufgrund regulatorischer Beschränkungen schwer zugänglich und daher schwer zu beschaffen. Darüber hinaus sind Ereignisse wie Marktzusammenbrüche und plötzliche Preisspitzen in den Trainingsdatensätzen selten, was die Verallgemeinerung bestimmter Strategien unter verschiedenen Marktbedingungen einschränkt.
GANs eignen sich hervorragend zur Erzeugung synthetischer Finanzdaten, die die Merkmale realer Daten widerspiegeln und so fehlende historische Aufzeichnungen ausgleichen. Diese synthetischen Datensätze erweitern die Informationen, die Händlern und Forschern zur Verfügung stehen, und erleichtern das Testen und Verfeinern von Algorithmen. GANs können verschiedene Datenformen generieren, z. B. Preissequenzen oder seltene Ereignisse, sodass Händler ihre Algorithmen unter zuvor nicht gesehenen Szenarien bewerten können.
Die Erstellung eines synthetischen Finanzmodells beginnt mit dem Einsatz eines GAN zur Generierung von Daten, die den realen Bedingungen sehr nahe kommen. Dieser komplizierte Prozess erfordert mehrere wesentliche Schritte, um die Genauigkeit der erzeugten Daten zu gewährleisten und so die Modellierungsbemühungen und -strategien im Finanzbereich zu verbessern.
Um ein Generatives Adversariales Netzwerk (GAN) für die Vorhersage von Finanzdaten zu trainieren, müssen zunächst historische Wechselkursdaten, z. B. EURUSD, gesammelt werden. Diese Daten dienen als wichtiges Schulungsmaterial für das GAN-System. Die rohen Finanzdaten werden einem Bereinigungsprozess unterzogen, um konsistente Werte zu gewährleisten, was eine Normalisierung und die Entfernung fehlender Datenpunkte beinhaltet. Die bereinigten Daten werden dann durch geeignete Skalierung auf einen Bereich zwischen -1 und 1 normalisiert, um die Effektivität des GAN zu verbessern. Darüber hinaus sollte die Verarbeitung dieser Zeitreihendaten abgeleitete Merkmale ergeben, die in der Lage sind, signifikante Muster zu erkennen, die für die Vorhersage relevant sind.
Nach der Datenerfassung wird die GAN-Architektur entworfen, bei der das Generatornetzwerk Daten aus zufälligen Rauscheingängen synthetisiert. Ein Zufallsvektor oder latenter Raum dient als Eingabe für dieses Netz, um die in den tatsächlichen Daten gefundenen Muster zu replizieren. Das generative Modell passt seine Ausgabe iterativ auf der Grundlage von Rückmeldungen des Diskriminators an, der die Authentizität der generierten Daten im Vergleich zu den realen Daten bewertet. Dieses kontinuierliche Training beinhaltet eine konkurrierende Interaktion zwischen den beiden Komponenten, wobei der Generator versucht, seine Datensimulationen zu verbessern, während der Diskriminator seine Fähigkeit zur Unterscheidung zwischen echten und synthetischen Daten verbessert.
Der Trainingsprozess besteht aus mehreren Epochen zur gleichzeitigen Optimierung beider Netze und erfordert eine sorgfältige Abstimmung der Lernraten, um Konvergenz zu gewährleisten. Der Generator zielt darauf ab, den Verlust zu minimieren, indem er den Diskriminator austrickst, während der Diskriminator daran arbeitet, seine Genauigkeit bei der Unterscheidung zwischen echten und gefälschten Daten zu maximieren, wobei er während des gesamten Trainings von zwei verschiedenen Verlustfunktionen geleitet wird.
Synthetische Symbole spielen für Händler eine entscheidende Rolle, da sie vergangene Daten für bessere Modellierungswerkzeuge aufwerten. Sie simulieren ein realistisches Marktverhalten und bieten verschiedene Datensätze zum Testen von Handelsstrategien unter verschiedenen Marktbedingungen, einschließlich erheblicher Rückgänge und Volatilität. Dies verringert die Überanpassung von Modellen des maschinellen Lernens, da sie sich nicht auf einzelne historische Trends stützen. Darüber hinaus ermöglichen synthetische Daten die Untersuchung hypothetischer Szenarien, die es den Händlern ermöglichen, unerwartete Marktveränderungen vorherzusagen. Letztlich können Händler mit diesem System ihre Handelsstrategien effektiv entwickeln und verfeinern.
Synthetische Daten in MQL5 generieren
Das Erstellen synthetischer Daten in MQL5 erfolgt in einem strukturierten Prozess, der maschinelles Lernen mit den Funktionen der Plattform kombiniert. Mit Hilfe der GAN-Technologie erzeugen wir realistische Finanzdaten, die realen Handelsmustern entsprechen. Nachfolgend finden Sie eine Schritt-für-Schritt-Anleitung.
Zunächst exportieren wir die vom GAN erstellten synthetischen Daten, um die Anforderungen des MetaTrader 5 zu erfüllen. Das GAN-Modell erstellt synthetische Marktdaten, die MetaTrader 5 aus einer Standard-CSV-Datei mit grundlegenden Kursinformationen lesen kann. Bereiten Sie Ihre CSV-Struktur so vor, dass sie den Standards des MetaTrader-Systems entspricht, damit Sie sie problemlos mit der Plattform verbinden können.
Um synthetische Daten für den Handel nutzen zu können, müssen sie als nutzerdefiniertes Symbol in MetaTrader 5 importiert werden. Wählen Sie im MetaTrader 5 die Registerkarte Symbole und legen Sie ein neues Symbol an. Geben Sie ihm einen passenden Titel wie „SYNTH_EURUSD“. Die Funktion MQL5 CustomRatesUpdate speist CSV-Daten in unser synthetisches Symbol ein. Unser Systemtool lädt synthetische Zeitreihendaten zur Verwendung in die Handelsplattform hoch. Überprüfen Sie Ihr neues synthetisches Symbol in der Marktbeobachtung, um sicherzustellen, dass seine Daten mit der von Ihnen erstellten Struktur übereinstimmen.
Mithilfe dieser Prozesse können Händler maßgeschneiderte synthetische Daten in ihre MetaTrader 5-Plattform integrieren, um Strategien unter realen Marktszenarien zu entwickeln.
Der folgende Code zeigt, wie man synthetische EURUSD-Daten aus einer CSV-Datei in MetaTrader 5 importiert. Es erstellt ein synthetisches Symbol, konfiguriert seine Eigenschaften und aktualisiert es mit historischen Daten aus der CSV-Datei.
#define SYNTHETIC_CSV_FILE_NAME "EURUSD_3_years_synthetic.csv" // Function to read synthetic data from a CSV filebool ReadSyntheticDataFromCSV(const string fileName, MqlRates &rates[]) { int fileHandle = FileOpen(fileName, FILE_CSV | FILE_READ | FILE_ANSI); if (fileHandle == INVALID_HANDLE) { Print("Error opening file: ", GetLastError()); return false; } ArrayResize(rates, 0); while (!FileIsEnding(fileHandle)) { string line = FileReadString(fileHandle); StringReplace(line, ",", "."); string fields[]; int fieldCount = StringSplit(line, ';', fields); if (fieldCount >= 6) { MqlRates rate; rate.time = (datetime)StringToTime(fields[0]); rate.open = StringToDouble(fields[1]); rate.high = StringToDouble(fields[2]); rate.low = StringToDouble(fields[3]); rate.close = StringToDouble(fields[4]); rate.tick_volume = (long)StringToInteger(fields[5]); rate.spread = 0; rate.real_volume = 0; int currentSize = ArraySize(rates); ArrayResize(rates, currentSize + 1); rates[currentSize] = rate; } } FileClose(fileHandle); Print("Synthetic data successfully read from CSV."); return true; } void OnStart(){ string syntheticSymbol = "SYNTH_EURUSD"; // Step 1: Create or Reset the Synthetic Symbol if (!CustomSymbolCreate(syntheticSymbol)) { Print("Error creating synthetic symbol: ", GetLastError()); return; } // Step 2: Configure the Symbol Properties CustomSymbolSetInteger(syntheticSymbol, SYMBOL_DIGITS, 5); CustomSymbolSetDouble(syntheticSymbol, SYMBOL_POINT, 0.00001); CustomSymbolSetDouble(syntheticSymbol, SYMBOL_TRADE_TICK_VALUE, 1); CustomSymbolSetDouble(syntheticSymbol, SYMBOL_TRADE_TICK_SIZE, 0.00001); CustomSymbolSetInteger(syntheticSymbol, SYMBOL_SPREAD_FLOAT, true); // Step 3: Load Data from CSV MqlRates rates[]; if (!ReadSyntheticDataFromCSV(SYNTHETIC_CSV_FILE_NAME, rates)) { Print("Error reading synthetic data from CSV."); return; } // Step 4: Update Rates and Add to Market Watch if (!CustomRatesUpdate(syntheticSymbol, rates)) { Print("Error updating synthetic symbol rates: ", GetLastError()); return; } MarketBookAdd(syntheticSymbol); // Add to Market Watch Print("Synthetic symbol successfully created and added to Market Watch.");}
- Fügen Sie dieses Skript dem MetaEditor hinzu und kompilieren Sie es.
- Führen Sie das Skript für den realen EURUSD im Navigator-Panel von MetaTrader 5 aus.
- Überprüfen Sie, ob das synthetische Symbol im Fenster Market Watch mit den importierten Daten erscheint.
Unten sehen Sie das Chartfenster unseres synthetischen Symbols „SYNTH_EURUSD“:
Sobald das synthetische Symbol erstellt ist, muss es anhand von realen Marktdaten überprüft werden. Die Analyse verwendet statistische Tests, um zu prüfen, ob die beiden Datensätze ihren Grundmustern treu bleiben. Unsere Tests belegen, dass sich die simulierten Daten wie tatsächliche Marktdaten verhalten, was die Zuverlässigkeit der Handelsplattformen gewährleistet. Im Folgenden werden die angewandten statistischen Methoden beschrieben:
Shapiro-Wilk-Test
Mit diesem Test wird geprüft, ob ein Datensatz in ein normales statistisches Muster passt. Durch statistische Tests überprüfen die Händler, ob die synthetischen Daten mit den allgemeinen Kursbewegungsmustern der echten Handelsmärkte übereinstimmen. Eine realistische Datenmodellierung funktioniert, wenn diese Datensätze gut übereinstimmen.
- Hypothesen:
- H₀ (Nullhypothese): Die Daten sind normal verteilt.
- H₁ (Alternativhypothese): Die Daten sind nicht normal verteilt.
Interpretation:
- Wenn p > 0,05 ist, sind die Daten wahrscheinlich normalverteilt (H₀ wird akzeptiert).
- Wenn p ≤ 0,05 ist, sind die Daten nicht normalverteilt (H₀ wird abgelehnt).
Beispiel aus dem Artikel:
Die historischen EURUSD-Daten und die synthetischen EURUSD-Daten sind an denselben Zeitrahmen ausgerichtet. Der Shapiro-Wilk-Test wird auf beide Datensätze angewendet, um ihre Verteilungen zu vergleichen.
Ergebnisse:
- Synthetische Daten: W = 0,998 , p = 0,432
- Echte Daten: W = 0,997 , p = 0,398
Beide Datensätze weisen einen Wert von p > 0,05 auf, was darauf hindeutet, dass sie einer Normalverteilung folgen.
Hier ist der Python-Code zur Durchführung des Shapiro-Wilk-Tests auf Ihren Datensätzen unter Verwendung der Bibliothek scipy.stats:
import pandas as pd from scipy.stats import shapiro # Load synthetic and real datasets synthetic_data = pd.read_csv('EURUSD_3_years_synthetic(1).csv') real_data = pd.read_csv('EURUSD_CSV(1).csv') # Select the 'close' column for the test synthetic_close = synthetic_data['close'] real_close = real_data['close'] # Perform Shapiro-Wilk test synthetic_stat, synthetic_p = shapiro(synthetic_close) real_stat, real_p = shapiro(real_close) # Print results print("Shapiro–Wilk Test Results:") print(f"Synthetic Data W-statistic: {synthetic_stat:.4f}, P-value: {synthetic_p:.4f}") print(f"Real Data W-statistic: {real_stat:.4f}, P-value: {real_p:.4f}") # Interpretation if synthetic_p > 0.05: print("Synthetic data follows a normal distribution.") else: print("Synthetic data does not follow a normal distribution.") if real_p > 0.05: print("Real data follows a normal distribution.") else: print("Real data does not follow a normal distribution.")
Students t-Test
Mit Hilfe des t-Tests lässt sich feststellen, ob zwei Datensätze statistisch gesehen identische Durchschnittswerte aufweisen. Unsere Finanzmodelle müssen zeigen, dass das Preisverhalten aus den synthetischen Daten den realen Marktmustern entspricht. Mit Hilfe der Analyse lässt sich überprüfen, wie sich die Preise auf einem typischen Markt normalerweise nach oben und unten bewegen.
- Hypothesen:
- H₀: Die Mittelwerte sind gleich.
- H₁: Die Mittelwerte sind nicht gleich.
Interpretation:
- Wenn p > 0,05 ist, gibt es keinen signifikanten Unterschied zwischen den Mittelwerten (H₀ wird angenommen).
- Wenn p ≤ 0,05 ist, sind die Mittelwerte signifikant unterschiedlich (H₀ wird abgelehnt).
Beispiel aus dem Artikel:
Synthetische und reale EURUSD-Daten desselben Zeitrahmens werden mithilfe eines unabhängigen t-Tests (zwei Stichproben) verglichen, um festzustellen, ob sich ihre Mittelwerte unterscheiden.
Ergebnisse:
- T = 0,534 , p = 0,594
Da p > 0,05 ist, gibt es keinen signifikanten Unterschied zwischen den Mittelwerten der beiden Datensätze.
Hier ist der Python-Code für die Durchführung eines Students t-Tests zum Vergleich der Mittelwerte der Spalte „close“ in den synthetischen und realen Datensätzen:
import pandas as pd from scipy.stats import ttest_ind # Load synthetic and real datasets synthetic_data = pd.read_csv('EURUSD_3_years_synthetic(1).csv') real_data = pd.read_csv('EURUSD_CSV(1).csv') # Select the 'close' column for the test synthetic_close = synthetic_data['close'] real_close = real_data['close'] # Perform Student's t-test t_stat, p_value = ttest_ind(synthetic_close, real_close, equal_var=False) # Use equal_var=False if variances are unequal # Print results print("Student's T-Test Results:") print(f"T-statistic: {t_stat:.4f}, P-value: {p_value:.4f}") # Interpretation if p_value > 0.05: print("The means of the synthetic and real data are not significantly different.") else: print("The means of the synthetic and real data are significantly different.")
Levene-Test
Dieser Test vergleicht die Stabilität der Datenvarianz zwischen den beiden Testsätzen. Die Höhe der Preisschwankung zeigt sich als Varianz in den Handelsdaten. Die Validierung beweist, dass die synthetischen Daten ähnliche Preisvolatilitätsmuster aufweisen, was bedeutet, dass sie das Marktverhalten genau darstellen können.
- Hypothesen:
- H₀: Die Varianzen sind gleich.
- H₁: Die Varianzen sind nicht gleich.
Interpretation:
- Wenn p > 0,05 ist, sind die Varianzen statistisch ähnlich (H₀ wird akzeptiert).
- Wenn p ≤ 0,05 ist, sind die Varianzen signifikant unterschiedlich (H₀ wird abgelehnt).
Beispiel aus dem Artikel:
Die Varianzen von realen und synthetischen EURUSD-Daten werden verglichen, um ihre Volatilitätsmuster zu bewerten.
Ergebnisse:
- W = 0,8742 , p = 0,3517
Da p > 0,05 ist, gibt es keinen signifikanten Unterschied zwischen den Varianzen der Datensätze.
Hier ist der Python-Code für die Durchführung des Levene-Tests zum Vergleich der Varianzen der Spalte „close“ in den synthetischen und realen Datensätzen:
import pandas as pd from scipy.stats import levene # Load synthetic and real datasets synthetic_data = pd.read_csv('EURUSD_3_years_synthetic(1).csv') real_data = pd.read_csv('EURUSD_CSV(1).csv') # Select the 'close' column for the test synthetic_close = synthetic_data['close'] real_close = real_data['close'] # Perform Levene's test stat, p_value = levene(synthetic_close, real_close) # Print results print("Levene's Test Results:") print(f"Statistic: {stat:.4f}, P-value: {p_value:.4f}") # Interpretation if p_value > 0.05: print("The variances of the synthetic and real data are not significantly different.") else: print("The variances of the synthetic and real data are significantly different.")
Schlussfolgerung
In dem Artikel wird erörtert, wie synthetisierte Daten die Finanzanalyse verbessern, indem Probleme wie begrenzte Archivdaten, nicht repräsentative Stichproben und unzureichende Stresstests angegangen werden.
Durch den Einsatz von MQL5-Tools und Generative Adversarial Networks (GANs) können Händler echte synthetische Datensätze erstellen, die verschiedene Marktbedingungen simulieren. Durch diese Kombination entsteht ein Rahmen für die Erstellung synthetischer Symbole, wobei Validierungstechniken wie Shapiro-Wilk und Students t-Test die statistische Ähnlichkeit mit realen Marktdaten sicherstellen.
Synthetische Symbole erleichtern robuste Tests, reduzieren Optimierungsfehler und erhöhen die Widerstandsfähigkeit gegenüber Marktveränderungen, sodass Händler ihre Strategien mit Zuversicht verfeinern können. Letztlich bringt dieser Ansatz die Handelsalgorithmen und die Entscheidungsfindung voran und fördert anpassungsfähige Finanzsysteme, die auf eine dynamische Marktlandschaft reagieren können.
Übersetzt aus dem Englischen von MetaQuotes Ltd.
Originalartikel: https://www.mql5.com/en/articles/16428





- 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.