Candlestick-Formationserkennung für TradeSignal enterprise

Wie bewerten Sie diesen Artikel?
Candlestick-Formationserkennung für TradeSignal enterprise
von Rene Rose, 27.02.2004

In diesem Beitrag möchte ich ihnen ein System vorstellen das in der Lage ist, Candlestick-Muster in Charts zu erkennen. Das ganze soll Ihnen die Funktionsweise von Indikatoren, Handelssystemen, Funktionen und besonders der Programmiersprache Equilla demonstrieren.

Am besten Sie laden sich den in Abb.1 dargestellten Arbeitsbereich herunter, indem Sie innerhalb von TradeSignal enterprise (TSe) ein Browserfenster öffnen, zu diesem Artikel surfen und den unter Abb.1 stehenden Link anklicken. Im Arbeitsbereich sind alle nötigen Indikatoren, das Handelssystem und die Funktionen enthalten. In Abb.2 sehen Sie den Indikator im Einsatz, in Abb.3 sehen Sie einen Ausschnitt eines Dax Tagescharts mit Handelssystem und einigen Signalen. Beide Charts aus Abb.2 und Abb.3 können sie auch einzeln in TSe laden.

Für die Neueinsteiger möchte ich kurz erläutern, wie vorzugehen ist, um die Indikatoren und das Handelssystem auch in anderen Charts nutzen zu können.
Wenn Sie den Arbeitsbereich geladen haben, sehen sie die beiden Charts und unten Links eine Reihe von Editorfenstern, die die Programmcodes für die Indikatoren enthalten. Sie müssen die beiden Indikatoren und das Handelssystem kompilieren, damit sie Ihnen dauerhaft zur Verfügung stehen. Das geschieht ganz einfach, indem Sie den Reiter des ersten Editorfensters anklicken und dann die Taste F7 drücken. Sie werden aufgefordert einen Pfad zum Speichern anzugeben und kurz danach ist der Vorgang abgeschlossen. Gleichermaßen verfahren Sie bitte mit den nächsten beiden Editorfenstern auch. Die beiden Funktionen Patternscanner, und ClearPattern müssen nicht extra kompiliert werden, das geschieht automatisch, da beide im Indikator und im Handelssystem verwendet werden.

Was genau steht Ihnen jetzt zur Verfügung?
• CandleScan Indicator
• CandleScan Indicator - global -
• CandlePattern Handelssystem
• Funktion Patternscanner
• Funktion ClearPattern

Der Indikator CandleScan übernimmt die Aufgabe der Mustersuche in den Charts. Er dient eigentlich nur zum Lernen der Muster und zur Demonstration der Leistungsfähigkeit von TSe. Im CandleScan Indikator wird keinerlei Trendfilterung vorgenommen. Das heißt Muster wie Hammer und Hanging Man werden sich überlagern und diverse Umkehrformationen werden auch dort erkannt, wo keine Trendwendemarken zu finden sind. Es geht einzig um die Filterung der Kerzenkombinationen. Der Indikator enthält ein Parameter "Multiplier" der im Inspector verändert werden kann. Hiermit steuern Sie die Erkennung diverser Größenverhältnisse. Zum Beispiel soll der untere Schatten eines Hammers 2* der Körpergröße der Kerze entsprechen. Deshalb ist der "Multiplier" auf 2.0 eingestellt. Mittels einer Dropdownliste für die Auswahl der Muster, von denen 30 zur Verfügung stehen, können Sie die Mustersuche des Indikators steuern.

In einer späteren Ausbaustufe des Indikators und auch des Handelssystems sollen weitere Muster folgen und die bestehenden Muster verfeinert werden. Außerdem wird der Indikator einen Trendfilter in mehreren Varianten erhalten. Der Indikator CandleScan hat einen Bruder, der den Namenszusatz "global" trägt. Die Verwendung mag Ihnen anfangs verwirrend vorkommen, nach einer Einarbeitung aber leicht fallen und Freude machen. Grundlage hierfür: Es ist in TSe möglich, mehrere Charts innerhalb eines Rahmens darzustellen. Tippen Sie ein gültiges Kürzel in die Kommandozeile von TSe ein und wählen Sie die Option Neuer Chart Es wird ein neuer Chart mit eigenem Rahmen erstellt.

Geben Sie nun ein zweites Kürzel ein und wählen Sie diesmal Instrument hinzufügen, dann erscheint der neue Chart im selben Rahmen wie der erste. Auf diese Weise können Sie noch mehr Instrumente hinzufügen. Ab 10 Charts wird es allerdings unübersichtlich. Ein Doppelklick in einen der Charts wechselt jeweils zwischen Vollbildansicht und Gesamtansicht. Alle so zusammengestellten Chart teilen sich eine Zeitachse am unteren Rand des Rahmens.

