Tradesignal How To 07

ENTWICKLUNG EINER SYSTEMATISCHEN HANDELS-STRATEGIE.

TEIL 2: MIT DER FORMELSPRACHE EQUILLA ZUM TRADING-ERFOLG.

Die zweite Ausgabe unserer Equilla-Reihe beschreibt, wie Variablen, Inputs und Wenn-Dann-Bedingungen funktionieren. Anhand einer einfachen Handelsstrategie erfahren Sie Schritt für Schritt, welche Befehle Sie für Einstiege, Ausstiege und Stopps brauchen und wie diese in einem Code zusammengeführt werden.

INHALT.

  • Variablen – die Container für Daten
  • Bedingungsabhängige Abläufe
  • Step by step zur ersten Handelsstrategie
  • Implementierung eines Stopps
  • Ergebnisse des Backtests
  • Fazit

 

HINWEIS: Der vorliegende Beitrag ist im TRADERS’ Magazin (Ausgabe 09/2014) erschienen.

 

VARIABLEN – DIE CONTAINER FÜR DATEN.

Bevor wir mit der Erstellung der Handelsstrategie beginnen, möchten wir unsere Leser mit der Funktionsweise von Variablen vertraut machen.

Sie sind es, die Zahlen, Berechnungsergebnisse, Benutzereingaben oder Kurswerte speichern und diese überhaupt erst für die Weiterverarbeitung und spätere Verwendung zugänglich machen. Variablen entstehen, indem sie im Skript durch den Tag „Variables“ deklariert werden.

WICHTIG HIERBEI: Variablen gelten immer nur innerhalb des jeweiligen Skriptes, weil nur dort der Zugriff auf die Variable besteht.

 

BEDINGUNGSABHÄNGIGE ABLÄUFE.

Neben Variablen gehören bedingungsabhängige Abläufe zu den zentralen Elementen einer Handelsstrategie. Sie bestimmen, welche Reaktion auf bestimmte Ereignisse (z.B. Berechnungsergebnisse, Benutzereingaben) erfolgen soll.

  • Einfache Bedingung (if… then…): WENN Bedingung DANN mache a
  • Bedingung mit Verzweigung (if… then… else…): WENN Bedingung DANN mache a, ANSONSTEN mache b

Neben diesen beiden Grundformen können Bedingungen auch verschachtelt werden, wodurch mehrere Abfragen und Anweisungen durchgeführt werden. Wie solch eine verschachtelte Bedingung aussehen kann, wird im weiteren Verlauf anhand der Kauf und
Verkaufsbefehle der Crossover-Handelsstrategie dargestellt.

 

STEP BY STEP ZUR ERSTEN HANDELSSTRATEGIE.

Mithilfe der vordefinierten und Funktionen und Indikatoren können Tradesignal-User ihre individuelle Handelsstrategie schreiben. Wir möchten an dieser Stelle die allseits bekannte Crossover-Methode als Grundlage für solch eine Strategie nutzen.

Fangen wir mit dem Kopfteil an. Hier wird eine kurze Beschreibung der Handelsstrategie angegeben, um bei einer Vielzahl unterschiedlicher Strategien schnell erkennen zu können, welcher Ansatz jeweils dahinter steht steht.

Meta:

Synopsis​​ ("Dieses Handelssystem handelt Überschneidungen des Kurses mit der 200-Tage-Linie. Es kann sowohl long only, als auch als Long-Short-Variante genutzt werden. Der Initial Stopp basiert auf der ATR.");

Weiter geht es mit dem Eingabebereich. Hier werden alle benutzerspezifischen Parameter (Inputs) sowie die eben besprochenen Variablen deklariert. Mit Price(Close) wird bestimmt, dass der Gleitende Durchschnitt auf Schlusskursbasis berechnet wird.
Der Input Period(200,1) dient zur Eingabe der Periodenzahl. Die Zahl 1 bedeutet, dass nur ganzzahlige Änderungen dieses Parameters zugelassen werden. Zur Definition von bullishen und bearishen Signalen, die später über die Eingabemaske der Software modifiziert werden können, dienen die Inputs Bullish und Bearish.

