Diskussion zum Artikel "MetaTrader 5 Machine Learning Blueprint (Teil 1): Datenlecks und Zeitstempelfehler"

 

Neuer Artikel MetaTrader 5 Machine Learning Blueprint (Teil 1): Datenlecks und Zeitstempelfehler :

Bevor wir überhaupt damit beginnen können, ML für unseren Handel auf dem MetaTrader 5 zu nutzen, müssen wir uns mit einem der am meisten übersehenen Fallstricke befassen - dem Datenleck. In diesem Artikel wird erläutert, wie Datenlecks, insbesondere die Falle von MetaTrader 5-Zeitstempel, die Leistung unseres Modells verzerren und zu unzuverlässigen Handelssignalen führen können. Indem wir uns mit den Mechanismen dieses Problems befassen und Strategien zu seiner Vermeidung vorstellen, ebnen wir den Weg für den Aufbau robuster Modelle für maschinelles Lernen, die zuverlässige Vorhersagen in Live-Handelsumgebungen liefern.

Das Ausspähen von Daten oder Datenlecks mag unauffällig erscheinen, aber die Auswirkungen auf maschinelle Lernmodelle können gewaltig sein - und verheerend. Stellen Sie sich vor, Sie lernen für einen Test und schauen sich unwissentlich die Antworten vorher an. Ihr perfektes Ergebnis fühlt sich verdient an, ist aber eigentlich Betrug. Genau das passiert, wenn wir die Standard-Zeitstempel von MetaTrader 5 für das maschinelle Lernen verwenden - ein Datenleck untergräbt unerwartet die Integrität Ihres Modells.

Wie die Zeitstempel des MetaTrader 5 Sie austricksen

EURUSD M5 - MetaTrader5

MetaTrader 5 kennzeichnet den 5-Minuten-Balken ab 18:55 Uhr, d.h. den vorletzten Balken oben, als:
Time Open High Low Close

2 Apr 18:55

  1.08718

  1.08724

  1.08668

  1.08670

Durch den Zeitstempel am Anfang impliziert MetaTrader 5, dass die Daten dieses Balkens um 18:55:00 Uhr zur Verfügung standen - ganze 5 Minuten vor seinem tatsächlichen Ende! Wenn Ihr Modell dies beim Training verwendet, ist es so, als würde man einem Schüler 5 Minuten vor Beginn der Prüfung die Antworten geben. Um dem entgegenzuwirken, sollten wir es vermeiden, die vorkompilierten Zeitbalken von MetaTrader 5 zu verwenden, sondern stattdessen Tick-Daten nutzen, um die Balken zu erstellen, die wir in unseren Modellen verwenden.

Autor: Patrick Murimi Njoroge

 

Die tätigkeitsbezogenen Balken lösen nicht alle Probleme, die Sie für Zeitbalken genannt haben. Sie haben zum Beispiel geschrieben:

The Subtle Intra-Bar Leakage: However, a more subtle form of data leakage can still occur within the very formation of that time bar. If a significant event transpires midway through a 1-minute bar (e.g., at 09:00:35), any features derived from that bar (such as its high price or a flag for the event) will inevitably incorporate this information by the bar's end.

Wenn Sie Balken mit gleichem Volumen, gleichem Bereich oder andere Tick-basierte benutzerdefinierte Balken erstellen, werden Sie einen solchen Balken ohnehin mit einem einzigen Label markieren, und es werden Informationen über den Höchstpreis über den gesamten Balken hinweg durchsickern (oder genauer gesagt, verschwimmen).

Die einzige Möglichkeit, dieses Problem zu lösen, besteht darin, "Balken" mit den spezifischen Funktionen (die Sie verwenden werden) im Hinterkopf zu erstellen. Wenn z.B. Hochs oder Tiefs die Hauptmerkmale sind, sollten Sie versuchen, einen Zickzack-Balken" mit zeitlich exakt markierten Extermums zu erstellen.

Der Ansatz mit konstanten Zeitrahmen und insbesondere die Beschränkung auf M1 ist im Zusammenhang mit dem Datenleck im MT5 problematisch. Die Kennzeichnung von M1-Balken mit der Endzeit ist imho nicht viel besser als mit der Anfangszeit.