Wir machen uns nun den folgenden Umstand zu nutze, dass alle Indikatoren und Handelssysteme, die innerhalb eines Rahmens verwendet werden, über globale Variablen Informationen austauschen können. Somit lässt sich die Mustersuche in allen Charts parallel durchführen, ohne dass Sie für jeden Chart die Indikatoreinstellungen anpassen müssen. Voraussetzung ist, dass Sie die auf dem Arbeitsbereich enthaltenen Indikatoren kompiliert haben. Dann stehen diese im linken Menübaum unter Indikatoren zur Verfügung.

Ziehen Sie den Indikator "CandleScan" auf die Überschrift des oberen Charts unserer zusammengestellten Chartsammlung und den "globalen Bruder" auf die Überschrift der restlichen Charts. Erschrecken Sie bitte nicht, wenn Sie nichts sehen, denn der Indikator ist standardmäßig ausgeschaltet. Öffnen Sie jetzt den Inspektor auf der rechten Seite des TSe-Fensters und wählen Sie aus dem oberen Bereich den Indikator "CandleScan" aus. Die Parameter für diesen Indikator werden nun im unteren Bereich des Inspektors eingeblendet.

Wählen Sie nun aus der Dropdownliste ein Muster aus und verfolgen Sie mit Staunen, dass dieses Muster in allen Charts unserer Sammlung erkannt wird. Der Indikator "CandleScan" steuert alle seine globalen Brüder. Sie müssen also nur diesen einen Indikator bedienen, um in allen anderen Charts die gleichen Muster zu erkennen.

Auf der rechten Seite des Arbeitsblattes sehen Sie das Handelssystem in Aktion. Wenn Sie dieses - wie oben beschrieben - kompiliert haben, können Sie es auch in anderen Charts anwenden. Sie können das Handelssystem auch mit anderen Systemen kombinieren oder eine der einfachen Money Management-Strategien aus dem Lieferumfang von TSe in den gleichen Chart ziehen. Die Strategy Equity liefert Ihnen ein grafisches Ergebnis des Systems. Die einzelnen Muster werden über den Inspektor gesteuert. Jedes Muster ist mit einem Schalter versehen, über das es ein- und ausgeschaltet werden kann. Das Handelssystem beinhaltet eine einfache Trendfilterung mit einem MA. Liegen die Schlusskurse darunter, nimmt das System einen Abwärtstrend an, sonst einen Aufwärtstrend. Der Trendfilter kann auch ausgeschaltet werden. Nach dem Kompilieren und dem Einsetzen in einem neuen Chart ist das System ausgeschaltet. Wollen Sie Signale im Chart sehen, müssen Sie erst einige Muster über den Inspektor zuschalten.

Bitte versuchen Sie nicht nach diesem System zu handeln!
Es dient vorerst nur der Demonstration und enthält keinerlei Risiko- und Money Management-Strategie. Starre Werte hierfür können Sie im Inspektor unter dem Menüpunkt Money Management einstellen. Außerdem empfehle ich Ihnen im selben Menü das pyramidisieren einzuschalten, damit das System bei mehreren aufeinander folgenden Signalen auch mehrere Positionen eingehen kann.

Kommen wir nun zur eigentlichen Mustererkennung.
Ohne in die Programmiertechnik zu tief einzutauchen, möchte ich Ihnen die Funktionsweise der Mustererkennung erläutern. Die Mustererkennung findet in der Funktion PatternScanner statt. Sie ist sozusagen das Herz des ganzen Systems. Die Größe und Komplexität der Funktion dürfte Sie Anfangs etwas verwirren, jedoch werden Sie bald merken, dass Sie nichts anderes als einen Lego Baukasten vor Augen haben. Die zweite Funktion ClearPattern dient nur dem Zurücksetzen der einzelnen Informationskanäle, über, die die Mustererkennungsindikatoren Informationen austauschen. Diese Funktion brauchen Sie nicht weiter zu beachten.

Das Herz der Funktion PatternScanner schlägt im Header des Programmcodes:

bodymax = maxlist( close , open );//obere Körperbegrenzung
bodymin = minlist( close , open );//untere Körperbegrenzung
candlebody = bodymax - bodymin;//Körpergröße errechnen
Rangemedian = ( high + low ) * 0.5;//Mittelpunkt der gesamten Range
Bodymedian = ( bodymax + bodymin ) *0.5;//Mitte des Kerzenkörpers
upshadow = high - bodymax;//oberen Schatten errechnen
downshadow = bodymin - low;//unteren Schatten errechnen
longbody = candlebody > Average( candlebody , 5 );//großer Körper
smallbody = candlebody < ( Average( candlebody , 5 ) * 0.75 );//kleiner Körper
whitebody = close > open;//weisse Kerze
blackbody = open > close;//schwarze Kerze
gapup = bodymax[1] < bodymin;//Gap zwischen Körpern, Schatten können sich überlagern
gapdown = bodymin[1] > bodymax;//Gap zwischen den Körpern, Schatten können sich überlagern
windowup = high[1] < low;//window nach Nison
windowdown = low[1] > high;//window nach Nison
maxtoleranz = ( high - low ) * 0.1;//maximaler Toleranzwert beim Vergleichen bestimmter Niveaus

