Backtesting mit Tick-Daten

 

Backtesting mit Tick-Daten

Ich denke, ich habe einen guten Weg gefunden, dies in Metatrader zu tun - und ich habe einen fairen Weg durch diese Methode bekommen, aber haben STUCK und suchen einige Hilfe mit der letzten Stufe.

1) Habe Tick-Daten von einem Unternehmen (kommerzielle Quelle) Symbol: CL (Öl) freie Quellen z.B. dukascopy etc. haben dieses Symbol nicht.
2) Ich habe die Software des Unternehmens benutzt, um diese Tickdaten in ein Balkenformat umzuwandeln (ohne Verlust der Auflösung). Das Balkenformat:

Datum, Uhrzeit, Eröffnung, Hoch, Tief, Schluss, Volumen

Jeder Balken hat nur 1 Tick in sich selbst! Also sind für einen bestimmten Balken die Eröffnungs-, Hoch-, Tiefst- und Schlusskurse alle gleich, weil nur 1 Tick im Balken enthalten ist.

3) Ich bekomme diese Tick-Daten in den Metatrader-Strategietester, indem ich die Metatrader-History-Ordner aufrufe und dort alle relevanten Dateien lösche. Ich öffne den Metatrader offline und benutze das History Center und die Importfunktion, um die Daten dort hineinzubekommen. Obwohl es sich um Tick-Daten handelt - mit ihrem Balkenformat - werden sie natürlich von metatrader akzeptiert. Wenn ich den Strategietester benutze (natürlich immer noch offline), kann ich auf diese Daten zugreifen.

4) ABER das Problem: Laut Metatrader gibt es in diesen Daten mehrere Balken mit demselben Datum und Zeitstempel (weil Metatrader Sekunden ignoriert; das kleinste, was er berücksichtigt, sind Minuten). Ich denke, die Lösung für dieses Problem besteht darin, die Daten so zu VERÄNDERN, dass alle Balken unterschiedliche Datums- und Zeitstempel haben (in einer Auflösung, die von metatrader erfasst werden kann). Wenn also zum Beispiel
ein Balken einen Zeitstempel von 18:00:00 und der nächste einen Zeitstempel von 18:00:08 hat - dann sollte dieser zweite Balken so geändert werden, dass er einen Zeitstempel von 18:01:00 hat. Damit er von Metatrader als nächster Balken erfasst werden kann. Dies würde alle Zeitstempel (und die Datumsstempel zu gegebener Zeit) natürlich ändern, aber ich glaube nicht, dass dies wirklich wichtig ist. Meine Frage ist - WIE KANN ICH ALLE DATUMS- UND ZEITSTEMPEL AUF DIESE WEISE ÄNDERN?

Natürlich haben die Daten zu viele Einträge für Excel. Ich habe Zugang zu Microsoft Access.

Vielleicht würde ein Skript, das iterativ 1 Sekunde zu jedem Zeiteintrag hinzufügt, funktionieren. Aber müsste die Stunde entsprechend ändern, wie wir nach oben ging und dann das Datum natürlich. Das ist es, was mich stört - ich komme nicht weiter. Ich weiß nicht, wie ich das machen soll.


Ein Beispiel für meine bar-basierten Tick-Daten ist unten ausgeschnitten und eingefügt
(es handelt sich um CL-Daten - Sweet Crude Oil Future)