Für diejenigen, die daran interessiert sind, benutzerdefinierte Balken (Charts) nativ in MT5 zu erstellen, gibt es den Artikel mit der MQL5-Implementierung von Equal-Volume-, Equal-Range- und Renko-Balken. Natürlich können Sie die Balken mit Endzeit im Open Source Code markieren.

Custom symbols: Practical basics
Custom symbols: Practical basics
  • www.mql5.com
The article is devoted to the programmatic generation of custom symbols which are used to demonstrate some popular methods for displaying quotes. It describes a suggested variant of minimally invasive adaptation of Expert Advisors for trading a real symbol from a derived custom symbol chart. MQL source codes are attached to this article.
 
Stanislav Korotky #:

Die tätigkeitsbezogenen Balken lösen nicht alle Probleme, die Sie für Zeitbalken genannt haben. Sie haben zum Beispiel geschrieben:

Wenn Sie Balken mit gleichem Volumen, gleichem Bereich oder andere Tick-basierte benutzerdefinierte Balken erstellen, werden Sie einen solchen Balken ohnehin mit einem einzigen Etikett markieren, und es werden Informationen über den Höchstpreis über den gesamten Balken hinweg durchsickern (oder genauer gesagt, verschwimmen).

Die einzige Möglichkeit, dieses Problem zu lösen, besteht darin, "Balken" mit den spezifischen Funktionen (die Sie verwenden werden) im Hinterkopf zu erstellen. Wenn z.B. Hochs oder Tiefs die Hauptmerkmale sind, sollten Sie versuchen, einen Zickzack-Balken" mit zeitlich genau markierten Extermums zu erstellen.

Der Ansatz mit konstanten Zeitrahmen und insbesondere die Beschränkung auf M1 ist im Zusammenhang mit dem Datenleck im MT5 problematisch. Die Kennzeichnung von M1-Balken mit der Endzeit ist nicht viel besser als die mit der Anfangszeit, imho.


Für diejenigen, die daran interessiert sind, benutzerdefinierte Balken (Charts) nativ in MT5 zu erstellen, gibt es den Artikel mit der MQL5-Implementierung von Equal-Volume-, Equal-Range- und Renko-Balken. Natürlich können Sie die Balken mit Endzeit im Open Source Code markieren.

Die aktivitätsgesteuerten Balken zielen darauf ab, die in den Balken enthaltenen Informationen über statistische Eigenschaften zu verbessern, z. B. weniger Heteroskedastizität und verbesserte Normalität. Die von mir vorgeschlagene Lösung für das subtile Intra-Bar-Leakage besteht darin, die Balken mit ihren Endzeiten zu kennzeichnen, so dass alle Ereignisse, die innerhalb des Balkens auftreten, im Zeitstempel erfasst werden. Ein nützliches Beispiel ist die Verwendung von aus dem Zeitstempel abgeleiteten Merkmalen, wie z. B. Fourier-Transformationen, beim Training Ihres Modells. Wenn Sie die MetaTrader5-Konvention verwenden, bei der die Balken mit dem Beginn der Periode gekennzeichnet sind, dann geben Sie Ihrem Modell falsche Informationen. Diese Unterscheidung mag für einige Modelle keine große Rolle spielen, aber sie hat einen großen Einfluss auf Modelle, die die zyklische Natur der Märkte ausnutzen wollen. Ich hoffe, ich habe meine Absicht deutlich gemacht.


 
Stanislav Korotky #:

The activity-based bars don't solve all the problems you mentioned for time bars. For example, you wrote:

If you create bars of the same volume, range, or other tick-based custom bars, you'll be marking such a bar with a single label anyway, and information about the maximum price will leak (or more accurately, blur) across the entire bar.

