Dienstag, 23. April 2024, 11:28 UTC+2

Sie sind nicht angemeldet.

  • Anmelden
  • Registrieren

Lieber Besucher, herzlich willkommen bei: INVESTOX-Forum. Falls dies Ihr erster Besuch auf dieser Seite ist, lesen Sie sich bitte die Hilfe durch. Dort wird Ihnen die Bedienung dieser Seite näher erläutert. Darüber hinaus sollten Sie sich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutzen Sie das Registrierungsformular, um sich zu registrieren oder informieren Sie sich ausführlich über den Registrierungsvorgang. Falls Sie sich bereits zu einem früheren Zeitpunkt registriert haben, können Sie sich hier anmelden.

Gerasan

unregistriert

1

Freitag, 21. März 2008, 03:35

Indikator WekaFwdIndikator beim Backtest und Datenfeed - korrekte Vorgehensweise

Hallo,
An erster Stelle möchte ich mich bei Martin für die Entwicklung und die kostenlose Veröffentlichung des Indikators bedanken. Is einfach genial!

Ich wollte hier noch Mal die Frage bzgl. des korrekten Einsatzes des Indikators in verschiedenen Szenarien stellen.
Einleitung:
Ich werde nur vom WekaFwdIndikator reden, denn laut Martins Posting ist er sowohl für Backtest als auch für den realen Handel einsetzbar. Der Indikator liefert eine Datenreihe als Prognose für die eingestellten Testperioden. Wenn man als testperioden 20 eingibt wird eine 20-Perioden-Lange Datenreihe zurückgeliefert. Diese 20-Perioden Lange Dateireihe auch als Signal-Linie bekannt durchkreuzt ab und zu die Null-Linie was man im einfachen Fall als Signalgenerierung verwenden kann.

Real-Trading bzw. Datenfeed-Simulation:
beim Realtrading agiert man am rechten Ende der Kursdaten. Man verwendet die bereits bekannten Perioden als Trainingsperioden und die unbekannte nächste Periode möchte man prognostizieren. Dann setzt man die Trainingsperioden = 50 (die letzten 50 bekannten Perioden sollen zum Taining verwendet werden) und die Test-Perioden = 1 (es soll der erste Wert der Prognosedatenreihe ausgegeben werden. Oder wir können Test-Perioden auf 5 stellen = es soll der fünfte Wert der Prognosereihe ausgegeben werden. Wir möchten den prognostizierten Kurs in 5 Perioden wissen. An dieser Stelle meine Erste Frage an Martin: Wenn ich Testperioden auf 5 einstelle, wie ist es dann: werden meine letzten 5 bekannten Perioden nicht zum Training sondern zur Prognose verwendet ODER es werden alle bekannten Perioden zum Training verwendet und der Indikator gibt eine Prognose über den erwarteten Wert 5 perioden in der Zukunft?

Gerasan

unregistriert

2

Freitag, 21. März 2008, 04:14

hier gehts weiter.
Ich denke unabhängig von der Einstellung für die Testperioden Prognostizierst Du den den Wert der nächsten Periode denn so ist es in der wekaIndis.weka eingestellt: Ziel: Ref(Open, 2) - Ref(Open, 1);
In diesem Fall muß man konsequenter weise beim RealTrading Testperioden = 1 einstellen. Sonst werden die jungsten Perioden nicht fürs Training verwerwendet. Die Einstellung Testperioden > 1 ist wohl eher dafür geeignet, die entwicklung der KK im Testzeitraum zu checken. Man ermittelt quasi die Prognosefunktion auf Basis von eingestellten Trainingsperioden und wendet diese unveränderte Funkion auf die Testperioden.

Nun sehe ich das Problem in der Diskrepanz des Backtests zu RealTrading, denn im Backtest wendest Du die eingefrorene Prognosefunktion auf die Testperoden, im RealTrading hingegen wird die Prognosefunktion bei jeder neuen Periode neu ermittelt und NUR die nächste Periode prognostiziert. Somit kann man nicht erwarten, daß Backtestergebnisse beim Realtrading auch entstehen.

Einzigster Fall wenn das Übereinstimmt ist dann, wenn man im Backtest die Testperioden ebenfalls auf 1 stellt. Das schränkt jedoch die Möglichkeiten der optimierung deutlich ein. Es wäre gut, wenn man auch für Realtrading den Indikator so einstellen könnte das er genau so wie im Backtest vorgeht. Sprich in Blöcken: Trainiert und dann eine Weile mit unveränderten Prognosefunktion tradet.

Was mein Ihr dazu?
Jetzt gehe ich aber schlafen.

Registrierungsdatum: 30. August 2002

Beiträge: 8 155

Wohnort: Trade-Planet

3

Freitag, 21. März 2008, 09:23

Hallo Gerasan,

was Du beschreibst ist m.M. eine Grundvoraussetzung für umfangreichere Tests die notwendig sind! Es kann nur über einen speziellen Feed Forward Test laufen denn SVM hängt nicht zwangsläufig an den Inputs. Selbst mit ROC-Inputs könnte man SVM erfolgreich handeln wenn man herausfindet mit welchen Regularien die Impulse eingestellt werden müssen! Aber,wie eben angesprochen,ist dazu ein umfangreicher FW-Test notwendig,den unterstützend und unabhängig von SVM Herr Knöpfel zukünftig einflechten könnte/möge/sollte...:)

