Wer glaubt, 1300 Ergebnisse sagen etwas aus, der irrt sich!!!
Howard Carpendale hat einmal ein Lied gesungen mit den Worten "Nachts, wenn alles schläft, solltest Du bei mir sein!". Ich kann weder das Lied noch den Interpreten sonderlich gut leiden. Und seit dem 20.10.2014 noch viel weniger.
Am Morgen bot sich mir folgendes Bild
Innerhalb einer einzigen Minute wurden 39 Trades mit einem Gesamtverlust von über 30000 Euro geschlossen. Und ich habe keine Ahnung wieso. Natürlich kann es sich um einen Programmierfehler meinerseits handeln. Oder um einen Abriss der Datenverbindung. Oder um einen Absturz von irgendwas. Ich weiß es wirklich nicht. Wieso funktioniert ein System für 1300 und mehr Trades und gibt dann innerhalb einer Minute über 30000 Euro auf?
Wie analysiert man so etwas?
Zunächst einmal muß ich zugeben, daß meine Dokumentation der Vorgänge über das Handelssystem selbst nur unzureichend ist. Der Grund dafür sind Zeitverluste im Backtesting, die von der Print-Funktion ausgelöst werden. Um mit dem Backtesting schneller zu Ergebnissen zu kommen hatte ich einige Print-Zeilen auskommentiert. Das war mein Fehler.
Trotzdem muß ich an dieser Stelle natürlich eine Korrektur vornehmen, damit so etwas in Zukunft nicht noch einmal passiert. Dazu stellt sich natürlich die Frage, wodurch dieses für mich so negative Ereignis überhaupt ausgelöst wurde.
Was könnten die Ursachen sein?
Um die Ursache zu finden bin ich zunächst einmal 86 Seiten Logfiles durchgegangen. Auch meine anderen Systeme habe ich untersucht und festgestellt: Das ist nicht zum ersten Mal vorgekommen! Allerdings haben die anderen Fälle längst nicht so einen großen Umfang gehabt. Da wurden mal eine oder zwei Positionen geschlossen und das hat kaum Auswirkungen auf die Gesamtergebnisse gehabt. Um zukünftig solche Situationen zu vermeiden, habe ich drei Dinge geändert:
Ich lasse jetzt zusätzlich im Journal ausgeben, ob meine Funktion einen Trade geschlossen hat
Print ("Schliesse Buy in CloseAllOrdersThisPair "+OrderTicket());
Ich überprüfe vor dem Schließen einer Position, ob die AccountBalance größer oder gleich der letzten AccountBalance ist
if (AccountBalance()>=BalanceLastTime)
Ich prüfen innerhalb der CloseAllTradesThisPair()-Funktion noch einmal ob der Brutto-Profit auch positiv ist
if ((OrderProfit() + OrderSwap()) >0)