Datum, Uhrzeit, Eröffnung, Hoch, Tief, Schluss, Volumen
20100831,18:00:00,71.70,71.70,71.70,71.70,2
20100831,18:00:00,71.70,71.70,71.70,71.70,1
20100831,18:00:00,71.70,71.70,71.70,71.70,1
20100831,18:00:00,71.70,71.70,71.70,71.70,1
20100831,18:00:00,71.70,71.70,71.70,71.70,1
20100831,18:00:01,71.73,71.73,71.73,71.73,2
20100831,18:00:01,71.74,71.74,71.74,71.74,1
20100831,18:00:01,71.73,71.73,71.73,71.73,1
20100831,18:00:01,71.74,71.74,71.74,71.74,1
20100831,18:00:01,71.74,71.74,71.74,71.74,1
20100831,18:00:01,71.74,71.74,71.74,71.74,1
20100831,18:00:01,71.74,71.74,71.74,71.74,1
20100831,18:00:01,71.74,71.74,71.74,71.74,1
20100831,18:00:01,71.74,71.74,71.74,71.74,1
20100831,18:00:01,71.75,71.75,71.75,71.75,7
20100831,18:00:01,71.75,71.75,71.75,71.75,1
20100831,18:00:04,71.75,71.75,71.75,71.75,1
20100831,18:00:05,71.74,71.74,71.74,71.74,1
20100831,18:00:05,71.75,71.75,71.75,71.75,1
20100831,18:00:05,71.75,71.75,71.75,71.75,3
20100831,18:00:08,71.75,71.75,71.75,71.75,7
20100831,18:00:09,71.75,71.75,71.75,71.75,1
20100831,18:00:10,71.75,71.75,71.75,71.75,1
20100831,18:00:10,71.75,71.75,71.75,71.75,1
20100831,18:00:10,71.71,71.71,71.71,71.71,1
20100831,18:00:11,71.70,71.70,71.70,71.70,1
20100831,18:00:11,71.68,71.68,71.68,71.68,1
20100831,18:00:19,71.71,71.71,71.71,71.71,1
20100831,18:00:19,71.71,71.71,71.71,71.71,1
20100831,18:00:19,71.69,71.69,71.69,71.69,1
20100831,18:00:19,71.69,71.69,71.69,71.69,1
20100831,18:00:19,71.68,71.68,71.68,71.68,2
20100831,18:00:19,71.67,71.67,71.67,71.67,1
20100831,18:00:34,71.72,71.72,71.72,71.72,1
20100831,18:00:34,71.72,71.72,71.72,71.72,1
20100831,18:00:35,71.72,71.72,71.72,71.72,1
20100831,18:00:37,71.72,71.72,71.72,71.72,1
20100831,18:00:56,71.71,71.71,71.71,71.71,1
20100831,18:00:56,71.71,71.71,71.71,71.71,1
20100831,18:00:56,71.70,71.70,71.70,71.70,1
20100831,18:01:00,71.71,71.71,71.71,71.71,1
20100831,18:01:02,71.72,71.72,71.72,71.72,1
20100831,18:01:11,71.71,71.71,71.71,71.71,1
20100831,18:01:12,71.71,71.71,71.71,71.71,1
20100831,18:01:13,71.71,71.71,71.71,71.71,1
20100831,18:01:16,71.70,71.70,71.70,71.70,1
20100831,18:01:26,71.70,71.70,71.70,71.70,3
20100831,18:01:26,71.70,71.70,71.70,71.70,5
20100831,18:01:28,71.70,71.70,71.70,71.70,1
20100831,18:01:33,71.71,71.71,71.71,71.71,1
20100831,18:01:36,71.70,71.70,71.70,71.70,4
20100831,18:01:45,71.70,71.70,71.70,71.70,1
20100831,18:01:46,71.71,71.71,71.71,71.71,2
20100831,18:01:46,71.71,71.71,71.71,71.71,4
20100831,18:01:49,71.71,71.71,71.71,71.71,1
20100831,18:02:19,71.70,71.70,71.70,71.70,1
20100831,18:02:25,71.70,71.70,71.70,71.70,1
20100831,18:02:25,71.70,71.70,71.70,71.70,1
20100831,18:02:25,71.70,71.70,71.70,71.70,1
20100831,18:02:25,71.70,71.70,71.70,71.70,1
20100831,18:02:26,71.70,71.70,71.70,71.70,1
20100831,18:02:26,71.70,71.70,71.70,71.70,1
20100831,18:02:39,71.74,71.74,71.74,71.74,1
20100831,18:03:10,71.74,71.74,71.74,71.74,1
20100831,18:03:29,71.75,71.75,71.75,71.75,1
20100831,18:03:34,71.75,71.75,71.75,71.75,1
20100831,18:03:34,71.77,71.77,71.77,71.77,1
20100831,18:03:41,71.78,71.78,71.78,71.78,1
20100831,18:03:41,71.78,71.78,71.78,71.78,5
20100831,18:03:41,71.78,71.78,71.78,71.78,5
20100831,18:03:41,71.79,71.79,71.79,71.79,1
20100831,18:03:44,71.78,71.78,71.78,71.78,1
20100831,18:03:50,71.78,71.78,71.78,71.78,1
20100831,18:03:52,71.79,71.79,71.79,71.79,1
20100831,18:04:14,71.79,71.79,71.79,71.79,1
20100831,18:04:14,71.79,71.79,71.79,71.79,1
20100831,18:04:14,71.80,71.80,71.80,71.80,1
20100831,18:04:14,71.80,71.80,71.80,71.80,2