So könnten wir das Geflecht- Martins Indikator und den FW-Test- verknüpfen und SVM in alle Richtungen prüfen. Ob man für SVM zwangsläufig andere Algorithmen für unsere Aufgaben benötigt (so wie es NRCM schildert) lasse ich dahingestellt denn zuerst muss mittels FW-Test einmal feststehen was unsere bisherigen Algorithmen überhaupt leisten. Wie schon beschrieben finde ich es in dem Zusammenhang interessant die Kurmuster mit einzubeziehen (Filter). Ich denke das ich mit meinen gestrigen kurzen Tests eine Möglichkeit gefunden habe,damit SVM Signale zu verbessern.

SVM liefert allen Anschein,wie auch anderen Algorithmen, nur in bestimmten Phasen gute Signal und sackt ab,wenn die Bewegung der Zeitreihe abweicht.Man sollte für den FW Test sehr kurze Historien verwenden und sie mit der KM verknüpfen! Die KM gibt den jeweiligen "Trend" vor und SVM handelt, darin eingebettet Signale. Mit dem FW-Test werden die Bedingungen von SVM verifiziert! Das heißt, das "Feintunig" wird in einer KM-Trendphase justiert. Bewegungen der Zeitreihe an denen SVM nicht "trainiert" wurde werden aus der Zeitreihe gestrichen und damit das Risk vermindert...und hoffentlich auch die DDs. So zumindest meine Vorstellung dazu da ich (noch) nicht glaube,das SVM über alle Bewegungen hinweg optimal arbeitet-zumindest nicht mit dem ein und denselben Algorithmen!
Happy Trading

MartinP Männlich

Meister

Registrierungsdatum: 13. März 2007

Beiträge: 690

Wohnort: Köln

4

Freitag, 21. März 2008, 12:43

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

Gerasan

unregistriert

5

Freitag, 21. März 2008, 17:49

Hallo Udo, Hallo Martin,
danke für eure ausführliche Antworten.

zu Feed Forward Test: ich denke ebenfalls das ein Feed-Forward-Test eine zusätzliche wichtige Säule in Investox wäre, die in genau so wichtig wie die Optimierung mit genetischen Algoryhmen und andere geniale Investox-Tools wäre.

zu Backtest mit WekaFwdIndikators: hier muß mal vielleicht zwei Sachen auseinander halten Backtest und Training!
  1. Backtest-Optimierung (nich das Training), der muß genau so rechnen wie das Realtrading. Nur die bekannten Perioden verwenden
  2. Training: Training ist ja ein Vorgang, wie bei Investox-NN. Da ist es m.E. in Ordnung, das in die Zukunft geschaut wird. Beim Training soll ja eine Funktion ermittelt werden, die möglichst gut die echten zukunftigen Kurse trifft. Als Input dienen z.B. die jungsten 10 Close-Kurse. Als Output der Closekurs von Morgen. Da muß das NN oder SVM nachdem es sich eine neue Funktion überlegt hatte das Ergebnis (den Output, den errechneten Closekurs von morgen) mit dem echten vergleichen. So kann es beobachten, ob die Prognose gut war oder schlecht, und basierend auf diesem Feedback weitere Trainings-Zyklen durchführen, bis ein Optimum gefunden wird. Gut, bei SVM ist es nur ein Zyklus. Angeblich ist es sofort optimal.

Momentan ist Training und Backtest bei WekaFwdIndikators ein einziger Schritt. Das führt wohl dazu, daß wegen der Konformität zum Realtrading darf man wärend des Backtest die jungsten Perioden nicht verwenden. So ist man gezwungen diese Periodenkorrektur zu machen. Damit trainieren wir eine Funktion, die den morgigen Kurs vorhersagen soll, dafür aber nur die Kurse von vorletzter Woche bekommt. Die jungste Vergangenheit bleibt außen vor.
Generell würde ich meinen, man sollte Training vom Backtest trennen, und so wie bei den NN vorgehen. Zuerst trainieren mit Blick in die Zukunft onhe Periodenkorrektur um eine Funktion zu ermitteln. Im zweiten, separaten Schritt backtesten. Hier ist die Funktion schon starr vorgegeben, man braucht keinen Blick in die Zukunft mehr. Man braucht dann auch keine Periodenkorrektur: Die Funktion wird einfach mit den jungsten Perioden gefüttert, und gibt Ihre Prognose als Dateireihe aus. Die Performanz kann man dann im HS optimieren, genau so wie bei jeder anderen Funktion.

