Freitag, 24. Dezember 2010

Frohe Weihnachten

Allen Lesern dieses Blogs wünsche ich alles erdenklich Gute zu Weihnachten
und einen guten Rutsch in das Jahr 2011.

Weiterhin gute Trades ...

Beste Grüße
DarthTrader

Mittwoch, 1. Dezember 2010

Trades - November 2010

Seit 11.11.2010 wird die neue Strategie DT_BundPP live im Markt gehandelt. Trades werden voll-automatisch abgesetzt. Durch die Erfahrungen der letzten Monate und Jahre schaue ich mir aber so oft wie möglich die Trades live an, und versuche damit technischen Mängeln o. Programmierfehlern vorzubeugen. Ein Eingreifen ist hierbei aber nur im Notfall geduldet, wenn bspw. der Stop nicht ausgelöst wird ...

Hier nun die Ergebnisse im November:

Sehr erfreulich das Ganze. Es sind allerdings nur 7 Trades ausgeführt worden, da ich mit mehreren Kontrakten und Targets gehandelt habe. NinjaTrader jedoch fasst jede einzelne Ausführung auch als einzelnen Trade auf, deswegen stehen 13 Trades in der Performance-Ansicht zu Buche.


Sicherlich sollte man die Ergebnisse nicht überbewerten und den Ball flach halten. Aber freuen darf man sich schon, dass die Strategie, zumindest im ersten Monat, dass hält, was sie im Backtest und auf dem Demo-Konto versprochen hat.













Weiterhin gute Trades
DarthTrader

Mittwoch, 10. November 2010

Endlich Live ...

Endlich ist auch der Geldtransfer erfolgreich abgewickelt worden. Nach zwei Fehlüberweisungen auf ein neues deutsches Konto meines Brokers, habe ich wieder direkt in die USA überwiesen. Und siehe da, es funktioniert wirklich ...
Der Backtest seit Anfang Oktober mit der Strategie DT_BundPP sieht folgendermaßen aus:



Alles im Rahmen, sogar mit Gewinn. Grund genug ab heute die Strategie live zu schalten. Optimiert wird vorerst nicht, da mit den Standardeinstellungen leicht bessere Ergebnisse erzielt worden, als mit ständiger Optimierung der Parameter. 

Definierte Grenzwerte der Strategie sind folgende:
  • mehr als 4 Verlusttrades in Folge
  • mehr als 1.500€ DrawDown
Nach erreichen dieser Trading-Thresholds, muss überdacht werden, wie weiter mit der Strategie umgegangen wird oder wie sich evtl. die Marktgegebenheiten verändert haben.

Beste Grüße
DarthTrader

Montag, 25. Oktober 2010

Statistiken FGBL

Für einen neuen Handelsansatz finde ich es besonders wichtig eine statistische Wahrscheinlichkeit auf meiner Seite zu haben, welche eine Grundlage für die Idee bildet. Hierfür erstelle ich oft Auswertungen, um verschiedene Marktgegebenheiten zu überprüfen. Manchmal sehe ich im Chart Muster oder "(ab)normales" Verhalten des Marktes in einer bestimmten Situation.

Was ich nicht sehe, ist, ob dieses Muster oder dieses Verhalten nur heute oder gestern aufgetreten ist, oder ob es auch in Vergangenheit z.B. im ganzen Jahr 2009 eine statistisch relevante Häufigkeit dieses Musters gibt. Hierfür eignen sich selbst geschriebene Programme (meist als Indikatoren) sehr gut, um dieses zu überprüfen.

Anbei mal einige Statistiken und Eigenarten zum FGBL:

----------------------------- 
-- 02.01.2009 - 30.12.2009 -- 
----------------------------- 
Anzahl Handelstage = 252

Anzahl R2 / S2 Crosses und anschließendes Schließen des Markets unter bzw. über diesen Levels
  
Anzahl Extrema über R2 : 46 (18,25%) 
  - Korrekturen nach unten bis Tagesende : 11 (23,91%)
  