Jeder dieser Inputs bietet zwei Auswahlmöglichkeiten. So kann der User beim Input Bullish festlegen, ob ein Long-Einstieg oder ein Short-Ausstieg erfolgen soll. Analog dazu bietet der Input Bearish die Möglichkeiten des Long-Ausstiegs sowie des Short-Einstiegs. Mithilfe dieser Option können im späteren Backtest bequem alle Kombinationen durchgespielt werden.

Um Ein- und Ausstiegssignale im Chart anzeigen zu lassen, fügen wir Visuals als Input ein und stellen diesen standardmäßig auf Active, sodass der Gleitende Durchschnitt automatisch im Chart dargestellt wird.

Inputs:​​ Price(Close),​​ 

Period(200,1),

Bullish(LongEntry,ShortExit)=​​ LongEntry,​​ 

Bearish(LongExit,ShortEntry)=​​ LongExit,

Visuals(Active,Inactive)=Active;

 

Im nächsten Schritt kommen wir zu den Variablen, die im vorliegenden Script für die fortlaufende Berechnung und Speicherung der Werte des Gleitenden Durchschnitts verantwortlich sind. Die Variable avg greift dabei auf die bereits in Teil 1 vorgestellte Funktion AverageFC zurück, die einen einfachen Gleitenden Durchschnitt berechnet. Sie greift hierbei auf die Inputs Price und Period zurück, die wir auf Close-Basis der letzten 200 Handelsperioden deklariert haben. (Möchte man hingegen den exponentiellen Durchschnitt verwenden, muss auf die Funktion XAverage zurückgegriffen werden.)

Variables:

avg,​​ avtr;​​ 

 

avg=AverageFC(Price,Period);​​ 

avtr=avgtruerange(14);

Der nachfolgende Programmteil enthält das eigentliche Herzstück der Handelsstrategie. Werfen wir zunächst einen Blick auf den ersten Teil, der für die bullishen Signale zuständig ist:

If​​ Price​​ Crosses Over​​ avg​​ Then

 If​​ Bullish​​ =​​ LongEntry​​ Then

 Buy Next Bar​​ at​​ Market

 Else If​​ Bullish=ShortExit​​ Then

 Cover Next Bar​​ at​​ Market;

Wie man erkennen kann, ist die Befehlsstruktur relativ einfach zu verstehen. Schließt der zugrundeliegende Markt oberhalb der 200-Tage-Linie („..crosses over avg..“), kommt die folgende Bedingung ins Spiel: Wenn der Input Bullish auf LongEinstieg eingestellt
ist, dann erfolgt der Kauf des Wertpapiers per Market-Order zur nächsten Handelsperiode. Ist dieser dagegen auf ShortAusstieg eingestellt, erfolgt die Schließung (cover) einer vorhandenen Short-Position – ebenfalls per Market-Order zur nächsten Handelsperiode. Die gleiche Struktur kommt nun beim Bearish-Modus zum Einsatz:

If​​ Price​​ Crosses Under​​ avg​​ Then

 If​​ Bearish=LongExit​​ Then

 Sell Next Bar​​ at​​ Market

 Else If​​ Bearish=ShortEntry​​ Then

 Short Next Bar​​ at​​ Market;

 

IMPLEMENTIERUNG EINES STOPPS.

Zum Abschluss möchten wir noch einen einfachen Stopp zur Verlustbegrenzung implementieren. Konkret soll ein ATR-Stopp zum Einsatz kommen. Mithilfe der vorinstallierten Funktionen ist dies einfach umsetzbar.

SetStopContract;​​ 

SetStopLoss(LotSize*1*avtr[BarsSinceEntry]);

Der Code berechnet den Stopp anhand der Stückzahl (LotSize), die mit der einfachen Average True Range (avtr) multipliziert wird. Die eckige Klammer sorgt dafür, dass der ATR-Wert zum Zeitpunkt des Einstiegs fixiert wird. LotSize ist der Multiplikator des Futures pro Punkt, z.B. 25 beim DAX Future. Um zu definieren, dass der Stopp pro Future gilt – und nicht für die Gesamtposition – wird in der oberen Zeile SetStopContract hinzugefügt. Mithilfe der Funktion BarsSinceEntry lässt sich auch problemlos ein Zeitstopp einbauen. Für Long Positionen gilt:

