Hallo zusammen,
Eure Gedanken zur Verwendung des WekaFwdIndikators treffen den Nagel auf den Kopf. Auch der Hinweis, dass beim realen Trading im Falle von Testperioden > 1 die Prognose nicht bei jeder Periode neu ermittelt werden sollte - und damit auch nicht zu einem abweichenden Ergebnis führen dürfte - stimmt genau.
Und genauso habe ich versucht den Indikator auch zu programmieren.
Wenn Ihr euch meine kurze Beschreibung in einem Wiki zu diesem Indikator ein wenig könnt ihr erkennen, dass sich die Perioden stets überlappen, jedoch eine Periode (Training und anschließende Prognose) stets fix sind. Und dieses gilt sowohl für den Backtest als auch für das reale Trading.
Es funktioniert einfach auf der Grundlage, dass es einen festen Starttermin gibt. Unter der Annahme dieses festen Starttermins teile ich die Perioden für das Training und für die Prognose auf die gesamte Laufzeit auf. Durch diese Aufteilung ist sichergestellt, dass auch beim realen Trading die eingestellte Angabe für Testperioden berücksichtigt wird. Rein technisch wird der Indikator während dieser Perioden zwar neue trainiert, faktisch sollten aber die Ergebnisse zu sein, als würden alle zusammengehörenden Prognosen aus dem gleichen SVM berechnet. Dies ist möglich, da der Algorithmus deterministisch arbeitet.
Ein Manko meiner Vorgehensweise liegt darin, dass ich die Maschine mehr als nötig rechnen lasse.
Wenn Ihr das ganze nachvollziehen möchte bitte ich euch im Debug-Modus die Eingabedaten für den Test und für die Prognose zu betrachten. Ihr könnt dann feststellen, dass im Falle des Parameters Testperioden > 1 auch im realen Trading immer wieder mehr als ein Prognose wird in den Datenreihen auftaucht.
Und nun für den zweiten Punkt:
Gerasan, du schreibst dass die Testperioden auf eins gesetzt werden sollten, damit die jüngsten Perioden auch für das Training verwendet werden können. Tatsächlich sieht das etwas anders aus. Ich möchte ein Beispiel geben.
Nehmen wir eine Zeitreihe wie zum Beispiel:
Die Zeitreihe soll 10 Perioden enthalten und nur Close beinhalten.
Wir setzen
trainperioden = 5
testperioden = 5
ziel = Ref(Close, 1) - Close
Nun meine Berechnung in Excel dargestellt:
Es ist leicht sichtbar, dass die Zielfunktion IMMER in die zukunft schaut.
Unabhängig davon, ob man sich im Bereich im Bereich der Trainingsdaten oder in der Prognose auffällt, die Zielfunktionen schaut immer in die Zukunft. Denn sie benötigt einen Wert aus der Folgeperiode.
Während des Trainings ist dies fast kein Problem. Nehmen wir aber die letzte Periode aus dem Trainingsintervall. Der aktuelle Wert ist 5 und für die Berechnung der Zielfunktion ist der entsprechende Wert 9 der Folgeperiode erforderlich. Wenn wir das System real einsetzen ist dieser Wert der Folgeperiode jedoch noch nicht bekannt. Und es stellt sich die Frage, welchen Zielwert gehe nun für die letzte Periode in unserem Trainingsintervall verwenden möchten. Für den praktischen Einsatz meines Indikators biete ich hier zwei Lösungen an.
Die erste Lösung ist die die ich auch bevorzuge. Wir lassen diesen Satz komplett aus unserer Berechnung heraus. Das bedeutet wir verwenden in Wirklichkeit nicht 5, sondern nur 4 Perioden für das Training. Die fünfte Periode wird einfach ausgelassen. Und genauso nenne ich auch die Option "auslassen". Wird diese Option gewählt, wird die eingestellte Anzahl für die Trainings Perioden in Wirklichkeit gekürzt. In der Debug Ausgabe gibt es einen Wert der heißt Periodenkorrektur. Dieser Wert gibt an, wie viele Perioden wegen des in die Zukunft schauens ausgelassen werden.
Die zweite angebotenen Lösungen verzichtet darauf die in diesem Fall fünfte Periode aus der Anzahl der Trainings setzte zu streichen. Der Zielwert für die letzte Periode wird auf der Basis einer dummen Annahme auf der Grundlage eines Default-Wertes berechnet. Hier setze ich den Wert der noch unbekannten Periode einfach auf 0. Die Berechnung stimmt damit zwar in fast allen Fällen nicht mit der Wirklichkeit über ein, aber ich berücksichtige die Periode mit allen ihren Daten.
In einem zweiten Beispiel mit einer weiter in die Zukunft Schauenden Zielfunktion wird die Bedeutung dieses Problems vielleicht noch deutlicher.
Statt auf den Wert der Folgeperiode greife ich bei der Zielfunktion auf einen Wert der vier Perioden in der Zukunft liegt. Bei nur fünf Perioden für das Training werden hier sogar fast alle dieser Trainingsperioden unbrauchbar.
Um die Ergebnisse eines BackTests nicht zu verfälschen - sie sollen ja die gleichen Ergebnisse liefern die im realen Trading gekommen wären - berücksichtige nicht die Korrektur der Anzahl der Trainingsperioden oder des letzten Zielwertes auch im BackTest.
Dieses Problem ist mir bereits bei meinem frühen Arbeiten an den Indikator aufgefallen. Es führt nämlich dazu, dass der backtest und die Simulation unterschiedlichste Ergebnisse brachten. Zu anfangs konnte ich mir diese Unterschiede nicht erklären. Dann fiel mir auf, dass ich kontinuierlich in die Zukunft geschaut habe. Die Daten waren ja verfügbar und es ging einfach. Die Kapitalkurven sahen auch super aus. Nur waren sie leider unbrauchbar.
Noch eine ganz allgemeine Frage. Das Problem mit dem in die Zukunft schauen sollte meines Erachtens nach in analoger Form auch beim Training der neuronalen Netze in Investox auftreten. Abhängig von der Zielfunktion schaut man auch hier weniger oder weiter in die Zukunft hinein. Bei meinen ersten Versuchen hatte ich gerade mit Systemen wie zum Beispiel 50 Perioden in die Zukunft schauen recht gute Ergebnisse. Zumindest im Bereich meiner Trainingsdaten. Dort hatte ich ja auch stets die Zukunft zur Verfügung.
Bei neuronalen Netzen fällt dieses Problem aber nicht so leicht auf, da die Berechnungen nicht deterministisch sind.
Ich weiß nicht ob in Investox eine entsprechende Korrektur vorgenommen wird. Denn das bringt mir das beste Lernen, wenn ich mein Netz mit zum Zeitpunkt der Berechnung in Wirklichkeit noch nicht vorhandenen Daten optimieren.
Herzliche Grüße
Martin