WOGO Posted February 18, 2011 Report Share Posted February 18, 2011 Da es in letzter Zeit immer wieder Fragen/Kommentare zu den Backtestdaten des MT4 gab, hab ich ein paar Tests gemacht um herauszufinden, wie genau der MT4 Strategietester seine Backtest-Tickdaten generiert.Verglichen wird hierbei die Generierung von Daten im M1 und im H1 TF. Man bekommt hierdurch auch eine Vorstellung, wie die Generierung in anderen TFs abläuft. Vorneweg, das Ergebnis ist keineswegs aufregend. Hier die Details: Alle Daten wurden generiert, nachdem „saubere“ M1-Daten in die MT-Historie geladen wurden und diese Daten dann per period-converter Script in die höheren TFs umgerechnet wurden.Daten sind somit lückenlos. Backtest mit M1-DatenDie dunkelblaue Linie mit den Rauten stellt die Tickdaten dar. Es werden pro M1-Candle maximal 4, minimal 1 Tick generiert. Die blau-grauen großen Balken stellen die Range high-low der einzelnen Minuten dar.4 Ticks gibt es, wenn High und Low außerhalb von Open/Close liegen aber nicht zwangsläufig bei großer Candle-Range.Die Tickdaten sind linear über den Candle-Körper verteilt. Backtest mit H1-DatenDie H1-Tickdaten scheinen sich von den M1 Tickdaten leicht zu unterscheiden. Läuft der selbe Zeitraum im M1 TF durch, dann werden dort etwas mehr Daten generiert.Anzahl generierter Tickdaten Backtest bei schlechter Datenqualität Wie die Tickdaten für den H1-Timeframe aussehen können, wenn man schlechte Kursdaten hat zeigt folgendes Diagramm (Orginal MT-Kursdaten) Man beachte, daß beispielsweise in der Stunde zwischen 14:00 und 14:59 nur 3 (!!!) Tickdaten generiert wurden! Einfluß von Trades auf die Tickdaten Um zu testen, ob offene Positionen die Anzahl der generierten Tickdaten erhöhen habe ich den selben Zeitraum nochmal getestet und dabei eine Long Position geöffnet.Ergebnis:Eine offene Position hat keinen Einfluß auf die generierten Tickdaten. Die besagte Position wurde bei Ask: 1.3415 geöffnet mit einem TP von 1.3463Die Position wurde dann zu 1.3465 geschlossen.Die generierten Tickdaten waren exakt dieselben wie beim Lauf ohne offener Position. Option KontrollpunkteVerwendet man als Modell die Option Kontrollpunkte, so werden:*im H1 alle 2-4 Minuten 1 Tick erzeugt*im M12-3 Ticks pro Minute erzeugt Option Open PriceVerwendet man als Modell die Option Open-Price, so werden: *im H1 1 Tick pro Stunde erzeugt, der dem jeweiligen Open-Preis entspricht*im M11 Tick pro Minute erzeugt der dem jeweiligen Open-Preis entspricht Zusammenfassung:Generell kann man sagen, dass man aufgrund der recht grob generierten Tickdaten einen ziemlich großen Schlupf sowohl bei SL als auch bei TP haben kann.Die Verwendung von hochwertigen Daten ist dringend zu empfehlen.Ein Backtest von Strategien, die auf Tickdaten beruhen, ist wenig bis garnicht sinnvoll.Am Besten, man verwendet die Methode, die im Post von Bull68 beschrieben wurde. Hoffe das hilft dem einen oder anderen bei seinen nächsten Tests. 12 Quote Link to comment Share on other sites More sharing options...
Mythos Posted February 18, 2011 Report Share Posted February 18, 2011 Vielen Dank für den tollen Test. Sehr aufschlussreich. Es werden pro M1-Candle maximal 4, minimal 1 Tick generiert. Die blau-grauen großen Balken stellen die Range high-low der einzelnen Minuten dar.4 Ticks gibt es, wenn High und Low außerhalb von Open/Close liegen aber nicht zwangsläufig bei großer Candle-Range.Die Tickdaten sind linear über den Candle-Körper verteilt. Die Werte der Ticks dürften aus dem Zufallsgenerator kommen oder? Bei höheren Timeframes ist es ja verständlich das die kleinen TFs für die Tickgenerierung genommen werden, aber in M1 bleibt nur der Zufallsgenerator. Möglicherweise bedeutet dein Ergebnis das in H1 weniger ticks erzeugt werden, das dort weniger Zufallszahlen zwischendrin entstehen sondern mehr auf die M1 Daten zurückgegriffen wird (ticks bei open, close etc.) Quote Link to comment Share on other sites More sharing options...
WOGO Posted February 18, 2011 Author Report Share Posted February 18, 2011 Vielen Dank für den tollen Test. Sehr aufschlussreich. Die Werte der Ticks dürften aus dem Zufallsgenerator kommen oder? Bei höheren Timeframes ist es ja verständlich das die kleinen TFs für die Tickgenerierung genommen werden, aber in M1 bleibt nur der Zufallsgenerator. Möglicherweise bedeutet dein Ergebnis das in H1 weniger ticks erzeugt werden, das dort weniger Zufallszahlen zwischendrin entstehen sondern mehr auf die M1 Daten zurückgegriffen wird (ticks bei open, close etc.)Nein. Die Daten werden nach einem relativ einfachem Algorithmus generiert. Ein paar Beispiele:Ist High > Open und Low Ist Open=High=Low=Close, dann gibt es nur 1 TickIst High=Open und Low=Close, dann gibt es auch 4 Ticks Open => Low => High => CloseIst Open=Close und entweder High oder Low noch genau so groß, dann gibt es 3 Ticks Open=>High=>Low/CloseIst Open=Low und High=Close so gibt es 4 Ticks mit Open, dann 2 Werte, die jeweil auf 33% und 66% zwischen Open und Close liegen und dann Close Nur um eine ungefähre Vorstellung zu bekommen Edit: Ergänzend zum letzten Beispiel sei noch gesagt, dass die Werte 33%, 66% nur bei einem sehr eher großen M1-Balken (in meinem Beispiel 10 Punkte) zustande kommen.Bei kleinen Balken gibt es nur einen Zwischentick in der Mitte zwischen Open und Close. Quote Link to comment Share on other sites More sharing options...
Mythos Posted February 18, 2011 Report Share Posted February 18, 2011 Nein. Die Daten werden nach einem relativ einfachem Algorithmus generiert. Ein paar Beispiele:Ist High=Open und Low=Close, dann gibt es auch 4 Ticks Open => Low => High => CloseIst Open=Low und High=Close so gibt es 4 Ticks mit Open, dann 2 Werte, die jeweil auf 33% und 66% zwischen Open und Close liegen und dann Close Thx für die Erklärung. Auch seltsam das es unterschiedlich behandelt wird ob beim High eröffnet und beim Low geschlossen oder beim Low eröffnet und beim High geschlossen wird.Mit Zufallsgenerator meinte ich auch eher das eben "Hausnummern" genommen werden, was ja der Fall ist. Denn in Realität können die Ticks (vor allem das "zuerst Low oder zuerst High" etc) komplett anders hereinkommen. Korrigier mich wenn ich falsch liege, aber ich glaub als Fazit für M1 kann man sagen: Auf M1 ist der Backtest nur annähernd sinnvoll, wenn der EA ausschließlich vergangene Bars beachtet und am besten nur beim OpenTick arbeitet. Quote Link to comment Share on other sites More sharing options...
WOGO Posted February 18, 2011 Author Report Share Posted February 18, 2011 Auch seltsam das es unterschiedlich behandelt wird ob beim High eröffnet und beim Low geschlossen oder beim Low eröffnet und beim High geschlossen wird.Mit Zufallsgenerator meinte ich auch eher das eben "Hausnummern" genommen werden, was ja der Fall ist. Denn in Realität können die Ticks (vor allem das "zuerst Low oder zuerst High" etc) komplett anders hereinkommen.Ich kann jetzt natürlich nur für den begrenzten Zeitraum sprechen, den ich untersucht habe. Da ich die Auswertung nicht automatisiert hab, sondern jeden Tick mehr oder weniger einzeln durchgegangen bin begrenzt sich die Untersuchung auf ein paar Hundert Ticks. Hier konnte ich eben das oben beschriebene Verhalten beobachten. Denke aber, das es allgemeingültig ist.Korrigier mich wenn ich falsch liege, aber ich glaub als Fazit für M1 kann man sagen: Auf M1 ist der Backtest nur annähernd sinnvoll, wenn der EA ausschließlich vergangene Bars beachtet und am besten nur beim OpenTick arbeitet.Das mit dem M1-Backtest würd ich vielleicht noch verallgemeinern. Meiner Meinung nach sind Backtests, die mit einem sehr geringen TP arbeiten relativ wenig aussagekräftig, da die Schrittgröße der Tickdaten schon einen hohen prozentualen Einfluß in den Profit haben.Bei größeren TPs oder Trendpositionen über längere Zeit ist dieser Einfluß eher zu vernachlässigen. Quote Link to comment Share on other sites More sharing options...
Mythos Posted February 18, 2011 Report Share Posted February 18, 2011 Meiner Meinung nach sind Backtests, die mit einem sehr geringen TP arbeiten relativ wenig aussagekräftig, Was ist bei dir gering? An sich kann ich dem aber zustimmen, müsste man aber auch auf den SL ausweiten (wobei hier die realen Ergebnisse teils vielleicht besser wären als der Backtest...) Aber wenn du so kleine TPs hast kickt dich der Broker vermutlich eh bald wegen Scalping ;) Quote Link to comment Share on other sites More sharing options...
WOGO Posted February 18, 2011 Author Report Share Posted February 18, 2011 Was ist bei dir gering? Nun, sagen wir mal es geht um eine Long-Position deren TP 10 Punkte über dem Einstiegskurs liegt (Spread mal aussenvor).Soweit ich das nachvollziehen konnte, werden ab 10 Pips Balkengröße 4 Ticks erzeugt (könnt ich jetzt nicht beschwören, aber diese Größenordnung ist es).Dann nehmen wir an, dass 1. und 2. Balken genau 9 Punkte groß sind (im M1). Hier dann das Beispiel, wo du 40% Verfälschung hättest: Das kann sich natürlich in gewissem Maße wieder rausmitteln, wenn die Trefferquote aber recht hoch ist, dann wird das Ergebnis im Backtest wesentlich besser ausfallen, als es in der Realität gewesen wäre.Natürlich unter der Voraussetzung, dass in der Realität die Zwischenticks, die in der Simulation fehlen, vorhanden gewesen wären. 2 Quote Link to comment Share on other sites More sharing options...
Mythos Posted February 18, 2011 Report Share Posted February 18, 2011 Hier dann das Beispiel, wo du 40% Verfälschung hättest: Stimmt, ich hätt zwar gedacht/vermutet, das er den TP immer zu dem Preis ausführt und dir keine "positive" Slipage gibt, würde der Broker in Realität vermutlich auch nicht, aber mei.Bei Open-Price is es übrigens nicht so. Da wird scheinbar nur geschaut ob der TP innerhalb der Range vom Bar davor war und wenn ja wurde er ausgelöst (exakt zum Preis). Quote Link to comment Share on other sites More sharing options...
RAiNWORM Posted February 19, 2011 Report Share Posted February 19, 2011 Ersteinmal muss ich sagen: klasse Ausarbeitung, WOGO! Irgendwie habe ich das Gefühl, dass wir öfters an genau den gleichen Themen parallel, aber unabhängig arbeiten. Mit der Backtestgenerierung beschäftige ich mich nämlich auch gerade Es werden pro M1-Candle maximal 4, minimal 1 Tick generiert. Die blau-grauen großen Balken stellen die Range high-low der einzelnen Minuten dar.4 Ticks gibt es, wenn High und Low außerhalb von Open/Close liegen aber nicht zwangsläufig bei großer Candle-Range.Die Tickdaten sind linear über den Candle-Körper verteilt.Hier muss ich dich laut meinen Ergebnissen leider korrigieren. VorgeschichteIch habe mir aus dem Internet bei GAIN Tickdaten geladen und selber daraus M1-Daten generiert. Beim Import nach MT4 habe ich mich nicht weiter mit dem Feld Volume befasst und dieses immer auf 40 gesetzt. Als ich dann mit meinen umgewandelten GAIN-Daten zu vollkommen anderen Ergebnissen im Backtest kam, als mit den Metaquotes-Daten, obwohl bei der verglichenen Candle OHLC gleich waren, konnte was nicht stimmen Meine Vermutung: das Volume hat Einfluss auf die Tickdatengenerierung. AktionIch habe mir eine DLL programmiert, die Tickdaten in einer Access-Datenbank archiviert. Das funktioniert auch im Backtest, sodass ich im Nachgang an den Backtest die zugrundeliegenden Ticks analysieren konnte. Und hier die Gegenüberstellung Für Volumen 6: --> Manuelle Änderung des Volumes im Historycenter auf 20 --> ErgebnisDas Volume hat Einfluss auf die Anzahl an generierten Ticks. Die Ticks sind nicht linear verteilt. 3 Quote Link to comment Share on other sites More sharing options...
WOGO Posted February 19, 2011 Author Report Share Posted February 19, 2011 Das Volume hat Einfluss auf die Anzahl an generierten Ticks. Die Ticks sind nicht linear verteilt.Wow! Daran hab ich natürlich nicht gedacht. Bei meiner Datenquelle ist das Volumen für jeden Balken fix auf 4 gestellt. Da ist mir der Einfluß vom Volumen auf Tickdaten natürlich nicht aufgefallen. Oh Mann, du machst mich echt fertig. Jetzt hab ich gestern Nacht 3 Stunden lang manuell Kursdaten importiert um jetzt gesagt zu bekommen, dass die Daten auch wieder nichts taugen. Quote Link to comment Share on other sites More sharing options...
Bull68 Posted February 19, 2011 Report Share Posted February 19, 2011 Oh Mann, du machst mich echt fertig. Jetzt hab ich gestern Nacht 3 Stunden lang manuell Kursdaten importiert um jetzt gesagt zu bekommen, dass die Daten auch wieder nichts taugen. Du auch? Und wieso nur 3h? Ich hatte einen gemischten Datensatz, also mit und ohne Volumen. Das hätte eigentlich Datenmüll geben müssen, weil bei ca. 2 Monaten die Volumenspalte komplett fehlte. Aber MT hat das fehlende Volumen irgendwie dazugebastelt und die Kurse sehen ganz ok aus.Wenn jetzt aber das Volumen Einfluss auf die generierten Tickdaten hat, dann wird es haarig. Mir ist aufgefallen, dass wenn ich Daten ohne Volumen einlesen lasse, doch ein Volumen in der betreffenden Spalte erscheint. Wird diese Zahl dann per Zufallsgenerator erzeugt oder ist das vielleicht die Anzahl der Tickdaten? Quote Link to comment Share on other sites More sharing options...
NikkChade Posted February 19, 2011 Report Share Posted February 19, 2011 Wenn ich kurz meine Meinung dazu preisgeben darf:...wenn ich Daten ohne Volumen einlesen lasse, doch ein Volumen in der betreffenden Spalte erscheint...Nach meinen Erfahrungen ist der Wert des Volume die Anzahl der Ticks. Wenn man also Daten ohne "Volume" einspielen sollte, dann werden die fehlenden Daten durch Systemwerte ersetzt....soweit ich das nachvollziehen konnte, werden ab 10 Pips Balkengröße 4 Ticks erzeugt......das würde ich zu dem Thema "sagen"! lg NC(Erinnert mich ein wenig an die "Bauweise" von Erpresserbriefen aus einigen Kinofilmen. Viele kleine Segmente zusammengefügt... ) Quote Link to comment Share on other sites More sharing options...
WOGO Posted February 20, 2011 Author Report Share Posted February 20, 2011 Damit das hier nicht so halbfertig stehen bleibt, hab ich die Untersuchung mit dem Input von Rainworm nochmal fortgesetzt.Wenn man die Volumeninformation mituntersucht, dann sehen die Ergebnisse schon wesentlich schöner aus und das was der Backtester macht wirkt jetzt bei weitem nichtmehr so sinnlos: Ich hab hierzu zwei verschiedene Balkenverläufe mit einmal 15 Pips Range und einmal mit 100 Pips Range und dabei verschiedene Volumen eingespeist (im Timeframe M1). Das Ergebnis sieht dann folgendermaßen aus.Range 15 Pips Man sieht, wenn man als Volumen "1" angibt, dann generiert sich MT anhand der Balkenrange ein eigenes Volumen und speichert dieses auch ab. Bei der gewählten Range von 15 Punkten erzeugte MT ein Volumen von 26.Etwas merkwürdig ist das Ergebnis bei Volumen "7". Hier wurden 10 Ticks generiert, deren Werte weit außerhalb der eigentlichen Bar-Range lagen. Komisch Man sieht auch, dass mit ansteigendem Volumen auch die Anzahl der generierten Ticks steigt, allerdings entspricht die Anzahl Ticks nicht genau dem Volumen. Als 2. Beispiel noch ein Balken mit Range 100 und Open=LowHier sieht man, dass bei einem von mir importierten Volumen von "1" MT eigenständig ein Volumen von 151 generiert und dafür dann 111 Ticks (pro Minute!) erzeugt. Abschließend kann man noch sagen:*Die Anzahl der generierten Ticks steigt mit ansteigendem Volumen*Bei einem importierten Volumen von "1" generiert sich MT eigenständig ein Volumen, abhängig von der Range des jeweiligen Bars.Wenn man also hochauflösende Backtestdaten haben will ist es am einfachsten, man importiert die Kursdaten mit einem Volumen von "1".Wirkliche Sprünge innerhalb eines Bars würde man damit aber eliminieren. Das ist aber auch so der Fall, da MT die Ticks ja relativ linear über den Balken verteilt. 4 Quote Link to comment Share on other sites More sharing options...
NikkChade Posted February 20, 2011 Report Share Posted February 20, 2011 Also ich muss sagen dass ich mich erst seit gestern richtig mit dem Thema Datenhistorie und Backtestdaten beschäftige. Backtesting war regelmäßig an der Tagesordnung, aber der Tausch und das aktualisieren der historischen Daten war bis Dato ein Buch mit sieben Siegeln für mich.Aber wenn man sich einmal etwas genauer damit beschäftigt, dann ist es doch verhältnismäßig "einfach" und nicht sooo schwer wie man anfangs vll gedacht hätte. Also eine super Sache hier im Forum Auch nochmal thx @ WoGo, für die Mühe der eigenen Tickdatenauswertung lg NC Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.