Da das Training bei SVM augenblicklich verläuft, kann man vermutlich Training und Backtest in einen Schritt kapseln, was ja im WekaFwdIndikators auch geschieht, intern müssen es jedoch weiterhin separate Schritte bleiben aus den o.a. Überlegungen.

Vieleicht ist es sogar so auch jetzt, aber wenn nicht dann wäre es evt. vorteilhaft. Ich weis von Übungen mit Weka, das man einmal ermittelte SVM-Funktion speichern, exportieren, auf andere Daten anwenden kann, ohne sie jedes Mal neu zu trainieren.

Leider list mir immer noch nicht 100% klar, wie die Trainings und Testperioden beim Realtrading arbeiten, ich werde debug-Funktion verwenden um es zu verstehen. Möchte diese Frage erstmal stillegen für bessere Lesbarkeit.

Registrierungsdatum: 30. August 2002

Beiträge: 8 155

Wohnort: Trade-Planet

6

Samstag, 22. März 2008, 00:35

Hallo Gerasan und Martin,

kann man bei SVM überhaupt von Training im Sinn wie wir es von NN und GA kennen, sprechen? Bei SVM verbessert/verschlechtert sich die Kapitalkurve über C-Vakue,die Länge der Historie,den Algorithmus- aber sehr schwach über die Inputs! Am besten funktioniert ROC-ist aber auch am schnellsten überoptimiert!

Es stellt sich die Frage, wie lang muss eine Historie sein, damit SVM ein positives System erzeugt? Angenommen man nimmt die letzten 3-7 Perioden und "trainiert" SVM daran mit dem Ziel, eine Prognose zu bekommen ob der Schlusskurs morgen höher/tiefer liegt als heute! Dies würde zunächst genügen, um profitabel zu handeln. Das enthaltene Risiko (DD) ist wieder eine andere Seite aber ich würde nicht zögern, dies mit einem starken KO-Schein Hebel trotzdem zu handeln wenn das Ergebnis der Prognose nachweislich via FW-Test gut ist! Bei diesen Varianten könnte man auf die Idee kommen,während einer laufenden (unvollendeten) Periode ein Prognose zu erstellen weil der Time Frame oder die Chartform sehr lange benötigt, bis eine Periode abgeschlossen ist-z.B. bei P&F. Das kann man via Backtest nicht ermitteln sondern ausschließlich mit dem Simulator oder einem FW Test.

Man müsste zunächst an synthetischen Zeitreihen herausfinden,wie SVM überhaupt arbeitet um es gezielt einzusetzen.Momentan stochere ich irgendwo im Nebel und positive KKs sind wohl eher zufällig! Ich glaube es bringt nicht viel, wenn man SVM an einer realen Zeitreihe testet und versucht, möglichst viel Kapital herauszuschlagen ohne die detaillierten Eigenheiten von SVM zu kennen! Ich glaube das stehen noch langelangelange Testreihen an,wenn wir nichts dem Zufall überlassen- und das ganze gezielt einsetzen wollen. Wenn man eine primäre Strategie mit synthetischen Zeitreihen gefunden hat,könnte man versuchen die Erkenntnisse auf reale Charts anzuwenden. Allerdings sind die Charts unterschiedliche Charakter und da wartet schon das nächste Problem. Ich kann mir vorstellen, das unterschiedliche Algorithmen in unterschiedliche Bewegungsphasen immer besser sind als ein Algorithmus alleine. Nur....wie will man das koordinieren?

Was ich letztendlich nicht glaube ist, das ein System stabiler und besser ist, wenn eine lange Historie verwendet wird. Ich denke SVM sind die unterschiedlichen Marktphasen ziemlich egal weil es nicht generalisiert und auch nicht im üblichen Sinne "lernt". Das Gedächtnis von SVM scheint relativ kurz zu sein und wenn man zu viele Fakts vorgibt, rotiert es sehr stark und kränkelt schnell...
Happy Trading

Registrierungsdatum: 30. August 2002

Beiträge: 8 155

Wohnort: Trade-Planet

7

Montag, 24. März 2008, 10:07

Hallo,

hat von euch jemand schon einmal folgendes probiert: Man nimmt ein beliebiges Fraktal aus einer x-beliebigen Zeitreihe und optimiert mit einem Algorithmus,egal ob GA,SVM oder Heuristik. Das Fraktal sollte entweder eine komplette Bewegung (1-2-3) oder einen abeschlossenen Trend (Auf-AB incl. Swings im Trend) umfassen. Das ganze darf- und soll sogar überoptimiert werden. Das Fraktal befindet sich ungefähr in der Mitte der Zeitreihe damit beim Out of Sample Test genügend Phasen für BACK und FORWARD über bleiben, um die Qualität zu prüfen. Wenn es jemand schon einmal getestet hat-wie waren die Ergebnisse?
Happy Trading