Anzumerken ist, dass ich die Daten tatsächlich ohne Sekunden und nur in Minuten darstellen kann, was bei der Lösung helfen könnte.

20100831,18:00,71.70,71.70,71.70,71.70,2
20100831,18:00,71.70,71.70,71.70,71.70,1
20100831,18:00,71.70,71.70,71.70,71.70,1
20100831,18:00,71.70,71.70,71.70,71.70,1
20100831,18:00,71.70,71.70,71.70,71.70,1
20100831,18:00,71.73,71.73,71.73,71.73,2
20100831,18:00,71.74,71.74,71.74,71.74,1
20100831,18:00,71.73,71.73,71.73,71.73,1
20100831,18:00,71.74,71.74,71.74,71.74,1
20100831,18:00,71.74,71.74,71.74,71.74,1
20100831,18:00,71.74,71.74,71.74,71.74,1
20100831,18:00,71.74,71.74,71.74,71.74,1
20100831,18:00,71.74,71.74,71.74,71.74,1
20100831,18:00,71.74,71.74,71.74,71.74,1
20100831,18:00,71.75,71.75,71.75,71.75,7
20100831,18:00,71.75,71.75,71.75,71.75,1
20100831,18:00,71.75,71.75,71.75,71.75,1
20100831,18:00,71.74,71.74,71.74,71.74,1
20100831,18:00,71.75,71.75,71.75,71.75,1
20100831,18:00,71.75,71.75,71.75,71.75,3
20100831,18:00,71.75,71.75,71.75,71.75,7
20100831,18:00,71.75,71.75,71.75,71.75,1
20100831,18:00,71.75,71.75,71.75,71.75,1
20100831,18:00,71.75,71.75,71.75,71.75,1
20100831,18:00,71.71,71.71,71.71,71.71,1
20100831,18:00,71.70,71.70,71.70,71.70,1
20100831,18:00,71.68,71.68,71.68,71.68,1
20100831,18:00,71.71,71.71,71.71,71.71,1
20100831,18:00,71.71,71.71,71.71,71.71,1
20100831,18:00,71.69,71.69,71.69,71.69,1
20100831,18:00,71.69,71.69,71.69,71.69,1
20100831,18:00,71.68,71.68,71.68,71.68,2
20100831,18:00,71.67,71.67,71.67,71.67,1
20100831,18:00,71.72,71.72,71.72,71.72,1
20100831,18:00,71.72,71.72,71.72,71.72,1
20100831,18:00,71.72,71.72,71.72,71.72,1
20100831,18:00,71.72,71.72,71.72,71.72,1
20100831,18:00,71.71,71.71,71.71,71.71,1
20100831,18:00,71.71,71.71,71.71,71.71,1
20100831,18:00,71.70,71.70,71.70,71.70,1
20100831,18:01,71.71,71.71,71.71,71.71,1
20100831,18:01,71.72,71.72,71.72,71.72,1
20100831,18:01,71.71,71.71,71.71,71.71,1
20100831,18:01,71.71,71.71,71.71,71.71,1
20100831,18:01,71.71,71.71,71.71,71.71,1
20100831,18:01,71.70,71.70,71.70,71.70,1
20100831,18:01,71.70,71.70,71.70,71.70,3
20100831,18:01,71.70,71.70,71.70,71.70,5
20100831,18:01,71.70,71.70,71.70,71.70,1
20100831,18:01,71.71,71.71,71.71,71.71,1
20100831,18:01,71.70,71.70,71.70,71.70,4
20100831,18:01,71.70,71.70,71.70,71.70,1
20100831,18:01,71.71,71.71,71.71,71.71,2
20100831,18:01,71.71,71.71,71.71,71.71,4
20100831,18:01,71.71,71.71,71.71,71.71,1
20100831,18:02,71.70,71.70,71.70,71.70,1
20100831,18:02,71.70,71.70,71.70,71.70,1
20100831,18:02,71.70,71.70,71.70,71.70,1
20100831,18:02,71.70,71.70,71.70,71.70,1
20100831,18:02,71.70,71.70,71.70,71.70,1
20100831,18:02,71.70,71.70,71.70,71.70,1
20100831,18:02,71.70,71.70,71.70,71.70,1
20100831,18:02,71.74,71.74,71.74,71.74,1
20100831,18:03,71.74,71.74,71.74,71.74,1
20100831,18:03,71.75,71.75,71.75,71.75,1
20100831,18:03,71.75,71.75,71.75,71.75,1
20100831,18:03,71.77,71.77,71.77,71.77,1
20100831,18:03,71.78,71.78,71.78,71.78,1
20100831,18:03,71.78,71.78,71.78,71.78,5
20100831,18:03,71.78,71.78,71.78,71.78,5
20100831,18:03,71.79,71.79,71.79,71.79,1
20100831,18:03,71.78,71.78,71.78,71.78,1
20100831,18:03,71.78,71.78,71.78,71.78,1
20100831,18:03,71.79,71.79,71.79,71.79,1
20100831,18:04,71.79,71.79,71.79,71.79,1
20100831,18:04,71.79,71.79,71.79,71.79,1
20100831,18:04,71.80,71.80,71.80,71.80,1
20100831,18:04,71.80,71.80,71.80,71.80,2
20100831,18:04,71.80,71.80,71.80,71.80,1
20100831,18:04,71.80,71.80,71.80,71.80,3
20100831,18:04,71.80,71.80,71.80,71.80,17
20100831,18:04,71.80,71.80,71.80,71.80,1
20100831,18:04,71.80,71.80,71.80,71.80,4
20100831,18:04,71.79,71.79,71.79,71.79,1

 
Der Tester verwendet FXT-Dateien und diese haben auch Sekunden. Leider werden diese FXT-Dateien bei jedem weiteren Test überschrieben, so dass die Benutzer keine eigenen Daten einfügen können (in alten Versionen von MT4 war dies möglich -> https://www.mql5.com/en/forum/103180/page6#321081). Es gibt eine Möglichkeit, dieses Hindernis zu überwinden... Siehe hier für detaillierte Informationen -> http://eareview.net/tick-data.
 

Diese Website scheint die Standardantwort auf alles, was mit Zecken zu tun hat, zu sein.

aber was ich versuche zu tun, ist etwas anderes (ich habe über es eine andere Route gegangen, weil meine Tick-Daten ist nicht aus der gleichen Quelle wie die Website angenommen - es hat eine diffferent Startpunkt und so ist nicht geeignet Substrat für die angebotenen Konvertierung Dateien/Systeme).

In der Tat gibt es bei meiner Methode KEINE Notwendigkeit, eine alte Metatrader-Version zu verwenden. Wenn ich richtig liege. Ich bin auch fast am Ziel - ich brauche nur noch Hilfe bei der letzten Etappe,

 

Was denken Sie?

1) Bin ich auf einem guten Weg?

