TRADESIGNAL HOW TO 12.

UMGANG MIT DATEN, ZEITEN UND PERIODEN.

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

Bei der Entwicklung von Handelsstrategien spielen Zeit- und Kalenderdaten eine wichtige Rolle. Egal, ob man bestimmte Tageszeiten als Filter nutzen oder wiederkehrende Muster in den Märkten aufspüren möchte – mit Equilla lassen sich nahezu alle Ideen in die Tat umsetzen und anschließend testen.

INHALT.

  • Uhrzeiten in Equilla nutzen
  • Praxisbeispiel: Open Range Breakout
  • Wochentage in Equilla: Turnaoround Tuesday
  • Flexibles Datenhandling: Inline Instrumente
  • Praxisbeispiel: VDAX Trigger

HINWEIS: Der vorliegende Beitrag ist im TRADERS’ Magazin (Ausgabe 12/2014) erschienen. In allen Beispielen werden Daten und Wertpapierkürzel von Thomson Reuters Eikon verwendet.


DAYTRADER AUFGEPASST!

SO NUTZEN SIE HANDELSZEITEN IN EQUILLA.

Für Daytrader ist die Nutzung von Stunden- und Minutenangaben ein essenzielles Tool, wenn es um die Entwicklung von Handelsstrategien geht. Je nach Markt und Tageszeit existieren schließlich große Unterschiede bei Handelsvolumen und Volatilität. Equilla bietet mit der Time-Funktion eine einfache Lösung, wenn es um die Definition von konkreten Zeitangaben geht.

Hierbei gilt: Uhrzeit = (Stunde * 100) + Minute

Dementsprechend entspricht die Uhrzeit 08:20 Uhr in Equilla der Zahl 820. Die Uhrzeit 21:40 Uhr heißt übersetzt 2140.

Der nachfolgende Code zeigt, wie mithilfe der Time-Funktion mit nur wenigen Zeilen ein Basissystem erstellt werden kann, das sich beim Ein- und Ausstieg ausschließlich an der Uhrzeit orientiert. Als Inputs werden die Zeit für den Long-Einstieg und den Ausstieg definiert.

Inputs:

EnTime(​​ 1700​​ ),

ExTime(​​ 930​​ );

Nun folgen die zeitgesteuerten Einstiegs- und Ausstiegsbefehle. Im konkreten Fall erfolgt der Einstieg um 17:00 Uhr, der Ausstieg 09:30 Uhr des Folgetags.

If​​ Time​​ =​​ EnTime​​ Then Buy Next Bar​​ at​​ Market;

If​​ Time​​ =​​ ExTime​​ Then Sell Next Bar​​ at​​ Market;

Mithilfe solch eines einfachen Codes erfährt der Trader beim Backtest, dass beispielsweise der Kassa-DAX während des Bullenmarkts der letzten Jahre zwischen 17:00 Uhr und 09:30 Uhr kumuliert rund 5300 Punkte Zuwachs verbuchte. Tagsüber, also zwischen 09:30 Uhr und 17:00 Uhr, verlor der Leitindex dagegen per Saldo rund 1500 Punkte. Eine interessante Erkenntnis, die förmlich dazu einlädt, weitergehende Recherchen anzustellen.

ABB. 01: DAX PERFORMANCE OVERNIGHT (OBEN) UND AM TAG (UNTEN).

In Abbildung 1 ist die Kapitalkurve eines Handelssystems dargestellt, das täglich um 17:00 Uhr eine Long-Position im DAX einnimmt und am Folgetag um 09:30 Uhr wieder schließt. Unten ist der kumulierte DAX-Gewinn zwischen 09:30 Uhr und 17:00 Uhr abgebildet.


PRAXISBEISPIEL.

DER OPEN RANGE BREAKOUT.

