Dienstag, 24. November 2009

Im Umbruch

So könnte man es ausdrücken, was sich die letzten Wochen bei mir abgespielt hat. Strategien kommen und gehen, auch das wäre passend.

Nachdem die DT_TMA-Strategie nicht mehr ihren Erfolg der ersten 3 Quartale in 2009 beweisen konnte und seit Oktober nur Verluste eingebracht hat, musste ich sie vom Markt nehmen. Das Schöne dabei ist, ich habe es auch gemacht :-)

Derartige Strategien, mit wenigen Trades pro Woche, bei denen der Backtest m.M nach recht aussagekräftig ist, können hervorragend im Rahmen ihrer Backtesting-Parameter überwacht werden. ich benötige keine Tickdaten und die Ein- sowie Ausstiegspunkte sind auch sehr genügsam. Hieraus haben sich für mich folgende wichtige "Thresholds" ergeben:
  • Anzahl der Verlusttrades in Folge
  • Größter Verlusttrade
  • Max. DrawDown
Eine Verletzung dieser Parameter muss unbedingt Beachtung geschenkt werden. Entweder hat sich das Marktumfeld geändert, was für die Strategien das vorrübergehende Aus bedeuten kann, oder aber es sind Trades falsch oder gar nicht ausgeführt worden. Dies kann wiederum verschiedene Gründe haben, wie Serverausfall, Datenausfall, Fehler in der Strategie ...

Neben der Verletzung dieser Schranken bei der DT_TMA-Strategie, habe ich letzte Woche auch die DT_LH-Strategie vom Markt nehmen müssen. Die Anzahl der Verlusttrades sowie der Max. DrawDown wurde hierbei überschritten. Schaut man sich das aktuelle Marktumfeld an, bin ich letztlich auch erleichtert es geschafft zu haben, diese Strategien nicht mehr einzusetzen ... mental ist es nicht immer ganz leicht sich von seinen "Babys" zu trennen ... auch wenn es nur vorübergehend ist ... :-)

Bzgl. Scalper-Strategien, wie im letzten Post angesprochen, gibt es wenig erfreuliches zu berichten. Nachdem ich 3-4 Ansätze gründlich getestet habe, bin ich noch nicht wirklich von den Ergebnissen beeindruckt und kann hier noch keine positiven Ergebnisse veröffentlichen, geschweige denn eine lauffähige Stratgie ...

Vielmehr versuche ich in letzte Zeit meine nun einzige Strategie, DT_OG, auf mehreren Märkten erfolgreich einzusetzen. Die Backtests sind vielversprechend und auch im Live-Handel sind schon die ersten Erfolge absehbar. Der Ansatz überzeugt mich immer mehr und ich gehe hier bereits von einer auch über Monate, vielleicht sgar Jahre erfoglreichen Strategie aus ... wobei ich mir durchaus bewusst bin, dass sich ohne das aktive Managen der Strategie dieses Szenario schnell ändern kann ...

Euch weiterhin gute Trades
DarthTrader

Donnerstag, 5. November 2009

Misstrades im NinjaTrader-Backtest

Nach etlichen Tage des Testens und den Versuch die Unterschiede zwischen Backtest und Live-Trading bei NinjaTrader zu verstehen, möchte ich Euch die Ergebnisse nicht vorenthalten.

Wie im letzten Post erwähnt, beschäftige ich mich gerade mit Scalping-Systemen. Diese handeln oft und bleiben meist nur wenige Sekunden bis Minuten im Markt. Verlässt man sich nun auf einen NinjTrader-Backtest mit diesen Systemen, ist es nicht gesagt, dass die Ergebnisse, mit denen eines Live-Handelns auch nur annäherungsweise übereinstimmen.

NinjaTrader berechnet im Backtest immer nur das OHLC der einzelnen Bars. Das bedeutet, je höher der Timeframe gewählt wird in dem man handeln möchte, desto mehr Fehlergebnisse können auftreten. Hierzu ein einführendes Beispiel:

Wir handeln im M8-Timeframe und scalpen ein wenig. Durch das geringe Profit-Target des Scalpers kommt es oft vor, dass Trades am selben Bar wieder geschlossen werden, ja sogar sehr oft ... wir sind ja im M8 ...

Schaut man sich den Trade an, sehen wir, dass ich mit 2 Kontrakten Long mit einer Limit-Order in den Markt gehe.. Das Limit wird auf das Low des vorherigen Bars angepasst. Mein Profit-Target ist durch einen grünen Punkt, mein Stop-Loss durch einen roten markiert. Das Profit-Target wird erreicht, alles scheint gut gelaufen zu sein ... zumindest sagt es der Backtest so.

