Neuronales Netz: Das Design
Kommen wir zum ersten spannenden Teil: Das Design des NN. Ob das NN die gewünschte Funktion richtig erlernt, hängt einerseits natürlich von der Funktion selbst ab. Aber zu einem großen Teil auch von der gewählten Form des Netzes und den Inputdaten.
Ich habe vor für das Experiment verschiedene Ausprägungen eines Typs von NN zu testen. Grundsätzlich wird es wie gesagt ein mehrschichtiges feedforward NN. Die Anzahl der Schichten und Anzahl der Neuronen auf den Schichten werde ich variabel gestalten und im Laufe der Tests dann schaun welche Kombination am besten funktioniert.
Die Funktion als solches wird ein "simpler" Klassifikator (darin sind NNs besonders gut). Sprich +1 wenn der nächste Bar min X Einheiten nach oben geht und nicht mehr als Y Einheiten fällt, -1 bei entsprechender Konstellation für Short und 0 sonst.
Sicherheitshalber werde ich es auch mit 3 Outputneuronen (einen für Long, einen für Short, einen für Flat) testen um zu sehen wie hier die Unterschiede sind.
Kurzer Exkurs zu NN als Klassifikator
Will man ein NN nutzen um Inputs (zB Bilder) in gewisse Kategorien zu trennen, geht man meist so vor:
Das NN hat gleich viele Outputneuronen wie es Kategorien gibt. Beim Trainieren setzt man dann den Output der korrekten Kategorie auf 1 und alle anderen auf 0. Ein neuer Input wird dann jener Kategorie zugeordnet deren zugehöriges Outputneuron den höchsten Wert hat.
Weiter im Text:
Also ein Klassifikator mit 3 Kategorien (entweder über 1 oder 3 Outputneuronen realisiert). nächste große Frage:
Was wird klassifiziert/ Was sind die Inputs
Einerseits werden natürlich die Daten der letzten X Bars (O/H/L/C + Volume) als Input dienen. Zusätzlich werd ich aber auch "jede Menge" halbwegs sinnvolle Vorverarbeitungen (Indikatoren) in das NN schmeißen und schaun was passiert.
Aber: Mit genug Schichten kann sich das NN zwar aus den Inputs beliebige gewichtete Kombination bauen. die 2. Schicht kann also schon inputs der Form (C-O) oder (H-C) etc. kriegen. Aber es gibt (zumindest mit den Übergangsfunktionen die ich nehmen werd) keine Relationen zwischen den Inputs. Also (C-O)/ATR muss ich selber als Input definieren.
Bei Inputs sollte man grundsätzlich sowieso immer darauf achten das alle auf ein einheitliches Maß "normiert" werden (meist zw. -1 und +1). Da in einem Chart ja stärker die relative Bewegung als die absoluten Zahlen zählen, werd ich die Bars auch entsprechend vorverarbeiten:
Open_NN wird (Open- Close[1])/M wobei M wiederum per Parameter entschieden wird, entweder das Open des Bars (prozentuale Veränderung) oder ATR(13) (relative Bewegung)
High_NN = (High - Open)/M
Low_NN = (Open-Low)/M
Close_NN= (Close-Open)/M
Welche Indis noch dazukommen weiß ich noch nicht genau, aber auf jeden Fall: RSI, (Diff zw. zwei SMA)/M...
Die Übergangsfunktionen
Da ich noch keine Ahnung habe welche Übergangsfunktionen für diese Anwendung gut funktionieren, wirds auch hier im Sinne eines Forschungsprojekts zuerst einen Fundus geben. Nur das hier jedes NN gleich mit allen ausgestattet sind. Nach dem lernen werd ich mir die Gewichte anschauen, falls die Ausgangsgewichte eines Neurons alle nahe 0 sind, ist das Neuron für die Klassifikation offensichtlich umsonst. Dann kann ich es weglassen.
Im ersten Schritt wird es also auf jedem Layer 3*
Wie man merkt gibt es noch viele "Unbekannte" die im Laufe des Experiments gelöst werden sollen. Aber dafür ist so ein Projekt ja da ;)
3 Comments
Recommended Comments