Donnerstag, 4. März 2010

Trades - Februar 2010

Nicht das Ihr meint, ich würde mich zurückziehen wollen und den Blog hier etwas schleifen lassen, aber gesundheitlich kann ich momentan nur das nötigste berichten.

Der Februar war etwas besser als der Anfang diesen Jahres, endete allerdings auch mit etwas über $1,000 im Verlust. Zurzeit ist wirklich mit den bisherigen Strategien am Markt wenig zu holen. Deswegen habe ich das Risiko minimiert und es laufen aktuell nur noch 2 Strategien auf 2 Märkten.

Neben den gesundheitlichen Aspekten steht in den nächsten 6-8 Wochen ein Umzug an, so dass ich wohl eine kleinere Auszeit nehmen werde. Aber keine Angst, der Blog wird sicher weitergeführt und dann werde ich auch wieder an der Front angreifen.

Es werden neue Strategien kommen und ich werde weiter kämpfen. Ich weißt dass Trading, genau so wie die Programmierung, meine Leidenschaft ist und ich liebe es einen offenen Trade zuzusehen. Wie ein bekannter Trader sagte: "Traden ist das aufregendste, was man im angezogenen Zustand machen kann."

"Heute ist nicht aller Tage ... ich komm wieder ... keine Frage :-)"

Beste Grüße
DarthTrader

Samstag, 20. Februar 2010

NinjaTrader spezifische Order-Handling-Methoden

In diesem Artikel dieser Serie möchte ich gerne auf Methoden von NinjaTrader eingehen, die Event-Gesteuert von der NT-API beim Abarbeiten einer Order aufgerufen werden. Konkret handelt es sich dabei um die Methoden ...
  • OnExecution (IExecution execution)
  • OnPositionUpdate (IPosition position)
  • OnOrderUpdate (IOrder order)
Die Methoden Initialize() sowie OnBarUpdate() werde ich nicht näher erläutern. Diese sollten zur Standardausrüstung einer jeden Strategie gehören. Interessant an dieser Stelle ist vielleicht, dass ich meine Entries und Exits in eigenen Methoden ausgelagert habe, um den Code lesbarer und pflegbarer zu gestalten. Beiden Methoden werden entsprechend der Bedingungen, ob ein Signal vorliegt oder bereits ein Trade eingegangen wurde aus OnBarUpdate() heraus aufgerufen.

Aber zurück zu den Event-Methoden, die ich in jeder Strategie überschrieben habe, um die eigenen Bedürfnisse meiner Strategien besser umsetzen zu können. Ich werde wieder den entscheidenden Code posten und bei Bedarf noch weitere Erklärungen hinzufügen:















OnExecution
ist die zentrale Methode, wenn ich Stops oder Limits setzen möchte. Erst hier kann ich 100%ig sicher sein, dass die Order ausgeführt wurde. Wie groß die Position ist, kann ich über execution.Order.Filled herausfinden, denn auch ein Partial-Fill wird hier mit behandelt. Entsprechend muss ich das im Order-Objekt prüfen. Da ich mir zu jeder Order ein entsprechendes Order-Objekt im Code halte, sind diese Prüfungen recht trivial gehalten. Im NinjTrader Helpguide oder im Forum gibt es weitere Beispiele hierzu.












Nach jedem Positionswechsel können hier Variablen zurückgesetzt oder entsprechend initialisiert werden. So kann hier bspw. auch recht einfach ein Wechsel der Entries erfolgen. Möchte ich nach einem Long-Signal nur noch Short handeln, kann ich hier im Long-Fall eine bool'sche Variable mit true belegen und die entsprechende Short-Variable mit false. Der umgekehrte Fall gilt analog. Als kleines 'Schmankerl', lasse ich mir hier die aktuelle Position noch im Chart als Textstring mit ausgeben.



