Wie gesagt - ich kann den Pfad a la dieser Website (Birt EA) einfach nicht verwenden, da er für meinen Startpunkt nicht gültig ist.

2) Wenn ja - haben Sie eine Idee, um über diese endgültige Sticking Point bin ich auf?

 
Entweder haben Sie Birt's Methode nicht verstanden oder ich verstehe Sie nicht. Das Folgende macht keinen Sinn:


mikey:

[...]

4) ABER das Problem: Laut Metatrader gibt es in diesen Daten mehrere Balken mit demselben Datum und Zeitstempel (weil Metatrader Sekunden ignoriert; das kleinste was er berücksichtigt sind Minuten). Ich denke, die Lösung für dieses Problem ist, die Daten so zu VERÄNDERN, dass alle Balken unterschiedliche Datums- und Zeitstempel haben (in einer Auflösung, die von metatrader erkannt werden kann). [...]

Das ist keine Lösung, da der Tester immer zuerst die Ticks für den Backtest interpolieren wird, unabhängig davon, was Sie im History Center tun. Die Hauptidee hinter Birt's Methode ist es, die interpolierte Tick-Datei durch eine Datei zu ersetzen, die echte Ticks enthält, mit denen der Tester testen kann. Selbst wenn Sie bei Ihrem aktuellen Versuch erfolgreich sind, würde der Tester immer noch Ticks interpolieren, um sie zu testen, also macht es keinen Sinn.