Kommen wir nun zu einer Handelsstrategie, die vielen Lesern bekannt sein dürfte: dem Open Range Breakout. Ziel ist es hierbei, den Ausbruch aus einer individuell festgelegten Zeitspanne zu handeln. Mithilfe der Time-Funktion kann dieser klassische Ansatz schnell und präzise auf Robustheit getestet werden. Der nachfolgende Code stellt nur ein einfaches Gerüst dar, zeigt allerdings wie man mit einem kleinen Trick das Hoch und Tief einer bestimmten Tageszeit ermitteln und Ausbrüche aus dieser Zone zum Aufbau von Positionen nutzen kann. Darüber hinaus wird die Anzahl der Trades pro Tag und Handelsrichtung beschränkt, um Overtrading an Seitwärtstagen zu vermeiden. Beginnen wir mit der Festlegung aller Inputs. Die Eröffnung markiert automatisch den Beginn der Open Range des zugrundeliegenden Marktes und bedarf daher keines eigenen Inputs. Mit StartTime endet die Eröffnungsphase und der Handel kann beginnen. Mit dem Input EndTime lässt sich der Ausstieg am Tagesende steuern, damit keine Overnight-Positionen entstehen.

Inputs:​​ 

Price(​​ Close​​ ),

StartTime(​​ 1600​​ ),​​ 

EndTime(​​ 2130​​ );

Die Variablen hh und ll werden für die Festlegung des Hochs und Tiefs der Eröffnungsrange gebraucht, die letzten beiden Variablen fungieren als Zähler, damit die Anzahl der Trades beschränkt werden kann.

Variables:​​ hh(​​ 0​​ ),​​ ll(​​ 0​​ ),​​ longTrade(​​ 0​​ ),​​ shortTrade(​​ 0​​ );

Bei Beginn eines neuen Handelstages – hierzu dient die Abfrage in der ersten Zeile – wird das Hoch und Tief der ersten Kerze als „high“ und „low“ definiert.

If​​ Date​​ <>​​ Date[1]​​ Then​​ 

Begin

 hh​​ =​​ high;

 ll​​ =​​ low;

 longTrade​​ =​​ 0;

 shortTrade​​ =​​ 0;

End;

Nach Abschluss des ersten Intraday-Bars beginnt folgende Schleife, die solange ausgeführt wird, bis die Eröffnungsphase zu Ende geht – in unserem Fall ist dies um 16:00 Uhr der Fall. Ziel dieser verschachtelten Schleife ist die Prüfung nach jedem Bar, welcher Kurs das höchste Hoch und das tiefste Tief der bisherigen Eröffnungsphase darstellt.

If​​ Date​​ =​​ Date[1]​​ And​​ Time<=​​ StartTime​​ Then​​ 

Begin

 If​​ High​​ >​​ hh​​ Then​​ hh​​ =​​ High;

 If​​ Low​​ <​​ ll​​ Then​​ ll​​ =​​ Low;

end;

Nun beginnt die Handelsphase. Der Code prüft zunächst, ob bereits ein Long-Trade durchgeführt wurde. Ist dies nicht der Fall (longTrade=0), wird eine Stopp-Buy-Order am Hoch der Eröffnungsrange platziert. Das Tief der Eröffnungsrange dient als Verluststopp, die entsprechende Verkaufsorder wird platziert. Dieser Vorgang wird für die Short-Seite analog durchgeführt. Kommt es zum Einstieg auf der Long- oder Short-Seite, wird der entsprechende Zähler (longTrade beziehungsweise shortTrade) auf 1 gestellt. In der Praxis heißt das: Wurde an jenem Handelstag bereits ein Long-Trade durchgeführt, sind keine weiteren Long-Trades mehr erlaubt. Gleiches gilt für Short-Trades.

If​​ Time​​ >=​​ StartTime​​ And​​ Time​​ <=​​ EndTime​​ Then​​ 

Begin

 If​​ longTrade​​ =​​ 0​​ Then Buy Next Bar​​ at​​ hh​​ Stop;

 Sell Next Bar​​ at​​ ll​​ Stop;

 If​​ shortTrade​​ =​​ 0​​ Then Short Next Bar​​ at​​ ll​​ Stop;

Cover Next Bar​​ at​​ hh​​ Stop;

 If MarketPosition​​ =​​ MarketPositionLong Then​​ longTrade​​ =​​ 1;

 If MarketPosition​​ =​​ MarketPositionShort Then​​ shortTrade​​ =​​ 1;

End;

Damit der Computer weiß, wann der Ausstieg am Tagesende erfolgen soll, muss am Ende nur noch folgende Bedingung definiert werden:

If​​ Time​​ >=​​ EndTime​​ Then