Dieser, vielleicht interessantesten und wahrscheinlich auch wichtigsten Methode ist sehr viel Beachtung zu schenken. Ich muss gestehen, anfangs habe ich sie schlicht ignoriert, bis wiederholt Fehler bei meinen Stops und Limits aufgetreten sind und unerwünschte Orders abgesetzt wurden. Woran lag das? Nun, wenn ich mit eigenen Exit-Triggern per Market-Order aus dem Trade gehe, aber zusätzlich noch Stop-Orders aktiviert im Markt habe, muss ich diese erste Canceln. Das kann ich zwar über CancelOrder(IOrder) mit Hilfe der API hinbekommen, aber ob und wann mein Stop-Order wirklich gecancelt ist, weiß ich erst, wenn ich es in OnOrderUpdate prüfe. Erst wenn die Prüfung Erfolg hatte (siehe kommentierten Code), sollte ich wirklich per Market-Order rausgehen. Im Normalfall merke ich davon nichts und meine Strategie funktioniert auch ohne obige Implementierung. Allerdings hatte ich ab und zu den Fall das ich in schnellen Marktphasen einen TimedExit ausgeführt hatte und anschließend durch meine Stop-Order wieder in der Gegenrichtung im Markt war. Dies kommt selten vor, führt aber zu unerwünschten Ergebnissen.


Weiterhin kann ich in OnOrderUpdate noch ein Rejection-Handling für Orders einbauen, dazu aber in weiteren Artikeln mehr.

Beste Grüße
DarthTrader

hbreuer-trading.de - NinjaTrader Programmierung, Seminare und automatische Handelssysteme

Sonntag, 7. Februar 2010

UserDefinedMethods.cs - Methoden

Nachdem im letzten Teil die Variablen der Klasse UserDefinedMethods.cs besprochen wurden, folgend nun zentrale Methoden, die ich in meinen Strategien verwende.

Ich poste die Methoden inkl. meiner internen Beschreibung, so dass eine weitere Erklärung nicht notwendig erscheint. Dort wo es Sinn macht, werde ich weiterhin kommentieren:
























































Hier wird sich nach jedem Positionswechsel der Status gemerkt und in der nächsten Methode ausgewertet.Die im vorherigen Post angesprochenen Variablen orderFeed und dataFeed werden hiefür verwendet.





















Zusätzlich können weitere technische Methoden implementiert werden. In meinem Falls
sind das bisher nur die Methoden isUpGap() und isDownGap(). Auf deren Implementierung wird hier allerdings aus Trivialitätsgründen verzichtet.

Beste Grüße
DarthTrader

UserDefinedMethods.cs - Variablen

Da wir gerade beim Thema sind, möchte ich Euch gerne die Klasse UserDefinedMethods.cs etwas näher bringen.

Diese NT-Standardklasse ist Oberklasse von allen Strategien, die der User schreiben oder verwenden kann. Ausgdrückt wird die Vererbung im Code einer eigenen Klasse durch folgendes Konstrukt:






Der User kann in dieser Klasse globale Methode für alle Unterklassen und damit auch Strategien implementieren. Doch vorsicht, wie aus dem letzten Post ersichtlich besteht hier aufgrund von C# -spezifischen (bspw. Vererbungsregeln), aber auch von allgemeinen objekt-orientierten Prinzipien eine erhöhte Fehlergefahr bei der Programmierung. Im letzten Post hatte ich erwähnt, dass Trades nicht abgesetzt wurden. Dies war zum Glück ein Fehler, der keine großen Konsequenzen hatte, aber sicherlich sollte man hier aufpassen was man macht.


Welche Methoden oder Prüfungen gehören meiner Ansicht nach nun in diese Oberklasse und wo ist es sinnvoll Variablen oder Methoden vielleicht eher in Unterklassen zu verwalten? Da ich kein C# -Experte bin, mich allerdings mit objekt-orientierten-Methodiken auskenne, möchte ich vorab schonmal darauf hinweisen, dass ich mich nicht immer an das Prinzip der Datenkapselung gehalten habe. Wichtiger ist mir persönlich an dieser Stelle, dass der Code stabil läuft sowie einfach und schnell zu ändern ist. Programmiertechnisch gesehen oder gar aus Sicht architektureller Aspekte gibt es sicherlich elegantere Methoden, aber das soll hier nicht weiter relevant sein.

Ok, zurück zu den Prüfungen die ich in der Klasse UserDefinesMethod.cs hinterlegt habe. Gerne bin ich für weitere Anregungen oder Ideen offen.