Ich empfehle Ihnen, dies zu lesen -> https://www.mql5.com/en/articles/1511 und das Tutorial von Birt noch einmal durchzugehen. Ihr Ziel sollte es sein, eine richtige FXT-Datei mit echten Ticks zu erstellen, um die vom Tester generierte FXT-Datei zu ersetzen. Mit Birt's Methode können Sie die "Neuberechnung" deaktivieren und so den Tester dazu bringen, Ihre FXT-Datei (mit Ihren echten Ticks) zu verwenden.

 

Es hängt alles von Folgendem ab:

1) Interpoliert Metatrader die Ticks nur innerhalb der Balken? (Ich denke, das tut er)

2) Und tut er dies so, wie es die gegebenen Werte des Balkens vorgeben und einschränken: open, high, low, close?

Wenn [1] und [2] zutreffen, halte ich meine Methode für gültig, denn bei meiner Methode hat jeder Balken nur 1 Tick. Die Werte von Open, High, Low und Close sind also alle gleich groß. Wenn Metatrader diese also zur Interpolation von Ticks verwendet, erhalten alle interpolierten Ticks genau denselben Wert/Kurs. Die Interpolation der neuen Ticks durch Metatrader ist also kein Problem - sie ändert nichts.

Ich glaube, ich verstehe die Problematik, und ich glaube, ich bin auf dem Weg zu einer meiner Meinung nach besseren Vorgehensweise. ABER ich bin bereit, mich korrigieren zu lassen. Vielleicht bin ich naiv.

 
mikey:

1) Interpoliert Metatrader die Ticks nur innerhalb der Balken? (Ich denke, das tut er)

2) Und tut er dies so, wie es die gegebenen Werte des Balkens vorgeben und einschränken: open, high, low, close?

Wenn [1] und [2] zutreffen, halte ich meine Methode für gültig, denn bei meiner Methode hat jeder Balken nur 1 Tick. Die Werte für Open, High, Low und Close sind also alle gleich groß. Wenn Metatrader diese also zur Interpolation von Ticks verwendet, erhalten alle interpolierten Ticks genau denselben Wert/Kurs. Die Interpolation der neuen Ticks durch Metatrader ist also kein Problem - sie ändert nichts. [...]

Ich verstehe... Danke für die Klarstellung. Nun, wenn der Balken O=C=H=L und Volumen=1 hat, dann sollte tatsächlich nur 1 Tick gebildet werden. Aber das würde bedeuten, dass Sie die Zeitskala um das durchschnittliche Volumen des Balkens "strecken". Und Sie strecken sie "gleichmäßig", obwohl verschiedene Balken unterschiedliche Volumina haben. Dies dürfte für die meisten Experten schwerwiegende Folgen haben. Es würde auch bedeuten, dass die Daten/Zeiten auf den Prüfberichten gestreckt werden und dass der Swap unzählige Male länger dauern würde, als er sollte. Das klingt extrem unzuverlässig, und ich denke, dass es für die meisten Experten einfach nicht "funktionieren" wird.