Begin

 Sell(​​ "End of Day Exit"​​ );

 Cover(​​ "End of Day Exit"​​ );

End;


WIE LASSEN SICH WOCHENTAGE AUSWERTEN?

PRAXISBEISPIEL: TURNAROUND TUESDAY.

Neben dem Einsatz von Uhrzeiten lassen sich in Equilla natürlich auch andere Datenformate nutzen. Möchte man beispielsweise bestimmte Tage innerhalb eines Handelssystems verwenden, kommt die Funktion „dayofweek“ ins Spiel. Als Beispiel soll ein simpler Code dienen, der an Dienstagen Long- beziehungsweise Short-Einstiege durchführt, je nachdem ob der Kurs unterhalb beziehungsweise oberhalb eines einfachen Gleitenden Durchschnitts* (Simple Moving Average, kurz SMA) eröffnet.
Zunächst werden wie immer die benötigten Variablen und Inputs definiert:

Variables:​​ sma;

Inputs:​​ price(​​ close​​ ),​​ period(​​ 50,1​​ );

 

sma=average(​​ close,period );

Im nächsten Schritt wird die Bedingung für den Short-Einstieg definiert. Mit „dayofweek(date)=2“ ist der Dienstag gemeint. Eröffnet der Markt also oberhalb des SMAs vom Vortag, wird eine Short-Position eingenommen:

If dayofweek(​​ date​​ )=2​​ and​​ open>sma[1]​​ 

then short this bar​​ at​​ open;

Analog wird die Bedingung für den Long-Fall festgelegt:

If dayofweek(date)=2​​ and​​ open<sma[1]

then buy this bar​​ at​​ open;

Damit die Ergebnisse der Dienstagsstrategie später im Backtest korrekt wiedergegeben werden, erfolgt am Ende des Codes die Ausstiegsbedingung zum Handelsschluss:

ExitPosition all shares this bar​​ at​​ close;

Mithilfe der Date-Funktion lassen sich zeit- und kalenderbasierte Abfragen flexibel programmieren und anschließend auswerten. Gleichzeitig können diese auch als Filter innerhalb eines komplexeren Handelssystems eingesetzt werden und damit zur Verbesserung der Performance beitragen.


FLEXIBLES DATENHANDLING.

SO NUTZEN SIE DATA INPUTS UND INLINE INSTRUMENTE.

Zum Abschluss möchten wir anhand eines einfachen Beispiels demonstrieren, welche Möglichkeiten Equilla beim Datenhandling bietet. Trader können im Code mithilfe von Data Inputs oder Inline-Instrumenten auf alle vorhandenen Daten zugreifen und diese zur Generierung von Handelssignalen verwenden. Nachfolgend ein paar Beispiele für unterschiedliche Datenzugriffe:

Data Input: Hierbei werden die im Chart geöffneten Datenreihen als Quelle herangezogen. Möchte man zum Beispiel die Differenz eines Wertpapiers (data1) und einem anderen (data2) zeichnen, lautet der Indikator wie folgt:

DrawLine(​​ Close​​ of​​ Data1​​ -​​ Close​​ of​​ Data2​​ );

Inline-Instrument: Hier werden die konkreten Daten direkt vom Datenprovider abgefragt, ohne dass das betreffende Wertpapier im Chart geöffnet sein muss. Der nachfolgende Code berechnet einen einfachen SMA für die aktuell im Chart gewählte Zeitebene (Hinweis: Das Kürzel .GDAXI steht bei Thomson Reuters für den DAX).

DaxMA​​ =​​ AverageFC(​​ close,​​ 38​​ )​​ of​​ '.GDAXI';

Das folgende Beispiel zeigt den zuvor gezeigten Code – mit einer kleinen Änderung. Mithilfe des Zusatzes „60m“ bzw. „d“ wird hier nämlich der 60-Minuten- und Tageschart für die Berechnung herangezogen. Auf diese Weise können zum Beispiel Informationen aus dem Tages- oder Wochenchart auf Intraday-Basis genutzt werden und umgekehrt. Egal ob Bollinger-Bänder, Channels oder Swing-Punkte – der Fantasie sind hier wahrlich keine Grenzen gesetzt.

Meta:​​ subchart(​​ false​​ );

 