The only way to solve this problem is to create "bars" with the specific features (you'll be using) in mind. For example, if highs or lows are the main characteristics, you should try to create a "zigzag bar" with extermums marked exactly in time.

The constant timeframe approach, and in particular the limitation to M1, is problematic in the context of the MT5 data leak. Marking M1 bars with the end time is imho not much better than with the start time.


For those interested in creating custom bars (charts) natively in MT5, there is the article with the MQL5 implementation of Equal Volume, Equal Range and Renko bars. Of course, you can mark the bars with end time in the open source code.

What do you mean when you state "If you create bars of the same volume, range, or other tick-based custom bars, you'll be marking such a bar with a single label anyway, and information about the maximum price will leak (or more accurately, blur) across the entire bar"?

 
Patrick Murimi Njoroge #:

Was meinen Sie, wenn Sie sagen: "Wenn Sie Balken mit dem gleichen Volumen, Bereich oder andere Tick-basierte benutzerdefinierte Balken erstellen, werden Sie einen solchen Balken sowieso mit einem einzigen Etikett markieren, und die Informationen über den Höchstpreis werden über den gesamten Balken auslaufen (oder genauer gesagt, verschwimmen)"?

Ich verstehe nicht, was daran unklar ist. Mein Satz war eine direkte Antwort auf Ihren Satz, den ich in meinem vorherigen Beitrag zitiert habe - Sie können also den Zusammenhang erkennen. Unabhängig davon, wie man die Balken formt, wird jede Eigenschaft des Balkens durch einen einzigen Zeitstempel zugeordnet, und das tatsächliche "Ereignis" für die Eigenschaft entspricht nicht diesem Zeitpunkt.
 
Stanislav Korotky # :
Ich verstehe nicht, was unklar ist. Mein Satz ist eine direkte Antwort auf Ihren Satz, den ich im vorherigen Beitrag zitiert habe. Unabhängig davon, wie Sie den Balken formen, werden alle Eigenschaften des Balkens durch einen einzigen Zeitstempel zugeordnet, und die tatsächlichen "Ereignisse" der Eigenschaften stimmen nicht mit dieser Zeit überein. Zeit.

Jetzt verstehe ich die Bedeutung der Unschärfe.

 
Patrick Murimi Njoroge #:

Jetzt verstehe ich die Bedeutung von Unschärfe.

Meine Lösung zielt darauf ab, dass der Benutzer Modelle mit dreifacher Barrierebeschriftung trainieren wird. Meiner Meinung nach ist die Komplexität der Verhinderung der oben erwähnten Unschärfe größer als der Informationsgewinn in dieser Einstellung. Ich werde jedoch einige Experimente zu diesem Thema durchführen. Wenn Sie bereits welche durchgeführt haben, wäre ich Ihnen dankbar, wenn Sie Ihre Ergebnisse und Ihren Versuchsaufbau mitteilen würden.
 
Patrick Murimi Njoroge #:

Jetzt verstehe ich die Bedeutung von Unschärfe.

Sie haben Recht, dass die Unschärfe innerhalb eines Balkens nicht durch aktivitätsbasierte Balken gelöst wird. Wenn ein Dollar-Balken schließt, spiegelt sein High-Merkmal einen Preis wider, der zu einem früheren Tick innerhalb dieses Balkens erreicht wurde. Der Zeitstempel des Balkens ist korrekt, aber der zeitliche Ursprung des Merkmals geht verloren. Kein Balkentyp - Zeit, Tick, Volumen, Dollar oder Ungleichgewicht - beseitigt dieses Problem, denn die Aggregation ist der Mechanismus der Balkenkonstruktion selbst. Ein Zickzack-Balken löst das Problem speziell für das Hoch/Tief konstruktionsbedingt: Das Extremum liegt immer beim Schlusskurs. Das ist ein echter Vorteil für Strategien, deren Hauptmerkmal das Preisextrem ist.

Ich möchte mich gegen die Vermengung von Unschärfe und Vorhersehbarkeit aussprechen. Es handelt sich um zwei unterschiedliche Probleme. Vorausschauend" bedeutet, dass das Etikett anhand von Informationen erstellt wird, die nach dem Zeitstempel der Beobachtung liegen - das Modell ist auf die Zukunft ausgerichtet. Aktivitätsbasierte Balken beheben dieses Problem: Der Zeitstempel ist der Zeitpunkt, zu dem die Informationsmenge des Balkens vollständig ist, so dass kein Etikett über ihn hinausgeht. Intra-Balken-Unschärfe bedeutet, dass ein Merkmal über die Zeit aggregiert wird, ohne dass aufgezeichnet wird, wann innerhalb des Balkens jede Komponente eingetroffen ist. Dies verringert die Auflösung, führt aber nicht dazu, dass das Modell in die Zukunft blickt. Ein M1-Balken mit falschem Zeitstempel und ein Dollar-Balken mit richtigem Zeitstempel verwischen beide ihre Merkmale - aber nur eines verursacht eine Verzerrung der Vorausschau.

Zur Kennzeichnung der Endzeit gegenüber der Startzeit von M1: Ich würde nicht sagen, dass die Endzeit nur geringfügig besser ist. Sie beseitigt die in Teil 1 dieser Serie beschriebene Falle, in der die Standardzeitstempel von MetaTrader 5 die Verfügbarkeit von Informationen fünf Minuten vor dem Schließen des Balkens implizieren. Dies ist eine konkrete, messbare Ursache für eine überhöhte Backtest-Performance, keine kosmetische Lösung. Ob Sie zusätzlich die Unschärfe innerhalb eines Balkens beheben, ist eine andere Frage.

Ihr allgemeiner Punkt - dass der Artikel nicht ausreichend unterscheidet, was das aktivitätsbasierte Sampling löst und was nicht - ist richtig. In einer künftigen Version sollte ausdrücklich darauf hingewiesen werden, dass die Entwicklung von Tick-by-Tick-Merkmalen und nicht die Auswahl von Balken die theoretisch vollständige Lösung für die Unschärfe ist, allerdings um den Preis einer wesentlich höheren Daten- und Modellierungskomplexität. Ich werde diese Klarstellung in die Schlussfolgerung aufnehmen. Ich bin gerade dabei, das Repository für diese Serie zu bereinigen, aber ich werde auch solche Fehler sehr bald bearbeiten.

 

Eine sehr interessante Sichtweise. Ich habe mich allerdings über einen möglichen Kompromiss Gedanken gemacht.

Zeitbalken können Informationen enthalten, die sich speziell auf die Kalenderzeit beziehen: wiederkehrende Muster um bestimmte Uhrzeiten, Börsensitzungen, Wirtschaftsdaten oder bestimmte Wochentage. Diese zeitlichen Effekte könnten etwas sein, das ein maschinelles Lernmodell tatsächlich erlernen könnte.

Bei Tick-Balken weisen die Beobachtungen ein einheitlicheres Aktivitätsniveau auf, doch die verstrichene Zeit zwischen den Balken wird variabel. Daher frage ich mich, ob wir beim Wechsel von Zeitbalken zu Tick-Balken möglicherweise einen Teil der Informationen verlieren, die damit zusammenhängen, wann ein bestimmtes Marktereignis eintritt.

Wäre es nicht vielleicht sinnvoll, beide Dimensionen zu berücksichtigen – aktivitätsgesteuerte Balken zur Erfassung der Marktaktivität bei gleichzeitiger Beibehaltung von Kalenderzeitinformationen als zusätzliches Merkmal?

Möglicherweise übersehe ich hier etwas, daher würde mich die Sichtweise des Autors zu diesem Thema sehr interessieren.

 
Johanny Perin Tankeu Tenembot #:

A very interesting point of view. However, I have thought about a possible compromise.

Time bars can contain information that is specific to calendar time: recurring patterns around certain times, stock market sessions, economic data, or certain days of the week. These temporal effects could be something that a machine learning model could actually learn.

With tick bars, the observations show a more uniform level of activity, but the elapsed time between bars becomes variable. Therefore, I wonder if when we switch from time bar to tick bar, we might lose some of the information related to when a particular market event occurs.

Wouldn't it perhaps make sense to consider both dimensions – activity-driven bars to capture market activity while retaining calendar time information as an additional feature?

Maybe I'm missing something here, so I would be very interested in the author's point of view on this topic.

You are not wrong in seeing the dichotomy. If I'm modeling structural breaks, time-bars are not informative, especially if analyzed across multiple times frames. However, if I'm modeling for volatility, or directional movement, tick-, dollar- and other bars have statistical properties that are more amenable to reliable predictions. For actual production purposes, you will tend to have some features that are dependent on an input model, such as HMMs or LSTMs, but you must decide what kind of information these models benefit from. 

I enjoy teaching people what tools they can use, rather than what to do with them, because it is only by reimagining what you've learnt that you can actually make use of it.