If MarketPosition=1​​ and BarsSinceEntry​​ >=10​​ Then Sell next bar​​ at​​ low[BarsSinceEntry]​​ stop;

Hier prüft das Programm zunächst, ob der Markt eine Long-Position hält (marketposition=1) und bereits mindestens 10 Handelsperioden seit dem Einstieg vergangen sind. Ist dies der Fall, wird die Position geschlossen, sobald der Markt unterhalb des Tiefs der Einstiegskerze schließt. Ist der Markt in einer Short-Position, gilt:

If MarketPosition=-1​​ and BarsSinceEntry​​ >=10​​ Then Cover next bar​​ at​​ high[BarsSinceEntry]​​ stop;

Möchte man den Stopp nach 50 Handelsperioden auf Einstand ziehen, müsste der Ausstiegsbefehl wie folgt lauten:

If MarketPosition=1​​ and BarsSinceEntry​​ >=50​​ Then Sell next bar​​ at​​ low[BarsSinceEntry]​​ stop;

If MarketPosition=-1​​ and BarsSinceEntry​​ >=50​​ Then Cover next bar​​ at​​ high[BarsSinceEntry]​​ stop;

Zu guter Letzt möchten wir, dass der Gleitende Durchschnitt und die Stopps automatisch im Chart dargestellt werden. Mithilfe der beiden Grafikfunktionen DrawSymbol und DrawLine kann dies wie folgt in die Tat umgesetzt werden.

If​​ Visuals=Active​​ Then begin​​ 

 DrawSymbol(GetActiveOrderPrice(1));​​ 

DrawLine(avg);

End;

 

Der vollständige Equilla Code ist in Abbildung 1 zu sehen.

Meta:

Synopsis​​ ("This trading system trades with crosses of the price with the 200-day line. It may be used as long only, as well as in a long-short version. The initial stop is based on the ATR.");

 

Inputs:​​ Price(Close),​​ 

Period(200,1),

Bullish(LongEntry,ShortExit)=​​ LongEntry,​​ 

Bearish(LongExit,ShortEntry)=​​ LongExit,

Visuals(Active,Inactive)=Active;

 

Variables:

avg,​​ avtr;​​ 

 

avg=AverageFC(Price,Period);​​ 

avtr=avgtruerange(14);

 

If​​ Price​​ Crosses Over​​ avg​​ Then

 If​​ Bullish​​ =​​ LongEntry​​ Then

 Buy Next Bar​​ at​​ Market

 Else If​​ Bullish=ShortExit​​ Then

 Cover Next Bar​​ at​​ Market;

 

If​​ Price​​ Crosses Under​​ avg​​ Then

 If​​ Bearish=LongExit​​ Then

 Sell Next Bar​​ at​​ Market

 Else If​​ Bearish=ShortEntry​​ Then

 Short Next Bar​​ at​​ Market;

 

SetStopContract;​​ 

SetStopLoss(LotSize*1*avtr[BarsSinceEntry]);

​​ 

If MarketPosition=1​​ and BarsSinceEntry​​ >=50​​ Then Sell next bar​​ at​​ low[BarsSinceEntry]​​ stop;

If MarketPosition=-1​​ and BarsSinceEntry​​ >=50​​ Then Cover next bar​​ at​​ high[BarsSinceEntry]​​ stop;

 

If​​ Visuals=Active​​ Then begin​​ 

 DrawSymbol(GetActiveOrderPrice(1));​​ 

DrawLine(avg);

End;

ABB. 1: EQUILLA CODE.

Der vorliegende Equilla Code handelt Überkreuzungen des Kurses mit der 200-Tage-Linie und nutzt einen Initial Stop auf ATR-Basis.

 

ERGEBNISSE DES BACKTESTS.

Mit dem eben vorgestellten Handelssystem, können wir nun den ersten Praxistest durchführen. Hierzu kompilieren wir den Equilla-Code und ziehen ihn anschließend bequem per Drag and Drop in einen Chart unserer Wahl, zum Beispiel den DAX.