DrawLine(​​ AverageFC(​​ close​​ of​​ '.GDAXI 60m',​​ 200​​ ) );

DrawLine(​​ AverageFC(​​ close​​ of​​ '.GDAXI d',​​ 50​​ ) );

ABB. 02: DAX MIT SIMPLE MOVING AVERAGES AUF UNTERSCHIEDLICHEN ZEITEBENEN.


PRAXISBEISPIEL.

VDAX ALS TRIGGER FÜR DEN DAX.

Nehmen wir an, ein Trader möchte den VDAX und dessen Veränderungsrate (Rate of Change, kurz: ROC) als Basis für Einstiege im DAX selbst nutzen. Zunächst werden die Inputs für den VDAX und dem dazugehörigen ROC-Indikator festgelegt. Der Input „Bars“ wird im späteren Verlauf zur Stoppsetzung benötigt.

Inputs:

vdaxTrigger(​​ 40​​ ),

rocTrigger(​​ 50​​ ),

Bars(​​ 10,0​​ );

 

Variables:​​ 

LongCondition(​​ false​​ );

Der Long-Einstieg soll erfolgen, wenn der VDAX unter ein bestimmtes Niveau – voreingestellt ist hier die Marke von 40 – fällt. Dies wird mithilfe der direkten Referenzierung ‚.vdax‘ gelöst. Hierbei ist darauf zu achten, dass der hier verwendete Wertpapierticker dem Ticker des jeweiligen Daten-Providers entspricht, ansonsten kann Equilla nicht auf die Datenhistorie zugreifen. Aufgrund der Oder-Bedingung kommt ein Long-Trade auch dann infrage, wenn der Schlusskurs der Datenreihe data2 den als Input deklarierten Schwellenwert „rocTrigger“ übersteigt. Mit der Funktion data2 greift Equilla auf die zweite Datenreihe innerhalb eines Charts zu. In unserem Fall ist dies der ROC des VDAX. Tauscht man also den ROC im Chart gegen einen anderen Indikator aus, so greift das Handelssystem stellvertretend auf den neuen Indikator zu.

LongCondition​​ =​​ '.vdax'​​ crosses below​​ vdaxTrigger​​ 

or​​ close​​ of​​ data2>rocTrigger;

Ist eine der beiden Bedingungen erfüllt, geht das System in Long-Stellung und platziert eine Stopp-Buy-Order am höchsten Hoch (hhv) der letzten drei Bars.

If​​ ( LongCondition )​​ Then buy​​ at​​ hhv(​​ high,3​​ )stop;

Um mittels eines Backtests überprüfen zu können, wie sich derartige VDAX-Panik-Signale auf die Performance des DAX in den Folgetagen ausgewirkt haben, kommt eine einfache Ausstiegsfunktion zum Einsatz. Sobald X Tage (einstellbar über den Inputs „Bars“) verstreichen, erfolgt ein Ausstieg aus der Position.

If BarsSinceEntry​​ =​​ Bars​​ Then​​ 

ExitPosition All Shares Next Bar​​ At​​ market;

ABB. 03: HANDELSSTRATEGIE MIT TEILKOMPONENTEN.

Die Grafik zeigt die Veränderungsrate des VDAX und sowie den DAX samt aller Handelssignale.


FAZIT.

MIT EQUILLA ZUM TRADING-ERFOLG.

Mit Equilla bietet Tradesignal eine flexible und praxinahe Formelsprache, mit der engagierte Trader und Investoren regelbasierte Handelsstrategien ausgiebig testen und anschließend in die Praxis umsetzen können. Die Kompatibilität mit der weit verbreiteten Programmiersprache EasyLanguage™ von TradeStation® ermöglicht den Austausch mit vielen anderen Tradern und Systementwicklern und ist damit als klarer Pluspunkt zu werten. Egal ob es charttechnische Muster, indikatorenbasierte Strategien, Seasonals oder gänzlich andere Ansätze geht – mit etwas Know-how kann jeder Trader seinen eigenen Algorithmus basteln.

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.


(Markenrechtshinweis: EasyLanguage™ ist eine eingetragene Marke der TradeStation Technologies, Inc.)

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.

porta. massa eleifend quis, dictum sit luctus lectus ut commodo odio Donec