Anzahl Extrema unter S2 : 48 (19,05%) 
  - Korrekturen nach oben bis Tagesende  : 19 (39,58%) 


Anzahl Open-Kurse über R1 und unter S1 sowie ein Close darüber/darunter
 

Anzahl Open-Kurse über R1 : 7 (2,78%) 
  - Korrekturen unter R1 am Close des Tages : 11 (63,64%) 

Anzahl Open-Kurse unter S1 : 4 (1,59%) 
  - Korrekturen über S1 am Close des Tages : 19 (21,05%) 


----------------------------- 
-- 04.01.2010 - 13.10.2010 -- 
----------------------------- 
Anzahl Handelstage = 199
  
Anzahl R2 / S2 Crosses und anschließendes Schließen des Markets unter bzw. über diesen Levels
  
Anzahl Extrema über R2 : 41 (20,6%) 
  - Korrekturen nach unten bis Tagesende : 16 (39,02%)
  
Anzahl Extrema unter S2 : 33 (16,58%) 
  - Korrekturen nach oben bis Tagesende  : 21 (63,64%)

  
Anzahl Open-Kurse über R1 und unter S1 sowie ein Close darüber/darunter
  
Anzahl Open-Kurse über R1 : 3 (1,51%) 
 - Korrekturen unter R1 am Close des Tages : 16 (18,75%)
  
Anzahl Open-Kurse unter S1 : 4 (2,01%) 
 - Korrekturen über S1 am Close des Tages : 21 (19,05%)



Wäre interessant zu erfahren, was andere beobachtet haben oder welche Feinheiten man noch überprüfen könnte (natürlich mit Fokus auf den FGBL), um daraus vielleicht weitere automatisierte Systeme implementieren zu können. 

Beste Grüße
DarthTrader

Montag, 11. Oktober 2010

Ergebnisse - DT_BundPP

Nach zweiwöchigen intensiven Testen und parametrisieren, bin ich zum dem Schluss gekommen, die Strategie auch Live einzusetzen.

Es wurden u.a. folgende Varianten (Filter, Stops, ...) getestet:
  • MA (in mehreren Varianten) als Trendfilter - keine Verbesserung
  • DMI als Trendfilter - sehr zu empfehlen
  • ADX als Trendfilter - sehr zu empfehlen
  • CCI/RSI als Filter für Entries - keine Verbesserung
  • ATR-Trailing-Stop - keine Verbesserung
  • Parabolic-Trailing-Stop - keine Verbesserung
  • Time-Stop - keine Verbesserung
  • XBar-Exit - keine Verbesserung
  • Einschränkund der Handelszeit auf 9-18 Uhr - zu empfehlen
  • Veränderung der Targets/Stops mit einmaliger ATR - keine Verbesserung  
  • Target-Anpassung mit S1/R1 - passt ganz gut, aber feste Werte haben sich in der Walk-Forward-Optimierung als stabiler herausgestellt.
  • ...
Zurzeit läuft noch der Demo-Account mit der DT_BundPP-Strategie, um auch Realtime-Ausführungen und andere Fehlerquellen (die im Backtest schwer zu finden sind) auszuschließen. Das Ergebnis hier liegt momentant bei 10 Trades, wovon 7 Gewinner sind. Der Gewinn liegt bei ca. 800€.

Von 2008 - 2010 werden durchweg positive Ergebnisse mit einem ProfitFaktor von ca. 1.4 erzielt. Der DrawDown hält sich mit max. 1.600€ in Grenzen. Es werden ca. 60% aller Trades als Gewinner ausgewiesen. Hierbei beträgt der durchschnittliche Gewinn knapp 200€, der durchschnittliche Verlust hingegen ein wenig mehr. Es werden vorr. 8 Trades in Folge als Verlierer enden, die Gewinnerserie liegt bei 14 Trades.