Hier werden die "Legosteine" definiert, aus denen wir später unsere Candlestick-Muster zusammensetzen. Folgende Variablen speichern die Größen der Grundelemente einer Kerze:
• bodymax - enthält immer den Kurs, der die obere Begrenzung des Kerzenkörpers darstellt
• bodymin - enthält demzufolge den Kurs der unteren Kerzenkörperbegrenzung
• candlebody - enthält unabhängig von der Farbe die Größe des Kerzenkörpers
• upshadow - enthält die Länge des oberen Schattens auch Docht genannt
• downshaodw - dementsprechend die Länge der Lunte
• whitebody - speichert den Wert true wenn die Kerze weiß ist
• blackbody - erklärt sich demzufolge von selbst

Die Variablen gapup, gapdown, windowup und windowdown speichern jeweils den Wert true oder false, wenn die entsprechenden Bedingungen aus der Candlestick-Lehre zutreffen; also zum Beispiel eine Kurslücke zum Vortageshoch auftritt.

Ein Hinweis: Ich habe hier zwischen Gaps und Windows unterschieden, obwohl beides oft für gleiche Muster verwendet wird. Unter Gap verstehe ich eine Lücke zwischen Kerzenkörpern und ein WindowDown ist eine Lücke zwischen Vortagestief und heutigem Hoch - beim WindowUp entsprechend umgekehrt. Diese Unterscheidung war wichtig, um einige Muster besser unterscheiden zu können.

Nun werde ich kurz die Baukastenfunktionalität erläutern:

- folgende Abfrage erkennt die Farbe einer Kerze:
if whitebody = true then ...
if blackbody = true then...


- oder :
if gapup = true then ...

womit eine Kurslücke erfragt wird.

- wie groß ist der obere Schatten?
if upshadow > ( candlebody * Multiplier )


-ein Bullish Engulfing Pattern:
if whitebody and blackbody[1] and open < close[1] and close > open[1] then ...


- war die Kerze gestern groß und schwarz?
if blackbody[1] and longbody[1] then


Sie sehen: Jedes Muster wird aus einer Kombination ganz einfacher Bedingungen gebildet. Alles, was sich innerhalb einer Programmzeile ausdrücken lässt, könnte man als weiter Grundbedingung einfügen. Zum Beispiel könnte eine Variable für einen Longtrend eingefügt werden, die immer dann den Wert true speichert, wenn der Schlusskurs über einem Moving Average liegt. Die Verwendung würde dann so aussehen:
Longtrend = close > MAValue//MAValue ist der Wert eines Moving Average


und die Trendabfrage sieht so aus:
if Longtrend = true then .... Kaffeekochen :)


Mit diesen Informationen im Hinterkopf schauen Sie sich nun einmal den gesamten Quellcode in TSe an. Wenn Sie alles in Ruhe durchgehen, werden Sie bald merken, wie einfach das Prinzip der Mustersuche durch das "Legosteinverfahren" eigentlich ist.

Zur Erläuterung vielleicht noch die Bedeutung der in eckigen Klammern stehenden Ziffern hinter manchen Variablen: Eine 1 erfragt den Wert von gestern
if whitebody[1] then

erfragt, ob gestern eine weiße Kerze vorlag.

Alles was nach dem Header in der Funktion als Programmtext steht, ist eine Kombination der oben definierten Variablen. Vielleicht versuchen Sie einmal in Ruhe ein eigenes Muster auf diese Art und Weise zu erstellen.

Wie soll die ganze Geschichte weitergehen?
Ich werde nach und nach aus Gründen der Übersichtlichkeit und Fehlerprävention für jeweils 1 oder 2 Muster einen eigenen Indikator schreiben. Mit dessen Hilfe soll dann die Musterdefinition des entsprechenden Musters verfeinert werden. Dazu wird es jeweils im Know how-Bereich einen ausführlichen Artikel zum Muster geben. Ein erster Schritt ist mit dem Hammer + Hanging Man getan.

Sind alle Muster aufgeteilt und verbessert worden, werde ich sie wieder in einer großen Funktion vereinen. Später möchte ich dann ein ausgereiftes Candlestick Trading-System entwerfen; mit vernünftigen Risikostops und ordentlicher Gewinnbehandlung. In Zusammenarbeit mit dem User "Hintman" (Benutzername auf tradesignal.com), dem Betreiber der Seite Candletrading.de, soll auch ein 60-Min.-Handelssystem entstehen.

Ihre Mitarbeit in den Threads ist sehr willkommen!

Rene Rose

Dieser Artikel, sowie die mit den verfügbaren Darstellungs- und Analysewerkzeugen erstellten und angezeigten Ergebnisse dienen ausschließlich zur Information und stellen keine Anlageberatung oder sonstige Empfehlung dar. Alle Rechte vorbehalten. Vervielfältigungen, Bearbeitungen sowie sonstige unberechtigte Nutzungen werden zivil- und strafrechtlich verfolgt.