Private Homepage von Thomas Presberger

Programmierung

Bereits in der vor 90 Jahren entwickelten Major-Trend-Theorie (Dow-Theorie) wird von einer zyklischen Entwicklung des Marktes ausgegangen. So wurden schon damals 3 signifikante periodische Änderungen im amerikanischen Aktienmarkt festgestellt. Die erkannten Periodendauern betrugen etwa 1 Tag, 30 Tage und 5 Jahre. Später entwickelte R.N. Elliot diese Theorie weiter, indem er die Anzahl der Zyklen erweiterte. Dabei verwendete er Zahlen der Fibonacci-Reihe, deren Vorgänger/Nachfolger Verhältnis den sogenannten goldenen Schnitt ergeben. Dieses Verhältnis spielt bei natürlichen Systemen eine große Rolle und kommt auch in den Auf- und Abwärtsbewegungen des Marktes auffällig häufig vor. Auch die von ihm später entwickelte Elliot-Wave-Theorie basiert auf (wie der Name schon sagt) wellenartigen Trends.

Mit der Annäherung einer Fourierreihe an einen Chart oder zumindest an einen bestimmten gleitenden Durchschnitt (Moving Average) wird ein ganz ähnliches Ziel verfolgt. Eine Fourierreihe ist im wesentlichen eine Überlagerung von sinusförmigen Schwingungen unterschiedlicher Amplitude und Frequenz. Die Frequenzen der Glieder sind dabei ganzzahlige Vielfache einer Grundschwingung. Durch geeignete Wahl der Beträge (Amplitude) lassen sich nahezu beliebige Funktionen (Kurven) nachbilden. In diesem Ansatz wird nun davon ausgegangen, das ein Satz von Parametern, der einen vorgegebenen Kurvenverlauf gut nachbildet, alle Informationen für die zugrunde liegenden "Schwingungen" enthält und somit auch zumindest für die nähere Zukunft gelten müßte. Die Anzahl der zu variierenden Parameter läßt aber eine direkte, zielgerichtete Suche nach den optimalen Parametersatz bei einem vertretbaren Rechenaufwand scheitern. Deshalb kommt hier ein effektiveres Optimierungsverfahren, ein evolutionärer Algorithmus, zum Einsatz.

Mit Evolutionäre Algorithmen sind sowohl "Genetische Algorithmen" als auch "Evolutionsstrategien" gemeint. Diese versuchen beide auf etwas unterschiedliche Art und Weise das natürliche Prinzip von Fortpflanzung (Vermehrung), Vererbung, Mutation und Auslese für eine effizentere Suche im Optimierungsraum einzusetzen. Die praktische Umsetzung sieht dann im wesentlichen so aus, daß ein Individuum aus den zu optimierenden Parametern besteht und ein Startpool von Individuen somit schon eine bestimmte Anzahl von Varianten darstellt. Diese Varianten werden dann in ihrer Umgebung getestet und entsprechend ihrer Anpassung bewertet (Fitness). In unserer Anwendung trägt ein Individuum die Parameter einer Fourierreihe für die Generierung einer Kurve und die Fitness ergibt sich z.B. aus der Summe (Integral) der Abstände zwischen generierter Kurve und dem zu analysierenden Chart. Anhand der ermittelten Fitness darf sich dann ein Individuum mehr oder weniger stark (oft) fortpflanzen. Hier unterscheiden sich Evolutionsstrategien, die nur eine Duplikation und anschließende Mutation vornehmen, von den Genetischen Algorithmen, bei denen die Rekombination gegenüber der hier auch vorkommenden Mutation im Vordergrund steht. Rekombination bedeutet hier, daß die Nachkommen zufällig ausgewählte Teile (Gene) des Parametersatzes erben. Somit entstehen schon durch das Zusammensetzen neuer Kombinationen Individuen mit neuen Eigenschaften. In der Mutationsphase werden dann noch zufällig ausgewählte Parameter geringfügig varriert.

In dem Chartanalyse-Applet kommt eine geeignete Kombination aus Genetischen Algorithmen und Evolutionsstrategien zum Einsatz. Wird in der rechts liegenden Auswahl-Box "Evolutional Forecast" gewählt, erscheinen 6 Schieberegler. Mit dem ersten kann die gewünschte Größe des Individuen-Pool festgelegt werden. Mehr Individuen parallelisieren den Suchprozeß, dies erhöht jedoch die Rechenzeit proportional. Auch die Anzahl der "Fourier Terms" geht linear in die Rechenzeit ein. Der 1.Term ist das absolute Glied, dies entspricht einer waagerechten Linie, die nur in ihrer Höhe varriert werden kann. Mit dem 2.Glied (Term) kann der Anstieg der Gerade varriert werden. Mit dem 3. Glied kommt die sogenannte Grundwelle hinzu. Von dieser Grundwelle wird durch den evolutionären Algorithmus die Amplitude, die Frequenz und die Phasenlage variiert. Weitere Glieder sind dann ganzzahlige Vielfache dieser Grundschwingung, wobei bei jedem einzelnen Term wieder Amplitude, Frequenz und Phasenlage unabhängig voneinander variiert werden. Mit den drei darunterliegenden Schiebereglern können die Mutationsstärken für die einzelnen Parameter eingestellt werden. Diese gelten dann für alle Terme.
Der evolutionäre Algorithmus arbeitet mit einem Elitismus-Ersetzungsschema. Dies bedeutet, daß (mindestens) das beste Individuum unverändert im Pool erhalten bleibt, aber zu Erzeugung von Nachkommen zur Verfügung steht. Dies wird in der Anwendung dadurch sichtbar, daß die angezeigte Differenz Forecast <-> MAV nur stetig kleiner wird (oder gleich bleibt).

Mit den Default-Werten der Schieberegler sollte in den meisten Fällen eine gute Konvergenz erreicht werden. Dem Anwender ist es jedoch überlassen, hier günstigere Konstellationen zu finden. Wird der Wert für den MAV (auf den hin ja optimiert wird) geändert, so sollte auch der Term-Wert des evolutionären Algorithmus angepaßt werden. Für sehr kleine MAV-Werte, die einer immer stärkeren Annäherung an den Chart bedeuten, werden mehr Fourier-Glieder (Terme) benötigt, um die höherfrequenten Schwankungen nachbilden zu können. Dies verkompliziert allerdings das Optimierungsproblem und kann die Konvergenz beeinträchtigen. Für die Mutationsstärken gibt es auch ein Optimum. Zu geringe Mutationen lassen die Optimierung stagnieren, zu große Werte führen zu unkontrolliert großen Sprüngen, die den Algorithmus hindern, das Optimum zu finden.
Durch die Ausführung der Berechnung im Hintergrund, ist das Applet während dessen weiter bedienbar. So kann die Berechnung z.B. vor dem Erreichen der gewählten Generationszahl mit der Stop-Taste angehalten werden. Mit der Taste "Continue" kann dann vom erreichten Stand aus, mit evt. geänderten Parametern, fortgefahren werden. Wird jedoch "Start" gedrückt, wird der Individuen-Pool mit neuen Zufallswerten initialisiert. Werden relevante Parameter (z.B. MAV, Darstellungszeitraum usw.) während der Berechnung geändert, so versucht der Algorithums vom Zeitpunkt der Änderung, sich an die neuen Umgebungsbedingungen (Umwelt) anzupassen.