Im Rahmen der Walk-Forward-Optimierung mit 90/90 Einstellungen (90 Tage Optimierung und 90 Tage Handeln) wurden über 3 Jahre hinweg positive Ergebnisse erzielt. Es wurden nur die ProfitTargets und StoppLoss-Ticks im Rahmen 10-30 angepasst. Dennoch wird zu Beginn der Mittelwert von 20 Stop-Ticks und 20 ProfitTarget-Ticks bestand haben.

Ich werde diese Einfachheit der Strategie vorerst beibehalten, obwohl sich abzeichnet, dass bei Pyramidisierung bzw. Teilverkäufen noch einiges mehr an Potential in der Strategie steckt. Besonders der DrawDown kann hier in schlechteren Phase noch optimiert werden. Ich teste gerade Teilverkäufe bei Verlust und Teilverkäufe bzw. Hinzukäufe bei Gewinn. Ich bin mir noch nicht sicher, welches beim FGBL die ertragreichere bzw. verlusthemmendere Strategie ist.

Mitte Oktober könnte es bereits losgehen.

Beste Grüße
DarthTrader


Update 15.10.2010
------------------
  • Anzahl Kontrakte = 2 ... initial ...
  • Teilposition (1 Kontrakt) werden bei Gewinn geschlossen
  • Der Rest der Position läuft über ATR-Stopp weiter
Im Backtest wurde hierbei die besten Resultate erzielt.


Update 20.10.2010
------------------

Nun macht  auch ein xMinuteStop wieder Sinn. Hierdurch wird der Drawdown um 20% verringert. Da allerdings viele Trades eine Anlaufphase benötigen, wird der initiale Wert
auf 180 Minuten gestellt. Eine Walk-Forward-Optimierung läuft gerade noch (22h insgesamt).

Ein weiterer Test, der Kreuzungen des PP mitzählt und nur bei weniger als X Kreuzungen den Trade zulässt brachte keine Verbesserung der Performance.

Mittwoch, 29. September 2010

Neue Strategie - DT_BundPP

Hallo zusammen,

heute möchte ich, wie im vorherigen Post bereits erwähnt, eine erste Strategie zum Besten geben. Da der Fokus zurzeit auf dem Bund-Future liegt wird sich ein großteil der nächsten Posts auch damit beschäftigen.

Ich werde jeweils nur Code-Snippets posten (Entry,Exit und wichtige Berechnungen), da alles andere bereits in diesem Blog zu finden ist. Wer sich also eine vollständige Strategie zusammenbauen möchte, kann dies hiermit jederzeit tun.

In den letzten Handelstagen habe ich gemerkt, dass der Bund-Future besonders gut auf die Pivot-Points reagiert und hieraus eine recht simple Strategie hergeleitet.

Trading-Idee

Eröffnet der Bund-Future oberhalb des Pivot-Points wird eine Short-Position eingegangen, wenn der Kurs den PP nach unten kreuzt. Eröffnet der Bund-Future unterhalb des PP wird eine Long-Position eingegangen, wenn der Kurs den PP nach oben kreuzt. Der Timeframe hierbei ist der Minutenchart.



Filter
  • Ansatzweise Trendbestimmung mittels DMI
  • DM+ und DM- müssen fallen bzw. steigen, um möglichen Move zu bestätigen
  • ADX < 30, um Trendausläufer zu filtern
Exits
  • Kein Trade geht länger als bis 20 Uhr
  • Festes ProfitTarget und fester StopLoss (erster Ansatz 20 Ticks)

Das war es auch schon. Anregungen, Kritiken oder Fragen sind gerne willkommen. Vielleicht basteln wir uns ja ne richtig gute Strategie.

Beste Grüße
DarthTrader