Einschränken der Tradingzeiten:








Je nach Geschmack kann man die zusätzlich notwendigen Parameter-Deklaration in der Oberklasse einbauen oder in der Strategie selbst. Ich habe mich für letzteres entschieden, um nicht immer die Möglichkeit zu haben, die Tradingzeiten einzuschränken, da es manchmal einfach nur störend ist, den Parameter-Bereich zuzumüllen.


Globale Entry und Exit-Order-Objekte:





Beinahe jede Strategie besitzt bei mir Entry-, Stop- und Target-Orders. Deswegen habe ich mich dazu entschlossen, diese in eine Oberklasse mit aufzunehmen.

An den Sichtbarkeitseinschränkungen der Variablen (hier: protected) erkennt man, dass die Variablen mit vererbt werden, also pro Unterklasse vorhanden sind und dort auch überschrieben werden können.

Instanzvariablen, um den Connection-Status zum Orderserver und Preisserver zu speichern:




So, dass soll es erstmal gewesen sein. Die zentralen Methoden des Klasse UserDefinedMethods.cs werden im zweiten Teil besprochen.

Beste Grüße
DarthTrader

Mittwoch, 3. Februar 2010

Fehleranalyse - isNewDay()

Bevor es die nächstes Wochen mit konkreten Themen weiter geht kurz ein Fehlerquiz. Seit heute handel ich ein und dieselbe Strategie auf 3 Märkten, das hei0t ich habs versucht. Durch eine Codeumstellung wurde immer nur ein Markt gehandelt, obwohl Signale für alle drei vorhanden waren. 2 Märkte hatte ich schonmal parallel mit einer Strategie gehandelt, aber 3? Sollte es daran liegen, oder doch an folgendem Code:

Code aus der Strategie, um festzustellen, ob ein neuer Tag angefangen hat. Es wird eine Variable schonGetradet (zurück-)gesetzt, so dass ich damit sicherstellen kann, jeden Tag definitiv nur einen Trade auszuführen:












Code aus UserDefinedMethods.cs, um in einer Oberklasse zentrale Methoden zu verwalten, die alle Strategien verwenden können. Hier wird die von der Subklasse aufgerufene Methode isNewDay() implementiert:

















Wo ist der Fehler und warum wird nur ein Markt gehandelt und nicht alle 3 Signale, die es gestern und heute mit derselben Strategie gab?


Die Auflösung gibt es die nächsten Tage, wer möchte kann mit raten :-)

Beste Grüße
DarthTrader


UPDATE und AUFLÖSUNG:

Gerd hat recht newDay ist eine Klassenvariable und keine Instanzvariable. Deswegen existiert sie nur einmal. Zudem ist sie als private deklariert und wird demzufolge nicht mit vererbt. Ein Deklaration von

protected int newDay = -1

könnte das Problem lösen. Allerdings habe ich mich für die sicherere Variante entschieden und meinen Code wieder auf das hier geändert ...

if (ToDay(Time[0]) != ToDay(Time[1])) { ... }

... um weitere Fehler vorerst zu vermeiden.