Tradesignal visualisiert alle Ein- und Ausstiege im DAX-Chart sowie den entsprechenden Verlauf der Kapitalkurve. Die im Equilla Script deklarierten Inputs können bequem über die Werkzeugleiste modifiziert werden, die Ergebnisse sind sofort im Chart sichtbar. Möchte man also erfahren, ob sich auch der Handel der Short-Signale beim DAX ausgezahlt hätte, genügen nur wenige Klicks.

Auch die Änderung der Periodenlänge lässt sich hier dank der im Code deklarierten Inputs bequem steuern.

ABB. 2: ANWENDUNG DER HANDELSSTRATEGIE AUF DEN DAX (LONG/SHORT VARIANTE).
Alle Ein- und Ausstiegssignale und Stopps werden im Chart visuell markiert, die Kurve darunter zeigt den historischen Verlauf der Kapitalkurve. Quelle: Tradesignal.

 

FAZIT.

Mit Tradesignal können Trader ohne große Programmierkenntnisse individuelle Handelsstrategien entwickeln und das eigene Trading auf eine solide Basis stellen. Mithilfe vordefinierter Funktionen lassen sich die eigenen Ideen in ein Script überführen und anschließend backtesten und optimieren.

Die Formelsprache Equilla liefert hierfür zahlreiche Tools und Module, die dem Systementwickler das Leben einfacher machen. Mehr dazu im nächsten Teil unserer Equilla-Serie.

Für Fragen rund um Tradesignal stehen wir Ihnen jederzeit gerne zur Verfügung. Wenn Sie noch kein Tradesignal-Kunde sind, stellen wir Ihnen auch gerne eine Testversion zur Verfügung.

Das war’s für heute. Take care, take profit und auf Wiedersehen.

DISCLAIMER.

© Copyright Tradesignal Ltd., London.
Dieses Werk bzw. dessen Inhalt steht unter einer Creative Commons Namensnennung-Nicht-kommerziell 3.0 Unported Lizenz:
 http://creativecommons.org/licenses/by-nc/3.0/deed.de

Tradesignal® ist eine eingetragene Marke der Tradesignal GmbH. Nicht autorisierte Nutzung oder Missbrauch ist ausdrücklich verboten. Alle weiteren auf diesen Seiten genannten und ggf. durch Dritte geschützten Marken- und Warenzeichen unterliegen uneingeschränkt den Bestimmungen des jeweils gültigen Kennzeichenrechts und den Besitzrechten der jeweiligen eingetragenen Eigentümer.

Tradesignal Ltd. erhält Informationen aus Quellen, die es für zuverlässig hält, übernimmt jedoch keine Garantie für die Richtigkeit und Vollständigkeit der darin enthaltenen Informationen. Tradesignal Ltd. und ihre verbundenen Unternehmen stellen keine ausdrückliche oder stillschweigende Gewährleistung in Bezug auf die hierin enthaltenen Informationen oder Analysen dar, einschließlich der implizierten Garantien für die Eignung für einen bestimmten Zweck und die Handelsüblichkeit. Tradesignal Ltd. oder ihre verbundenen Unternehmen haften in keinem Fall für Entscheidungen oder Maßnahmen, die im Vertrauen auf die hierin enthaltenen Informationen, entgangene Gewinne oder indirekte, Folgeschäden, besondere oder zufällige Schäden, sei es im Vertrag, in unerlaubter Handlung oder auf andere Weise, getroffen werden, auch wenn auf die Möglichkeit solcher Schäden hingewiesen wird. Dieses Material stellt weder ein Angebot noch eine Aufforderung zur Abgabe eines Angebots oder eine Empfehlung zum Kauf oder Verkauf von Wertpapieren dar. Alle Äußerungen sind freibleibend.

Die Equilla Codes werden kostenlos und „wie besehen“ zur Verfügung gestellt, ohne Gewährleistung jeglicher Art, ausdrücklich oder stillschweigend, einschließlich, aber nicht beschränkt auf die Garantien der Eignung für einen bestimmten Zweck und Nichtverletzung. In keinem Fall haftet Tradesignal Ltd. für Ansprüche, Schäden oder sonstige Haftung, sei es in einer Vertragsklage, unerlaubter Handlung oder auf andere Weise, die sich aus oder im Zusammenhang mit diesem Code oder der Verwendung dieses Codes ergibt.

lectus consectetur ante. quis, dapibus accumsan leo.