Im Livetrading wird der M8 Bar natürlich von vielen kleinen Ticks bzw. Trades bestimmt, ja von hunderten ... von tausenden. Diese bekommt NinjaTrader so im Backtest und in diesem hohen Timframe nicht mit, so dass ein korrektes Kursverhalten nicht vorrausberechnet werden. Misstrades sind die Folge.


Schauen wir uns zu der selben Chart-Situation nun den M1-Chart an sehen wir, dass die beiden relevanten M8-Bars (markiert mit den farbigen Rechtecken) in Wahrheit ganz anders als wie von NinjaTrader erwartet ausschauen. Der Einstiegskurs ist das Tief des ersten Rechtecks (und damit des kompletten M8-Bars). Hier ist es die linke, untere Ecke des ersten Rechtecks. Das zweite Rechteck umfasst komplett den zweiten M8-Bar. Das Einstiegslimit wird am 5.ten M1-Bar des zweiten Rechtecks getriggert und der Kurs geht .... genau weiter nach unten und nicht mehr nach oben, wie es Ninja-Trader vermutet hat. Wir hätten hier also einen Verlusttrade und keinen Gewinntrade.



Da ein Scalper locker 30-50 Trades am Tag machen kann und jeder dieser Trades potentiell ein Verlusttrade sein könnte, der Backtest aber auch bei jedem Trade das Gegenteil behaupten könnte, haben wir hier ein Problem in höheren Timeframes.


Dies hat zur Folge, dass Scalper-Systeme immer in kleineren Timeframes oder mit einem zweiten Timeframe im Code getestet werden müssen. Kleinere Timeframes führen dazu, dass NinjaTrader im Backtest mehr Daten zur Verfügung hat, aber eben auch nicht jeden Tick. Ein zweiter (kleinerer) Timeframe innerhalb der Strategy kann verwendet werden, um im höheren Timeframe weiterhin die Entry-Limits und Exit-Stops zu bestimmen, aber im kleineren Timeframe den wirklichen Einstieg bzw. Ausstieg zu vollziehen.









Im Bild zur linken sehen wir den bereinigten Misstrade im kleinerem Timeframe. Der XBar-Stop ist dafür da, den Trade nach X-Bars auszustoppen, hier genau nach einem Bar. Welche Größe für den kleineren Timeframe ausreichend ist muss von System zu System entschieden werden. Zum Testen habe ich ein Multi-Timeframe (MTF)-Template geschrieben und kann so bis auf einen Tick das kleinere Timeframe nutzen.






Wer nun denkt, damit seien alle Probleme behoben, der irrt gewaltig. NinjaTrader wartet für Scalpersystemen noch mit mehr Problemen auf den tüchtigen Entwickler. Leider sind die Backtestergebnisse nie mit den Live-Ergebnisse 100%ig zu vergleichen, aber zumindest eine klare Tendenz sollte sich abzeichnen. Folgende Punkte sind weiterhin zu beachten, auch wenn bereits eine MTF-Strategie für den Backtest im Einsatz ist:
  • Generell kann erhöhte Kursvolatilät innerhalb weniger Sekunden das Ergebnis immer verfälschen. Hier spielen Dinge wie Splippage, Abarbeitung der Order, Zeit der Codeausführung, ... eine wichtige Rolle.
  • Wenn Stops und Targets am selben Bar ausgeführt werden kann es Probleme mit der zeitlichen Reihenfolge geben, die nicht nur in falschen Backtest-Ergebnisses resultiert, sondern auch in unerwünschten Positionswechseln, da ich mich selbst um das Canceln von Orders kümmern muss, wenn ich eigene Stops (bspw. per Market-Order) in den Markt bringe (siehe auch XBar-Close von oben).
  • Weiterhin habe ich beste Erfahrung mit dem Arbeiten von OnBarClose in NinjaTrader gemacht. Dies funktioniert m.M. nach stabiler als bei jedem Tick den Code zu durchlaufen. Allerdings wird je nach Marktgeschwindigkeit die Order noch am selben Bar (letzter Kurs) oder erst zum neuen Bar (erster Kurs) ausgeführt. Genau dies führt uns wieder zur Problematik von Punkt 2,wenn Scalper im Einsatz sind.
Als Fazit bleibt festzuhalten, dass Scalper-Systeme immer auf dem Demo-Konto getestet und dann die Ergebnisse mit denen aus dem Backtest verglichen werden sollten. Der Backtest sollte immer mit kleineren Timeframes ausgeführt werden. Selbst wenn die Ergebnisse im Backtest schlecht sind, heißt das nicht, dass der Scalper versagt ... leider gilt die gegensätzliche Aussage analog und tritt mitunter sehr viel häufiger auf ...

Weiterhin gute Trades
DarthTrader