Update 30.09.2010
------------------
Nach weiteren intensiven Tests sehen die Ergebnisse seit 2008 recht vernünftig aus. Optimiert wurde nicht viel (was auch gut ist), es wäre aber möglich und m.E. auch sinnvoll das ProfitTarget und den StopLoss entsprechend den Marktgegebenheiten anzupassen. Hierfür bietet sich die ATR an. Zumindest in 2010 wäre mit diesen variableren Werte ein besseres Ergebnis zu erzielen gewesen ... Hier mal die Eckdaten mit ATR-Basierten Stops und Targets ...


In den Jahren 2008 und 2009 sieht die Performance mit ATRs nicht mehr so gut aus, aber immer noch ansprechend. Es müssen hierzu weitere Tests und Auswertungen folgen.

Freitag, 24. September 2010

Neues Jahr, neue Erfahrungen

Hallo zusammen,

es ist schön zu sehen, dass auch nach einigen Monaten der Abstinenz noch einige Leser hier an Bord sind. Ich werde versuchen in nächster Zeit wieder mehr in meine "Tradingausbildung" und meine Erfahrungen hiermit zu investieren.

Auffrischend noch einmal die Rahmenbedingungen für dieses Projekt:
  • Trading- und ChartSoftware: NinjaTrader
  • Broker: Mirus Futures über Dorman
  • Datenfeed: Zen-Fire
  • Fokus auf voll-automatischen Handel mit Futures
  • Gemieteter VPS-Server als Infrastruktur
Den Fokus der nächsten Monate möchte ich für mich folgendermaßen definieren:
  • Weitere Migration meiner bisherigen Systeme nach NT7
  • Marktfokus: Bund-Future
  • Handelssysteme für den Bund-Future erstellen und besprechen
  • Kontaktnetzwerk innerhalb der Community erweitern
Gerne stelle ich weitere Systemansätze vor und hoffe auf rege Diskussionen. Mein Ziel ist es, spätestens im Januar 2011 wieder aktiv am Markt zu agieren und einige Systeme am Markt (hoffentlich erfolgreich :-) einzusetzen.

Wer Interesse an intensiveren Austausch von Systemen oder Handelsansätzen hat, kann mich gerne weiterhin per Mail anschreiben ...

Ein schönes Wochenende und beste Grüße
DarthTrader

Donnerstag, 8. Juli 2010

Aktueller Status

Nach einigen Wochen des wartens, habe ich immer noch keinen Telefonanschluß und damit auch keinen vernünftigen Internetzugang. Es ist sogar schwierig sich auf das VPS einzuwählen ohne Ruckeln und Wartezeiten.

Gesundheitlich geht es immer weiter aufwärts, wobei ich meinen rechten Arm immer noch nicht zum PC-Arbeiten verwenden darf. Das bedeutet ich schule weiterhin um auf Linkshänder :-)

Aus diesen Gründen (die WM ist ja jetzt auch vorbei) müssen neue Beitrage und auch Strategien noch einige Zeit warten. Ich hoffe aber, dass ich im Herbst wieder mit weiteren Recherchen und Anregungen zum Thema Trading weiter machen kann.

Beste Grüße
DarthTrader

Mittwoch, 12. Mai 2010

Hello again ...

Nach meinem längeren Ausfall, wegen einer hartnäckigen Krankheit, kann ich zumindest wieder längere Zeit am PC arbeiten und bin wieder zu 90% einsatzfähig.

Zurzeit beziehen wir unsere neues Haus und werden damit sicherlich noch einige Wochen zu kämpfen haben :-) Die Telekom hat mir eine Internetverbindung erst für Anfang Juni garantiert, so dass sich mein produktiver Einsatz in Sachen Trading noch etwas verschieben wird. Allerdings sollte ich dann mit 50MBit/s Leitung über die Datenautobahn jagen dürfen ....

Allerdings bin ich jetzt schon wieder engangierter bei der Sache, habe einige neue Kontakte geknüpft und werde hoffentlich bald auch wieder das Live-Trading aufnehmen können.

Bis dahin Euch allen gute Trades (in diesem schwierigen Marktumfeld)
DarthTrader

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