Für Fortgeschrittene in Sachen Programmierung: Sicherlich gibt es auch Situationen, in denen die Fehler-Variante von oben von mehr als einer Strategie aufgerufen werden kann, aber sicher ist es nicht. Stichwort hierbei ist "Thread-Sicherheit", denn obiger Code ist nicht synchronisiert (vorr. in C# ist es ähnlich wie in Java :-)

Freitag, 29. Januar 2010

Vorstellung neue Kategorie

Hallo nochmal zur Vorstellung der neuen Kategorie "Code-Snippets".

Anfangen möchte ich mit einem grundlegenden Artikel über die Erstellung von Strategien und den Hindernissen die dabei auftreten können. Ich werde hierbei vorzugsweise auf NinjaTrader eingehen und in den nächsten Artikeln zu dieser Serie auch Codebeispiele vorstellen. Allgemeinere Aussagen lassen sich allerdings auch auf andere Plattformen anwenden.

Im Prinzip kann eine Strategie mit wenigen Klicks zusammengebaut und ohne tiefergehende Programmierkenntnisse umgesetzt werden. Doch umgesetzt ist nicht gleich eingesetzt. Denn beim Live-Handel müssen verschiedene weitere Faktoren berücksichtigt werden, bspw. ...
  • Wie gehen ich mit Datenfeedproblemen um?
  • Was soll bei abgelehneten Orders (Status = Rejected) passieren?
  • Wie verhalte ich mich, wenn Stops nicht ausgelöst werden?
  • ...
Des weiteren sind folgende Problemfälle bekannt bzw. bei mir auch schon aufegetreten:
  • Fehler innerhalb der Zeitsynchronisation des Server-Betriebssystems
  • Ausfall des Risk-Managementsystems des Brokers bzw. Feedanbieters
  • StopLoss und ProfitTarget wird am selben Bar erreicht
  • Ein und dieselbe Stratgie für den Backtest und den Live-Handel ... geht das überhaupt?
  • ...
Die usw. Zeichen im jeweils letzten Punkt sind bewusst gesetzt, da es noch sehr viel weitere Punkte in diesen Aufzählungen gibt und hier sicherlich nicht alle erwähnt wurden. Dennoch konzentriere ich mich vorerst auf die Besprechung dieser Inhalte.

Ich möchte Euch vorab die Illusion nehmen, dass man wirklich alles im Code prüfen und abfangen kann, dass halte ich für unmöglich, egal mit welchem System, egal mit welcher Software. Ziel ist es daher einen Programmcode zu entwickeln, der folgende Eigenschaften besitzt:
  • Stabilität
  • Notfallroutinen
  • Integration in die bestehende API-Landschaft
  • Interaktion mit der bestehenden API
Allen Punkten zugrunde liegt sicherlich das Verständnis und die Möglichkeiten, die einem eine Software und die damit verbundenen API-Schnittstellen anbieten. Diese Vorraussetzung muss sicherlich erfüllt sein und kann bei NinjaTrader durch studieren des Forums sowie der sehr ausführlichen Hilfe bewerkstelligt werden. Im Forum selbst finden sich sehr viele Strategie- und Indikator-Beispiele um ein grundlegendes Verständnis für die Umgebung und die API aufzubauen.

In den nächsten Artikeln werde ich auf die oben erwähnten Punkte näher eingehen und auch die ersten Codebeispiele veröffentlichen. Dabei muss gesagt werden, dass dies Beispiele sind, wie ich sie im Live-Trading verwende ... nicht weil es 100%ig so sein muss und perfekt ist, sondern weil es bei mir so funktioniert und ich damit handeln kann bzw. handeln lassen kann ... es kann und wird so sein das es sicherlich noch Verbesserungsmöglichkeiten gibt ... ach ja, wer Fehler findet ... Ihr wisst schon ...

Beste Grüße
DarthTrader

Trades - Januar 2010

Ich habe mir lange überlegt, ob ich zum Januar überhaupt eine Tradeliste veröffentlich soll. Es ist nicht einfach zu seinen Verlusten zu stehen, aber sie sind nunmal da und ich will sie nicht vorenthalten. Es wäre ein Betrug gegen mich selbst und das wiederum kann nur negative Auswirkungen für das weitere Trading haben.

Zurzeit bin ich in einer schlimmen Drawdown Schleife gefangen, die sich in den letzten Wochen folgendermaßen dargestellt hat:
  1. Anpassung der Parameter der Strategien auf das Marktverhalten der letzten Wochen.
  2. Dadurch Verpassen von Tradinggelegenheiten um nur einen einzigen Tick.
  3. Kein Ausgleich der Verluste möglich.
  4. Optimierungsversuche der Strategien und damit Start bei Punkt 1.
Hier nun also die Auswertung für Januar:

Jan 2010 Trades Gewinner Verlierer Gewinn Verlust Monatsgewinn Größter Gewinn Größter Verlust Profit Faktor Gesamt Gewinn











DT_OG 23 5 18 $1,221.20 -$3,463.35 -$2,242.15 $320,00
-$688,80
0,35
DT_N 2 1 1 $938.50 -$1,776.50 -$838.00 $938,50 -$1.776,50 0,53 -$3,080.15


Eigentlich wollte ich Euch ja die Möglichkeit geben die Trades nachzuhandeln. Allerdings werde ich bei dieser grottigen Performance vorerst davon absehen. Das möchte ich keinem antun.

Es kommen sicherlich auch wieder bessere Zeiten, davon bin ich überzeugt ... auch mit diesen Strategien ... dennoch werde ich eine weitere Strategie ab nächstem Monat einsetzen, die mir auch 2009 die bisher größten Erfolge gebracht hat.

Weiterhin gute Trades
DarthTrader

Montag, 18. Januar 2010

Neue Strategie

Ab sofort kommt eine neue Strategie zum Einsatz, die den Dax-Future handeln wird bzw. dieses auch schon einmal erfolgreich getan hat.

Es werden hierbei nicht viele Trades gemacht, allerdings ist die Erfolgsquote entsprechend gut. Ich weiß, dass es recht risikoreich ist mit kleinerem Konto den FDAX zu handeln, aber durch die bisherige Erfahrung mit der Programmierung bei NinjaTrader, den aktuellen Marktgegebenheiten und einer erfolgeichen Testphase der Strategie, muss ich es einfach im Live-Handel versuchen.

Die Chancen stehen zu gut, als dass ich nur auf einem Demo-Account handeln könnte. Grenzen für den Einsatz sind natürlich auch hier festgesetzt, so weiß ich, wann die Strategie aus dem Rahmen fällt und sich die Marktgegebenheiten evtl. geändert haben.

Aber seht Euch die Werte im Backtest für 2009 selbst an, dann wisst Ihr warum ich unbedingt davon profitieren möchte:






















Anhand der Daten ist ersichtlich, dass es sich um einen Trendfolger, gepaart mit hoher Trefferquote handelt :-) Nein, im Ernst ich denke, man kann die Strategie in den Bereich Marktgegebenheiten und damit verbundenen Beobachtungen einordnen. Deswegen funktioniert sie auch nur im FDAX so performant. Sind diese Gegebenheiten nicht mehr vorhanden, wird es natürlich schwer für die Strategie, aber noch sieht es gut aus ...


Weiterhin gute Trades
DarthTrader


Freitag, 1. Januar 2010

Jahresabschluß

Lasst mich einige Worte und einige Zahlen zum vergangenen Jahr los werden. Ich habe seit Ende Juni endlich Live gehandelt, dass ist wohl für mich als großes Highlight herauszuheben. Nicht nur das, es wurde sogar voll-automatisch gehandelt und dass Jahr im Plus beendet. Es endlich geschafft zu haben und viele Hürden in Form von Softwaresystemen, Broker, Märkten, ... hinter sich gelassen zu haben ist für mich einfach großartig. Denn der Schritt vom Paper- zum Livetrading war nicht einfach.

Es waren Jahre voller Forschung, Evaluierung, voll von Lesen von Artikeln, Büchern, Recherchieren
im Internet, Austausch mit erfolgreichen und erfolglosen Traden, Gedankenspiele im Kopf, ob es überhaupt funktionieren könnte ... bis hin zu einigen Jahren Stillstand ... aber letzendlich hat es funktioniert und ich bin sehr froh darüber diesen Schritt gemacht zu haben.

Der Bankrott meines Kontos ist mir durch diese lange Lernphase schließlich erspart geblieben, wobei das bei rein diskretionären Trading wohl durchaus möglich gewesen wäre, denn zurzeit ist für mich der voll-automatische Handel das A und auch das O, diskretionär bin ich (noch) nicht profitabel ... was folgende Zahlen auch belegen ...

Ich habe das Jahr 2009 mit $10,000 auf dem Trading-Konto begonnen. Als es freigeschaltet wurde musste ich natürlich testen, ob das auch alles real ist :-) und habe erstmal das Konto bis auf $7,800 Dollar runtergehandelt. Dann kamen glücklicherweise die Strategien ins Spiel die mir einen Betrag von über $5,500 eingebracht haben. So konnte ich das jahr mit einer Gesamtperformance von +26% abschließen.

Insgesamt wurden 234 Trades voll-automatisch ausgeführt, von denen vielleicht 85% ohne Problem abgesetzt wurden. Bei den restlichen gab es entweder technische Probleme von Seiten des Datenanbieters bzw. der Software oder es lagen Programmierungsfehler vor. Die Quote wurde zum Jahresende hin deutlich gesteigert, so dass ich beruhigt ins neue Jahr gehen kann, da ich nun die Software, als auch meinen Code :-) besser verstehe ....

Ungefähr 100 Trades lagen im Plus, der Rest im Minus. Betrachtet man die Strategien, so ist das im unteren Rahmen, als wie es der Backtest vorhergesagt hat. Aber es ist im Rahmen ...

Ich habe 2009 mit NinjaTrader 5 verschiedene statistische Auswertungen geschrieben, von denen die Strategien immer
noch zehren. 10 eigene Indikatoren, die sich teilweise mit den Auswertungen überschneiden, habe ich ins Leben gerufen und ca 20 Strategien auf Herz und Nieren getestet ... mehr hat meine nebenberufliche Zeit leider (oder vielleicht war es besser so) nicht her gegeben.

Was ich während der Zeit gelernt habe, möchte ich Euch nicht vorenthalten. Es nochmal nieder zu schreiben, soll mich außerdem 2010 daran erinnern und mich immer nachdenklich stimmen, falls einer dieser Punkte auftritt:
  • Fehler können und werden immer auftreten, egal wie gut der Code, wie zuverlässig der Datenfeed oder auch die Software ist.
  • Aus Punkt 1 folgt ... lasse Deine Trades nie unbeaufsichtigt. Die voll-automatischen Strategien, die tage- oder wochenlang nicht geprüft und beobachtet werden können gibt es nicht.
  • Aus Punkt 2 folgt ... Märkte ändern sich mitunter sehr schnell, deshalb müssen Parameter oder gar komplette Strategien immer an die Gegebenheiten angepasst werden.
  • Diskretionär zu traden ist (noch) nichts für mich. Dies kann folgende Gründe haben:
    • Unerfahrenheit
    • Schlechte Marktanalysen
    • Gier, Hoffnung und Angst

  • Ohne die Community im Netz, den Support des Brokers oder Feedanbieters kann so ein Projekt (ja, mittlerweile ist es genau das für mich) nicht funktionieren. Danke an alle die mir in dieser Hinsicht geholfen haben.
So, das war mein Börsenjahr 2009. Ich hoffe wir lesen uns alle im nächsten Jahr wieder.

Bis dahin alles Gute
DarthTrader

Mittwoch, 30. Dezember 2009

Trades - Dezember 2009

Nach einem auf und ab in den letzten Monaten, war dieses mal wieder ein negativer Monat an der Reihe ... und so kam es dann auch -$477.50 standen am Ende zu Buche und das Jahr wurde mit einigen negativen Trades beendet. Alles weitere zum Jahresabschluß im nächsten Post. Nun erst einmal die Zahlen für den Monat Dezember:

Dez 2009 Trades Gewinner Verlierer Gewinn Verlust Monatsgewinn Größter Gewinn Größter Verlust Profit Faktor Gesamt Gewinn











DT_OG 49 17 32 $3,086.20 -$3,563.70 -$477.50 $720,00
-$263,80 0,87 $5,566.12


Und hier die aktuelle Equity-Kurve:














So, das Jahr ist zu Ende und ich bin mit der Performance recht zufrieden. Im neuen Jahr werde ich meine Trades noch transparenter gestalten. Ihr werdet die Möglichkeit haben, diese 1:1 nach zu traden. Ein Post dazu folgt noch.

Rutscht gut rein und feiert schön
DarthTrader

Dienstag, 22. Dezember 2009

Schöne Weihnachten

Ich wünsche Euch allen ein paar schöne Weihnachtstage. Vielen Dank für die vielen Views, Kommentare und Anregungen. Dies ermutigt weiter zu machen. Einen weiteren Wissens-Austausch würde ich sehr begrüßen. Vielleicht habt Ihr ja noch Ideen, wie man diesen noch intensiver gestalten kann? Falls Leute aus der Nähe von Köln kommen, könnte man sich ja auch mal "Live" treffen ....

Leider habe ich momentan nicht die Zeit mich intensiver um den Blog zu kümmern, werde aber nächstes Jahr wieder voller Elan angreifen. Die monatlichen Statistiken bleiben aber dennoch erhalten.

Bis dahin alles Gute und schon mal einen schönen Jahresübergang
DarthTrader

Dienstag, 1. Dezember 2009

Trades - November 2009

Der November war ein interessanter Monat. Wie schon im letzten Post angekündigt, musste eine weitere Strategie dran glauben und wurde vorerst vom Markt genommen. Dennoch konnte ein Gewinn von knapp 375$ eingefahren werden. Hätte ich die noch verbleibende DT_OG Srategie auch letzten Freitag laufen lassen, so wäre dieser sicherlich noch wesentlich höher ausgefallen. Den zugehörigen Chart des Nasdaq-Futures kann man sich gerne anschauen, dann seht Ihr, welchen Gewinn man ab 15:30 hätte machen können. Schade, aber ich habe mich, wegen dem Feiertag, gegen einen Einsatz der Strategie entschieden ...

Hier die Zahlen des Monats November und die zugehörige Equity-Kurve:
Nov 09 Trades Gewinner Verlierer Gewinn Verlust Monatsgewinn Größter Gewinn Größter Verlust Profit Faktor Gesamt Gewinn











DT_OG 25 8 17 $3,284.50 -$2,065.20 $1,219.30 $1.260,90 -$305,00
1,59
DT_LH 18 7 11 $758.00 -$1,605.20 -$847.20 $170,60 -$420,00 0,47 $6,043.62













Wir liegen also weiterhin sehr gut im Rennen und hoffen, die Performance bis Jahresende noch etwas steigern zu können.


Beste Grüße und weiterhin gute Trades
DarthTrader

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

Samstag, 31. Oktober 2009

Trades - Oktober 2009

Im Oktober wurde, wie schon vermutet, der erste Verlustmonat eingefahren. Obwohl das Konto zwischenzeitlich auf einen neuen Höchststand angewachsen war machten viele größere Verluste in der letzten Handelswoche die schönen Gewinne wieder zunichte. Hier die Einzelheiten:

Okt 09 Trades Gewinner Verlierer Gewinn Verlust Monatsgewinn Größter Gewinn Größter Verlust Profit Faktor Gesamt
Gewinn











DT_OG 16 4 12 $1,824.80 -$2,360.40 -$535.60 $1.081,20
$-628,80
0,77
DT_LH 16 9 7 $2,715.40 -$2,475.82 $239.58 $950,60
$-969,41
1,1
DT_TMA 14 3 11 $1,619.00 -$2,388.40 -$769.40 $1.124,95
$-454,45
0,68 $5,671.52

Die Equity der seit Start des systematischen Handelns sieht hingegen immer noch sehr gut aus:













Kurz zur Analyse dessen, was passiert ist. Nachdem zu Beginn der Strategien vor einigen Monaten die Angst mitspielte (wenn auch nur unterschwellig), ob diese auch den Livetest bestehen, keimte nach den ersten gewinnbringenden Monaten die Hoffnung auf. Die Hoffnung darauf einige gute System entwickelt zu haben, die nach mehr als 100 Trades den Markt locker schlagen. Schließlich wurde das Risiko etwas erhöht und Gier machte sich breit. Nun waren wir zu viert, die drei Feinde eines jeden Traders und ich selbst ... das konnte nicht gut gehen.

Ich ziehe daraus folgenden Konsequenzen:
  • Die DT_TMA -Strategie wird vom Markt genommen. Sie hat bisher jeden Monat Verluste generiert und arbeitet nicht, wie im Backtest zu sehen profitabel.
  • Das Risiko der anderen beiden Strategien wird verringert. Es werden weniger Kontrakte gehandelt und die Stopps effizienter gesetzt. Ziel hierbei ist es, den Drawdown weiter zu minimieren.
  • Eine Optimierung der Strategieparameter findet nun jeden Monat statt und nicht,wie bisher nur bei jedem Kontraktwechsel.
  • Es wird über den Tellerrand geschaut und es werden weitere Märkte und Strategien analysiert. Hierbei liegt der aktuelle Fokus auf einigen Scalper-Systemen die ich testen möchte.
Weiterhin gute Trades
DarthTrader