Wie auch immer, um Ihre Frage zu beantworten, wie man es macht. Erstellen Sie einfach eine M1-HST-Datei, bei der jeder Balken einen einzelnen Tick darstellt. Dies kann über ein Skript erfolgen. Die Struktur der HST-Datei ist im Handbuch (Terminal-Hilfe) dokumentiert, und Sie können einige Codes aus dem csv2fxt-Skript wiederverwenden.


p.s. Wenn Sie daran interessiert sind, wie die Interpolation im Tester durchgeführt wird, gibt es einen guten Artikel darüber, wie es im MT5 Tester gemacht wird... Sollte sehr ähnlich (wenn nicht sogar gleich) zu dem sein, was im MT4-Tester vor sich geht -> https://www.mql5.com/en/articles/75.

 

Eine weitere Klarstellung zu meiner letzten Aussage:

Jeder Tick erhält seinen eigenen M1-Balken (ein Balken mit einem eindeutigen Datums- und Zeitstempel, wobei die Zeit in ganzen Minuten aufgelöst wird).

Das bedeutet also, dass die Zeit verschoben wird - der Balken eines Ticks kann eine ganz andere Zeit haben als die, zu der dieser Tick tatsächlich stattfand.

Aber das ist für mich KEIN Problem. Ich muss die Zeit nicht genau wissen. Ich weiß, welche Daten ich in den Backtest eingefügt habe (von diesem Datum bis zu diesem Datum), und ich werde am Ende wissen, ob am Ende dieses Zeitraums mit dieser Methode ein Gewinn oder Verlust erzielt wurde. (die genauen Daten/Zeitpunkte auf dem Ausgabegraphen interessieren mich nicht)

Nochmals - ich kann mich korrigieren lassen. Ist das alles richtig oder verrückt? Bitte nehmen Sie sich die Zeit, um zu verstehen, was ich gesagt habe, anstatt mich nur auf Birts zu verweisen, denn wenn ich das richtig rüberbringen kann und es solide ist, denke ich, dass es eine bessere Methode sein könnte, Dinge zu tun.

 

mikey:

[...] Aber das ist für mich KEIN Problem. Ich muss die Zeit nicht genau wissen. Ich weiß, welche Daten ich in den Backtest eingefügt habe (von diesem Datum bis zu diesem Datum), und ich werde am Ende wissen, ob am Ende dieses Zeitraums mit dieser Methode ein Gewinn oder ein Verlust erzielt wurde. (das genaue Datum/die genauen Zeitangaben auf dem Ausgangsdiagramm interessieren mich nicht) [...]

OK. Aber sind Sie absolut sicher, dass dies keine Auswirkungen auf den Sachverständigen haben wird? Zum Beispiel wird jeder Experte, der sich auf die Berücksichtigung von Zeitrahmen oder Indizes, die auf Zeitrahmen basieren, stützt, nicht so funktionieren, wie er soll. Sie werden auch den Swap auf Null zurücksetzen müssen, da er sicher nicht richtig berechnet wird. Es könnte noch andere Nebenwirkungen geben, an die ich im Moment nicht denke... Klingt für mich sehr gefährlich.
 
BTW, u gehen zu müssen, um das Volumen Daten zu verwerfen, da es irrelevant für die Art und Weise ist es in MT4 berechnet (Volumen = Anzahl der Ticks in einem bar erhalten).
 

Yep. Ihre Antwort kam gerade, als ich meine letzte gesendet.

RE: Volumen...- wenn meine EA doesnt "lesen" Volumen bin ich sicher auf diese? Muss ich mir darüber keine Sorgen machen? Ich habe nicht über das Volumen denken - aber dann, wie ich sagen, meine EA doesnt "lesen" es für alles. Also, nur um zu klären - ich kann Volumen ignorieren? Oder sollte ich vielleicht Volumen auf 1 für alle Bars setzen?

Grund der Beschwerde: