Rheinische Friedrich-WilhelmsUniversität Bonn Institut für Informatik III DIPLOMARBEIT Eine regelbasierte Implementierung von Handelsstrategien im TInTo-System So Hee Shin Bonn, März 2009 Erstgutachter: Prof. Dr. Rainer Manthey An alle Interessierte an der technischen Wertpapieranalyse und zukünftige TInTo-Entwickler Dankwort An dieser Stelle möchte ich mich herzlich bei all jenen bedanken, welche mich bei dieser Arbeit unterstützt haben. Besonderer Dank gilt Herrn Prof. Dr. Rainer Manthey und Dr. Andreas Behrend, welche mir den Einstieg in dieses faszinierende Themengebiet ermöglicht haben und mir immer mit Rat zur Seite standen. Ein herzlicher Dank gilt auch meiner ganzen Familie für die interessanten Diskussionen zu diesem Thema sowie die tatkräftige Unterstützung. Darüber hinaus gilt mein Dank Andreas Behrend sowie meinem Mann Steffen Weihrauch für die Durchsicht und Korrekturen dieser Arbeit. Ein großes Dankeschön auch an meinen Sohn Namsoo für die Geduld mit Mama. Inhaltsverzeichnis Einleitung 1 Grundlage 5 2.1 Relationale Datenbanken........................................................................................................ 5 2.1.1 Grundlagen.................................................................................................................5 2.1.2 Normalformen............................................................................................................7 2.1.2 Kommerzielle Systeme............................................................................................... 9 2.2 SQL....................................................................................................................................... 10 2.2.1 Einführung und Überblick....................................................................................... 10 2.2.2 DML - Data Manipulation Language...................................................................... 11 2.2.3 DDL - Data Definition Language............................................................................ 15 2.2.4 Sichten...................................................................................................................... 16 2.3 Microsoft Access ....................................................................................................................17 Wertpapieranalyse 21 3.1 Wertpapierhandel.................................................................................................................. 21 3.2 Analyseansätze....................................................................................................................... 23 3.3 Chartanalyse.......................................................................................................................... 29 3.4 Technische Indikatoren......................................................................................................... 33 3.4.1 Trendfolger............................................................................................................... 33 3.4.2 Oszillatoren.............................................................................................................. 38 3.4.3 Trendintensitätsindikatoren.....................................................................................41 3.4.4 Volumenindikatoren................................................................................................. 43 Handelsstrategien 45 4.1 Generierung von Handelssignalen........................................................................................ 45 4.2 Elementare Handelsstrategien............................................................................................... 47 4.3 Erweiterte Handelsstrategien.................................................................................................49 4.3.1 Kombination technischer Indikatoren..................................................................... 49 4.3.2 SMA + ADX............................................................................................................ 51 4.3.2 SMA + CMF............................................................................................................ 53 4.3.3 SMAC (SMA Crossover).......................................................................................... 55 4.3.4 MACDCP(MACD Crossover Plus).......................................................................... 56 4.4 Kombinierte Strategien mit Investition in Handelspausen....................................................60 TInTo 63 5.1 Systemarchitektur.................................................................................................................. 63 5.2 Spezifikation technischer Indikatoren....................................................................................67 5.3 Diskussion des bestehenden TInTo-Systems ......................................................................... 70 5.4 Korrekturen der Indikatorberechnung.................................................................................. 71 5.4.1 Indikatorformeln...................................................................................................... 71 5.4.2 Berechnungsperioden............................................................................................... 76 5.4.3 Formelvariante......................................................................................................... 83 Implementierung elementarer Handelsstrategien 85 6.1 Berechnung von Handelssignalen......................................................................................... 85 6.1.1 Bestimmung von Handelssignalen........................................................................... 85 6.1.2 Eliminierung irrelevanter Handelssignale................................................................ 87 6.1.3 Bewertung von Handelsstrategien............................................................................ 90 6.2 Sichtbasierte Signalberechnung und Optimierungen........................................................... 91 6.2.1 Naive Implementierung............................................................................................ 94 6.2.2 Verwendung von fortlaufenden Nummern............................................................ 100 6.2.3 Separate Berechnung von Handelssignale............................................................. 105 6.2.4 Gruppieren der Datensätze.................................................................................... 110 6.2.5 Verwendung materialisierter Sichten..................................................................... 121 Implementierung erweiterter Handelsstrategien 125 7.1 Erweiterte Teilberechnungen.............................................................................................. 125 7.2 Erweiterte Handelsstrategien............................................................................................... 127 7.2.1 Gleitende Signallinien............................................................................................ 127 7.2.2 Zusätzliche Strategiebedingungen.......................................................................... 130 7.2.3 Kombination mehrerer Indikatoren....................................................................... 133 7.3 Kombinierte Strategien mit Investition in Handelspausen.................................................. 135 Bewertung von Handelsstrategien 143 8.1 Renditeberechnung.............................................................................................................. 143 8.2 Implementierung................................................................................................................. 145 8.2.1 Aktive-Markt-Strategien......................................................................................... 145 8.2.2 Kombinierter Strategien mit Investition in Handelspausen................................... 149 8.3 Bestehende Fehlermöglichkeit............................................................................................. 157 8.4 Performanzanalyse.............................................................................................................. 160 8.4.1 Berechnungsdauer................................................................................................... 160 8.4.2 Profitabilitätstest von Handelsstrategien.................................................................. 164 Zusammenfassung und Ausblick 171 Anhang 175 1- A: Begriffe.....................................................................................................................175 1-B: TInTo-StrategyBuilder-Anleitung............................................................................ 177 Literaturverzeichnis 189 1 Einleitung Private wie institutionelle Investoren sehen sich kontinuierlich mit der Frage konfrontiert, wann die sie interessierenden Wertpapiere günstige Einstiegskurse bieten oder aber vielleicht profitable Ausstiegskurse erreicht haben. Wann soll man kaufen und wann verkaufen? Und welche Wertpapiere sind überhaupt interessant und haben das Potential für Kursgewinne? Das Ziel dieser Arbeit ist der Entwurf und eine regelbasierte Implementierung von Handelsstrategien für Wertpapiere in das TInTo-System (Technical Indicator Tool) um einige dieser Fragen beantworten zu helfen. Zur Lösung dieser Aufgabenstellung sind im wesentlichen folgende Teilaufgaben erfolgreich zu erfüllen, die Voranalyse technischer Indikatoren, die Entwicklung und Optimierung von profitablen Handelsstrategien, eine regelbasierte Implementierung und Optimierung auf Recheneffizienz sowie die Entwicklung und Implementierung von Bewertungsmodul der Handelsstrategien. Hauptaugenmerk liegt dabei auf der Profitabilität der entwickelten Handelsstrategien und auf der Effizienz der regelbasierten Implementierung. TInTo ist ein an der Universität Bonn entwickeltes, datenbankgestütztes Werkzeug zur technischen Analyse von Wertpapieren realisiert auf der Basis von Microsoft Access und VBA (Visual Basic for Applications). Wertpapiere sind an einer Wertpapierbörse gehandelte Papiere wozu unter anderem zählen Aktien und Fonds. Ist ein Wertpapier an der Börse Frankfurt gehandelt und kann es über sein entsprechendes Symbol (zum Beispiel „DTE“ für die Deutsche Telekom AG, Bonn) identifiziert werden, so kann es in TInTo verwendet werden. Für die Auswertung von historischen Wertpapierdaten und die versuchte Prognose zukünftiger Kursentwicklungen werden im wesentlichen zwei Ansätze unterschieden: die technische Analyse und die fundamentale Analyse. Die im Rahmen dieser Arbeit zur Anwendung kommende Analyse technischer Indikatoren ist neben der Chartanalyse ein wichtiges Teilgebiet der technischen Analyse von Wertpapieren. Die Chartanalyse und die fundamentale Analyse werden im Kontext von TInTo nicht eingesetzt. Die technische Analyse wertet die Kursdaten und den Handelsumsatz (die Anzahl gehandelter Papiere) von Wertpapieren aus und versucht daraufhin, den zukünftigen Kurstrend mit Hilfe von grafisch dargestellten bekannten Kursmustern oder von vergangenen Kurs- und Umsatzbewegungen zu erkennen. Eventuelle Handelsempfehlungen für den Kauf oder Verkauf von Wertpapieren werden dann aus den gegebenenfalls erkannten Trends abgeleitet. Im Gegensatz zur hier verwendeten technischen Analyse befasst sich die fundamentale Analyse neben den Kurs- und Umsatzdaten hauptsächlich 1 1. Einleitung mit fundamentalen Informationen über das jeweilige Wertpapier und dessen wirtschaftliches Umfeld und versucht daraus, den „fairen Wert“ des Wertpapiers zu bestimmen sowie den zukünftigen Verlauf des Wertpapierkurses zu prognostizieren. Durch den Vergleich dieses fairen Wertes mit dem tatsächlichen gegenwärtigen Kurs wird eine Handelsentscheidung getroffen. Eine grundlegende Prämisse der technischen Analyse liegt darin, dass alle Faktoren welche die Kurse von Wertpapieren beeinflussen könnten (unter anderem betriebswirtschaftliche, volkswirtschaftliche, politische oder marktphysiologische), sich in diesen Kursen schon widerspiegeln, also durch die Reaktion der Marktteilnehmer auf fundamentale Faktoren, diese in die Kurse bereits „eingepreist“ sind. Fürsprecher der technischen Analyse argumentieren daher, dass sich damit Wertpapiere mit geringem Zeit- und Ressourcenaufwand analysieren lassen als mit einer ausführlichen fundamentalen Analyse, was als ein wesentlicher Vorteil der technischen Analyse angesehen wird. Diese Logik hat naturgemäß nur so lange Bestand, wie noch eine überwiegende Mehrheit von Marktteilnehmern eine fundamentale Analyse der Wertpapiere durchführt und in der Tat die damit gewonnenen Erkenntnisse dann in die Kurse „einpreisen“. Im Rahmen dieser Arbeit wird davon ausgegangen, dass diese Annahme gilt. Dieser Arbeit gehen bereits vier Diplomarbeiten zur Entwicklung und Weiterentwicklung von TInTo voraus. Die Diplomarbeit von Alexander Geppert [Gep05] beinhaltet den theoretischen Teil zur Modellierung der technischen Analyse von Wertpapieren. Darauf aufbauend entwickelte Christian Hübel [Hüb07] eine erste Access-Applikation “TInTo” zur graphischen Darstellung sowohl der Wertpapierkurse als auch der berechneten Indikatoren. Eine webbasierte Version von TInTo wurde anschliessend von Nargis Hahn [Han07] implementiert. Gereon Schüller’s Diplomarbeit schließlich erweiterte TInTo um die Möglichkeit der Intraday-Analyse [Sch07]. Ein allgemeine Besonderheit von TInTo liegt dabei darin, dass die Berechnungsvorschriften der technischen Indikatoren sowie deren Aktualisierung mittels der Datenbanksprache SQL implementiert sind. TInTo verwendet zur Datenverwaltung das DBMS (Database Management System) Microsoft Access. Die von MS Access hierfür nicht angebotenen zusätzlich benötigten Funktionen wurden mittels Visual Basic for Applications implementiert. Für die graphische Darstellung der Kursdaten sowie der technischen Indikatoren wurde die von der Firma Advanced Software Engineering angebotene Anwendung ChartDirector verwendet. Die für die Analyse und Darstellung benötigten Wertpapierdaten werden über eine Internetschnittstelle vom Finanzportal Yahoo! Finance geladen. Die oben genannten Diplomarbeiten haben bereits technische Indikatoren in das TInTo-System integriert sowie die graphische Darstellung der Kursverläufe und Indikatorwerte realisiert. Auch wurde die Frage nach der Implementierbarkeit von Handelsstrategien und deren Bewertung mittels SQL positiv theoretisch beantwortet. In den weiteren Schritten hin zu einer praktischen Implementierung sind in dieser Arbeit geeignete Indikatoren auszuwählen sowie deren typische Formeln anzupassen und zu implementieren. Dies ist notwendig und sinnvoll, da in der einschlägigen Literatur, insofern überhaupt dokumentiert, verschiedene, oftmals lückenhafte oder in bestimmten Fällen sogar gegensätzliche Darstellungen existieren. In diesen Fällen werden die in TInTo vorhandenen Indikatoren auf die allgemein gebräuchlichen Formeln angepasst. In einem nächsten Schritt werden die für eine Erfolg versprechende Handelsstrategie geeigneten Einzelindikatoren sowie Indikatorenkombinationen ausgewählt und bewertet. Dazu müssen zunächst die allgemeinen Vor- und Nachteile der betrachteten Indikatorenklassen, zum Beispiel Trendfolger oder Oszillatoren, sowie die Eigenschaften einzelner Indikatoren im Speziellen analysiert werden, auch vor dem Hintergrund ihrer spezifischen Eignung unter bestimmten Marktsituationen. Für die Formulierung allgemein gültiger Handelsstrategien sind diese Indikatoren in geeigneten Kombinationen unter Verwendung historischer Wertpapiere zu testen 2 1. Einleitung und ihre Kombinationen zu optimieren. Als spezielle Anforderung sind auch solche Perioden zu berücksichtigen, in welchen eine Investition in Wertpapiere unter Umständen nicht lohnt, so genannte Handelspausen. Hierfür sind geeignete Instrumente auszuwählen und zu testen, um den zuvor erzielten Kapitalgewinn durch Kursverluste der Wertpapiere nicht wieder zu reduzieren. Im Ergebnis sind praktisch anwendbare und getestete Handelsstrategien zu formulieren und in das TInTo-System zu integrieren. Im Schritt der praktischen Implementierung steht die Aufgabe, die theoretisch formulierten und für ihr optimiertes Renditeergebnis selektierten Handelsstrategien regelbasiert in der Datenbanksprache SQL umzusetzen. Dabei ist besonderes Augenmerk der Bearbeitungszeit zu widmen, da je nach Marktsituation innerhalb kürzester Zeit auf entsprechende Handelssignale reagiert werden muss. Auch steht die Anforderung, dass die jeweils generierten Handelssignale zu jeder Zeit mit „Kauf“, „Verkauf“, oder „Kein Handel“ eindeutig sein müssen, ohne die Notwendigkeit subjektiver Interpretation. Zur Bewertung des Handelsergebnisses ist ein Modul zu erstellen und zu integrieren, welches auf Basis historischer Kursdaten hypothetische Handelssignale, alle resultierenden Handelsaktionen und deren Renditen, sowie die kumulative Rendite über den gesamten Analysezeitraum darstellen kann. Dem Anwender sollen dazu möglichst viele Freiheitsgrade hinsichtlich Strategieauswahl, zu investierendem Wertpapier, der Aktionen in Handelspausen sowie zur Strategie- und Indikatorfeinabstimmung mittels wählbarer Parameter ermöglicht werden. Die Handelsergebnisse sind tabellarisch für mehrere Strategieoptionen vergleichbar darzustellen. Im Ergebnis dieser Arbeit sind sowohl profitable Handelsstrategien entwickelt als auch effiziente regelbasierte Implementierungen in TInTo realisiert worden. Dem Anwender stehen nunmehr vielfältige Analysemöglichkeiten zur Verfügung um anhand historischer Kurse verschiedene Handelsstrategien zu testen und vorhandene fortlaufend zu verbessern. Dabei können sowohl profitable Indikatorenkombinationen ermittelt werden als auch ein Finetuning der Strategien mittels frei einstellbarer Indikator- und Strategieparameter durchgeführt werden. Die resultierenden Handelsergebnisse lassen sich im Anschluss für verschiedene Strategieoptionen tabellarisch darstellen und vergleichen. Die vorliegende Arbeit ist folgendermaßen gegliedert: In Kapitel 2 werden die Grundlagen der in dieser Arbeit Verwendung findenden relationalen Datenbanken, die Datenbanksprache SQL und das Datenbankmangementsystem (DBMS) „Microsoft Access“ vorgestellt. Dabei werden auch kurz kritische Punkte zu relationalen Datenbanken, mehrstufigen Schachtelungen von Sichtdefinitionen und der Vergleich von Access mit anderen DBMS gesprochen. Anschließend bietet das Kapitel 3 eine Einführung in die Wertpapieranalyse mit dem Schwerpunkt auf der im TInTo-Projekt eingesetzten Analysemethode auf Basis technischer Indikatoren und von Handelssignalen. Neben den technischen Indikatoren werden auch auf andere Analysemethoden wie beispielsweise die fundamentale Analyse und die Chartanalyse eingegangen. Darüber hinaus werden Umsetzungsmöglichkeiten für weitere Analysemethoden in TInTo vorgeschlagen sowie ein kritischer Blick auf mögliche volkswirtschaftliche Folgen einer Handelskultur basierend ausschließlich auf technischen Indikatoren geboten. Entwürfe von Handelsstrategien basierend auf technischen Indikatoren werden in Kapitel 4 vorgestellt. Mit dem Ziel, „erfolgsversprechende“, profitable Handelsstrategien anzubieten, werden hier weitere Handelsstrategien entworfen und beispielhaft erläutert, welche neben einem technischen Indikator weitere Handelskriterien verwenden. Das Kapitel 5 bietet einen Überblick über das TInTo-System, worauf die Implementierung der Handelsstrategien aufbaut. Im Detail werden die an der Berechnungen der technischen Indikatoren vorgenommenen Verbesserungen beispielhaft dargestellt. Da eine kompromisslos korrekte und gegenüber öffentlich verfügbaren Systemen vergleichbare Berechnung der technischen Indikatoren eine grundlegende 3 1. Einleitung Voraussetzung für ein System zur technischen Wertpapieranalyse ist, wurde der Anpassung der Indikatorberechnung eine besondere Aufmerksamkeit gewidmet. In Kapitel 6 wird dargestellt, wie elementare Handelsstrategien ausgehend von den in Kapitel 4 entworfenen Handelslogiken regelbasiert implementiert werden können und wie die hypothetischen Handelsaktionen bezogen auf historischen Daten für eine Strategiebewertung ermittelt werden können. Dazu werden beispielhaft fünf vorangegangene Optimierungsschritte erläutert, welche die Recheneffizienz erheblich verbessern konnten. In Erweiterung der elementaren Strategien beschreibt Kapitel 7 beispielhaft, wie erweiterte Handelsstrategien sowie kombinierte Handelsstrategien mit Investition in Handelspausen regelbasiert implementiert werden können und wie die hypothetische Handelsaktionen für Strategiebewertung ermittelt werden. In Kapitel 8 werden die entworfenen Methoden für die Strategiebewertung sowie deren Implementierung erläutert. Im Detail werden unter Verwendung des erstellten Moduls TInTo-StrategyBuilder Performanzanalysen sowohl zur Profitabilität der verschiedenen Handelsstrategien als auch zur Recheneffizienz aller Berechnungen dargestellt. Eine Zusammenfassung und ein Ausblick auf weitere Entwicklungsmöglichkeiten folgen in Kapitel 9. Eine Übersicht wesentlicher Begriffe sowie eine Anleitung zu dem in dieser Arbeit implementierten Modul „TInTo-StrategyBuilder“ sind in den Anhängen 1-A sowie 1-B aufgeführt. Es wird empfohlen, sich im Vorfeld mit den Begriffserläuterungen sowie mit der Anleitung vertraut zu machen. In der täglichen Praxis haben sich die englischen Bezeichnungen und Fachbegriffe für die technische Analyse durchgesetzt, weshalb diese auch so in dieser Arbeit verwendet werden. Alle im Rahmen dieser Arbeit verwendeten Daten zu Wertpapieren sind, sofern nicht anders gekennzeichnet, Tagesschlusskurse bzw. Tageswerte (engl. End-of-Day Data). 4 2 Grundlage Dieses Kapitel bietet eine Einführung zu relationalen Datenbanken, eine der Grundlagen der Anwendung TInTo. In diesem Zusammenhang wird die für die Implementierung und Bewertung von Handelsstrategien extensiv verwendete Datenbanksprache SQL in Ihren wesentlichen Eigenschaften erläutert. Anschließend folgt eine Einführung in die grundlegenden Funktionalitäten vom Microsoft Access, dem für TInTo verwendeten Datenbankmanagementsystem (DBMS). Ein Vergleich von MS Access mit anderen marktüblichen DBMS schliesst das Kapitel ab. Die präsentierten Sachverhalte beruhen im wesentlichen auf Informationen aus [Man07] und [Wik08], mit weiteren Details aus [HM08r], [ZNet08], [CW08] und [ITW08]. 2.1 Relationale Datenbanken Der folgende Abschnitt bietet eine Einführung in die charakteristischen Eigenschaften relationaler Datenbanken und präsentiert einen Überblick über den gegenwärtigen Markt für Datenbanksysteme. Die Grundlagen relationaler Datenbanken wurden von Edgar F. Codd entwickelt und im Jahr 1970 in seiner Forschungsarbeit mit dem Titel „A Relational Model of Data for Large Shared Data Banks“ am IBM Almaden Research Center in San Jose, CA veröffentlicht [Cod70]. 2.1.1 Grundlagen Eine relationale Datenbank kann man sich als eine Sammlung von Tabellen mit darin befindlichen Daten vorstellen. Jede dieser Tabellen besteht aus einer Menge von Spalten und Zeilen. Die Tabelle werden in der Theorie „Relation“ genannt. Leider werden in verschiedenen Zusammenhängen unterschiedliche Bezeichnungen für Grundbegriffe verwendet. Die Folgende Abbildung stellt drei Begriffssysteme vor, welche in der Theorie, allgemeinen Praxis und beispielhaft für ein Produkt in MS-Access verwendet werden, jedoch alle sinngleich verwendet werden können. 5 2. Grundlage So genannte Schema legen dabei die Struktur und den Namen einer Relation fest, wobei Zustand die in einer Relation enthaltenen Tupel bezeichnet. Abbildung 2.1 illustriert drei Begriffssysteme am Beispiel der Relation „Wertpapier“ mit den in der Theorie benutzten Begriffen: Theorie Praxis Access Relation Tabelle Datenblatt Tupel Zeile Datensatz Attribut Spalte Feldbezeichner Relation Attribut Wertpapier WP_ID Name ISIN Info 1 MSFT US5949181045 Microsoft Corp. 2 ORCL US68389X1054 Oracle Corp. 3 IBM US4592001014 IBM Corp. 4 TDC US88076W1036 Teradata Corp. Schema Tupel Zustand Abbildung 2.1 Drei Begriffssysteme [Man07] und Relation „Wertpapier“ Anhand von sogenannten Schlüsseln wird ein Tupel in einer Relation identifiziert. Dabei besteht ein Schlüssel aus einer Menge von Attributen, die so gewählt sind, dass keine zwei Tupel dieselben Werte enthalten. Wenn eine Relation mehrere Schüsseln besitzt, kann einer als Primärschlüssel festgelegt werden, wobei dieser keinen Nullwert enthalten darf. Somit lässt sich jedes Tupel durch Primärschlüssel eindeutig identifizieren. Darüber hinaus kann eine Relation auch einen Schlüssel aus einer anderen Relation enthalten, den sogenannten Fremdschlüssel. Weiterhin können Beziehung zwischen Relationen als Beziehungsrelation ausgedrückt werden. In unserem Beispiel der Investmentdatenbank gibt es die Relation „Wertpapier“ mit Primärschlüssel „WP_ID“ (Abbildung 2.1) und die Relation „Kunden“ mit Primärschlüssel „Kunden_ID“ (Tabelle 2.1 unten). Um die Bestellungsinformation zur Verfügung zu stellen, wird eine Beziehungsrelation „Bestellung“ (Tabelle 2.1 unten) erstellt. Die Attributmenge aus Kunden_ID und WP_ID dient in dieser Beziehungsrelation als Schüssel. In der aus der Beziehungsrelation hervorgehenden Relation „Bestellung“ kann man erkennen, dass Herr Lukas Fischer mit Kunden_ID 10 Wertpapiere von Oracle mit der WP_ID 2 und von Teradata mit der WP_ID 4 bestellt hat. Die Kunden_ID verbindet hier jede Tupel in der Relation „Kunden“ mit einer Tupel in der Tabelle „Bestellung“. In diesem Zusammenhang spricht man dann von „Kunden_ID“ als Fremdschlüssel. Analog mit WP_ID. Kunden Kunden_ID Name Vorname 9 Schmitt Paul 10 Fischer Lukas 11 Müller Lena 6 2. Grundlage Bestellung Kunden_ID WP_ID 9 1 10 2 10 4 11 3 Tabelle 2.1 Relation Kunden und Bestellung Zur Modellierung einer Datenbank wird das Entity-Relationship-Modell (ER-Modell) verwendet. Dabei beschreiben Objekte (Entities) und deren Beziehungen (engl. Relationsships) einen Abschnitt der realen Welt. Das ER-Modell dient sowohl in der konzeptionellen Phase der Datenbankentwicklung als ein Kommunikationsmittel zwischen Anwendern und Entwicklern als auch in der Implementierungsphase als Grundlage für das Design der Datenbank. Das ERModell besteht aus einer Grafik sowie einer Beschreibung der Datenstrukturen und des Dateninhalts. Abbildung 2.2 stellt ein ER-Diagramm mit den Objekten „Kunden“ und „Wertpapier“ und der Beziehung „Bestellung“ dar: Kunden Bestellt Wertpapier Abbildung 2.2 ER-Diagramm 2.1.2 Normalformen Um die Wartung einer Datenbank zu vereinfachen und die Konsistenz der Daten zu gewährleisten, sollen Redundanzen von Daten verringert und Anomalien verhindert werden. Die sogenannte Normalisierung durch Relationenzerlegung soll dieses Ziel erreichen. Dabei erfolgt die Normalisierung in mehreren Schritten. Diese Zerlegungsschritte sollten so erfolgen, dass keine Daten dabei verloren gehen und die Abhängigkeit von Attributen geschützt wird. Im Folgenden werden die erste 3 Schritte anhand einer Beispielsrelation „Investitionskosten“ vorgestellt. • Unnormalisiert Primärschlüssel von Relation „Investitionskosten“ ist der zusammengesetzte Schlüssel aus „Rechnung_ID“ und „WP_ID“. Investitionskosten Rechnung_ID Datum Adresse WP_ID Anzahl Einzelpreis 123 1309 Lena Müller, Baumstr.12, 53134, Bonn 45 20 50,00 Tabelle 2.2 Unnormalisiert • Erste Normalform Die Erste Normalform liegt vor, wenn jeder Attrubutwert atomar, also unzerlegbar ist. In unserem Beispiel ist der Attributwert „Adresse“ nicht atomar, da er in mehrere Attribute aufgeteilt werden kann. 7 2. Grundlage Im ersten Schritt wird demnach der Attributwert „Adresse“ folgendermaßen aufgeteilt: Investitionskosten Rechnung_ID Datum Name Vorname 123 1309 Müller Straße Lena PLZ Ort WP_ID Anzahl Einzelpreis 45 20 50,00 Baumstr.12 53134 Bonn Tabelle 2.3 Erste Normalform • Zweite Normalform Eine Relation ist in der Zweiten Normalform, wenn die Erste Normalform vorliegt und jedes Nicht-Schlüsselattribut von jedem Schlüsselkandidaten vollständig funktional abhängig ist. Funktional abhängig bedeutet, dass jeder Attributwerte von einem Nicht-Schlüsselattribut immer mit demselben, eindeutig bestimmten Schüsselattributwert kombiniert vorkommt. Weiterhin bedeutet vollständig funktional abhängig, dass Nicht-Schlüsselattribut nicht nur von einem Teil der zusammengesetzten Schlüssel funktional abhängig ist, sondern vom ganzen Schlüssel. Im Beispielsrelation „Investitionskosten“ in der Ersten Normalform sind die Attribute „Datum“, „Name“, „Vorname“, „Straße“, „PLZ“ und „Ort“ nur funktional abhängig vom Attribut „Rechnung_ID“ und unabhängig vom Attribut „WP_ID“. Das Attribut „Anzahl“ ist vollständig funktional abhängig vom zusammengesetzten Primärschlüssel. Jedoch ist das Attribut „Einzelpreis“ funktional abhängig nur von der „WP_ID“. Daher wird die Relation „Investitionskosten“ in weiteren Relationen untergebracht: Investition Rechnung_ID Datum Name Vorname Straße PLZ Ort 123 1309 Müller Lena Baumstr.12 53134 Bonn Position Rechnung_ID WP_ID Anzahl 123 45 20 Wertpapier WP_ID Einzelpreis 45 50,00 Tabelle 2.4 Zweite Normalform • Dritte Normalform Eine Relation ist wiederum in der Dritten Normalform, wenn die Zweite Normalform vorliegt und es keine transitive Abhängigkeiten vorliegen. Keine Transitive Abhängig hier bedeutet, dass jedes Nicht-Schlüsselattribut direkt funktional abhängig von jedem Schlüsselkandidaten ist. In der Relation „Investition“ in der Zweiten Normalform sind „Vorname“, „Straße“, „PLZ“ abhängig von „Name“, aber indirekt abhängig vom „Rechnung_ID“. Weiterhin wird eine Kunden_ID in der Dritten Normalform dazugefügt, da „Name“ zur Identifikation von Kunden nicht eindeutig ist. Das Attribut „Ort“ ist direkt abhängig vom „PLZ“. Somit wird die Relation „Investition“ in der Zweiter Normalform folgendermaßen aufgeteilt: Investition Rechnungs_ID Datum Kunden_ID 123 1309 82 8 2. Grundlage Kunden Kunden_ID Name Vorname Straße PLZ 82 Müller Lena Baumstr. 12 53134 PLZ PLZ Ort 53134 Bonn Tabelle 2.5 Dritte Normalform Über die Erste bis Dritte Normalform hinaus gibt noch weitere Normalisierungsschritte, z.B.: • Boyce-Codd-Normalform, die eine Erweiterung der Dritte Normalform ist, • Vierte Normalform, basierend auf mehrwertigen Abhängigkeiten und • Fünfte Normalform, welche auf Join Dependencies beruht. In der Praxis allerdings wird meist die Einhaltung der vorgestellten Dritten Normalform als ausreichend angesehen und angestrebt. 2.1.2 Kommerzielle Systeme Relationale Datenbanken haben sich, trotz einiger Kritikpunkte, als etablierter Standard für Datenbanken durchgesetzt. Als ein wesentlicher Grund für den Erfolg rationaler Datenbanken gilt die Abbildung in Tabellenform. Im Vergleich zu den früheren Datenbankmodellen wie „hierarchischen Modell“ oder „Netzwerkmodell“ sind Tabellen sehr anschaulich und bieten eine flexiblere Struktur. Im Ergebnis können relationale Datenbanken lange Zeit den sich ändernden Bedürfnissen angepasst werden, ohne grundlegende Systemänderungen vornehmen zu müssen. Als einen weiteren wesentlichen Vorteil gegenüber früheren Modellen gibt es für relationale Datenbanken eine einheitliche Datenbanksprache „SQL“, um relationale Datenbanken zu verwalten. Kritikpunkte zu relationalen Datenbanken beziehen sich im Wesentlichen auf die Strukturabhängigkeit der Abfragen. So müssen komplexe Anwendungsobjekte bei einer Abfrage durch eine Verwaltungssoftware mittels etlicher sogenannter Joins (Verknüpfungen von Tabellen) aus den einzelnen Tabellen hergestellt werden. Solche Abfragen können schnell unübersichtlich werden, da bei jeder strukturellen Änderung des Anwendungsobjekts alle relevante Tabellen auf mögliche Strukturänderungen überprüft werden müssen. Die Verwendung von Joins macht den Objektzugriff sowie die Entwicklung der Datenbanksystem aufwendiger als z.B. bei einer sogenannten Objektdatenbank. In manchen Fällen relationaler Datenbanken werden künstliche Schlüsselattribute eingesetzt, um Tupel eindeutig identifizieren zu können. Diese künstlichen Attribute stellen allerdings keine Informationen über die Anwendungsobjekte dar sondern dienen nur als Verwaltungsinformation. Als weiterer Nachteil relationaler Datenbanken sollte erwähnt werden, dass Objekteigenschaften und –verhalten schwer beschrieben werden können. In der modernen Software-Entwicklung sind objektorientierte Programmiersprache längst Standard. Diesem Beispiel folgend, wurden Objektdatenbanken, welche Objekte abbilden, zunehmend angeboten. Die Hersteller relationaler Datenbankmanagementsysteme (DBMS) versuchen zunehmend ebenfalls, ihre Produkte um objektorientierte Fähigkeiten zu erweitern. 9 2. Grundlage Ist dann zu erwarten, dass Objektdatenbanken der nächste Standard werden? Gegenwärtig leiden Objektdatenbanken noch unter einem gewissen Leistungsnachteil gegenüber relationalen Datenbanken bei der Verarbeitung großer Datenmengen. Dieser Leistungsnachteil resultiert aus den Zugriffsprinzipien, wobei auf Objekte über mehrere Pfadarten durch beispielsweise Vererbung und Assoziation zugegriffen werden muss. Als weiterer wesentlicher Nachteil von Objektdatenbanken ist der noch fehlende Standard zur Datenabfrage und Verwaltung zu nennen. Ein Standard wie SQL im Bereich der relationalen Datenbanken existiert derzeit für Objektdatenbanken noch nicht. 2.2 SQL Im Folgenden wird die Datenbanksprache SQL vorgestellt. SQL wird in dieser Arbeit für die Berechnung der technischen Indikatoren, die Implementierung der Handelsstrategien sowie die Bewertung der Handelsstrategien (Profitabilitaetsanalyse) eingesetzt. Im Rahmen der folgenden Beschreibung wird auch dargestellt, dass die in dieser Arbeit benötigte Funktion rekursiver Berechnungen von dem verwendeten Dialekt SQL-92 nicht unterstützt wird. Abschliessend wird in diesem Abschnitt die Expandierung von Sichten beschrieben. 2.2.1 Einführung und Überblick Die relationale Datenbanksprache SQL ermöglicht Daten in einer Verwaltungssoftware, genannt Datenbankmanagementsystem (DBMS), anzulegen, zu ändern und abzufragen. SQL dient also als ein Kommunikationsmittel zwischen dem Benutzer und dem DBMS und ist heute die am weitesten verbreitete Datenbanksprache und wird von fast allen gängigen relationalen DBMS unterstützt. Als Sprache für die relationalen Datenbank wurde der Vorläufer von SQL, SEQUEL in den 1970er Jahre für das Projekt „System R“ durch IBM entwickelt. Ende der 70er Jahre wurde SQL zum erstmalig mit Oracle V2 durch Relational Software Inc. auf den Markt gebracht. Im Jahr 1986 wurde SQL durch das ANSI (American National Standard Institute) und ein Jahr später durch die ISO (International Standards Organization) standardisiert. Sie wurde seitdem mehrfach revidiert und liegt zuletzt in SQL:2008 als Standard vor. Trotz aller Standardisierung verwenden fast alle kommerziellen Datenbankprodukte ihren eigenen „SQL-Dialekt“ und bieten herstellerspezifische Erweiterungen, die unterschiedliche Sprachelemente für die gleichen Funktion zur Folge haben. Außerdem werden nicht alle SQL Standards in kommerziellen Systemen in vollem Umfang umgesetzt. Grundlage relationaler Datenbanken ist die „relationale Algebra“. Alle Anfragen, die mittels SQL gestellt werden, werden vom DBMS auf relationale algebraische Operationen übersetzt. Die wesentlichen Operationen sind die folgenden: • • • • • • Projektion (blendet bestimmte Spalten aus) Selektion (blendet bestimmte Zeilen aus) Kreuzprodukt Umbenennung Vereinigung Differenz 10 2. Grundlage Alle weiteren Operationen können aus den oben genannten Operationen abgeleitet werden. Zum Beispiel lässt sich die häufig vorkommende Operation „Join“ durch eine Kombination von Kreuzprodukt, Selektion und Projektion darstellen. Die relationale Algebra bietet jedoch keine Möglichkeit, rekursive Anfragen (Transitive Hülle) zu berechnen. Die bei der Berechnung von technischen Indikatoren vorkommende Rekursion ist beispielsweise notwendig für die Berechnung vom gleitenden Durchschnitt des Schlusskurses, welcher wiederum vom gleitenden Durchschnitt des vorigen Handelstages abhängt. Da das dieser Arbeit zugrunde liegende DBMS Microsoft Access 2003 mit SQL-92 keine Unterstützung für die Berechnung von Rekursionen bietet, musste die Berechnung der Rekursion umständlich indirekt realisiert werden. Aber es ist festgestellt worden, dass die verwendete Methode für die rekursive Berechnung nicht stabil laufen könnte. Weitere Details hierzu werden in Kapital 8 dargestellt. Mit dem SQL-99 Standard wurde eine erweiterte relationale Algebra eingefügt, welche erstmals eine rekursive Berechnung, aber noch mit starken Einschränkungen, erlaubt. SQL-Befehle lassen sich in verschiedene Sprachbereichen unterteilen. • DML - Data Manupulation Language Die DML enthält Befehle, die zum Abfragen, Ändern, Einfügen und Löschen von Daten zuständig sind. Befehle sind z.B. SELECT, INSERT, UPDATE und DELETE. • DDL – Data Definiton Language Die DDL dient dazu, Datenbankschemata zu definieren und manipulieren. Die reservierten Wörter dafür sind z.B. CREATE, ALTER und DROP. • DCL – Data Control Language Das DCL verwaltet die Zugriffsrechte auf Datenobjekte. Befehle sind z.B. GRANT und REVOKE. In den nächsten Abschnitten werden jene Befehle der DDL und DML vorgestellt, welche in dieser Arbeit zur Implementierung und Bewertung von Handelsstrategien verwendet worden sind. 2.2.2 DML - Data Manipulation Language Die DML ändert Datenbankzustand durch den Befehl zum Ändern, Einfügen und Löschen. Weiterhin bietet Befehle, Anfragen zu formulieren. Eine grundlegende Struktur aller SQL-Anfragen ist der SELECT-FROM-WHERE-Block (SFW Block): • SELECT-Anweisung bestimmt, welche Spalte in der Antworttabelle geliefert werden soll. • FROM-Anweisung bestimmt die zugrundeliegenden Basistabellen. • WHERE-Anweisung formuliert die Bedingungen, welche die Ergebnismenge erfüllen muss. Die folgende Abfrage liefert beispielsweise alle Öffnungs- und Schlusskurse sowie das jeweilige Datum, in welchen das Verkaufshandelssignal mit dem Schlusskurs über 50 vorkommt. 11 2. Grundlage SELECT K.Date, K.Open, K.Close FROM Kurs AS K, Signal AS S WHERE K.Date=S.Date AND K.Close>50 AND S.Signal=”Sell”; Solche SFW Blöcke werden ausgewertet, indem Kreuzprodukte aller gegebenen Tabellen in FROM-Teil gebildet werden. Anschließend werden die relevanten Zeilen selektiert, welche die im WHERE-Teil angegebenen Kriterien erfüllen. Schließlich werden nur die Spalten als Ergebnis geliefert, die im SELECT-Teil angegeben wurden. • SELECT-Teil Im SELECT-Teil sind die auszulieferenden Spaltennamen aufgeführt oder wie im obigen Beispiel die Spaltennamen mit Tabellennamen in der syntaktischen Form TABELLENNAME.SPALTENNAME, wenn die Zugehörigkeit unklar ist. Das Schlüsselwort DISTINCT wird zur Duplikateliminierung benutzt. Weiterhin dürfen Attribute mit arithmetischen Operationen weiter bearbeitet sowie vordefinierte Funktionen wie z.B. Year(), UPPER(), ABS() benutzt werden. Das Sonderzeichen Stern ( * ) gibt alle Spalten zurück. • FROM-Teil Im FROM-Teil können eine oder mehrere Tabellen als Input angegeben werden und es dürfen Tabellen wie im Beispiel mit AS-Klausel umbenannt werden. Hier können besonders Kreuzprodukte durch JOIN-Operatoren mit Bedingungsklausel ON gebildet werden. Das obige Beispiel kann man auch mit JOIN Operatoren wie folgt umschreiben. Welche Variante von Beiden bevorzugt wird, ist je nach DBMS unterschiedlich. Gemäß ANSI SQL Standards ist die unten gezeigte Variante unter Verwendung von JOIN empfohlen. SELECT K.Date, K.Open, K.Close FROM Kurs AS K INNER JOIN Signal AS S ON K.Date=S.Date WHERE K.Close>50 AND S.Signal=”Sell”; Durch die Verwendung von INNER JOIN im FROM-Teil wie im Beispiel werden nur die Zeilen von Kreuzprodukt ausgewählt, die die Bedingung nach ON erfüllen. Dabei lässt man die doppelt entstehenden gemeinsamen Werten durch SELECT-Teil nur noch einmal als Ergebnis auftreten. Im obigen Beispiel werden alle Zeilen aus dem Kreuzprodukt von der Tabelle „Kurs“ und Tabelle „Signal“ im FROM-Teil selektiert, wo die Werte in der Spalte „Date“ gleich sind. Als Ergebnis werden die gemeinsamen Werte „Date“ nur einmal projiziert. LEFT OUTER JOIN arbeitet wie INNER JOIN aber zusätzlich werden alle Zeilen aus der ersten (also linken) Tabelle in FROM-Teil als Ergebnis verwendet und dabei werden fehlende „Join“-Partner mit Nullwerten gefüllt. Im weiteren Beispiel unten werden die Zeilen mit derselben Wertpapier ID aus der Produktbildung der beiden Tabellen „Wertpapier“ und „Bestellung“ selektiert. Allerdings wird durch die Verwendung von LEFT OUTER JOIN auch ein Wertpapier mit der ID 45, welche keine Join Bedingung erüllt, in der Ergebnistabelle ausgewiesen. Die Anzahl von noch nicht bestellten Wertpapieren ist somit mit dem Nullwert gefüllt. SELECT W.WP_ID, B.Anzahl FROM Wertpapier AS W LEFT OUTER JOIN Bestellung AS B ON S.WP_ID=B.WP_ID; 12 2. Grundlage W.WP_ID B.Anzahl 2 100 23 40 28 10 45 NULL Tabelle 2.6 Left Outer Join Ergebnis Analog zu LEFT OUTER JOIN übernimmt RIGHT OUTER JOIN die Zeile von der rechten (also zweiten) Tabelle im FROM-Teil, welcher keinen Join-Partner besitzt. FULL OUTER JOIN übernimmt die Zeilen von beiden Tabellen, welche keinen Join-Parter besitzen. • WHERE-Teil Im WHERE-Teil kommen folgende Operatoren zum Einsatz, um relevante Zeilen als Ergebnis auszuwählen. • • • • • = , <>, <, >, =<, >= : Vergleichsoperatoren AND, OR, NOT : Boolesche Operatoren EXISTS : Existenzoperator testet, ob die Antworttabelle einer Unteranfragen leer ist. LIKE : „pattern matching“-Operator IN : Inklusionsoperator testet, ob die Spalte in der Kriterium in der Antworttabelle einer Unteranfragen vorkommt. Folgende beiden Beispiele liefern dasselbe Ergebnis, die nicht als top performiernde Wertpapiere gewählten Wertpapiere. Im Beispiel kann hier der Boolesche Operator „NOT“ mit dem Existenzoperator oder Inklusionsoperation kombiniert werden. Wie unten aufgezeigten Beispielen dargestellt, können viele SQL Konstrukte durch anderen SQL Konstrukte ersetzt werden. Nur wenige SQL Konstrukte sind einmalig und lassen sich nicht alternativ abbilden. SELECT * FROM Wertpapier WHERE WP_ID NOT IN ( SELECT WP_ID FROM TopWertpapier ); SELECT * FROM Wertpapier AS W WHERE NOT EXISTS ( SELECT * FROM TopWertpapier AS T WHERE W.WP_ID=T.WP_ID ); Bei einfachen Selektionsabfragen wird jede Zeile separat betrachtet, jedoch bei Aggregationsabfragen werden mehrere Zeile zusammengefasst und gemeinsam betrachtet. Im Ergebnis werden mehrere Zeilen der Tabelle zusammengefasst und die Aggregatfunktion berechnet einen Ergebniswert aus den Spaltenwerten der zusammengesetzten Zeilen. Aggregatfunktionen sind z.B. SUM (Summenbildung), AVG (Arithmetischer Mittelwert), COUNT(Anzahl), MIN (Minimum), MAX (Maximum), ABS (Absolutbetrag), RANGE (Spannweite zwischen niedrigstem und höchstem Wert), STDDEV (Standardabweichung), VARIANCE (Varianz). 13 2. Grundlage Als Beispiel kann man das Durchschnittshandelsvolumen von „Wertpapier“ mit ID 2 wie folgt mit der Aggregatfunktion AVG berechnen: SELECT AVG(Vol) FROM Kurs WHERE WP_ID=2; Es gibt noch die Möglichkeit, die Zeilen zu gruppieren und alle Ergebnisse aus den jeweiligen Gruppen als Antwort zu liefern. Hier werden die Zeilen mit demselben Wert, der im „GROUP BY“ Teil angegeben wird, zu einer Gruppe zusammengefasst. Der HAVING-Teil enthält Bedingungen, welche alle Zeilen in den jeweiligen Gruppen erfüllen müssen. Folgende Abfrage liefert alle Wertpapiere, für welche die Schlusskurse mehr als zehn mal über 50 gestiegen sind. SELECT WP_ID FROM Kurs WHERE Close>50 GROUP BY WP_ID HAVING COUNT(*)>10; In obigem Beispiel werden zuerst alle Zeilen der Tabelle Kurs, in welchen die Schlusskurse über 50 liegen gefiltert, dann werden die Daten durch verschiedene Wertpapiere gruppiert und es wird getestet, ob die Anzahl der Zeilen in der Wertpapiergruppe über 10 liegt. Wenn ein GROUP BY-Teil nicht angegeben ist, wie im Beispiel oben, dann wird die gesamte Tabelle als eine Gruppe betrachtet. Im Beispiel dienen beide, WHERE-Teil und HAVING-Teil als Bedingungskriterium allerdings liegt der Unterschied in der Reihenfolge der Operationen. Die Bedingungen des WHERE-Teils werden vor der Gruppierung geprüft, während aber die Bedingungen des HAVING-Teils nach der Gruppierung getestet werden. Zum Ändern, Einfügen und Löschen von Daten können die Anweisungen wie UPDATE, INSERT INTO, UPDATE verwendet werden. Zum Aktualisieren aller oder bestimmter Zeilenwerten einer Tabelle wird die UPDATE-Anweisung verwendet. Der UPDATE-Teil enthält die Tabellen, in welchen die Daten geändert werden sollen. Der SET-Teil enhält die eigentlichen Änderungsoperationen. Letztlich filtert der WHERE-Teil die relevanten Daten, welche Änderung annehmen müssen. Für unten gezeigtes Beispiel gilt, dass, wenn der Ausgabeaufschlag des Wertpapiers mit ID 2 20% Rabatt geben soll, man die folgende Aktionsabfrage verwenden kann: UPDATE Wertpapier SET Ausgabeaufschlag = Ausgabeaufschlag*80/100 WHERE WP_ID=2; Mit der INSERT INTO-Anweisung können explizit angegebene Werte oder eine Ergebnistabelle durch einer Unteranfrage hinzugefügt werden. Das erstes Beispiel setzt ein Verkaufssignal für heute und im zweiten Beispiel werden alle Wertpapiere ohne Ausgabeaufschlag in die Tabelle „OhneAgasWertpapier“ hinzugefügt: INSERT INTO Handelssignal(Datum, Signal) VALUES( Date(), ‘ Sell ’ ); 14 2. Grundlage INSERT INTO OhneAgasWertpapier SELECT * FROM Wertpapier WHERE Ausgabeaufschlag=0; Die DELETE-Anweisung wird zum Löschen der Zeilen verwendet, welche die Bedingung im WEHRE-Teil erfüllen. Das Beispiel dient zum Löschen des Wertpapiers mit der ID 28: DELETE * FROM Wertpapier WHERE WP_ID=28; 2.2.3 DDL - Data Definition Language Die DDL bieten Befehle an, um Datenbankschemata zu definieren und zu modifizieren. Tabellenstrukturen können durch CREATE-, ALTER-, DROP-Anweisung erzeugt, modifiziert oder gelöscht werden. Mit Hilfe von CREATE TABLE-Anweisung erzeugt das folgende Beispiel die Tabelle „Kurs“: CREATE TABLE Kurs ( N INTEGER PRIMARY KEY, KWP_ID INTEGER NOT NULL, Datum DATE NOT NULL, Open DOUBLE, High DOUBLE, Low DOUBLE, Close DOUBLE ); Solche CREATE TABLE-Anwesungen enthalten vor allem die zu erzeugenden Spaltennamen mit Datentypen. Gegebenenfalls können auch Datengrößen und verschiedene Spaltenbeschränkungen dazu definiert werden, wie z.B. PRIMARY KEY (Primärschlüssel), NOT NULL (Verbot von Nullwerten), UNIQUE (Eindeutigkeitsbedingung), FOREIGN KEY (Fremdschlüssel). Wenn sich solche Beschränkungen auf mehrere Spalten beziehen sollen, kann man CONSTRAINT-Anweisungen verwenden. Darüber hinaus kann man mit Hilfe von ON UPDATE CASCADE/ON DELETE CASCADE-Anweisungen Änderungsweitergabe verlangen, wenn eine Beziehung mit anderen Tabelle durch FOREIGN KEY-Anweisung definiert ist. Alternativ lassen sich Nullwerte durch SET NULL anstatt CASCADE einsetzen. CONSTRAINT KWP_ID FOREIGNKEY (WP_ID) REFERENCES Wertpapier ON UPDATE CASCADE Das obiges Beispiel in der CREATE TABLE-Anweisung bedeutet, dass wenn WP_ID in der Wertpapier Tabelle geändert worden ist, diese Änderung automatisch in KWP_ID der Tabelle „Kurs“ übernommen wird. Die Struktur einer schon vorhandene Tabelle kann mittels der ALTER TABLE-Anweisung modifiziert werden. Die folgende Bespielanweisung fügt weitere Spalten „Par4“ und „Par5“ in die Tabelle „StrategyBuilder“ hinzu. 15 2. Grundlage ALTER TABLE StrategyBuilder ADD COLUMN (Par4 INTEGER, Par5 INTEGER); Schließlich kann eine Tabelle auch entfernt werden: DROP TABLE TopWertpapier; 2.2.4 Sichten Eine Sicht (engl. View) kann als eine virtuelle Tabelle angesehen werden. Im Falle von Sichten werden Tabelleninhalte nicht gespeichert, sondern existieren nur virtuell und nur die Definition der Sicht, nicht aber die Ergebnistabelle, wird gespeichert. Sichten erlauben uns, benötigte Informationen aus einer oder mehreren verknüpften Tabellen zu extrahieren und die resultierende Datenmenge als eine Tabelle zu behandeln. Daher kann eine Sicht wie eine echte Tabelle abgefragt und referenziert werden mit dem Vorteil eines geringeren Speicherplatzbedarfes. Die Ergebnismenge wird bei jeder Abfrage neu berechnet und nicht als eine Tabelle gespeichert. Sichten bieten eine exzellente Möglichkeit zum Zugriff auf komplex ausgewählte Teile von Daten und zu deren Bearbeitung, welche eine einzelne Abfrage nicht liefern kann und welche daher durch Schachtelung von Sichtdefinitionen implementiert werden müssen. Mehrstufige Schachtelungen von mehreren Abfragen, d.h. in einer Sichtdefinition werden als Inputdaten wiederum Sichtdefinitionen verwendet, spielen eine enorm wichtige Rolle bei der Implementierung der technischen Indikatoren sowie bei der Signalberechnung. Weitere Details hierzu werden in den kommenden Kapiteln näher ausgeführt. Nach den Normalisierungsschritten von Datenbankschemata entstehen zahlreiche Tabellen mit komplexen Abhängigkeiten. Das kann zu aufwändigen Sichtdefinitionen führen. Die Schachtelung von solchen Sichtabfragen ermöglicht einerseits, die gewünschten Daten präzise zu filtern. Andererseits wird die gesamte Struktur der Schachtelungen sehr unübersichtlich und die Komplexität der dahinterliegende Abfragen wird oft unterschätzt und verursacht unerwartete z.T. erhebliche Performanzprobleme. Um solche Performanzprobleme bei der Sichtexpandierung in der Signalberechnung in TInTo zu beseitigen, mussten mehrere Optimierungsversuche unternommen werden (siehe Kap. 6.2). Hersteller von Datenbanksoftware, z.B. Oracle, IBM und Microsoft haben in jüngster Zeit Konzepte der materialisierten Sichten in ihren Produkt umgesetzt, um genannte Performanzprobleme zu beseitigen. Materialisierte Sichten sind Sichten, die physikalisch gespeichert werden. Mittels Sichtanweisungen entsteht eine abgeleitete Tabelle und es kann sein, dass diese abgeleiteten Daten weiter geändert werden müssen. Aber Updates auf Sichten lösen weitere Änderungen auf Inputtabellen aus. Änderungen sind möglich, wenn eine Zuordnung zwischen den zu ändernden Daten in der abgeleiteten Tabelle und den Inputdaten aus den physikalischen Tabelle, welche der Sichtdefinition zugrunde liegt, eindeutig ist. Aber oft können Änderungen in einer abgeleitete Tabelle zu Anomalien führen, wenn eine eindeutige Zuordnung nicht möglich ist. Änderungen auf der zugrunde liegenden Basistabelle erfordern indirekt Änderungen auf davon abhängigen abgeleiteten Tabellen. Naiv kann dann die Sicht noch mal wieder hergeleitet werden. Bei großen Datenmengen allerdings kann das ineffizient und sehr teuer sein. Innerhalb des TInTo-Projektes wurde eine intelligente Methode, die sogenannte „Inkrementielle Änderungspropagierung“ in der Diplomarbeit von Gereon Schüller eingesetzt [Sch07]. Seine 16 2. Grundlage Arbeit zeigt, dass durch inkrementielle Anpassung der induzierten Änderung der abgeleiteten Tabellen statt Neuherleitung der Sicht große Effizienz gewonnen werden kann. 2.3 Microsoft Access Das TInTo-Projekt verwendet bis jetzt das relationale Datenbankmanagementsystem (DBMS) Microsoft Access 2003, das in dieser Version den SQL-92 Standard unterstützt. Als wesentliche Aufgaben des DBMS sind Datenbankschemaverwaltung, Abfrageverwaltung, Transaktionsverwaltung und Speicherverwaltung zu nennen. MS Access wurde unter dem Projektnamen „Omnibase“ durch Microsoft entwickelt und in den 1990er Jahren in der ersten Version auf dem Markt gebracht. Aktuell wird die Version Microsoft Access 2007 angeboten und als ein Teil des MS Office-Paktetes (Word, Excel, PowerPoint, Outlook,...) vertrieben. MS Access stellt visuelle Programmierobjekte bereit und ermöglicht dadurch innerhalb von kurzer Zeit, datenbankbasierte Anwendungen zu erstellen, ohne umfangreiche Programmierarbeiten durchführen zu müssen. Bei der Erstellung oder Änderung der Tabellen sowie bei der Gestaltung der Abfragen kann man sogenannte „Entwurfssicht“ verwenden. Dadurch lässt es sich ohne SQL-Programmierung graphisch arbeiten. Bei der Erstellung aufwendiger Abfragen jedoch ist die „Entwurfssicht“ schnell umständlich zu bedienen und zu unübersichtlich. MS Access bietet dafür die Möglichkeit, von der Entwurfssicht in die SQLSicht umschalten und zurück. Beispielsweise folgt „Entwurfssicht“ unten: Abbildung 2.3 „Entwurfssicht“ von Tabelle und Anfrage Weitere angebotene Anwendungsobjekte sind Formulare, Berichte, Makros und Module. Mit Formularen kann man Anwendungsoberfläche graphisch erstellen, in welchen der Nutzer Daten lesen, einfügen, ändern oder löschen kann. Dazu ist ein Palette von Steuerelementen wie z.B. Textbox, Listbox, Command Button, Option Group, die durch Drag und Drop in Formularen übernommen werden kann. Weiterhin lassen sich Ereignisse (eng. Events) in Steuerelemente einbetten, mit welchen der Benutzer bei deren Eintritt interaktiv agieren kann. In dem Falle des Ereigniseintritts werden automatisch Unterprogramme aufgerufen. Zum Ausdruck von Daten auf Papier lassen sich Berichte verwenden. Daten können durch Gruppierung oder Sortierung durch den Elementen von Berichten übersichtlich dargestellt werden. Technisch gesehen ähneln Berichte den Formularen, allerdings dienen Steuerelemente bei Berichten nicht der Datenpflege, sondern deren Anzeige. Darüber hnaus lassen sich mittels 17 2. Grundlage Makros rudimentär Ereignisse behandeln, ohne dafür Programmcode in VBA schreiben zu müssen. Dafür kann man in tabellarischer Form spezifizieren, wie die Elemente in Formularen auf ein Ereignis reagieren sollen. Die in Access integrierte Programmsprache VBA (Visual Basic for Applications) ermöglicht dem Nutzer, Funktionalitäten hinzuzufugen, welche über das eigentliche Access-System hinausgehen. VBA erlaubt den Zugriff auf sowohl alle Anwendungsobjekte, wie Formulare, Tabellen und Berichte, als auch die Anwendung von SQL-Code. Mit dieser Funktionalität lassen sich in VBA-Programmen beispielsweise Formulare eröffnen, Ereignisse behandeln, Datensätze in Tabellen aufrufen und SQL-Anweisungen ausführen. Eine wichtige Komponente ist DAO (Data Access Objekt), welche dazu dient, Datensätze in Tabellen einzulesen und in Tabellen zu schreiben. Außerdem erlaubt DAO den Zugriff auf Windows-APIs, womit z.B. auch auf Daten aus dem Internet zugegriffen werden kann. Diese Funktion wurde im Beispiel von TInTo für den Zugriff auf Kursdaten auf der Yahoo Finanz Webseite eingesetzt. Die in VBA-Code benutzerdefinierten Funktionen lassen sich auch in SQL-Anweisungen weiter verwenden. Funktionseinschränkungen von SQL-Code lassen sich damit durch in VBA geschriebene Funktionen umgehen und in SQL-Code anwenden. Als Beispiele hierfür können mathematische Funktionen genannt werden, welche nicht von Access-SQL angeboten werden, aber mit VBA implementiert und in SQL-Code eingesetzt werden können. Access verwaltet eine komplette Datenbank in einer einzigen Datei im Access-eigenen mdbFormat. Diese Datei schließt sowohl Datenbankschema und Datenbankzustand als auch die gesamten Anwendungselementen für die Benutzeroberfläche ein. ADO (ActiveX Data Objects) kann eingesetzt werden, wenn weitere Funktionalitäten mittels anderer Programmiersprachen wie z.B. Delphi oder Visual Basic implementiert werden sollen. Aufgrund der einfach zu bedienenden graphischen Benutzerschnittstelle ist Access bei Nutzern kleinerer und einfacher Datenbanklösungen beliebt. Für Anwender, welche mit MS Excel vertraut sind, bietet Access, welches ebenfalls in die MS Office Familie gehört, einen einfachen Einstieg in die Welt der Datenbanksysteme. Bestehende Daten aus Excel-Dateien können fast nahtlos in Access weiter verwendet und verwaltet werden. Microsoft positioniert Access im Markt für kleinere Datenbanksysteme und ist besonders gut geeignet für Datenbestände, welche an einem festen Ort von einem kleinen Benutzerkreis benötigt werden. Für größere Datenbanksysteme mit besonderen Anforderungen an Webintegration, Netzwerkfähigkeiten und Mehrbenutzerbetrieb bietet Microsoft das Produkt SQL Server an. Als weltweite Marktführer für DBMS für größere Datenbanksysteme sind die Firma Oracle mit dem Produkt Oracle, die Firma IBM mit dem Produkt DB2 und die Firma Microsoft mit dem Produkt SQL Server zu nennen. Diese Produkte erfüllen alle die gängigen Standards an Webund Netzfähigkeit sowie Mehrbenutzerbetrieb und erlauben die Verwaltung von Datenbeständen in der Größenordnung mehrerer Terabytes. Im Vergleich dazu ist MS Access auf eine relativ bescheidene Datenbankgröße von maximal 2 Gigabyte und auf 255 Benutzer beschränkt. Außerdem erlauben diese „großen“ DBMS sowohl relationale als auch multidimensionale und objektrelationale Datenbank zu verwalten. Das Konzept der materialisierten Sichten, welches in dieser Arbeit zu TInTo sehr gut eingesetzt werden könnten, wird ebenfalls von diesen DBMS unterstützt. Im OpenSource Bereich populär ist besonders MySQL zu nennen, welches mehr als 6 Millionen Installationen und über 35.000 Downloads pro Tag erreicht [Wik08]. Ein 18 2. Grundlage bevorzugte Einsatzgebiet von MySQL ist die Verwaltung von Daten in dynamischen Webseiten, häufig in Verbindung mit dem Webserver Apache und PHP1. Als einen kleinen Ausflug und als Übergang zum nächsten Kapitel mit dem Titel „Wertpapieranalyse“ möchte ich hier kurz auf die Wertpapierkurse der marktführenden Datenbankanbietern eingehen. Marktanteil von Datenabnkanbietern Oracle IBM Microsoft Teradata Sybase Software AG Progress Software Sonstige 32,2% 21,4% 31,7% Abbildung 2.4 Marktanteil von Datenbankanbietern in Deutschland nach Umsatz (Stand 2006, Quelle Gartner, [CW08] ) Abbildung 2.5 Aktienkurs von Oracle Corp. (blau), IBM Corp. (rot) und Microsoft Corp. (grün), [YH08f] Die größten kommerziellen Datenbankanbieter in Deutschland im Jahr 2006 gemessen nach Umsatz sind Oracle, IBM und Microsoft, siehe Abbildung 2.4. Es ist gut erkennbar, dass, Stand 2006, der Unterschied zwischen Oracle auf Platz 1 und IBM auf Platz 2 gering ausfällt. 1 PHP(Hypertext Preprocessor) ist eine Skriptsprache mit einer an C angelehnten Syntax, die hauptsächlich zur Erstellung von dynamischen Webseiten oder Webanwendungen verwendet werden [Wik08]. 19 2. Grundlage In Relation dazu entwickeln sich die Aktienkursen beider Unternehmen bis Anfang 2006 sehr ähnlich. Ab 2006 aber entwickelt sich der Kurs von Oracle sehr dynamisch positiv und kann sich deutlich vom Aktienkurs von IBM absetzen. Microsoft im Vergleich, sicher auch auf Grund des unterschiedlichen Produktportfolios, entwickelt sich besonders im Jahr 2008 negativ. Es ist hernach zu vermuten, dass der Markt spezielle und positive Erwartungen an Oracle zu haben scheint. Werden zukünftige Oracle-DBMSs der Kursentwicklung und damit der Investorenerwartung entsprechend tendenziell deutlich bessere Funktionalitäten und eventuell Bedienkomfort in ihr Produkt bringen? 20 3 Wertpapieranalyse In diesem Kapitel werden die Grundlage zum Wertpapierhandel sowie unterschiedliche Analysemethoden für Wertpapiere erläutert. Im Detail wird die Analyse technischer Indikatoren als ein Teilgebiet der breiter gefassten Technischen Analyse ausführlich besprochen. Dabei ist hervorzuheben, dass die Analyse technischer Indikatoren die Grundlage der in dieser Arbeit entworfenen Handelsstrategien bildet. Hierzu wird auf wesentliche Grundannahmen sowie die wirtschaftlichen Zusammenhänge im Detail eingegangen. Die präsentierten Informationen beruhen im Wesentlichen auf [CT06], [SCharts08], [TSO08], [Wik08] sowie [Mur99]. 3.1 Wertpapierhandel Wertpapiere, welche das Recht an Kapitalanlagen verbriefen, werden an einem organisierten Markt, der so genannten Börse, gehandelt. Beispielsweise werden Wertpapiere wie Aktien, Anleihe, Fonds, Derivate, Zertifikate an der Börse gekauft und verkauft. Die oben genannte Wertpapiere unterteilen sich wiederum in viele weitere Varianten mit unterschiedlichen Konditionen. Die Börse als Marktplatz gleicht Angebot und Nachfrage an Wertpapieren aus, ermöglicht die Preisbildung, genannt Kurs, und bringt eventuell den Handel zwischen Anbieter und Nachfrager zustande. Für die später folgende technische Wertpapieranalyse dienen die hier an der Börse gebildeten Kursinformationen als Basisdaten. Ziele der Börse sind im Wesentlichen eine gesteigerte Markttransparenz und verminderte Marktmanipulation sowie als ökonomisches Ziel eine höhere Effektivität im Wertpapierhandel. Transaktionen über die Börse sollen mit geringerem Aufwand, im Wesentlichen mit geringeren Transaktionskosten und möglichst schnell, mit dem Ziel einer gesteigerten Marktliquidität, durchgeführt werden. Die in den 1980er und 1990er Jahre weltweit eingeführten Computerbörsen (engl. Electronic Trading) erlaubten erst die geforderten Steigerungen der Effektivität im Wertpapierhandel und machten darüber hinaus weltweit ortsunabhängige Handelsabwicklungen. Im Ergebnis dieser Entwicklung hat der Börsenhandel enorm an Umfang und Geschwindigkeit zugenommen. Das jährliche Handelsvolumen an der New Yorker Börse (NYSE) stieg von 11.400 Millionen im 21 3. Wertpapieranalyse Jahr 1980 auf 169.745 Millionen in 1998. In den folgenden 10 Jahren kam es zu einem weiteren erheblichen Anstieg auf 698.658 Millionen im Jahr 2007 [NYSE08]. Als Ursachen für diese rasanten Steigerungen kann sicher der allgemeine Trend hin zu Wertpapieren sowie unterstützend auch die Verbreitung des Computerhandels und der freie Zugang zu Personalcomputern gelten. Die Abbildung 3.1 zeigt die jährlichen Handelsvolumen und verdeutlicht die enormen Steigerungsraten der letzten Jahre. Die im folgenden Abschnitt dargestellte technische Wertpapieranalyse hat, begünstigt durch die Verbreitung neuer Technologien wie Internet und Personalcomputer, enorm an Popularität gewonnen. Mit ihrer Hilfe lassen sich Wertpapierkurse in Echtzeit darstellen und visuell auf Transaktionssignale hin analysieren. Insbesondere so genannte Daytrader, welche aus selbst geringen Kursänderungen im Tagesverlauf Gewinne zu erzielen versuchen, profitieren von der sekundengenauen Verfügbarkeit der Kursinformationen. Weiterhin sind spekulative Aktionärsherden, die extrem volatile Kursänderung treiben, zunehmend zu sehen. Handelsvolumen (Mill.) 700.000 525.000 350.000 175.000 0 1957 1962 1967 1972 1977 1982 1987 1992 1997 2002 2007 Abbildung 3.1 Jährliche Handelsvolumen an New York Stock Exchange [NYSE08] An der Börse agieren sehr verschiedene Beteiligte mit zum Teil jeweils ganz unterschiedlichen Motiven. Anleger in Aktien beispielsweise zielen darauf ab, Anteile an eventuellen Kursgewinnen zu erzielen, eine Beteiligung am Gewinn des Unternehmens (in der Regel über die so genannte Dividende) zu erhalten, sowie gegebenenfalls über das Stimmrecht als Aktionär auch Einfluss auf das Unternehmen auszuüben. Dagegen können Unternehmen durch Aktienemissionen unter anderem benötigte größere Kapitalmengen, zum Beispiel zur Finanzierung der Expansion, beschaffen. Allerdings wird das Unternehmen durch eine Aktienemission eine Aktiengesellschaft, deren Grundkapital in Aktien aufgeteilt ist und deren Aktionäre Miteigentümer am Unternehmen sind. Diese Miteigentümerschaft gibt Aktionären ein Stimmrecht bei grundsätzlichen Entscheidungen, wie zum Beispiel der Wahl des Vorstands oder bei Firmenübernahmen oder Fusionen. Im Kapitalmarkt stehen Unternehmen mit ihren Aktien im Wettbewerb mit anderen Anlageformen, zum Beispiel Schuldverschreibungen (engl. Bonds). Auf Grund dieser vorhandenen Wahlmöglichkeiten für die Anleger kommt der Aktienpflege und der Kommunikation zwischen Anlegern und Unternehmen eine besondere Bedeutung zu. Besonders attraktiv als Anlage sind Aktien in Zeiten niedriger Zinsen durch alternative Anlageformen. Im globalen Kapitalmarkt bieten Aktien die Möglichkeit, am Wirtschaftswachstum in anderen Regionen, zum Beispiel den so genanten Emerging Markets, teilzuhaben. Anders als alternative Anlagen in zum Beispiel Immobilien, bieten Aktien unter anderem die Möglichkeit, im Allgemeinen bei Bedarf schnell liquidiert werden zu können. Die 22 3. Wertpapieranalyse folgende Abbildung 3.2 illustriert Gewinnmöglichkeit aus höheren Wachstumsraten in Indien und China im Vergleich zum Dow Jones Index und zum DAX. Abbildung 3.2 Dow (blau), Dax (rot), Indien Fonds(INF, gelb) und Chinesische Aktien Index(SSE, grün) [YH08f] 3.2 Analyseansätze Wird der Kurs steigen oder wird der Kurs doch fallen? Wie lange soll ich warten? Wann kaufe ich oder verkaufe ich? Jeder Anleger stellt sich diese Fragen und versucht, darauf die für seine Situation jeweils richtige Antwort zu finden. Und um diese Fragen zu beantworten, bemühen sich viele Anleger seit Jahrzehnten, eine verlässliche Methode zu finden, welche zukünftige Preisentwicklungen erkennt und sicher vorhersagt. Wie lange schon Menschen sich mit Preisvorhersagen beschäftigen, zeigt das Beispiel des legendären Händlers Homma Munehisa, welcher schon im 17. Jahrhundert Kerzencharts für den Reishandel aufzeichnete. Im Laufe der Zeit haben Investoren im Wesentlichen folgende zwei unterschiedliche Methoden der Wertpapieranalyse entwickelt : • Fundamentale Analyse Diese Methode befasst sich neben den Kursdaten mit fundamentalen Informationen über das jeweilige Handelsobjekt sowie mit Informationen über dessen relevantes wirtschaftliches Umfeld und versucht daraus den „inneren Wert“ oder „fairen Wert“ des Handelsobjektes zu bestimmen und prognostizieren. Durch den Vergleich dieses inneren Wertes mit dem tatsächlichen Kurs wird eine Handelsentscheidung getroffen. • Technische Analyse Die technische Analyse dagegen befasst sich nur mit den Kursdaten sowie dem Handelsumsatz und versucht, den Kurstrend aufgrund von grafisch dargestellten bekannten Kursmustern oder von vergangenen Kurs- und Umsatzbewegungen zu erkennen. Eventuelle Handelssignale werden dann aus den gegebenenfalls erkannten Trends abgeleitet. 23 3. Wertpapieranalyse Bei der fundamentalen Analyse von Aktien strebt man an, den „inneren Wert“ des jeweiligen Unternehmens und somit den „inneren Wert“ der Aktien aufgrund von wirtschaftlichen Analysen zu ermitteln. Dabei beachtet werden insbesondere die betriebswirtschaftlichen Bilanzkennzahlen des Unternehmens. Aber auch qualitative Faktoren wie zum Beispiel die Wettbewerbssituation, entsprechende Branchendaten, die Zukunftschancen der Produkte sowie die Qualität des Managements werden betrachtet. Zugrunde liegende Annahme ist hier, dass sich der Aktienkurs aufgrund der Markteffizienz früher oder später diesem inneren Wert des Unternehmens annähert. Da dieser Prozess der Wertangleichung sowie auch die Veränderung der zugrunde liegenden Faktoren in der Regel über längere Zeiträume ablaufen, ist die Fundamentalanalyse eher für langfristiger orientierte Anleger geeignet. In Fällen kurzfristiger starker Veränderungen von externen Faktoren, zum Beispiel des Ölpreises, kann die Fundamentalanalyse jedoch auch Hinweise auf mögliche Wertentwicklungen über kürzere Zeithorizonte geben. Im Folgenden werden einige Beispiele zu wichtigen Unternehmenskennzahlen erläutert, welche Anwendung in der fundamentalen Analyse finden: • Eigenkapitalrendite (EKR, engl. Return on Equity bzw. ROE) Die Eigenkapitalrendite bezeichnet die Profitabilität des Unternehmens in Bezug auf das von den Kapitalgebern investierte Eigenkapital. Für die Eigentümer und Investoren zeigt die EKR, ob sich der Einsatz des Eigenkapitals gelohnt hat. In der Regel geben sich die Unternehmen selbst konkrete und mitunter recht anspruchsvolle EKR Ziele vor, je nach Industriezweig mitunter im zweistelligen Prozentbereich. Eine langfristig konstant positive Eigenkapitalrendite, welche die vorab durch das Management bekanntgegebenen Ziele erfüllt, kann in der Regel als ein Indikator für eine Kaufentscheidung gesehen werden. Vergleiche zwischen Unternehmen auf Basis der EKR sollten jedoch nur zwischen Unternehmen desselben oder eines vergleichbaren Industriezweiges erfolgen. Die Eigenkapitalrendite gilt als eine der wichtigsten Unternehmenskennzahlen und wird als Prozentzahl angegeben. • Kurs-Gewinn-Verhältnis (KGV, engl. price earnings ratio bzw. PER) Das Kurs-Gewinn-Verhältnis ist eine der gebräuchlichsten Unternehmenskennzahlen. Das KGV betrachtet den Aktienkurs des Unternehmens in Relation zum Gewinn und kann als „Preis-Leistungs-Verhältnis“ angesehen werden. Bei einem relativ niedrigen KGV wird eine Aktie als günstig bewertet angesehen, was in der Regel als Kaufsignal gewertet wird. Weitere wichtige und für Investoren sehr informative betriebswirtschaftliche Kennzahlen sind zum Beispiel der Gewinn pro Aktie (engl. EPS bzw. earnings per share), das Kurs-CashflowVerhältnis, das Kurs-Umsatz-Verhältnis sowie die Eigenkapitalquote des Unternehmens. Schließlich können diese einzelnen Kennzahlen auch unterschiedlich gewichtet in eine generelle Kennzahl für die Gesamtbewertung einer Aktie eingesetzt werden. Im Projekt TInTo spielt momentan die fundamentale Analyse keine wesentliche Rolle, weshalb ich auch im Weiteren nicht auf weitere Details zu dieser Methode eingehen möchte. Aber auch wenn in TInTo gegenwärtig nur die technische Analyse im Mittelpunkt steht, ist die fundamentale Analyse dennoch zweifellos ein wichtiges Instrument für die Bewertung von Aktien. Sehr wünschenswert ist es, innerhalb einer Portallösung zur Wertpapieranalyse wie TInTo, zukünftig wichtige betriebswirtschaftlichen Kennzahlen in graphischer Form mit 24 3. Wertpapieranalyse darzustellen. In Ergänzung zu den in TInTo umgesetzten technischen Analysen können mit Hilfe fundamentaler Unternehmensdaten robuste Handelsentscheidungen unterstützt werden. Die Bedeutung der fundamentalen Analyse erschließt sich, wenn man historische Marktbewegungen zurückverfolgt. Was aus volkswirtschaftlicher Sicht von Kapitalmärkten zu erwarten ist, ist, dass sowohl die Markteffizienz als auch die Vernunft der Anleger, die Aktienkurse und damit die Marktbewertung der Unternehmen um den inneren oder fairen Wert der Aktien und somit auch den fairen Wert des Unternehmens schwanken lässt. Allerdings sind in den vergangenen Jahren immer wieder dramatische und auch irrationale Kursbewegungen zu beobachten. Mitunter scheint es, als ob viele Anleger Handelsentscheidungen auf Grundlage der Daumenregel, nicht nur aufgrund vernünftiger Analyse treffen und das Psychologie wie Gier und Angst die Marktteilnehmer beherrschen. Massenpsychologie, wie allgemeine Habgier oder allgemeine Panik, kann zu weit verbreiteten Phänomenen wie Gruppenverhalten im Aktienmarkt führen. Die folgende Abbildung 3.3, Nasdaq Computer Technologie Index Ende 90er Jahre zeigt beispielsweise, wie gleichartiges Handel größerer Aktionärsgruppen den Markt treiben kann. Einige IT-Aktien erreichten ein KGV(Kurs-Gewinn-Verhältnis) von über 100 gegen Ende der 90er Jahre. Konkret bedeuten diese Aktienkurse, dass diese Unternehmen in den nächsten 10 bis 15 Jahren jedes Jahr mit einer Wachstumsrate von 30-40% wachsen müssen, um diesen Aktienkurs zu rechtfertigen [FA06]. Diese Kurse waren einfach maßlos übertrieben, dennoch kauften die Anleger weiter. Bis zu dem Zeitpunkt als gegen Ende dieser so genannten Blase die Kurse wieder den fairen Wert der jeweiligen Unternehmen abbildeten, konnten Anleger dennoch Gewinne erzielen, indem sie teuer kauften und noch teurer wieder verkauften. Vorherrschend war die Psychologie der Massen, aber nicht die Berücksichtigung der fundamentalen Daten der Unternehmen. Abbildung 3.3 Gruppenverhalten in Aktienmarkt, NASDAQ Computer [YH08f] Um solche abnormalen Kursbewegungen durch Massenpsychologie ausnutzen zu können, kann die so genannte Sentimentanalyse, welche die „Stimmung des Marktes“ misst und interpretiert, durchgeführt werden. Die Sentimentanalyse basiert auf der Verhaltensfinanz (engl. Behavior Finance), welche sich mit irrationalem Verhalten auf Kapitalmärkten beschäftigt. Eine Strategie aus der Verhaltensfinanz, die „Konträrtheorie“, besagt, dass die extreme allgemeine Meinungsbildung über Markttendenzen falsch ist und man die entgegengesetzte Position zur mehrheitlichen Meinung einnehmen soll, um aus einer überverkauften oder überkauften 25 3. Wertpapieranalyse Situation zu profitieren. Eine solche Stimmungserhebung im Markt kann zum Beispiel durch Befragungen erstellt werden und ist dazu geeignet, Handelsentscheidungen zu unterstützen. Neben der fundamentalen Analyse ist die zweitgängigste Methode der Wertpapieranalyse die technische Analyse. Im Gegensatz zur Fundamentalanalyse untersucht die technische Analyse nicht unternehmensspezifische oder gesamtwirtschaftliche Daten, sondern betrachtet nur die Kursverläufe und Änderungen in den Handelsvolumen. Charles Dow, Entwickler des bekannten Aktienindex, Dow Jones Industrial Average, veröffentlichte seine Gedanken im Wall Street Journal, die später als Dow-Theorie bekannt wurden und bis heute die Grundlage der technische Analyse darstellen. Die technische Analyse basiert auf folgenden philosophischen oder rationalen Prämissen: • Kursbewegungen diskontieren alles. Alle Faktoren, welche die Aktienkurse beeinflussen könnten (betriebswirtschaftliche, volkswirtschaftliche, politische, marktpsychologische und andere Faktoren) widerspiegeln sich in den Kursen, sind also schon in die Kurse eingepreist. Daher werden in der technischen Analyse nur noch die eigentlichen Kurse betrachtet. Als Vorteil dieser Methode lässt sich der Markt mit geringem Zeit- und Ressourcenaufwand analysieren. Allerdings fließen in die Analyse direkt keinerlei reelle Wirtschaftsdaten mehr mit ein, was als Nachteil dieser Methode gelten muss. Verkaufssignal Kaufsignal Abbildung 3.4 Trendfolgende Strategie, NASDAQ Computer [YH08f] • Kurse bewegen sich im Trend. Der Trend, also die allgemeine Neigung eines Marktes, ist absolut essentiell in der technischen Analyse. Das wesentliche Ziel der technischen Analyse besteht darin, Trendverläufe von Kursen möglichst frühzeitig zu erkennen und diesem Trend zu folgen. Sobald also ein steigender Trend erkannt wird, soll eine Kaufposition, und sobald ein fallender Trend erkannt wird, eine Verkaufsposition eingenommen werden. In der Abbildung 3.4, Nasdaq Computer ist bis Anfang 2000 ein starker Aufwärtstrend und danach ein ebenfalls starker Abwärtstrend zu sehen. Die entsprechende technische Analyse beruht auf dem technischen Indikator Gleitender Durchschnitt, welcher im 26 3. Wertpapieranalyse nächsten Abschnitt ausführlich beschrieben wird. Der Gleitende Durchschnitt liefert Anfang 1998 ein Kaufsignal und wiederum ein Verkaufssignal im September 2000. Als wichtiges Prinzip bei diesem Indikator gilt, dass, wenn der Haupttrend aufwärts geht, immer dieselbe Position einzuhalten ist, auch wenn der gestiegene Kurs schon übertrieben scheint. Das Verkaufssignal wird erst dann ausgelöst, wenn der Trendwechsel durch den Indikator bestätigt wird. • Die Geschichte wiederholt sich. Diese Prämisse besagt, dass es ähnliche, wiederkehrende Kursmuster gibt. Der Grundgedanke dahinter besagt, dass ähnliche gesamtwirtschaftliche oder unternehmenswirtschaftliche Umstände auch ähnlich Kursverläufe hervorrufen. Als abgeleitete Methode lässt sich dann aus der Wiedererkennung bereits bekannter Kursmuster der zukünftige Kursverlauf prognostizieren. Diese drei Grundphilosophien umreißen grob die wesentlichen Annahmen der technischen Analyse. In den nächsten Abschnitten werden die am weitesten verbreiteten technischen Analyseverfahren „Chartanalyse“ und „Technische Indikatoren“ detailliert vorgestellt. Zum Schluss dieses Abschnittes möchte ich noch die kritischen Punkte in der technischen Analyse erläutern. Die in den 1980er und 1990er Jahren eingeführten Computerbörsen und die darauf folgende Verbreitung von PCs und Internet haben unter anderem die Geschwindigkeit des Aktienhandels enorm beschleunigt und in der Folge auch das Handelsvolumen ansteigen lassen. Durch die nunmehr ständige Verfügbarkeit von Kursinformationen im Internet hat die technische Analyse schnell an Popularität gewonnen. Technische Analyseverfahren werden in letzter Zeit häufig auch im Internet angeboten und sind auch für Laien schnell verfügbar. Neue Investmentziele und neue Handelsstrategien haben sich im Laufe der Zeit herausgebildet. Daytrader versuchen, auch aus sehr kurzfristigen, Intra-Day Kursschwankungen noch Gewinne zu erzielen. Hedge Fonds, ausgestattet mit erheblichen Summen von geliehenen Liquiditäten versuchen seit einigen Jahren mit Kurswetten Gewinne zu erzielen. Auch normale Verbraucher werden motiviert, ihre zu erwartenden Altersrenten mit Aktienkursgewinnen aufzubessern. Für viele dieser neuen Marktteilnehmer ist es mitunter nicht möglich, für alle anstehenden Kauf- oder Verkaufsentscheidungen komplexe Fundamentalanalysen durchzuführen. Deshalb ist zu vermuten, dass sowohl Informationen über historische Kursverläufe, allgemeine aktuelle Trends als auch die Gruppenpsychologie maßgeblich diese Entscheidungen mit prägen. Computergestützte Chartanalyse ist für viele Wertpapiergeschäfte das Entscheidungsinstrument geworden. Einige Handelsstrategien, zum Beispiel das erwähnte Intra-Day Trading benötigen unter Umständen keinerlei Fundamentalanalyse, da Transaktionsentscheidungen sekundengenau vorgenommen werden. Innerhalb dieser Sekunden-Zeiträume ändern sich Fundamentaldaten in der Regel nicht, so dass bei diesen Strategien, auf diese Analyse verzichtet werden kann. Der weitere Fortgang dieser Tendenzen hin zu Trendfolge und rein technischer Analyse muss genau beobachtet und bei eigenen Investitionsentscheidungen berücksichtigt werden. Bergen diese Tendenzen doch die Gefahr, dass die rationalen Prämissen, welche die Grundlage für die Gültigkeit und Aussagekraft von technischen Analysen bilden, geschwächt wenn nicht sogar außer Kraft gesetzt werden. 27 3. Wertpapieranalyse Was ist also zu beachten? • Technische Analyse funktioniert nur, wenn die überwiegende Zahl der Marktakteure nach Fundamentalanalyse ihre Handelsentscheidungen treffen. Diese Notwendigkeit beinhaltet eine zwingende Logik. Wenn im angenommenen Extremfall kein Handelsteilnehmer mehr die Fundamentaldaten analysiert, welche die reale Wirtschaft widerspiegeln, dann koppeln sich Kursverläufe von eben dieser Realwirtschaft ab. In der Folge würde eine reelle Bewertung des Kurswertes unmöglich. Ohne Kenntnis des „fairen“ Aktienwertes eines Unternehmens wären sämtliche Marktmechanismen außer Kraft gesetzt. In der Folge würde kein Anleger mehr in fallende Kurse investieren, da ohne Fundamentaldaten eine Kaufempfehlung im fallenden Markt, wann ein Wertpapier unterbewertet ist, nicht wahrscheinlich ist. • Handelsstrategien nach ausschließlich technischer Analyse sind anfällig für Marktmanipulationen. Manipulationen, welche Handelssignale auslösen, können je nach Marktsituation unter Umständen mit relativ begrenzten Mitteln durchgeführt werden. Als Beispiel kann in einem allgemein fallenden Markt mit durch den Kauf bestimmter Volumen eines Wertpapiers ein Kaufsignal gesetzt werden. Folgen viele Anlieger diesem Signal und steigt der Kurs entsprechend stärker an, kann der „Manipulierer“ sich aus dem Markt zurückziehen, seine Positionen an diesem Wertpapier liquidieren und durch den gestiegenen Verkaufspreis einen Gewinn erzielen. • Der Finanzmarkt kann seine führende Rolle in der wirtschaftlichen Entwicklung nicht mehr erfüllen. Die Börse dient als Markt, auf welchem sich Unternehmen um freie Finanzmittel von Investoren bewerben. Damit nimmt die Börse eine steuernde Funktion für die Gesamtwirtschaft ein, allgemein Allokation genannt. Profitable und allgemein attraktive Unternehmen ziehen grosse Anteile freier Finanzmittel an, nicht profitable und weniger attraktive Unternehmen gehen unter Umständen leer aus. Werden nun die Fundamentaldaten nicht mehr als primäre Informationsquelle genutzt, da Investoren nur noch dem allgemeinen Trend und den technischen Analyseergebnissen folgen, besteht die Gefahr, dass Finanzmittel nicht mehr in die gesamtwirtschaftlich attraktivsten Unternehmen investiert werden. Damit würde die Börse ihre eingangs erwähnte gesamtwirtschaftliche Grundfunktion der Finanzmittelallokation verlieren. Für das Projekt TInTo ist zu wünschen, dass zukünftig auch in gewissen Grenzen Fundamentaldaten in die Bewertungen von Handelsstrategien mit einfließen können. Trotz der oben genannten Einschränkungen hat die technische Analyse auch erhebliche Vorteile, unter anderen den der maschinellen Verarbeitung der Kursdaten. Komplexe, mehrdimensional abhängige Analysen von Fundamentaldaten sind weitaus aufwendiger, wenn überhaupt modellierbar und technisch umsetzbar. Auch geben technische Analysen durchaus werthaltige Signale für Anleger, welche tendenziell eher auf Fundamentaldaten in ihren Strategien setzen. Abschließend bleibt zu empfehlen, in der Praxis beide Analysemethoden miteinander zu kombinieren, gewichtet nach persönlicher Anlagestrategie. 28 3. Wertpapieranalyse 3.3 Chartanalyse Die Chartanalyse ist ein Analyseverfahren der technischen Analyse und beinhaltet die im letzten Abschnitt erläuterte Grundphilosophie: • Kursbewegungen diskontieren alles. • Kurse bewegen sich in Trend. • Die Geschichte wiederholt sich. In der Chartanalyse werden Kursverläufe und Verlaufsformationen von Charts untersucht, um Trendverläufe von Kursen möglichst frühzeitig zu erkennen und aus typischen Kursmustern Kauf- und Verkaufssignale abzuleiten. Das Werkzeug Chart stellt Kursinformationen gegen die Zeit graphisch dar und ermöglicht somit eine direkte Übersicht über den Kursverlauf. Die gängigsten Chartdarstellungen sind die folgenden: • Linienchart Hier werden nur die Schlusskurse eines jeweiligen Zeitintervalls dargestellt und durch eine Linie miteinander verbunden. Das Linienchart findet Verwendung, da manche Anleger die jeweiligen Schlusskurse für wichtig erachten oder wenn nur ein Wert pro Zeitintervall zur Verfügung steht. • Balkenchart (oder OHLC-Chart) Für jedes Intervall wird ein senkrechter Balken dargestellt, dessen oberes Ende den Höchstkurs und dessen unteres Ende den Tiefstkurs abbilden. Ein waagerechter Strich auf der linken Seite zeigt den Eröffnungskurs an und ein Strich auf der rechten Seite repräsentiert den Schlusskurs. • Kerzenchart Das Kerzenchart ist eine andere Art von Balkenchart. Allerdings wird hier die Spanne zwischen Eröffnungs- und Schlusskurs als ein Rechteck, als so genannter Kerzenkörper dargestellt. Wenn der Schlusskurs über dem Eröffnungskurs liegt, ist der Körper grün, im umgekehrten Fall rot. Abbildung 3.5 Chartdarstellungen, Apple Inc. [YH08f] 29 3. Wertpapieranalyse Innerhalb der Chartanalyse existieren eine Vielzahl von Erkennungslinien sowie Kursformationen, welche direkt aus dem Chart abgeleitet werden können und eventuell auf günstige Zeitpunkte zum Kauf oder Verkauf verweisen. Im Folgenden werden nur die häufig verwendeten beispielhaft erläutert. • Unterstützungs- / Widerstandslinie Die Unterstützungs- und Widerstandslinien sind ein wichtiges und grundlegendes Werkzeug in der Chartanalyse und repräsentieren die Kräfte von Angebot und Nachfrage im Finanzmarkt. Erfolgt zum Beispiel nach einem Kursanstieg ein entsprechender Kursrückgang, gekoppelt mit nachlassender Nachfrage und steigendem Verkaufsdruck, so bezeichnet man den zuvor erreichten Höhepunkt, das lokale Maximum, als Widerstand. Wenn man über den zeitlichen Verlauf eines Wertpapierkurses alle lokalen Maxima, die Widerstandspunkte, horizontal miteinander verbindet, erhält man die so genannte Widerstandslinie. Je öfter eine Widerstandslinie durch Widerstandspunkte bestätigt wird, desto aussagekräftiger ist sie. Analoges gilt für die Unterstützungslinie, welche eine horizontale Verbindung der lokalen Minima des Wertpapierkurses darstellt. Ein Durchbruch des aktuellen Kurses durch die Widerstandslinie oder die Unterstützungslinie bedeutet, dass sich das Verhältnis von Angebot und Nachfrage maßgeblich geändert hat. Durchbrüchen dieser Art liegen in der Regel Änderungen der Fundamentaldaten zugrunde und können somit als Handelssignale interpretiert werden. Die folgende Abbildung veranschaulicht Handelssignale am Beispiel von Widerstands- und Unterstützungslinie: Widerstandslinie Widerstandslinie Kaufsignal Unterstützungslinie Verkaufssignal Unterstützungslinie Abbildung 3.6 Unterstützungs- und Widerstandslinie • Trendlinie Mit Hilfe von Trendlinien lassen sich schnell Erkenntnisse über den allgemeinen Kurstrend erhalten, um diesen frühzeitig zu erkennen oder auch beobachtete Trends zu bestätigen. Abbildung 3.7 zeigt an einfachen Beispielen, wie Trendlinien erstellt und verwendet werden können. Dabei wird eine Aufwärts-Trendlinie so wie dargestellt durch Verbinden der lokalen Minima eines Aufwärtstrends gezeichnet. Je öfter diese Linie mit lokalen Minima bestätigt wird und um so länger sich diese Linie über den zeitlichen Kursverlauf abbilden lässt, desto bedeutsamer ist dieser Trend. Sollte der aktuelle Kurs diesen Aufwärtstrend signifikant nach unten durchbrechen, so signalisiert dies einen Trendwechsel und kann als Verkaufssignal gewertet werden. Wiederum Analoges gilt für die Abwärts-Trendlinie, welche die lokalen Maxima eines Abwärtstrends miteinander verbindet. 30 3. Wertpapieranalyse Abwärts-Trendlinie Kaufsignal Verkaufssignal Aufwärts-Trendlinie Abbildung 3.7 Aufwärts- / Abwärtstrendlinie • Trendwendeformationen Der zeitliche Übergang von einem allgemeinen Trend zu einem entgegengesetzten, eine so genante Trendumkehr, kündigt sich in der Regel über eine Trendwendeformation an. Bekannteste Formationen sind zum Beispiel die Schulter-Kopf-Schulter-Top- oder die Schulter-Kopf-Schulter-Boden Formation, die V-Formation, oder auch die Zweifachhochoder Zweifachtief-Formationen. Abbildung 3.8 zeigt eine häufig auftretende und im allgemeinen als zuverlässig angesehene Trendwendeformation, die Schulter-KopfSchulter-Top-Formation. Am Ende eines Aufwärtstrends kann diese Formation auftreten, wobei die jeweiligen Kurshochs, welche die beiden Schultern bilden, etwas niedriger ausfallen als das Kurshoch, welches den Kopf darstellt. Die Trendwendeformation kann mit einer Unterstützungslinie kombiniert werden. Dabei werden die lokalen Minima zwischen den beiden Schultern und dem Kopf der Formation miteinander verbunden. In dieser Kombination wird diese Linie Nackenlinie genannt. Durchbricht der aktuelle Kurs die Nackenlinie, wird dies im Allgemeinen als Verkaufssignal gewertet. Kopf Rechte Schulter Linke Schulter Nackenlinie/Unterstützungslinie Verkaufssignal Abbildung 3.8 Schulter-Kopf-Schulter-Top • Trendbestätigungsformationen Das Auftreten von so genannten Trendbestätigungsformationen wird im Allgemeinen als Indikator dafür gewertet, dass sich der bestehende Trend fortsetzt. In dieser Formation bewegen sich die Kurse seitwärts oder gegebenenfalls sogar leicht gegen den bestehenden Trend. Bekannte Beispiele für Trendbestätigungsformationen sind das so genannte Dreieck, der Wimpel, oder die Flagge. Die Abbildung 3.9 zeigt ein symmetrisches Dreieck, im welchem sich der Kurs grundsätzlich neutral bewegt und anschließend dem bestehenden, in diesem Beispiel ansteigenden, Trend folgt. 31 3. Wertpapieranalyse Abbildung 3.9 Symmetrisches Dreieck • Kerzenchart Muster Nicht nur in den oben genannten Liniendiagrammen, sondern ebenfalls in Kerzencharts treten bestimmte Kursmuster auf. Auch diese Muster können dazu verwendet werden, eine Bestätigung des bestehenden Trends oder einen Trendwechsel abzulesen. Die in Abbildung 3.10 gezeigten Muster kündigen alle jeweils eine Umkehr von Abwärts- zu Aufwärtstrend an: Morgenstern, Hammer und Harami. Harami kann auch bei der Umkehr vom Aufwärts- zum Abwärtstrend auftreten. Morgenstern Hammer Harami bei Abwärtstrend Abbildung 3.10 Trendumkehr von Abwärts- zu Aufwärtstrends in Kerzenchartmustern Zusammenfassend muss erwähnt werden, dass weder Erkennungslinien noch Formationen eindeutig abgelesen werden können und jeweils einer subjektiven und somit persönlichen Einschätzung der konkreten Situation unterliegen. Weitere Unterstützung könnte hier der Einsatz von Mustererkennungstechnik leisten, um zur besseren Erkennbarkeit mögliche Unschärfen in auftretenden Mustern zu modellieren. Darüber hinaus kann die Fuzzy-Theorie eingesetzt werden, um nach der jeweiligen Relevanzgröße des auftretenden Musters ein Handelssignal zu liefern. Das Projekt TInTo-Projekt hat in erster Linie die Analyse technischer Indikatoren zu Ziel, welche im nächsten Abschnitt vorgestellt und erläutert werden. Die Chartanalyse wird in der gegenwärtigen Version von TInTo nicht direkt unterstützt. Wie jedoch in diesem Kapitel beschrieben, kann man mit Hilfe von vergleichsweise einfachen Linien Trends und Formationen schnell erkennen. Für die zukünftige Entwicklung von TInTo ist zu wünschen, dass auf Kurscharts Linien abgebildet werden können. Gegebenenfalls lassen sich auch vordefinierte, bewegliche Formationen auf die Kurscharts projizieren und bei Bedarf abändern. Im Beispiel von Kerzencharts lassen sich Muster mit vergleichsweise geringem Aufwand mathematisch definieren und als Unterstützung für Handelsentscheidungen programmieren. 32 3. Wertpapieranalyse 3.4 Technische Indikatoren Die Analyse technischer Indikatoren ist neben der im vorangegangenen Abschnitt vorgestellten Chartanalyse ein wichtiges Teilgebiet der technischen Analyse von Wertpapieren. Mathematisch gesehen stellt ein technischer Indikator eine mathematische Funktion dar, welche aus einzelnen Kursdaten wie Schlusskurs, Eröffnungskurs, Höchstkurs, Tiefstkurs oder Handelsvolumen einen Indikatorwert zu einem bestimmten Zeitpunkt berechnet. Über einen gegebenen Zeitraum betrachtet, lässt sich aus diesen berechneten Indikatorwerten eine übersichtliche und informative Linie graphisch abbilden. Die verschiedenen existierenden technischen Indikatoren erlauben auch verschiedene Perspektiven auf den Kursverlauf des jeweiligen Wertpapiers. Meist sind die Indikatoren spezialisiert, um gut Trendrichtungen aufzuzeigen oder zum Beispiel Trendwechsel zu erkennen. Mit Hilfe anderer Indikatoren wiederum kann die Trendintensität bestimmt werden. Auf Grund dieser meist einseitigen und beschränkten Perspektive einzelner Indikatoren auf den Kursverlauf müssen Indikatoren kombiniert verwendet werden, um zukünftige Kursverläufe zu prognostizieren und Handelsempfehlungen abzugeben. Darüber hinaus ist zu beachten, dass diese Indikatorwerte das Ergebnis mathematischer Berechnungen sind und damit nicht direkt die jeweiligen Kursverläufe reflektieren. Die wichtigste Entscheidungsgrundlage ist immer noch die eigentliche Kursinformation des Wertpapiers unter jeweiliger Berücksichtigung der technischen Indikatoren. Heutzutage existieren hunderte von technischen Indikatoren und jede Woche kommen weitere hinzu. Dabei nehmen viele Indikatoren eine nahezu identische Perspektive auf die Kursverläufe, bieten vergleichbare Verwendungsmöglichkeiten und kommen auch auf ganz ähnliche Ergebnisse. Wiederum sind nur wenige Indikatoren für hinreichend lange Zeit von einer repräsentativen Anzahl von technischen Analytikern verwendet worden, um ihre Aussagekraft zu bestätigen. In der konkreten Anwendung erscheint es auch weitaus wichtiger und sinnvoller, einige wesentliche Indikatoren in ihrer Aussage sehr gut zu verstehen und die jeweiligen Indikatorwerte richtig interpretieren zu können, als Dutzende Indikatoren jeweils nur grob zu studieren. In den nächsten Abschnitten möchte ich einige der am häufigsten angesetzten Indikatoren erläutern, welche jeweils unterschiedliche Perspektiven auf die Kursverläufe nehmen, aber sich im Laufe der Zeit als aussagekräftig erwiesen haben. In der täglichen Praxis haben sich die englischen Bezeichnungen für die technischen Indikatoren durchgesetzt, weshalb diese so auch in den folgenden Erläuterungen verwendet werden. 3.4.1 Trendfolger Trendfolgeindikatoren, wie zum Beispiel der Moving Average, filtern kleine chaotische Kursbewegungen heraus und ermöglichen daher, einen klaren Blick auf das wirkliche Trendverhalten und die allgemeine Trendrichtung des Kursverlaufs zu behalten. Der wesentliche Vorteil dieser Gruppe von Indikatoren ist, dass Trends klar identifiziert werden können und es damit Anlegern ermöglicht wird, im jeweiligen Trend zu bleiben und nicht gegen den Trend zu handeln. Der Einsatz von Trendfolgeindikatoren kann enorm profitabel sein, hat aber auch einige kritische Punkte. Einer der Nachteile von Trendfolgeindikatoren besteht zum Beispiel darin, dass der Trend zeitlich verzögert verfolgt wird und das jeweilige Handelssignal relativ spät geliefert wird, zu einem Zeitpunkt, wenn der Trend sich bereits schon entwickelt hat. Daher sollten diese Indikatoren in Phasen mit häufig stark schwankenden, volatilen Kursverläufen nicht eingesetzt werden, da durch die genannte Zeitverzögerung häufig auf kurze aber 33 3. Wertpapieranalyse signifikante Schwankungen nicht früh genug reagiert werden kann. In Phasen ohne erkennbaren klaren Trend, zum Beispiel wenn Kurse sich seitwärts bewegen, sollten Trendindikatoren ebenfalls nicht verwendet werden, da diese sich mit den Kursen gleichfalls seitwärts bewegen, ohne sinnvolle Signale zu liefern. Darüber hinaus reagieren Trendfolgeindikatoren in Seitwärtsphasen auf jede Kursschwankung auch ohne klaren Trend und liefern somit viele Fehlsignale. Beispiel: MA (Moving Average) Der Moving Average (MA) ist der am weitesten verbreitete technische Indikator und findet zum Beispiel auf fast allen Charting-Webseiten und auch in Anleger-Magazinen seine Verwendung. Mathematisch stellt der MA den Durchschnittskurs über einen bestimmten Zeitraum dar. Unter den zahlreichen Varianten von MA finden der SMA (Simple Moving Average) und der EMA (Exponential Moving Average) am meisten Verwendung. Auch dient der MA als eine grundlegende Teilformel für viele andere technische Indikatoren. Berechnung: • SMA (Simple Moving Average) SMA ist die einfachste Variante der MA und ergibt sich aus der Berechnung des Durchschnitts der Schlusskurse für einen bestimmten Berechnungszeitraum: Dabei gibt t die fortlaufenden Zeitpunkte, zum Beispiel das jeweilige Datum im Falle einer täglichen Berechnung, und n die Berechnungsperiode an. Je nach Berechnungsperiode glättet SMA den Kursverlauf unterschiedlich stark. Je länger die Berechnungsperiode ist, desto weicher ist das Muster von SMA. • EMA (Exponential Moving Average) Der EMA versucht, zu einem gewissen Grade den Nachteil der zeitlichen Verzögerung des SMA zu reduzieren. Während der SMA alle Kurse innerhalb einer Berechnungsperiode gleich gewichtet, gibt EMA den zeitlich gesehen aktuelleren Kursen mehr Gewicht als den zeitlich gesehen älteren Kursen. Anfangswert: Gewichtungsfaktor: Dabei gibt t die fortlaufenden Zeitpunkte und n die jeweilige Berechnungsperiode an. Für Nummerierung wird der jeweilige Zeitpunkt i verwendet. Zuerst wird die Differenz aus aktuellem Schlusskurs und gestrigem EMA mit dem Gewichtungsfaktor multipliziert. Danach wird der gestrige EMA addiert. Diese Formel ist rekursiv. Der Anfangswert der Rekursion, also der erste EMA-Wert im Betrachtungszeitraum, ergibt sich aus dem SMA über die jeweilige Berechnungsperiode n. Die Gewichtung der jeweiligen Einzelkurse im EMA hängt direkt von der Berechnungsperiode ab. Je kürzer die Berechnungsperiode gewählt wird, mit umso mehr Gewicht gehen die 34 3. Wertpapieranalyse aktuellsten Kurse in die Berechnung ein und umso empfindlicher reagiert der EMA auf die jüngsten Kursänderungen. Während bei der Berechnung des SMA nur die Kurse aus der Berechnungsperiode verwendet werden, gehen in die Berechnung des EMA alle Kurse aus dem gesamten Betrachtungszeitraum, also aus dem gesamten Analysezeitraum ein. Interpretation: • SMA im Vergleich zu EMA Der Unterschied zwischen SMA und EMA bezüglich ihrer Indikatorwerte ist relativ gering, aber dennoch vorhanden. So verläuft der EMA auf Grund der höheren Gewichtung der aktuellsten Kurse fast immer näher an dem eigentlichen Kursverlauf und reagiert auch schneller auf Kursänderungen als der SMA. Der SMA hingegen ist gegenüber dem EMA zeitlich verzögert und daher besser geeignet, Trendänderungen über einen längeren Zeitraum zu betrachten, mit dem Ziel, länger andauernde, nachhaltige Trends zu erkennen. • Trendrichtung Mit Hilfe von MA-Indikatoren kann man die generelle Richtung eines Trends sowie Wechsel hin zu einem anderen Trend erkennen. Der MA-Indikator glättet hierzu schwankende Kurvenverläufe sowie kleinere Kurswenden, welche nicht auf eine generelle Trendänderung hindeuten. Der MA bietet drei Methoden, einen Trend zu identifizieren. Erstens, die Neigung, mathematisch der Anstieg, der MA-Linie weist den aktuellen Trend auf. Eine ansteigende MA-Linie steht für einen Aufwärtstrend der Kurse, wobei eine abfallende Linie auf einen Abwärtstrend hinweist. Zweitens kann man den Trend aus der relativen Position des betrachteten Kurswertes zur MALinie erkennen. Liegt der aktuelle Kurswert über der MA-Linie, befindet sich der Kurs im Aufwärtstrend. Analog gilt für den Abwärtstrend, dass sich die aktuellen Kurswerte unterhalb der MA-Linie befinden. Drittens kann man zwei MA-Linien mit jeweils unterschiedlichen Berechnungsperioden verwenden. Liegt dann die MA-Linie mit der kürzeren Periode über der Linie mit der längerem Periode, dann befindet sich der betrachtete Kurswert im Aufwärtstrend. Analog gilt auch hier wieder, dass eine MA-Linie mit kurzer Periode, welche unterhalb einer Linie mit längerer Periode liegt, auf einen Abwärtstrend hinweist. • Überkauft- und Überverkauftsituation Durch den Abstand zwischen aktuellem Kurs und der MA-Linie kann man mögliche überkaufte- oder überverkaufte Marktsituationen erkennen. Steigt der Kurs über der MA-Linie weiter an, vergrößert sich also der Abstand zwischen aktuellem Kurs und der MA-Linie weiter, so besteht eine überkaufte Situation. Sollte sich in einer überkauften Situation dann der Abstand zur MA-Linie wieder verkleinern, deutet dies auf steigenden Verkaufsdruck hin, und der Kurs kann bis auf die MA-Linie zurückfallen. Eine solche Marktsituation nennt man „bärisch“. Fällt der aktuelle Kurs nun weiter unterhalb der MA-Linie ab, vergrößert sich also der Abstand zur MA-Linie weiter, so entsteht eine überverkaufte Situation. Eine darauf folgende Wiederannäherung der aktuellen Kurse an die MA-Linie gibt eine Indikation auf steigenden Kaufdruck. Eine solche Marktsituation nennt man „bullischen“ Markt oder auch „bullische“ Trendwende. In der folgenden Abbildung 3.11 sind drei überkaufte Situationen zu erkennen, welche im Beispiel jeweils mit „überhitzt“ gekennzeichnet sind. In allen drei Fällen liegen die aktuellen Kurswerte des Dow Jone Index über dem 200-Tage SMA. Während der MA-Indikator einen Hinweis auf eine überkaufte oder überverkaufte 35 3. Wertpapieranalyse Marktsituation gibt, signalisieren hierauf spezialisierte Indikatoren, zum Bespiel der im folgenden erläuterte RSI, deutlich eine solche Marktsituation. • Unterstützungs- und Widerstandslinie MA-Linien dienen vielen Anlegern als Unterstüzungs- oder Widerstandslinien in ihren Handelsstrategien. Zum Beispiel signalisiert dabei das Durchbrechen der Unterstützungen in einem Aufwärtstrend einen möglichen Trendwechsel. In der folgenden Abbildung 3.11 ist der allgemeine Aufwärtstrend mit drei Unterstützungspunkten bestätigt. Gegen Ende 2007 jedoch durchbricht der Kursverlauf die als Unterstützungslinie dienende MA-Linie und gibt damit ein Verkaufssignal. Widerstand Widerstand Überhitzt Überhitzt Unterstützung Überverkauft Überverkauft Unterstützung Überhitzt Abbildung 3.11 50-MA (rot), 200-MA (grün), Dow Jones Industrial Average (blau), [YH08f] • Berechnungsperiode Die Berechnungsperiode in der MA-Berechnung besitzt eine Austauschbeziehung zwischen Sensitivität und Zuverlässigkeit. Je kürzer die Berechnungsperiode ist, um so sensibler ist die MA-Linie für aktuelle Kursänderungen. Mit kurzen Berechnungsperioden erkennt man rechtzeitig Kursänderungen, diese liefern aber auch häufig Fehlsignale, welche nicht auf einen allgemeinen Trendwechsel hindeuten. MA-Indikatoren mit längeren Berechnungsperioden reagieren zwar träger als solche mit kurzen Perioden, liefern damit zwar zeitlich verzögerte aber markttechnisch signifikante Handelssignale. Allgemein verbreitete Berechnungsperioden sind 21, 50, 89, 150 und 200 Tage. Je nach der gegenwärtigen Marktsituation und damit aktuellem Kursverlauf, zum Beispiel sehr volatil oder nachhaltig, und je nach Verwendungszweck bezüglich Anlagehorizont und Handelsstrategie, sollten geeignete Berechnungsperioden eingesetzt werden. Handelssignale: Das Überkreuzen zweier MA-Linien wird im Allgemeinen als Handelssignal gedeutet und auch in computergestützen Handelssystemen als solches verwendet. Wenn sich im konkreten Beispiel die MA-Linie mit der kürzeren Berechnungsperiode mit der MA-Linie mit längerer Berechnungsperiode von unten nach oben schneidet, so liegt ein Kaufsignal vor. Analog dazu gilt: Schneidet sich hingegen die MA-Linie mit der kürzeren Berechnungsperiode mit der MALinie mit einer längeren Periode von oben nach unten, so liegt ein Verkaufssignal vor. Ein schwaches oder auch täuschendes Kaufsignal liegt dann vor, wenn in einem allgemein aufsteigenden Markt, indiziert durch eine aufsteigende MA-Linie mit langer Periode, diese MALinie mit langer Periode durch eine MA-Linie mit kurzer Periode von oben nach unten 36 3. Wertpapieranalyse geschnitten wird. Gleichfalls liegt ein schwaches oder täuschendes Verkaufssignal vor, wenn in einem allgemein fallenden Markt eine MA-Linie kurzer Periode eine MA-Linie langer Periode von unten nach oben schneidet. Täuschende Fehlsignale entstehen durch kurzfristige Trendänderungen, welche nicht auf eine langfristige Trendumkehr hindeuten. Abbildung 3.12 zeigt Beispiele für jeweils deutliche und auch für schwache Kauf- und Verkaufssignale. Verkaufssignal Deutliches Verkaufssignal Schwaches Verkaufssignal Schwaches Kaufsignal Deutliches Kaufsignal Abbildung 3.12 21-SMA (rot), 150-SMA (grün), Dow Jones Industrial Average (blau), [YH08f] Als eine Variante für sehr kurzfristige Handelshorizonte wird das Überkreuzen der Kurs-Linie mit einer MA-Linie kurzer Periode analog oben erläuterter Methodik als Handelssignal verwendet. Da im Allgemeinen Marktgeschehen das Überkreuzen von mittel- und langfristigen MA-Linien, zum Beispiel der 50-Tage-MA-Linie mit 200-Tage-MA-Linie, sehr selten vorkommt, kann auch eine kurzfristige MA-Linie hinzugefügt werden, um weitere Signale zu generieren. Wirklich zuverlässig sind allerdings nur jene Kaufsignale aus kurz und mittelfristigen MA-Linien, wenn diese über der langfristigen MA-Linie liegen. Gleiches gilt für Verkaufssignale aus kurz- und mittelfristigen MA-Linien. Diese müssen für ein signifikantes Verkaufssignal unterhalb der langfristigen MA-Linie liegen. Einschränkungen in der Anwendbarkeit und der Aussagekraft der MA-Indikatoren ergeben sich in sich seitwärts bewegenden sowie in sehr volatilen Märkten. Wie in der Abbildung 3.11 zu sehen ist, lieferten die MA-Indikatoren in der Seitwärtsphase zwischen Mitte 2004 und Ende 2005 häufig Fehlsignale. Ebenso wurden in der sehr volatilen Marktphase in den Jahren 2001 und 2002 Fehlsignale geliefert. Ein Beispiel für ein solch schwaches Kaufsignal zeigt sich in der Abbildung 3.12 im Mai 2008, als die kurzfristige MALinie die zu diesem Zeitpunkt fallende langfristige MA-Linie von unten durchschneidet. Die kurzfristige MA-Linie deutet einen kurzfristig „bullischen“ Markt an, jedoch keinen generellen Trendwechsel. Ein genereller Wechsel könnte nur von einem deutlichen Kaufsignal angedeutet werden, wenn zum Beispiel wie im August 2006 eine kurzfristige MA-Linie eine steigende langfristige MA-Linie von unten durchschneidet. Ein solcher Schnitt bestätigt den allgemeinen Aufwärtstrend und gibt ein deutliches Kaufsignal. Warum kommt es zu schwachen Signalen oder sogar Fehlsignalen? In Seitwärtsmärkten liegen kurzfristige und langfristige MA-Linien eng beieinander, ohne einen klaren Trend zu zeigen. In dieser Situation führt jede kleine Kursänderung zu einer Reaktion der 37 3. Wertpapieranalyse kurzfristigen MA-Linie. In der Regel wird diese die langfristige Linie schneiden und ein Signal auslösen. Da ein kurzfristiger Kurswechsel von wenigen Tagen aber im Allgemeinen keine allgemeine Trendwende kennzeichnet, sollte dieses Signal nicht zu hoch gewichtet werden. Im Beispiel Juni 2006 schneidet die kurzfristige, fallende MA-Linie von oben kommend eine ansteigende langfristige MA-Linie. Der allgemein ansteigende Trend ist noch vorhanden, allerdings haben einige wenige Perioden von fallenden Kursen den kurzfristige MA-Indikator ebenfalls fallen und die langfristige MA-Linie schneiden lassen. Im Beispiel gut ersichtlich, die kurzfristig fallende Kurse konnten den Aufwärtstrend nicht stoppen. Ein Verkauf nach dem Signal im Juni 2006 hätte auf mittlere Sicht Verluste gebracht. Um nun genannte Fehler in Seitwärtsphasen zu verhindern ist insbesondere wichtig, diese Phasen als solche zu erkennen. Bei Verwendung von Unterstützungs- und Widerstandslinien kann man einen Seitwärtsmarkt optisch gut erkennen. Horizontal verlaufende sowie parallel verlaufende kurz- und langfristige MA-Linien sind ebenfalls klare Signale auf einen Seitwärtsmarkt und ein Hinweis auf die Fehleranfälligkeit von MA-Indikatoren zu dieser Zeit. In diesen Phasen sollten MA-Indikatoren durch weitere geeignete Indikatoren ergänzt werden. 3.4.2 Oszillatoren Oszillatoren bilden neben Trendfolgeindikatoren eine wesentliche Indikatorgruppe mit komplett anderen Eigenschaften und Verwendungsmöglichkeiten. Der wesentliche Unterschied liegt hauptsächlich darin, dass Ozillatoren mögliche zukünftige Trendwechsel erkennen können, während Trendfolgeindikatoren nur dem vorherrschenden Trend folgen und bestätigen. Oszillatoren stellen mögliche bevorstehende Trendwechsel deutlich graphisch dar, welche man ohne Zuhilfenahme von Indikatoren aus dem originalen Kursverlauf mit bloßem Auge kaum erkennen kann. Die grundliegende Idee für die Berechnung der Oszillatoren ergibt sich aus der Differenz oder Relation aus aktueller Kursinformation zu vergangenen Kursinformationen. Diese Differenz oder Relation wird graphisch meistens unter dem eigentlichen Kursverlauf dargestellt. Diese „historische“ Differenz oder Veränderungsgeschwindigkeit des Kurses pendelt um eine horizontale Mittelpunktslinie, auch wenn der Kurs sich stark aufwärts oder dramatisch abwärts bewegt. Oszillatoren sind daher nicht geeignet, den langfristigen Trend zu erkennen oder signifikante Kursverhalten übersichtlich darzustellen, sondern um den kommenden möglichen Trendwechsel zu prognostizieren. In einer Seitwärtsphase liefern Oszillatoren bessere Handelssignale als in extrem steigenden oder fallenden Märkten, da sie in jenen Fällen oft Fehlsignale erzeugen, welche sich gegen den Haupttrend stellen. Beispiel: RSI (Relative Strength Index) Der RSI (Relative Strength Index) wurde von dem technischen Wertpapieranalysten Welles J. Wilder entwickelt und in seinem Buch, „New Concepts in Technical Trading Systems“ im Jahre 1978 veröffentlicht. Der RSI ermittelt die relative Schwungstärke des Kurses, indem er die Kursgewinne einer Periode mit den Kursverlusten einer Periode vergleicht. Der RSI ist ein repräsentatives Beispiel für Oszillatoren und wird verwendet, um überkaufte- oder überverkaufte Marktsituationen zu erkennen und Warnsignale für einen möglichen Trendwechsel zu geben. 38 3. Wertpapieranalyse Berechnung: Die von Welles Wilder bezeichnete „Relative Stärke“ RSI ergibt sich dadurch, dass die durchschnittliche Summe der positiven Kursänderungen mit der durchschnittlichen Summe der negativen Kursänderungen in gleichlangen Perioden in Relation gesetzt werden: Dabei ist n die Berechnungsperiode und t der fortlaufende Zeitpunkt. Diese Relation bedeutet, dass die RSI-Werte nur zwischen 0 bis 100 schwanken können. AvgSU ist dabei der Durchschnitt der Summe der positiven Kursänderungen, wodurch die Änderungsmaße geglättet werden. Für die Berechnungsperiode wird häufig 14 verwendet. Mit kürzeren Berechnungsperioden wird weniger geglättet und es ergibt sich ein etwas chaotischerer Verlauf. Analog wird AvgSD für die negativen Kursänderungen berechnet. SU summiert alle positiven und SD alle negativen Kursveränderungen in der Periode: Up und Down bezeichnen jeweils den Anstieg bzw. den Verlust des aktuellen Schlusskurses im Vergleich zum vorangegangen Schlusskurs: Interpretation und Handelssignale: Numerisch bewegt sich der RSI zwischen 0 und 100. In der Regel schwankt der RSI zwischen 10 und 90. Der Verlauf der RSI-Linie erfasst dabei die Stärke hinter einer Kursbewegung, als eine „relative“ Stärke in Prozent, welche um die Mittelpunktslinie mit Wert 50 pendelt. Handelsempfehlungen können mittels der folgenden drei Auswertungsmöglichkeiten analysiert werden: • Divergenz Entwickeln sich die RSI-Linie und der Kursverlauf tendenziell auseinander oder zutreffend in gegenläufige Richtungen, dann wird von einer Divergenz gesprochen. Eine Divergenz entsteht nicht oft, aber wenn sie entsteht, dann deutet sie einen Trendwechsel an. In einem Aufwärtstrend zum Beispiel zeigt die Divergenz an, dass die Steigungsstärke des Kurses nachgelassen hat und ein Abwärtstrend imminent ist. Wenn eine Divergenz in der extremen Zone (über 70 oder unter 30) auftritt, ist dies signifikanter und sollte als ein starkes Warnsignal wahrgenommen werden. Die Abbildung 3.13 zeigt eine Divergenz im Mai und Juni 2006 und liefert ein signifikantes Signal einen Trendwechsel von fallenden hin zu steigenden Kursen. 39 3. Wertpapieranalyse • Überkaufte- / Überverkaufte Situationen Befindet sich die RSI-Linie im extremen oberen Bereich der Graphen, d.h. über 70, kann man dies als überkaufte Marktsituation interpretieren. In der Regel führen viele aufeinanderfolgende Kursgewinne zu solch „überhitzten“ Situationen. Allgemein prognostiziert man daraus ein baldiges Drehen des Kursverlaufs hin zu wieder fallenden Kursen. Das Verlassen des extremen Bereiches wird als Handelssignal gewertet. In einer starken Trendphase jedoch liefert RSI oft Fehlsignale, da Handelssignalen zu früh entstehen. Im Beispiel in der Abbildung 3.13 gibt es relativ gute Signale während der Seitwärtstrends. In der starken Aufwärtsphase in 2006 allerdings liefert der RSI ein Verkaufssignal zu früh schon im August, während der Kurs weiter bis Anfang 2007 ansteigt. • Das Überkreuzen der Mittelpunktslinie In der Anwendung des RSI wird das Überkreuzen der Mittelpunktslinie im Allgemeinen als ein weiteres Handelssignal interpretiert. Dabei wird davon ausgegangen, dass die RSI-Linie bei Durchlaufen der Mittelpunktslinie ihre Bewegung in die gleiche Richtung bis zu einer Extremzone fortsetzt. Schneidet die RSI Linie die Mittelpunktslinie von unten nach oben, wird dies als Kaufsignal, ein Schnitt von oben nach unten als Verkaufssignal angesehen. Verkauf Zu frühes Verkaufssignal Überkauft Mittelpunktslinie Überverkauft Kauf Divergenz Kauf Abbildung 3.13 RSI, Microsoft Corp. [SCharts08] 40 Verkauf 3. Wertpapieranalyse 3.4.3 Trendintensitätsindikatoren Für eine optimale Auswahl der geeigneten Indikatoren in der jeweiligen Marktphase ist es entscheidend zu beurteilen, ob sich der Markt in der Trendphase oder in einer trendlosen Phase befindet. Einige Indikatoren liefern bessere Handelssignale in einer trendlosen Phase, während andere in einer Trendphase besser geeignet sind. Für diese Trendbeurteilung werden Trendintensitätsindikatoren eingesetzt. Beispiel: ADX (Average Directional Movements) Der ADX wurde, wie auch der RSI, von Welles J. Wilder in den 70er Jahren entwickelt. Der ADX berechnet die vorherrschende Trendintensität, zeigt aber nicht dessen Trendrichtung an. Der ADX wird oft als Filter in der Seitwärtsbewegung des Marktes verwendet. Berechnung: Für die Berechnung des ADXs gibt es einige Varianten, welche sich nur unwesentlich unterscheiden und zu nahezu identischen Ergebnissen führen. Im Folgenden wird die ADXVariante erläutert, welche in TInTo Anwendung findet. Die Berechnung des ADX gliedert sich in mehrere Schritte auf. Zuerst werden die grundlegenden Teilindikatoren erläutert, welche als Hilfsgrößen für die Berechnung des ADX dienen. 1. Ermittelt wird zuerst die positiv gerichtete Bewegung (+DM: Positive Directional Movement) und die negative gerichtete Bewegung (-DM) im Vergleich zum gestrigen Tag. Bildet sich ein vergleichbar höheres Hoch, dann wird dies als eine positive Bewegung gewertet, ein vergleichbar tieferes Tief als negative Bewegung: t ist der fortlaufende Zeitpunkt. 2. Um die im ersten Schritt berechnete Aufwärts- oder Abwärtsbewegung als einen relativen Wert verwenden zu können, wird zusätzlich eine Handelsspanne (TR: True Range) berechnet. Diese Handelsspanne berücksichtigt auch den gestrigen Schlusskurs und wird daher auch als „wahre Handelsspanne (True Range)“ bezeichnet: 3. Anschließend wird der Durchschnitt der aufgetretenen Kurslücken (+DM oder -DM) in einer bestimmten Periode (n) mit dem Durchschnitt der wahren Handelsspanne im Relation gesetzt: 41 3. Wertpapieranalyse 4. Im vierten Schritt wird die Stärke der Kursbewegung (DMI) als ein relativer Wert aus der Kraft der positiven und negativen Kurslücken berechnet. Dabei wird in der Formel ein absoluter Betrag der Differenz von +DI und -DI verwendet. Daher bezeichnet DMI nur die Stärke des Kurstrends, besagt aber nicht, ob die Stärke aus einem Aufwärtstrend oder Abwärtstrend heraus stammt: 5. Abschließend wird der ADX aus einer zusätzlichen Glättung des DMI geformt, da der DMI selbst ein recht volatiler Indikator ist: Wobei n2 die Berechnungsperiode zum Glätten des DMIs ist. Trendstärke sinkt Trendstärke sinkt Trendstärke steigt Abbildung 3.14 ADX, Intell Corp. [SCharts08] Interpretation und Handelssignale: In Abbildung 3.14 stellen die schwarze Linie den ADX, die grüne und die rote Linie die Stärke der Aufwärtsbewegung (+DI) bzw. die Stärke der Abwärtsbewegung (-DI) dar. Je höher der ADX Wert ausfällt, desto stärker ausgeprägt ist der vorhandenen Trend. Umgekehrt gilt auch, dass ein niedriger ADX Wert auf eine niedrige Trendintensität hinweist. Es ist jedoch zu beachten, dass ein steigender ADX lediglich eine steigende Trendintensität bedeutet, er besagt aber nicht, dass ein Aufwärtstrend vorliegt. Ein fallender ADX hingegen zeigt nur eine nachlassende Trendintensität, aber keinen Abwärtstrend. Die ADX-Linie in Abbildung 3.14 fällt ab Ende November 1998, während der Kurs weiter stark nach oben steigt. Dieser Verlauf deutet darauf hin, dass der vorherrschende starke Aufwärtstrend nachlassen wird. In der trendlosen 42 3. Wertpapieranalyse Phase ab Mitte März bis Anfang Juni bleibt die ADX-Linie niedrig und deutet keinen ausgeprägten Trend an. Auf Grund dieser Eigenschaft kann der ADX in trendlosen Phasen Fehlalarme von zum Beispiel Trendfolgeindikatoren filtern. Sollte während der trendarmen Periode ein als solcher nicht unmittelbar erkennbarer Fehlalarm auftreten, kann der ADX darstellen, dass kein ausgeprägter Trend existiert und es sich um ein Fehlsignal eines Trendfolgeindikators handelt. 3.4.4 Volumenindikatoren Während die bisher vorgestellten Indikatoren nur auf Kursinformationen basieren, beziehen Volumenindikatoren die gehandelten Wertpapiervolumina in die Betrachtung ein. Die Anzahl von Wertpapieren, welche in einem bestimmten Zeitraum gekauft oder verkauft wurden, stellen die Marktkräfte dar, welche hinter den Kursbewegung stehen. Eine starke Kursbewegung bei niedrigen Volumina kann zum Beispiel aus rein zufälligen Gründen durch wenige Ausreißer zustande gekommen sein. Wenn eine etwaige starke Kursbewegung durch viele Marktteilnehmer bestätigt wird, also wenn hohe Volumina gehandelt werden, können solche Kursentwicklungen als zuverlässiger angenommen werden. Aus diesem Grund ist es wichtig, das jeweils gehandelte Volumen in die Analyse mit einzubeziehen. Beispiel: CMF (Chaikin Money Flow) Der von Marc Chainkin entwickelten CMF misst das „echte“ Kaufinteresse oder Verkaufsinteresse, indem dieser Indikator sowohl die Stärke der Kursbewegung als auch die jeweilige Handelskraft, also die Volumen, in die Berechnung mit einbezieht. Berechnung: Das Kauf- bzw. Verkaufsinteresse wird durch den CLV (Closing Location Level) ausgedrückt. Definiert ist der CLV durch die relative Lage des Schlusskurses zu dem höchsten bzw. tiefsten Kurs. Der CLV stellt hiermit dar, ob der Schlusskurs über oder unter dem Mittelpunkt der betrachteten Handelsspanne (High(t)-Low(t)) liegt: Befindet sich der Schlusskurs oberhalb der Handelsspanne, kann man von Kaufinteresse oder Kaufdruck sprechen. Liegt der Schlusskurs unterhalb der Handelsspanne, besteht allgemein Verkaufsinteresse oder Verkaufsdruck. Im nächsten Schritt wird der CLV mit dem gehandelten Volumen multipliziert. Dabei wird die Stärke des Handelsinteresses noch durch den jeweiligen Volumenanteil gewichtet. Dieses Zwischenergebnis wird weiter geglättet, indem es durch das Durchschnittsvolumen dividiert wird und schließlich den CMF formt: Dabei kann man auch von Geldströmen sprechen, da der relative Kurspreis mit den Handelsvolumen multipliziert in der Berechnung vorkommt. 43 3. Wertpapieranalyse Verkaufssignal Verkaufsdruck lässt sich nach. Kaufsignal Abbildung 3.15 CMF, Fresenius Medical Care Corp. [SCharts08] Interpretation und Handelssignale: Der CMF misst die Geldströme, welche in den Markt hineingehen oder diesen verlassen. Kommt immer mehr Geld in den Markt hinein und steigt der Kurs, steigt auch der CMF. Dieses signalisiert eine bullische Marktsituation und vorherrschenden Kaufdruck. Der aktuelle CMF oszilliert um die Nulllinie. Dabei bedeutet die Lage des CMF zur Nulllinie die vorherrschende Marktsituation. Liegt der CMF über der Nulllinie, dann zeigt er an, dass eine bullische Marktsituation vorliegt und Kaufinteresse vorherrschend ist. Liegt der CMF unter der Nulllinie, dann ist von einem bearischen Markt und vorherrschendem Verkaufsdruck auszugehen. Je länger der CMF über oder unter der Nulllinie verbleibt, desto ausgeprägter ist die angezeigte Marktsituation. Gleiches gilt für den Betrag des CMF, je höher oder niedriger der CMF-Wert aktuell liegt, desto extremer bullisch oder bearisch ist die Marktsituation. Ein mögliches Kaufsignal liegt vor, wenn die CMF-Linie die Mittelpunktslinie von unten nach oben schneidet, wenn also die Marktsituation zu bullisch neigt. Ein mögliches Verkaufssignal liegt hingegen vor, wenn die CMF-Linie die Mittelpunktslinie von oben nach unten schneidet. In diesem Fall neigt die Marktsituation zu bearisch. Mögliche Kauf- und Verkaufssignale sind in Abbildung 3.15 entsprechend beispielhaft markiert. Der CMF eignet sich auch gut für die Anwendung der Divergenzanalyse. Im Beispiel in Abbildung 3.15 fällt der Kurs Anfang 2003, jedoch deutet der CMF darauf hin, dass der Verkaufsdruck nachlässt und bald ein bullischer Markt zu erwarten ist. 44 4 Handelsstrategien Das Ziel dieses Teils meiner Arbeit liegt darin, dem TInTo-Anwender bereits vordefinierte und „erfolgversprechende“ Handelsstrategien anzubieten, welche relevante Kauf- oder Verkaufssignale liefern können. Im Rahmen dieser Arbeit sollten Handelsstrategien basierend auf technischen Indikatoren entworfen werden. Fundamentale Analyse sowie Chartanalyse wurden in dieser Implementierung nicht berücksichtigt, können aber gegebenenfalls in einer späteren Programmversion Verwendung finden. Als Grundlagen für dieses Kapitel dienen die Erläuterungen der technischen Indikatoren in Kapitel 3. Im Folgenden wird in einem ersten Schritt die Generierung der eindeutigen Handelssignale wie Kaufen und Verkaufen ohne subjektive Elemente erläutert. Entwürfe von elementaren Handelsstrategien, welche auf einem technischen Indikator basieren, werden beispielhaft vorgestellt. Anschließend werden Entwürfe und Analysen von erweiterten Handelsstrategien beispielhaft erläutert, welche neben einem technischen Indikator weitere Handelskriterien in den Entscheidungsprozess mit einbeziehen. In einem letzten Schritt werden analysierte Handelsstrategien in Handelspausen beispielhaft vorgestellt. 4.1 Generierung von Handelssignalen Wie in Abschnitt 3.4 dargestellt worden ist, können technische Indikatoren Handelssignale liefern und somit Unterstützung bei eventuellen Handelsentscheidungen geben. Damit ist es möglich, technische Indikatoren eigenständig als eine einfache Form einer Handelsstrategie einzusetzen. Kombinationen aus verschiedenen Indikatoren bieten darüber hinaus die Möglichkeit, komplexe Strategien zu entwerfen. Beispiele für in 3.4 beschriebene Methoden für die Signalgenerierung sind: • • • • • Die Neigung der Indikatorwertlinie Die Lage von zwei oder drei Indikatorwertlinien zueinander Der Abstand von Indikatorwertlinie und Kurslinie Das Überkreuzen von zwei Indikatorwertlinien Das Überkreuzen von Indikatorwertlinie und Mittelpunktlinie 45 4. Handelsstrategien • • • • Das Überkreuzen von Indikatorwertlinie und Nulllinie Das Eintreten in den überkauften oder überverkauften Bereich Das Verlassen der jeweiligen extremen Zone Die Divergenzen-Analyse Handelsstrategien sollten immer eindeutige Handelssignale erzeugen, ohne subjektive Elemente oder die Notwendigkeit weiterer Interpretationen. Dies ist eine Grundvoraussetzung, um Handelsstrategien regelbasiert implementieren zu können. Im Weiteren genauer betrachtet worden sind jene Methoden, welche mit vergleichsweise geringem Aufwand und ohne subjektive Faktoren eindeutig eine der dreiwertigen Handelssituationen darstellen können: „Kaufen“, „Verkaufen“ oder „Halten“. „Halten“ bezieht sich auf jene Fälle, wo weder ein Kaufnoch ein Verkaufssignal generiert wird. Mögliche subjektive Faktoren können beispielsweise die Ergebnisse der Divergenzanalyse oder die Interpretation der Neigung der Indikatorlinie beeinflussen. Beide Methoden können wichtige Signale liefern, wenn sie richtig interpretiert werden. Abbildung 4.1 zeigt die Divergenzanalyse von CMF am Beispiel des Kurses FMC für Anfang 2003. Zum Analysezeitpunkt März scheint der Verkaufsdruck in einem fallenden Markt nachzulassen als ein Zeichen für eine eventuell bevorstehende Trendumkehr hin zu einem steigenden Markt. Analyse-Zeitpunkt Betrachtungszeitraum : ca. 2 Monaten Steigender CMF deuten auf fallenden Verkaufsdruck. Betrachtungszeitraum : ca. 1 Monat Fallender CMF deuten auf steigenden Verkaufsdruck. Betrachtungszeitraum : ca. 4 Monaten Konstanter CMF deuten auf Konstanten Verkaufsdruck. Abbildung 4.1 Subjektive Interpretationen, CMF, Fresenius Medical Care Corp. [SCharts08] 46 4. Handelsstrategien Bei detaillierter Betrachtung zeigt sich jedoch, dass je nach gewähltem Betrachtungszeitraum unterschiedliche Analyseergebnisse möglich sind: • kurzfristig (Betrachtungszeitraum 1 Monat) ergibt sich ein steigender Verkaufsdruck • mittelfristig über 2 Monate scheint der Verkaufsdruck zu fallen, während • über 4 Monate betrachtet der Verkaufsdruck konstant bleibt. Die Teildarstellungen in Abbildung 4.1 zeigen beispielhaft diese verschiedenen Interpretationsmöglichkeiten. Da die Divergenzanalyse also je nach Situation die subjektive Einschätzung des Analysten notwendig macht, wird diese nicht für die Verwendung in der automatischen Signalgenerierung empfohlen. Möglicherweise kann diese dennoch unter Verwendung komplexerer adaptiver Analysen und gegebenenfalls Künstlicher Intelligenz in zukünftigen Versionen des TInTo-Programms eingesetzt werden. Im Gegensatz zur Divergenzanalyse oder zur Neigung der Indikatorlinie liefern die folgenden Methodiken eindeutige Handelssignale ohne den Einfluss subjektiver Faktoren: • • • • • • • Die Lage von zwei oder drei Indikatorlinien zueinander Der Abstand von Indikatorlinie und Kurslinie Das Überkreuzen von zwei Indikatorlinien Das Überkreuzen von Indikatorlinie und Mittelpunktlinie Das Überkreuzen von Indikatorlinie und Nulllinie Das Eintreten in den überkauften oder überverkauften Bereich Das Verlassen der jeweiligen extremen Zone Auf Grund ihrer eindeutigen Handelssignale sind hauptsächlich diese Methodiken in den in den folgenden Abschnitten dargestellten Handelsstrategien verwendet worden. Beispielhaft zeigt Abbildung 4.2 eindeutige Handelssignale eines Kurses bei Verlassen der überkauften oder überverkauften Zonen. Verkaufssignale Kaufsignale Abbildung 4.2 Handelssignale, RSI, Microsoft Corp. [SCharts08] 4.2 Elementare Handelsstrategien Eine Vielzahl von Indikatoren können einzelstehend Handelssignale liefern und als eine Handelsstrategie Verwendung finden. Elementare Handelsstrategien basieren auf einem einzigen Indikator und dessen sogenannter „starren Signallinie“. Starre Signallinie ist eine Hilfslinie für technische Indikatoren zur Generierung von Handelssignalen. Starre Signallinien haben einen über Analysezeitraum immer konstanten Wert. Zu diesen elementaren Strategien gehören Vielzahl von Oszillator-basierte Strategien beispielsweise die RSI-basierte oder die CMF-basierte Strategie. Dabei verwenden diese 47 4. Handelsstrategien elementaren Handelsstrategien beispielsweise folgende starre Signallinien, um Handelssignale zu erzeugen: • Die Nulllinie • Die Mittelpunktslinie • Die Linien, welche extremen Marktsituationen abgrenzen. Nulllinie, CMF Verkauf Verkauf Kauf Kauf Kauf Mittelpunktslinie, RSI Verkauf Kauf Kauf Die extremen Zonen abgrenzenden Linien, RSI Verkauf Kauf Abbildung 4.3 Signallinien und Handelssignale, [SCharts08] Das folgendes Beispiel zeigt die Handelslogik einer RSI-basierten Strategie, welche als starre Signallinien zwei jeweils die extremen Zonen abgrenzende Linien verwendet: Handelslogik: • Kaufe ein Wertpapier, wenn die RSI-Linie den Wert 30 übersteigt, die 30er starre Signallinie also von unten nach oben schneidet. Dies signalisiert, dass der Kurs die überverkaufte Zone verlässt. • Verkaufe ein Wertpapier, wenn die RSI-Linie den Wert 70 unterschreitet, die 70er starre Signallinie also von oben nach unten schneidet. Dies signalisiert, dass der Kurs die überkaufte Zone verlässt. Ein Nachteil dieser Strategie ist unter anderem, dass diese Strategie sehr wenige Signale liefert. Um mehr Signale zu erzeugen, können die Werte der Signallinien beispielsweise wie folgt geändert werden: • Kaufe ein Wertpapier, wenn die RSI-Linie den Wert 20 übersteigt, die 20er starre Signallinie also von unten nach oben schneidet. • Verkaufe ein Wertpapier, wenn die RSI-Linie den Wert 60 unterschreitet, die 60er starre Signallinie also von oben nach unten schneidet. 48 4. Handelsstrategien Eine adaptive Anpassung der Werte für die starren Signallinien durch den Anwender sind in dieser Arbeit durch entsprechende Eingabefunktionen realisiert worden. Die detaillierte technische Umsetzung wird in den nächsten Kapiteln beschrieben. 4.3 Erweiterte Handelsstrategien Mit dem Ziel, eine erfolgversprechende Handelslogik unter allen Marktsituationen zu entwerfen wurde in der Voranalyse festgestellt, dass kein einzelner Indikator allein universell in jeder Situation rentable Handelssignale liefert. Daher sind erweiterte Handelsstrategien entworfen worden, welche neben einem Indikator durch weitere Handelskriterien ergänzt werden. 4.3.1 Kombination technischer Indikatoren Technische Indikatoren sind für unterschiedliche Verwendungszwecke entwickelt worden und enthalten daher auch verschiedene und meist einseitige Eigenschaften. Gesucht ist demnach eine Kombination sich ergänzender Indikatoren, welche wenig bis keine redundante Informationen enthalten. Informationsredundanz würde nur den Verarbeitungsaufwand erhöhen ohne das jeweilige Handelsergebnis zu verbessern. Abbildung 4.4 zeigt Indikatoren, welche sehr ähnlich verlaufen und keine zusätzlichen neuen Informationen liefern und deshalb auch nicht in einer Handelslogik kombiniert werden sollten: Abbildung 4.4 RSI, CCI, Slow Stochastics, Hewlett-Packard Co. [SCharts08] Um eine sich positiv ergänzende Kombination verschiedener Indikatoren ohne Informationsredundanz zu finden, wurden diese nach ihrem Verwendungszweck, ihren hauptsächlichen Eigenschaften und ihrer jeweiligen Aussage klassifiziert. 49 4. Handelsstrategien Die folgende Aufstellung orientiert sich an einem Artikel in [SCharts08]. Kategorie Beispiele Trendfolge -indikatoren SMA Verwendungszweck RSI CCI • Das Überkreuzen der MA-Linie • Die Neigung der Trendlinie • Bessere Signale in der starken Trendphase • Trägheit Überkaufte- / Überverkaufte Marktsituation • Das Verlassen von extremen Bereiche • Die Divergenz Analyse • Bessere Signale in der trendlosen Phase • Gleitende Signallinie bei Stochastics Kurz- / Mittelfristige Kursbewegung • Das Überkreuzen der Mittelpunktslinie • Die Divergenz Analyse • Bessere Signale in der trendlosen Phase • Trendfolge Eigenschaft bei MACD Stochastics Zentrierte Oszillatoren Momentum Besonderheiten Mittel- / Langfristige Trendrichtung EMA Bandbegrenzte Oszillatoren Handelssignale ROC MACD Trendintensitäts -Indikatoren ADX Trendintensität • Die Neigung der Trendlinie • Trendfilter • Oszillator Volumen -indikatoren CMF Marktkräfte mit Handelsvolumen • Das Überkreuzen der Mittelpunktslinie • Die Divergenz Analyse • Trendbestätigung • Oszillator Tabelle 4.1 Klassifikation technischer Indikatoren nach Verwendungszweck Oszillatoren wurden hierbei weiter unterteilt, haben aber allgemein gemeinsame Eigenschaften, zum Beispiel einen möglichen zukünftigen Trendwechsel erkennen zu können. Oszillatoren sind vorausschauender und empfindlicher in ihrer Reaktion als Trendfolgeindikatoren und liefern daher häufiger Handelssignale. Einerseits bedeutet dies mehr Handelschancen, andererseits liefern Oszillatoren aber auch mehr Fehlsignale als Trendfolgeindikatoren. Die weitere Unterteilung der Oszillatoren ergab sich aus der unterschiedlichen Zielsetzung, mit welcher ein Indikator entwickelt wurde. In Tabelle 4.1 wurden Verwendung, Signale und Besonderheiten aufgelistet, welche das Ziel beim Entwurf der Indikatoren waren und deren jeweiligen vorherrschendem Charakter entsprechen. Handelssignale wurden nur aufgeführt sofern es sich nicht um subjektive Faktoren handelt. Signale mit subjektiven Einflussgrössen wurden in Tabelle 4.1 gestrichen dargestellt. Besonderheiten in den Eigenschaften des MACDs werden im folgenden Abschnitt detailliert behandelt. Im Folgenden werden beispielhaft analysierte Handelsstrategien mit ihrer jeweiligen: • grundlegenden Idee • Handelslogik sowie • Analyseergebnissen dargestellt. 50 4. Handelsstrategien Auf Basis der Analyseergebnisse wird auch eine Empfehlung für oder gegen eine Implementierung der entsprechenden Handelsstrategie in das TInTo-System abgegeben. Im Weiteren werden vier erweiterte Handelsstrategien beispielhaft vorgestellt. Als Hinweis sei vorweg genommen, dass die ersten beiden Handelsstrategien letztlich enttäuschende Handelsergebnisse liefern, jedoch Potential für zukünftige Weiterentwicklungen von Handelsstrategien in TInTo bieten. 4.3.2 SMA + ADX Idee dieser Strategie war es, Handelssignale mittels SMA-Überkreuzen nur in der starken Trendphase zu verwenden und dadurch Fehlsignale in der seitwärts Phase zu reduzieren. Da SMA-Überkreuzen viele Fehlsignale in der Seitwärtsphase liefert, soll der ADX als Filterindikator für die Trendstärke dienen. Diese Kombination wurde gewählt, da die Strategie mittels SMA-Überkreuzen unterschiedlicher Perioden in Trendphasen allgemein sehr gute Signale geliefert hat. In der Literatur sowie Fachartikeln werden oft beide Indikatoren als sich gut ergänzend beschrieben. Die vorangegangene Diplomarbeit zum Thema TInTo empfiehlt ebenfalls die weitere Untersuchung der Anwendbarkeit dieser Indikatorenkombination. Handelslogik: • Kaufe ein Wertpapier, wenn der 21-Tage-SMA den 89-Tagen-SMA (Gleitende Signallinie) von unten nach oben schneidet und gleichzeitig der 14-Tage-ADX größer als 25 ist. • Verkaufe ein Wertpapier, wenn der 21-Tage-SMA den 89-Tagen-SMA (Gleitende Signallinie) von oben nach unten schneidet und gleichzeitig der 14-Tage-ADX größer als 25 ist. Analyse: Das Handelsergebnis der Simulation war enttäuschend. Getestet wurde mit dem in dieser Arbeit geschriebenen Programm „StrategyBuilder“, welches den gesamten Handelsgewinn im Analysezeitraum basierend auf historischen Daten berechnet. Auch unter Verwendung unterschiedlicher Berechnungsparameter (zum Beispiel 50-Tage, 200-Tage für SMA und 20Tage für ADX) hat sich das Ergebnis nicht wesentlich verbessert. Als ein Testbeispiel liefert diese Strategie 5,88% Rendite im Analysezeitraum von 2004 bis 2007 für das Analysewertpapier Dow Jones Industrial Average. Zum Vergleich: die nur SMA-Überkreuzen basierte Strategie erzielt im selben Zeitraum 11,34% Rendite2. Worin hat das schlechte Handelsergebnis seine Ursache? Der SMA ist ein Trendfolgeindikator, welcher als eine seiner grundlegenden Eigenschaften dem Trend folgend, also allgemein zeitlich verzögert oder träge reagiert. Der ADX ist ein Trendintensitätsindikator mit Oszillatoreigenschaften, welcher schneller als der SMA reagiert und frühzeitig die Intensität des Trends signalisiert. Vor bzw. nach wichtigen Trendumkehren: In Kombination beider Indikatoren verpasst diese Strategie wichtige Signale generiert aus dem SMA-Überkreuzen und verursacht in vielen Fällen große Verluste. Im Beispiel in Abbildung 4.6 ist dargestellt, dass das Verkaufssignal des SMA im Februar 2004 nicht genutzt werden konnte, da die Trendintensität (gemäß ADX) schon unter 25 lag. Das Analyseergebnis zeigt, dass 2 Detaillierte Testergebnisse und Testbedingungen sind in Anhang 4-A erhältlich. 51 4. Handelsstrategien wichtige SMA Überschneidungen, welche im Allgemeinen eine Trendumkehr signalisieren, zeitlich verzögert eintreten zu einem Zeitpunkt, wenn die Trendintensität schon nachgelassen hat. Somit kann das SMA-Überkreuzen Signal gemäss dieser Handelslogik nicht mehr berücksichtigt werden. In Seitwärtsmärkten: Wie in Abschnitt 3.4.1 beschrieben, hat das SMA-Überkreuzen die Besonderheit in Seitwärtsmärkten, dass die SMA-Linien eng beieinander liegen. Dies führt dazu, dass jede kleine Bewegung der kurzfristigen SMA-Linie die langfristige SMA-Linie schneidet und ein Handelssignal auslöst. Daher entstehen in dieser Marktsituation viele Fehlsignale wobei zu Ende dieser Phase auch ein signifikantes und nicht zeitlich verzögertes Signal entstehen kann. In dieser trendlosen Phase ist der ADX-Wert häufig kleiner als 25, weshalb diese Handelslogik auch viele wichtige gewinnbringende Signale verwirft, welche zu Ende der Seitwärtsphase ausgelöst worden sind. Abbildung 4.5 zeigt, dass ein signifikantes Kaufsignal im April 2003 abgelehnt worden ist, als die Trendintensität schwach, der ADX-Wert unter 25 war. In der schwachen Trendphase: SMA-Überkreuzungen sind signifikante Signale in einer Trendphase, welche den vollen Handelsgewinn ermöglichen können, siehe Beispiel Trendphase 2003 in Abbildung 4.5 Signifikante Signale entstehen allerdings oft in der schwachen Trendphase, weshalb diese Handelslogik nicht gut funktionieren konnte, da der ADX auch diese signifikanten Signale in der schwachen Trendphase filtert. Durch kürzere Berechnungsperioden des SMA kann man diesen Indikator so gestalten, dass wichtige Verkaufssignale früher, also noch in der Trendphase entstehen. Signifikante Kaufsignale entstehen allerdings immer noch früh oder dadurch sogar noch früher in der Seitwärtsphase und konnten auch mit kürzeren SMA Perioden nicht korrigiert werden. Ergebnis: Obwohl diese Strategie gerade nach dieser Handelslogik enttäuschende Handelsergebnisse liefert, ergänzen sich die beiden Indikatoren SMA und ADX prinzipiell gut. ADX filtert in der Tat viele Fehlsignale aus dem SMA-Überkreuzen in der trendlosen Phase und der ADX erkennt Trendwechsel zeitiger als der SMA. Im Beispiel in Abbildung 4.5 signalisiert der ADX eine sinkende Trendintensität von September bis November 2003 und deutet darauf hin, dass der Kursanstieg nachlassen wird und ein Trendwechsel bevorstehen könnte. Dies signalisiert der ADX deutlich vor dem Verkaufssignal aus dem Überkreuzen der SMA-Linien, welches erst im Februar 2004 erfolgt. Auf Grund der Analyseergebnisse wird empfohlen, diese Handelsstrategie weiter zu untersuchen um gegebenenfalls eine optimale Abstimmung aus SMA und ADX zu finden. 52 4. Handelsstrategien Verkauf Verkauf Kauf Trendintensität sinkt Abbildung 4.5 21-Tage-SMA (blau oben), 89-Tage-SMA (rot oben), 14-Tage-ADX (schwarz unten), Intel Corp. [SCharts08] 4.3.2 SMA + CMF Grundlegende Idee dieser Handelsstrategie ist eine Kombination aus dem Trendfolgeindikator SMA-Überkreuzen mit dem Volumenindikator CMF. Vergleichbar mit der zuvor beschriebenen Strategie (SMAC+ADX) ist das Ziel hierbei wiederum, Fehlsignale oder schwache Signale des SMA-Überkreuzens zu eliminieren. Der CMF gibt dazu zum jeweiligen Zeitpunkt an, ob ein bärischer oder bullischer Markt vorherrscht. In Kombination mit dem SMA-Überkreuzen soll dann kein Kaufsignal abgegeben werden, wenn ein bärischer Markt vorherrscht. Ebenso soll im bullischen Markt ein mögliches Verkaufssignal mittels SMA-Überkreuzen unterdrückt werden. Handelslogik: • Kaufe ein Wertpapier, wenn der 50-Tage-SMA den 200-Tagen-SMA (Gleitende Signallinie) von unten nach oben schneidet und gleichzeitig der 20-Tage-CMF größer oder gleich null ist. • Verkaufe ein Wertpapier, wenn der 50-Tage-SMA den 200-Tagen-SMA (Gleitende Signallinie) von oben nach unten schneidet und gleichzeitig der 20-Tage-CMF kleiner als null ist. Analyse: Getestet wurde diese Handelsstrategie wieder mit dem Programm „StrategyBuilder“ in TInTo. Verglichen mit den Ergebnissen aus nur dem Überkreuzen der SMA-Linien stellt diese Strategie keine wesentliche Verbesserung dar. Als ein Testbeispiel liefert diese Strategie 12,97% Rendite über 3 Jahre von 2004 bis 2007 für das Analysewertpapier Dow Jones Industrial Average (DJI). Ein Handel nur nach SMA-Überkreuzen dagegen liefert im selben Zeitraum lediglich 11,34%. In der Simulation filtert der CMF einige Fehlsignale aus dem SMA-Überkreuzen in der analysierten Seitwärtsphase. Abbildung 4.6 zeigt beispielhaft ein abgelehntes SMA Fehlsignal 53 4. Handelsstrategien in der trendlosen Phase im Mai 2005. Der 50-Tage-SMA schneidet hier den 200-Tage-SMA von oben nach unten und signalisiert damit eine Verkaufsempfehlung. Gleichzeitig weist ein CMF mit Wert größer null auf einen noch vorherrschenden Kaufdruck, einen bullischen Markt hin. Das Verkaufssignal mittels SMA-Überkreuzen wird zu diesem Zeitpunkt also abgelehnt. Wie auch in der Strategie (SMAC+ADX) liegt eine prinzipielle Gefahr dieser Handelsstrategie darin, dass signifikante Signale mittels SMA-Überkreuzen wegen der zeitlichen Verzögerung als Fehlsignale betrachtet und durch die CMF Bedingung eliminiert werden könnten. So kann der SMA mit zeitlicher Verzögerung ein wichtiges Signal liefern, während der in Echtzeit dem Marktvolumen folgende CMF schon eine sich gegebenenfalls geänderte Marktsituation widerspiegelt. Deshalb ist in CMF Charts oft zu sehen, dass dieser vorausschauend zur Kursbewegung reagiert und zukünftige Kursbewegungen prognostizieren kann. Im konkreten Beispiel in der Abbildung 4.6 stieg der Kurs Anfang 2004 weiter an bzw. tendierte leicht seitwärts, während der CMF schon einen sich abschwächenden Kaufdruck signalisierte und einen möglichen Kursrückgang prognostizierte. Diese vorgestellte Handelsstrategie SMAC+CMF hat das Handelsergebnis insgesamt ebenfalls nicht wesentlich verbessert. Allerdings haben Volumenindikatoren oder auch die jeweiligen Handelsvolumia selbst eine besondere Bedeutung in der Modellierung von Handelsstrategien, führen sie doch eine neue Dimension von Marktinformationen in die Betrachtung mit ein. Auch wenn im konkreten Beispiel nicht erfolgreich, so wird doch empfohlen, weitere Untersuchungen zur Kombination von Kursverlaufsindikatoren und Volumenindikatoren in möglichen Handelsstrategien zu untersuchen. Verkauf Verkauf Kauf Kauf Kauf Verkauf Kauf Kauf Kauf Kauf Kauf Kauf Verkauf Verkauf Abbildung 4.6 50-Tage-SMA (blau oben), 200-Tage-SMA (rot oben), CMF (schwarz unten), Dow Jones Indusrial Average. [SCharts08] 54 4. Handelsstrategien 4.3.3 SMAC (SMA Crossover) Die zuvor untersuchten Handelsstrategien in 4.3.1 und 4.3.2 lieferten weitgehend enttäuschende Resultate aufgrund der zeitlichen Verzögerung, mit welcher die MA Indikatoren Handelssignale abgeben. Die nun in diesem Abschnitt vorgeschlagene Strategie mit SMA-Überkreuzen verwendet keinen weiteren unterschiedlichen Indikator, sondern vielmehr die Lage und den Abstand zweier SMA-Linien mit dem Ziel, Fehlsignale in der seitwärts Phase zu eliminieren. Dabei soll ein geringer Abstand zweier SMA-Linien auf eine Seitwärts- oder eine trendschwache Phase hinweisen. Im Beispiel in der Abbildung 4.6 werden Fehlsignale zwischen Mitte und Ende 2005 generiert, als der Abstand beider SMA-Linien sehr gering war. Handelslogik: • Kaufe ein Wertpapier, wenn nach dem Überkreuzen beider Linien die 50-Tage SMA-Linie um 100 höher als die 130-Tage SMA-Linie liegt. • Verkaufe ein Wertpapier, wenn die 50-Tage SMA-Linie die 130-Tage SMA-Linie von oben nach unten schneidet. Analyse: Im Vergleich zu den bereits untersuchten Strategien lassen sich mit dieser Strategie bessere Handelsergebnisse erzielen. Diese Handelsstrategie wurde als „SMA Crossover (SMAC)“ im StrategyBuilder in TInTo umgesetzt und steht dort den Anwendern zur Verfügung. Dabei ist eine Eingabefunktion zum Festlegen des Abstandes beider SMA-Linien für Kauf- und Verkaufssignale implementiert. Mit Hilfe dieser Eingabe kann der Abstand der SMA-Linie für ein Handelssignal gemäß oben genannter Logik gewählt und damit die Empfindlichkeit der Strategie für Fehlsignale eingestellt werden. Die genaue technische Umsetzung wird in weiteren Details in den Kapiteln 6 und 7 beschrieben. In der Simulation für die analysierte Seitwärtsphase filtert diese Strategie die Fehlsignale aus dem SMA-Überkreuzen heraus. Je nach gewähltem Abstand beider SMA-Linien kann man mehr oder weniger Signale in der trendschwachen Phase generieren sowie die Zeitpunkte der erzeugten Signale beeinflussen. Die im Beispiel vorgestellte Handelslogik generiert Kaufsignale nur, wenn sich der Aufwärtstrend in dem durch die Eingabefunktion vorgegebenen Maß entwickelt hat. Damit konnten fehlerhafte Kaufsignale in der trendschwachen Phase eliminiert werden und im Ergebnis generiert diese Strategie die gewünschten signifikanten Signale. Ein möglicher Nachteil dieser Strategie wären gegebenenfalls entgangene Gewinne durch Abwarten auf den sich entwickelnden Abwärtstrend bevor ein relevantes Kaufsignal entsteht. Im Ergebnis eliminiert diese Strategie Fehlsignale, generiert allerdings noch trägere Kaufsignale. In der praktischen Anwendung liefert diese Strategie gute Handelsergebnisse, wenn man mitteloder langfristig und generell in einem Markt mit ausgeprägtem Trend handelt. Unter diesen Bedingungen ist dann der möglicherweise entgangene Gewinn im Vergleich zum gesamten erzielten Gewinn vernachlässigbar. Eine weitere ausgeprägte Eigenschaft dieser Strategie ist ihre Trendfolge, wodurch in einem stark fallenden Markt nur relativ geringe Verluste entstehen. Eine detaillierte Darstellung der Handelsergebnisse der verschiedenen Strategien beinhaltet Kapitel 8. In einer Beispielanalyse liefert diese Handelsstratege mit dem zusätzlichen Handelskriterium des Abstandes der beiden SMA-Linien eine Rendite von 68% über die 5 Jahre von 2004 bis 2008 für das Testwertpapier GDax (GDAXI). Im Vergleich dazu erzielt die Strategie nur auf 55 4. Handelsstrategien Basis des SMA-Überkreuzens lediglich eine Rendite von 62% unter sonst identischen Bedingungen. Mit dem Testwertpapier MSFT über 4 Jahre von 2004 bis 2007 ist der Renditeunterschied noch deutlicher, wobei die Strategie mit dem zusätzlichen Handelskriterium 37% Rendite liefert und die Strategie mit nur SMA-Überkreuzen lediglich 26%3 . 4.3.4 MACDCP(MACD Crossover Plus) Weiterhin sollte eine Lösung gefunden werden, um die zuvor dargestellten MA-typischen Verzögerungen zu reduzieren und profitablere Handelsergebnisse zu erzielen. Eine sinnvolle Kombination aus Oszillatoren und Trendfolgeindikatoren war gesucht. ? Trendfolgeindkator: Trendrichtung Zeitliche Verzögerung Trendphase Oszillatoren: Sensibeler Seitwärtsphase Zu frühe Signale Verschiedene Recherchen haben zu einem bereits existierenden Lösungsansatz von Gerald Appel geführt. Vor über 30 Jahren hatte er mit dem Ziel, mittels MA Indikatoren frühzeitige Handelssignale zu generieren, den MACD (Moving Average Convergence Divergence) entwickelt. Im Folgenden werden wesentliche Details des MACD erläutert sowie eine erfolgsversprechende Handelsstrategie auf Basis des MACD dargestellt. Diese Einführung basiert auf Artikeln aus [CT06] in [TSO08], [SCharts08]. Anregungen zur Handelslogik sind dem Vorschlag von John F. Murphy in seinem Artikel „Ten Laws of Technical Trading“ in [SCharts08] entnommen. Einführung zur MACD (Moving Average Convergence Divergence): Der MACD ist ein einzigartiger Indikator, welcher Trendfolge- und Oszillatoreigenschaften miteinander verbindet. Durch seine speziellen Eigenschaften reduziert der MACD das Problem der MA-typischen Zeitverzögerung behält jedoch die Fähigkeit bei, dem vorherrschenden Markttrend zu folgen. Mathematisch stellt sich die Konstruktion des MACD erstaunlich simpel als die Differenz zweier EMAs (Exponential Moving Average) dar: 3 Detaillierte Testergebnisse und Testbediungungen sind in Anhang 4-B aufgeführt. 56 4. Handelsstrategien In dieser Gleichung ist t der fortlaufende Zeitpunkt des Analyseszeitraums und sind n1 und n2 die Berechnungsperioden. Bei genauer Betrachtung ist erkennbar, dass diese Gleichung eine Kombination der Formeln für den Indikator „EMA“ sowie den Oszillator „Momentum“ darstellt. Typischerweise berechnet sich der Oszillator als Differenz aus zwei Schlusskursen, in unserem Fall als Differenz aus zwei EMA Werten. Was macht den MACD so besonders und warum ist er bei vielen Analysten so beliebt? Vermutlich liegt diese Beliebtheit an der Eigenschaft des MACD, die MA-typische zeitliche Trägheit aufzuheben. Verkauf MACD EMA Kauf Verkauf Verkauf Kauf Kauf Abbildung 4.7 12-Tage-EMA (blau oben), 26-Tage-EMA (rot oben), 12-26-9-Tage-MACD (schwarz unten), MSFT Corp. [SCharts08] In der Abbildung 4.7 ist der MACD als schwarze Kurve im unteren Graphen dargestellt. Diese MACD-Linie ergibt sich aus der Differenz der im oberen Graph gezeigten EMAs. Interpretation des MACD: Verläuft die kurzfristige EMA-Linie unterhalb der langfristigen Linie, ergibt sich mathematisch gemäß obiger Gleichung ein negativer MACD. Dieser signalisiert einen bärischen Markt, d.h. einen Markt unter Verkaufsdruck. Umgekehrt ergibt sich ein positiver MACD, wenn der EMA der kurzen Periode oberhalb des EMA der langen Periode verläuft. Ein positiver EMA signalisiert einen bullischen Markt unter Kaufdruck. Kreuzen sich beide EMA Linien, so ergibt sich ein MACD von null. In einer „traditionellen“ Anwendung des EMA-Überkreuzens würden sich in Abbildung 4.7 beispielsweise am 9. April und am 23. Juni Kauf- bzw. Verkaufssignale ergeben, jeweils dann, wenn sich die beiden EMA-Linien überkreuzen. Zu diesen Zeitpunkten schneidet der MACD seine Nulllinie von unten nach oben, wenn die kurzperiodige EMA-Linie die langperiodige ebenfalls von unten nach oben schneidet. Der MACD bewegt sich aus dem negativen in den positiven Bereich. Aus dieser Anwendung der EMA-Überkreuzung alleine ergibt sich noch keine neue profitablere Handelsstrategie. Dazu müssten überkaufte oder überverkaufte Marktsituationen sicher erkannt werden. 57 4. Handelsstrategien In Abbildung 4.7 ist erkennbar, dass, wenn sich der MACD an seinem lokalen Minimum befindet, der Abstand der beiden EMAs ist lokal am größten in einem Abwärtstrend des Kurses. Dieses kann man als überverkaufte Marktsituation interpretieren. Wenn sich der MACD hingegen an seinem lokalen Maximum befindet, dann ist der Abstand beider EMAs lokal am größten und im Aufwärtstrend. Dieses kann man als überkaufte Marktsituation interpretieren. Um nun ein Handelssignal in diesen extremen Marktsituationen zu generieren, wird der EMA der MACD Linie als gleitende Signallinie verwendet. Diese Signallinie ist im unterem Graphen in der Abbildung 4.7 in Rot dargestellt. Ein Kaufsignal liegt dann vor, wenn die MACD-Linie die Signallinie von unten nach oben schneidet. Ein Verkaufssignal liegt vor, wenn die MACDLinie die Signallinie von oben nach unten schneidet. Im konkreten Beispiel am Kurs von Microsoft im Frühjahr 2007 ergibt sich am 18. März ein Kaufsignal, ein Verkaufssignal wiederum am 18. Mai. Beide Signale entstehen jeweils vor den EMA-Überkreuzungspunkten. Die jeweils erzielbaren Kursgewinne aus EMA bzw. MACD sind für diese Fäll rechts neben den Graphen in Abbildung 4.7 dargestellt. Aus diesen Erkenntnissen ergibt sich folgende Handelslogik. Handelslogik: • Kaufe ein Wertpapier, wenn die MACD-Linie die Signallinie von unten nach oben schneidet und gleichzeitig die MACD-Linie und die Signallinie kleiner als null sind. • Verkaufe ein Wertpapier, wenn die MACD-Linie die Signallinie von oben nach unten schneidet und gleichzeitig die MACD-Linie und die Signallinie größer als null sind. Analyse: Diese Handelsstrategie wurde als MACDCP (MACD Crossover Plus) im StrategyBuilder in TInTo umgesetzt. Die genaue technische Umsetzung wird in weiteren Details in den Kapiteln 6 und 7 beschrieben. Im Vergleich zur Strategie mit nur EMA-Überkreuzen lässt sich mit dieser Strategie besonders im volatilen Markt ein besseres Handelsergebnis erzielen, welches vergleichsweise näher an dem maximalen Kursgewinn der jeweiligen Handelsperiode verläuft. Eine detaillierte Darstellung der Handelsergebnisse der verschiedenen Indikatoren beinhaltet Kapitel 8. Diese Handelsstrategie ist spekulativ und disziplinierend, schlägt sie doch vor, nur in bärischen Märkten zu investieren und in bullischen zu verkaufen. Dabei unterscheidet die MACD Nulllinie zwischen beiden Marktsituationen. Dieser Ansatz ist konträr zu instinktivem menschlichen Handeln, erwartet man doch tendenziell eher zu verkaufen, wenn alle anderen Marktteilnehmer dies auch tun bzw. zu kaufen, sollte dies der vorherrschende Trend sein. Verkäufe in bärischen Märkten sind nach dieser Logik sogar ausgeschlossen und man ist gezwungen, auf eine bullische Marktsituation zu warten. Diese Strategie zielt darauf ab, vollen Kursgewinn aus der Differenz zwischen niedrigstem und höchstem Kurswert zu erzielen, und spekuliert auf eine Umkehr der Kursbewegung in der jeweils extremen überkauften oder überverkauften Marktsituation. Schwache oder Fehlsignale können jedoch auch hier entstehen, wenn der MACD nahe der Nulllinie verläuft. Um diese Signale zu eliminieren, kann die Handelslogik beispielsweise wie folgt erweitert werden: 58 4. Handelsstrategien • Kaufe ein Wertpapier, wenn die MACD-Linie die Signallinie von unten nach oben schneidet und gleichzeitig die MACD-Linie und die Signallinie kleiner als -0,3 sind. • Verkaufe ein Wertpapier, wenn die MACD-Linie die Signallinie von oben nach unten schneidet und gleichzeitig die MACD-Linie und die Signallinie größer als +0,3 sind. • Die Werte -0,3 sowie 0,3, welche die nur gewünschten starken Marktsituationen abgrenzen, müssen je nach Wertpapier adaptiv festgelegt werden. Diese Möglichkeit für die Abgrenzung von Marktsituationen ist im TInTo-StrategyBuilder durch eine Eingabefunktion implementiert worden. In einem Testbeispiel für Aktien der Microsoft Corp. liefert die Strategie mit dieser adaptiven Abgrenzung von Marktsituationen mit Werten von -0,3 und 0,3 im Ergebnis 81% Rendite über die 4 Jahre von 2004 bis 2007. Verglichen damit liefert die Strategie mit der Abgrenzung von Marktsituationen mittels Nulllinie eine Rendite von nur 59% über die 4 Jahren von 2004 bis 2007 4. Über diese Betrachtung hinaus können Fehlsignale entstehen, wenn zum Beispiel in einer überkauften Marktsituation weitere Kurssteigerungen und nicht die erwartete Trendumkehr erfolgen. Dann liefert auch diese Strategie MACDCP zu frühe Handelssignale. Überkauft Überverkauft Überkauft Überverkauft Abbildung 4.8 14-Tage-RSI, 20-Tage-CCI, 12-26-9-Tage-MACD, MSFT Corp. [SCharts08] 4 Detaillierte Testergebnisse sind in Anhang 4-C aufgeführt. 59 4. Handelsstrategien Vergleich mit weiteren Oszillatoren: Ähnlich wie der MACD verwenden andere Oszillatoren wie RSI oder CCI überkaufte oder überverkaufte Marktsituationen, um Handelssignale zu generieren. Kaufsignale entstehen dann, wenn die jeweilige Indikatorlinie den unteren extremen Bereich verlässt. Analog ergeben sich Verkaufssignale bei Verlassen des oberen extremen Bereichs. Die Indikatoren MACD, CCI und der RSI wurden an den Kursverläufen des Dow Jones, DAX, Microsoft und Nasdaq getestet und die Ergebnisse beispielhaft für Microsoft in Abbildung 4.8 dargestellt. Dabei stellte sich heraus, dass der RSI signifikante, aber sehr wenige Signale liefert. Der CCI liefert viele Signale, darunter auch eine Reihe von Fehlsignalen oder zu frühen Signalen. Im Vergleich liefert der MACD bessere Signale, wobei diese beschriebene Strategie auch noch die Abgrenzungslinien für Marktsituationen verwendet, um nur gewünschte Signale herauszufiltern. Im TInTo-StrategyBuiler stehen neben diesen zwei vorgestellten erweiterten Strategien SMAC und MACDCP noch weitere 6 analysierte erweiterte Handelsstrategien für den Anwender zur Verfügung, welche durch weitere Handelskriterien ebenfalls bessere Handelsergebnisse erzielen. Auf eine detaillierte Erläuterung dieser Strategien wurde hier jedoch aus Platzgründen verzichtet. Eine Übersicht bietet Kapitel 7. 4.4 Kombinierte Strategien mit Investition in Handelspausen Um zusätzliche Gewinne während einer möglichen Handelspause zu erzielen, können Anleger das verfügbare Kapital in alternative Anlageformen investieren. Je länger die Handelspause ausfällt, umso bedeutsamer werden diese alternativen Anlageformen für die Gesamtrendite. Kauf Handelspause Verkauf Verkauf Kauf Handelspause Kauf Handelspause Verkauf Fortlaufender Zeitpunkt Beispiel: Strategie MACDCP + CD (Combine With Cash Deposit) Als eine sichere Variante für eine Investition in der Handelspause kann das Kapital in festverzinsliche Produkte investiert werden. Im Allgemeinen werden Zinsprodukte attraktiver in Märkten mit fallenden Aktienkursen. Dies resultiert daher, dass Unternehmen sich weiter Kapital beschaffen müssen. Ist der Eigenkapitalmarkt (Aktienmarkt) für Anleger zeitweise unattraktiv, so weichen Unternehmen in den alternativen Markt (Schuldverschreibungen, Bonds) zur Kapitalbeschaffung aus. Folgende Strategie kombiniert die zuvor erläuterte Strategie MACDCP (MACD Crossover Plus) als Aktive-Markt-Strategie mit einer Kapitalanlage während der Handelspause auf einem verzinsten Verrechnungskonto. Der zusätzliche Ertrag ergibt sich aus dem erzielten Zins auf dem Verrechnungskonto während der Handelspause. 60 4. Handelsstrategien Handelslogik: • Ziehe Kapital vom Verrechnungskonto ab und kaufe ein Wertpapier, wenn die MACD-Linie die Signallinie von unten nach oben schneidet und gleichzeitig die MACD-Linie und die Signallinie kleiner als -0,3 sind. • Verkaufe ein Wertpapier und deponiere das Kapital auf dem Verrechnungskonto, wenn die MACD-Linie die Signallinie von oben nach unten schneidet und gleichzeitig die MACDLinie und die Signallinie größer als +0,3 sind. Diese kombinierte Strategie aus der Investition in Handelspausen, mit dem MACDCP+CD erzielt nicht wesentlich höheren, aber in allen Marktsituationen sicheren zusätzlichen Gewinn. In dieser Arbeit sind die folgenden zwei Handelspausen-Strategien, inklusive der hier vorgestellten, entwickelt worden: • OP („Combine With Opposite Product“) • CD („Combine With Cash Deposit“) Diese Handelspausen-Strategien lassen sich mit allen in TInTo-StrategyBuilder angebotenen elementaren sowie erweitere Strategien optional kombinieren, um zusätzliche Gewinne in den Handelspausen zu erzielen. Die Analyseergebnisse zu den in dieser Arbeit entwickelte Strategien haben zu einigen viel versprechenden Verbesserungen im Vergleich zu den bislang im Projekt eingesetzten Strategien geführt. Eine viel versprechende und deutliche Verbesserung des Handelsergebnisses wurde beispielsweise durch die erweiterten Strategien wie „MACDCP“ und „SMAC“ sowie optional kombinierbare Handelspausen-Strategien schon erzielt. Für die zukünftige Entwicklung der Handelsstrategien sollten darüber hinaus weitere Funktionen wie zum Beispiel feste Risikogrenzen in TInTo umgesetzt werden. Zukünftig lässt sich gegebenenfalls unter Verwendung neuronaler Netze eine selbstlernende Handelsstrategie realisieren, welche zum Beispiel optimale Kombinationen aus geeigneten Indikatoren anhand der vorherrschenden Marktsituation selbständig auswählen kann. Anregungen für den Entwurf weiterer profitablerer und stabilerer Strategien sowie Anwendung von Neuronalen Netzen für selbstlernende Handelsstrategien können [TSO08] entnommen werden. Hier sind Entwurfsideen von über 250 Indikatoren vorgestellt, die Formeln der Indikatoren sowie detaillierte Erläuterungen sind jedoch nicht erhältlich. 61 5 TInTo Die Datenbankanwendung TInTo (Technical Indicator Tool) ist ein datenbankgestütztes Werkzeug zur regelbasierten Analyse von Wertpapieren. Dieser Arbeit gehen bereits vier Diplomarbeiten zur Entwicklung und Weiterentwicklung von TInTo voraus. Die Diplomarbeit von Alexander Geppert beinhaltet den theoretischen Teil zur Modellierung der technischen Analyse von Wertpapieren. Darauf aufbauend entwickelte Christian Hübel eine AccessApplikation “TInTo” zur Darstellung sowohl der Wertpapierkurse als auch der berechneten Indikatoren in Charts. Eine webbasierte Version von TInTo wurde anschließend von Nargis Hahn implementiert. Gereon Schüllers Diplomarbeit schließlich erweiterte TInTo um die Möglichkeit der Intraday-Analyse. Ein allgemeine Besonderheit von TInTo liegt dabei darin, dass die Berechnungsvorschriften der technischen Indikatoren sowie deren Aktualisierung in der Datenbanksprache SQL gehalten sind. Die in dieser Arbeit vorgestellte Implementierung von Handelsstrategien baut auf dem existierenden System TInTo auf. Dieses Kapitel beinhaltet sowohl eine Beschreibung der Systemarchitektur als auch der Spezifikation verwendeter technischer Indikatoren sowie der neu implementierten Funktionen. Im Detail werden die an der Inkatorenberechnung vorgenommenen extensiven Verbesserungen dargestellt. 5.1 Systemarchitektur Die Anwendung TInTo verwendet Microsoft Access als das erforderliche DBMS. Die von Access hierfür nicht angebotenen zusätzlich benötigten Funktionen wurden mittels Visual Basic for Applications implementiert. Für die graphische Darstellung der Kursdaten sowie der technischen Indikatoren wurde die von der Firma Advanced Software Engineering vertriebene Anwendung ChartDirector verwendet. TInTo ist aus verschiedenen Komponenten aufgebaut, welche im Folgenden kurz beschrieben werden. 63 5. TInTo • Internet-Schnittstelle Mit Hilfe von dieser Komponente werden die abgefragten Kursdaten sowie die Umsatzdaten aus dem Internet eingelesen. Als Informationsquelle wird hierfür das Finanzportal Yahoo! Finance verwendet, welches kostenlos End-of-day- und Intraday-Daten zur Verfügung stellt. Dabei werden die Datenabfragen automatisch von TInTo an Yahoo! übergeben und die gelieferten Daten anschließend als CSV-Datei5 in TInTo importiert. • Datenbank Interface (Microsoft Jet Engine) Diese Komponente bildet die Schnittstelle zwischen der eigentlichen Datenbank und den Benutzeranwendungen. Das Datenbankinterface ermöglicht anderen Komponenten die Daten aus der Datenbank zu verwenden und darüber hinaus auch zu manipulieren. Als ein Teil des DBMSs dient das Datenbankinterface der Speicherung und Verwaltung der Kurs- und Umsatzdaten sowie der Definition der Sichten für die Berechnung der technischen Indikatoren. Weitere Funktionalitäten dieser Komponente sind zum Beispiel Schemataverwaltung und Transaktionsverwaltung. • TInTo-Hauptkomponente Dieses Modul fungiert als das Herzstück von TInTo und übernimmt die gesamte Steuerung aller übrigen Komponenten. Alle Interaktionen der TInTo-Anwender mit der graphischen Benutzeroberfläche werden hier weiter verarbeitet und die entsprechenden Anweisungen an alle relevanten Anwendungskomponenten gegeben. 1. Anforderungen für ein neues Wertpapier. Dabei wird das Symbol des gewünschten Wertpapiers sowie die Analyseperiode mit in die URL des Abrufs einkodiert und an die Internet-Schnittstelle übergeben. Die Rückgabe der angeforderten Daten im CSV-Format wird in einem String abgelegt und weiter verarbeitet. Schließlich werden die erhaltenen Daten mit Hilfe der Microsoft Jet Engine in Tabellen in der Datenbank gespeichert. 2. Änderungen der Chartdarstellung. Alle vom Benutzer eingegebenen Informationen für die Chartdarstellung werden hier übernommen und als Parameter an den Chartmanager weitergeleitet. Beispiele für diese Parameter sind Charttyp, Anzeige von Volumenbalken und Auswahl von technischen Indikatoren. 3. Indikatorverwaltung. Die Berechnungsdefinitionen der technischen Indikatoren können beliebig von Benutzer angelegt werden. Existiert ein benutzerdefinierter technischer Indikator bereits, kann dieser auch weiter modifiziert werden. Diese Definitionen sollten dabei nur in der Datenbanksprache SQL geschrieben werden. Die TInTo-Hauptkomponente speichert oder modifiziert die Definitionen der Indikatoren über das Datenbankinterface, Microsoft Jet Engine. 5 Das Dateiformat CSV beschreibt den Aufbau einer Textdatei zur Speicherung oder zum Austausch einfach strukturierter Daten [Wik08]. 64 5. TInTo • Chartmanager Der Chartmanager übernimmt die gesamten Charteinstellungen, um Kursinformationen, Volumeninformationen und Indikatorenwerte graphisch als Charts mit Hilfe des nachfolgenden ChartDirector darzustellen. Hier werden die Größe des Hauptfensters sowie die Größe des zu zeichnenden Charts berechnet. Der genaue Zeitraum zur Darstellung des Charts nach der vom Anwender gewünschten Analyseperiode wird hier festgelegt und die Sichtendefinitionen der ausgewählten Indikatoren durchgeführt. Außerdem, falls gewünscht, können die ChartDirector-internen Indikatoren hinzugefügt, sowie Chardarstellungen, wie zum Beispiel Chartarten oder die Skalierungsinformtaion als Parameter übergeben werden. Letztlich wird die Visualisierungsmethode des ChartDirectors aufgerufen. Falls die gewünschte Kursinformation sowie Volumeninformation nicht bereits in der Datenbank vorhanden ist, werden diese zuerst über die Internetschnittstelle geladen und über die Datenbankschnittstelle in Tabellen gespeichert. Graphische Benutzeroberfläche Eingabe Rückgabe ChartDirectorVisualisierung TInTo Hauptkomponente Neuen Kurs /Indikator anzeigen Chart Manager WP/Indikator Kursdaten Anfragen Stammdaten Anzeigedaten Kursdaten DB Interface (Jet) Interent Schnittstelle Kurs-/ Wertpapierdaten Nachrichten Daten Sichten DB Abbildung 5.1 TInTo Systemarchitektur, [Hüb07] 65 Neues Wertpapier Anfragen 5. TInTo • ChartDirector-Visualisierung Diese Komponente realisiert die Anbindung zur bereits vorhandenen COM-Komponente 6, ChartDirector. Ihre Hauptaufgabe besteht darin, Kursdaten, Volumendaten sowie Indikatorenwerte graphisch auf dem Bildschirm zu visualisieren. • Grafische Benutzeroberfläche (engl. Graphical User Interface) Die Benutzeroberfläche erlaubt dem TInTo-Benutzer die Interaktion mit dem gesamten System über graphische Elemente wie Buttons, Listenfelder und Textfelder. Die Benutzeroberfläche enthält dafür mehrere Access-Formulare. Das Hauptformular ist das Formular Main, in welchem alle Formulare verbunden sind, welche Bedienelemente zur Verfügung stellen. Die einzelnen Elemente von Main sind in Abbildung 5.2 dargestellt und werden im Folgenden erläutert: ❶ ❼ ❷ ❸ ❹ ❻ ❺ ❼ ❽ ❾ Abbildung 5.2 TInTo Graphische Benutzeroberfläche ❶ Auf der oberen linken Seite befindet sich zunächst ein Kombinationslistenfeld zur Auswahl eines anzuzeigenden Wertpapiers. Nach einem Klick auf die Pfeiltaste übergibt die TInTo- 6 COM: Component Object Model. Eine von Microsoft entwickelte Technologie, welche eine einfache Wiederverwendung von bereits geschriebenen Programmcode unter dem Betriebssystem Windows ermöglicht. 66 5. TInTo Hauptkomponente die Identifikationsnummer des ausgewählten Wertpapiers sowie die selektierten Charteinstellungen an den Chartmanager. ❷ Unter dem Auswahlfeld des Wertpapier befinden sich drei Schaltflächen, eine um ein neues Wertpapier hinzufügen, eine weitere um ein bereits vorhandenes Wertpapier zu löschen, und eine Schaltfläche, um die Kursinformationen in Form von Tabellen anzuzeigen. ❸ Dieses Textfeld dient der Anzeige der zuletzt abgefragten Intraday-Kurse. ❹ Unter dem Intraday-Textfeld befindet sich der Auswahlbereich für die Chartdarstellung. Hier können die Charttypen wie Kerzenchart, Linienchart und Balkenchart eingestellt werden. Volumenbalken sowie die logarithmische Skalierung werden optional angeboten und der gewünschte Anaylsezeitraum und die Frequenz können ausgewählt werden. Die Frequenz legt hier die zeitliche Auflösung fest, wie viele Werte zu einem Darstellungswert erfasst werden sollen, zum Beispiel täglich oder monatlich. Price Band wie Bolliger Band oder Envelop können auf dem Kurschart eingeblendet werden. ❺ Aus diesen Listenfeldern können die von ChartDirector sowie die von TInTo angebotenen Indikatoren für die Darstellung unter dem Kurschart ausgewählt werden. ❻ Die vier Schaltflächen über dem Listenfeld für die TInTo-Indikatoren dienen zum Einfügen, Bearbeiten, Löschen und Anzeigen der Indikatoren. ❼ TInTo bietet die Optionen, Access ein- oder auszublenden, Linien auf dem Chart aufzuzeichnen und die Charts als Grafik abzuspeichern. ➑ Die zwei Schaltflächen unten links dienen zum fortlaufenden Abruf von aktuellen IntradayDaten und zur Auswahl der Einstellungen für die Intraday-Analyse. ➒ Diese Schaltfläche aktiviert die Komponente „Strategy Builder“, welche unter 5.5 und in den nächsten Kapiteln vorgestellt wird. 5.2 Spezifikation technischer Indikatoren Die Hauptanwendung von TInTo liegt in der Darstellung des Kursverlaufs, des Volumenverlaufs sowie technischer Indikatorenwerte graphisch als Charts. Dafür müssen zuerst die Indikatorwerten berechnet werden, während Kursinformationen und Handelsvolumen unmittelbar zur Anzeige übergeben werden. Die Berechnung der technischen Indikatoren in TInTo sind in der Datenbanksprache SQL hintergelegt. In diesem Abschnitt werden die SQLFormulierung der Indikatoren beispielhaft vorgestellt. Für die Berechnung der technischen Indikatoren werden als Datenbasis die Kursinformationen und die Volumeninformationen verwendet. Die Tabelle TKurs enthält die Kursinformationen und die Volumendaten. 67 5. TInTo Tkurs : Table ID n Date Open High Low Close Vol 2 1 03.01.2000 11501 11641 11180 11357 931800000 2 2 04.01.2000 11349 11358 10907 10997 1009000000 ... ... ... ... ... ... ... ... v1 v2 v3 Tabelle 5.1 TKurs : Table Die Spalte ID enthält die Kennzahlen, welche TInTo intern für das jeweilige Wertpapier vergeben hat. n ist die fortlaufende Nummer des Kurses und dient bei der Berechnung von Indikatoren als fortlaufender Zeitpunkt. Je kleiner der n-Wert ist, desto älter ist der damit gekennzeichnete Kurs. Je größer der n-Wert ist, desto jünger ist der Kurs. Weiterhin enthält die Tabelle TKurs noch das Datum, den Eröffnungs-, Höchst-, Tiefst- und Schlusskurs sowie das Handelsvolumen des jeweiligen Tages. Die zusätzlichen Spalten v1, v2 und v3 dienen als Hilfswerte für die rekursiven Berechnungen jener technischen Indikatoren, welche sich besonders schwierig formulieren lassen. Je nach vom Anwender gewünschtem Analysezeitraum werden die in der Tabelle TKurs befindlichen Daten vorläufig in die Tabelle tmpAggregation gespeichert. Damit enthält die Tabelle tmpAggregation die jeweiligen Kursdaten aus dem Analysezeitraum und darüber hinaus auch weitere Kursdaten, welche für die Berechnung der Indikatoren benötigt werden. Diese temporären Tabellen sind in der Arbeit von Gereon Schüller eingerichtet worden, um die Sichten bei der Aktualisierung des Kursverlaufs sowie der Indikaotorwerte inkrementiell zu ändern. TInTo verwendet ferner Hilfsfunktionen, um die Interaktion mit dem Anwender in die SQLAbfragen einfließen zu lassen: • Die Funktion spGetID() liefert die Wertpapier-ID des vom Anwender aktuell ausgewählten Wertpapiers. Diese Funktion kann in SQL-Abfragen direkt verwendet werden und dient der Beschränkung auf die nötigen Datensätze. • Die Funktion spGetPar() öffnet bei Aufruf ein Eingabefenster zur Eingabe der vom Anwender gewünschten Berechnungsperiode. Diese eingegebenen Berechnungsperioden können dann flexibel in SQL-Abfrage eingesetzt werden. Im Folgenden sind Beispiele für SQL-Formulierungen zur Berechnung von technischen Indikatoren aufgeführt. Beispielhaft soll der Trendfolgeindikator SMA, welcher in Kapitel 3 erläutert wurde, in seiner Umsetzung beschrieben werden. Beispiel: SMA Einer der bekanntesten Indikatoren, der SMA, filtert kleine chaotische Kursbewegungen heraus und ermöglicht, die allgemeine Trendrichtung des Kursverlaufs zu ermitteln. Der SMA ergibt sich aus der Berechnung des Durchschnitts der Schlusskurse für eine angegebene Berechnungsperiode. SQL-Abfrage: Der SMA bildet für jeden Zeitpunkt den Durchschnitt für eine bestimmte Periode. Aus dem Kursverlauf muss dann immer ein neuer Durchschnitt gebildet werden. Dabei ist eine 68 5. TInTo Verknüpfung der Kurstabelle auf sich selbst nötig, um die erforderlichen Kursdaten für die Berechnung des Durchschnitts für jeden gewählten Zeitpunkt zu erhalten. JOIN TmpAggreation: Table TmpAggreation: Table ID n .. ID n .. 2 7 .. 2 .. .. 2 8 .. 2 9 .. 2 9 .. 2 10 .. 2 .. .. n: Fortlaufender Zeitpunkt AVG Sicht ID TmpAggreation: Table ID n .. 2 8 .. 2 9 .. 2 10 .. n .. Ind1 2 .. .. .. 2 9 .. XX 2 10 .. XX 2 .. .. .. AVG Abbildung 5.3 SMA Berechnung mit Wertpapier-ID 2 und Berechnungsperiode 3 Die Abbildung 5.3 zeigt, dass die Tabelle tmpAggregation mit sich selbst verbunden wird, so dass für jeden Zeitpunkt die erforderlichen Kursdaten für die Berechnung des Durchschnitts für eine bestimmte Berechnungsperiode (in diesem Beispiel ist es 3) zur Verfügung stehen. Dabei ist zu beachten, dass n in der Tabelle tmpAggregation den fortlaufenden Zeitpunkt darstellt, während n in der SMA Formel als Berechnungsperiode verwendet wird. Dies ist traditionell im TInTo Projekt so gehandhabt worden und im Rahmen dieser Arbeit ist diesbezüglich keine Anpassung erfolgt. Abschließend wird der Durchschnitt aus den aggregierten Werten berechnet und das Ergebnis ist dann in der Spalte, Ind1 in der Sicht zu erhalten. 1 2 3 SELECT tmpAggregation.ID, tmpAggregation.n, tmpAggregation.Date, tmpAggregation.High, tmpAggregation.Low, tmpAggregation.Open, tmpAggregation.Close, tmpAggregation.Vol, AVG(TK1.Close) AS Ind1, tmpAggregation.Volstart 4 5 FROM tmpAggregation INNER JOIN tmpAggregation AS TK1 ON (tmpAggregation.ID=TK1.ID) 6 7 8 WHERE tmpAggregation.ID=spGetID() AND TK1.n<=tmpAggregation.n AND TK1.n>tmpAggregation.n-spGetPar("Periodenvorgabe Glättung=10") 9 10 11 12 13 14 GROUP BY tmpAggregation.ID, tmpAggregation.n, tmpAggregation.Date, tmpAggregation.High, tmpAggregation.Low, tmpAggregation.Open, tmpAggregation.Close, tmpAggregation.Vol, tmpAggregation.Volstart ORDER BY tmpAggregation.ID DESC, tmpAggregation.Date DESC; • Im FROM-Teil bildet die Tabelle tmpAggregation mit sich selbst ein Kreuzprodukt. Dabei wird eine Tabelle mit AS-Klausel in TK1 umbenannt. • Im WHERE-Teil werden die Werte auf das ausgewählte Wertpapier und den ausgewählten Zeitraum eingeschränkt. Somit werden pro Zeitpunkt-Verknüpfung nur genau so viele Zeilen aus der Tabelle TK1 ausgewählt, wie als Berechnungsperiode eingegeben sind. Weiterhin sollen die Zeitpunkte, also hier n-Werte, von TK1 kleiner oder gleich sein wie der verknüpfte Zeitpunkt n aus der Tabelle tmpAggregation. Abbildung 5.3 zeigt beispielsweise eine 3 Tage69 5. TInTo Berechnungsperiode. Dabei werden nur so viele Zeilen ausgewählt, dass deren Anzahl der Berechnungsperiode entspricht, und dabei nur jene Zeilen selektiert, welche in kleineren oder gleichen n-Werten im Vergleich mit dem verknüpften n-Wert der anderen Tabelle stehen. • Im GROUP BY-Teil werden die selektierten Werte von TK1 je Zeitpunkt aus der Tabelle tmpAggregation zusammengesetzt. • Im SELECT-Teil werden die Spaltennamen aus der Tabelle tmpAggregation projiziert und zusätzlich der Durchschnitt der jeweiligen Gruppe berechnet und als Ergebnis in Ind1 umbenannt und dargestellt. Abbildung 5.3 zeigt, dass im Ergebnis die virtuelle Tabelle alle Spalten aus tmpAggregation sowie Ind1 das Ergebnis der Berechnung des Indikators enthält. Die projizierten Spalten aus der Tabelle tmpAggregation werden später verwendet, um den Kursverlauf in das Chart zu zeichnen. Das Ergebnis Ind1 zeichnet dann den Verlauf der Indikatorwerte im Chart. • Im ORDER BY-Teil werden die Werte absteigend nach Datum sortiert und somit später in der richtigen Reihenfolge an den ChartDirector übergeben. Die Wertpapier ID wurde in obiger Erläuterung nicht mit einbezogen, da diese in der Berechnung der Indikatorenwerte keine eigentliche Rolle spielt, sondern lediglich sicherstellt, dass das gültige Wertpapier aus der Tabelle TKurs in die Tabelle tmpAggregation geladen wird. Die Tabelle tmpAggregation enthält immer nur die Daten eines einzigen Wertpapiers. Beispielsweise sind die Bedingung in der ON-Klause in der Zeile 5 überflüssig. Die Verbesserungen an der Formulierung der SQL-Abfragen sind für den Programmteil, „Strategy Builder“ in den Optimierungsschritten durchgeführt worden und werden im Kapitel 6 erläutert. Weitere Beispiele der SQL-Formulierungen von technischen Indikatoren folgen noch im Abschnitt 5.4 „Korrekturen der Indikatorberechnung“ 5.3 Diskussion des bestehenden TInTo-Systems Für die in der Wertpapieranalyse anfallenden Datenmengen ist der Einsatz eines DBMS unverzichtbar. Insbesondere bei der Bearbeitung der Handelsstrategien und der Indikatorenberechnungen aus vielen Einzelwerten kann ein DBMS seine Fähigkeit gezielt in der Bearbeitung großer Datenmengen einsetzen. Die Anwendung TInTo ist ein datenbankgestütztes Werkzeug zur Analyse von Wertpapieren. Die programmtechnische Umsetzung von TInTo wurde in Microsoft Access vorgenommen unter Verwendung eines regelbasierten Ansatzes für die Berechnung der technischen Indikatoren. Für die Formulierung der Berechnungsformeln der technischen Indikatoren ist die Datenbanksprache SQL sehr gut verwendbar. Die in Access integrierte Programmsprache „VBA“ ermöglicht, zusätzliche Funktionalitäten im SQL-Code zu verwenden. Im Laufe der bisherigen Entwicklungsstufen von TInTo wurde wiederholt die grundlegende Frage diskutiert, ob Access ein technisch geeignetes und komfortabel zu nutzendes Fundament für die Anforderungen der Wertpapieranalyse bereitstellen kann. So fehlt Access zum Beispiel im Vergleich zu anderen DBMS eine prozedurale Erweiterung wie PL/SQL, welche die Geschwindigkeit der Abfragesprache SQL mit dem Komfort einer prozeduralen Programmiersprache verbindet. Bei der Berechnung der rekursiven Formeln in der technischen Analyse sind aber solche hintereinander abfolgende Ausführungen von SQL-Anweisungen notwendig. Christian Hübel hat dieses Defizit durch selbst erstellte Erweiterungen (Workarounds) ausgeglichen, aber festgestellt, dass diese Methode nicht stabil laufen könne. Eine nähere Erläuterung hierzu folgt im nächsten Abschnitt. Als weitere Einschränkung sei 70 5. TInTo erwähnt, dass im Allgemeinen Access keine materialisierten Sichten unterstützt. Dies bedeutet auch einen möglichen Effizienzverlust, da materialisierte Sichten Zugriffe beschleunigen. In der Arbeit von Gereon Schüller sind neben Basistabellen zusätzliche Tabellen eingefügt worden, um indirekt materialisierte Sichten zu simulieren. Die von Gereon Schüller dafür gewählte Methode ermöglicht es, die Rechenleistung zu beschleunigen und gar erst die inkrementielle Aktualisierung zu realisieren. Durch diese Erweiterungen hat jedoch die Übersichtlichkeit der Anwendung gelitten. Auch aus diesem Grund läuft gegenwärtig ein Projekt zur Portierung von TInTo in Oracle und Java. Ziel der vorliegenden Arbeit war es, weitere Funktionalitäten für die Wertpapieranalyse zu untersuchen und in die vorhandene Access-Anwendung zu integrieren. Dazu sollte die bisherige Hauptanwendung von TInTo, Kursverläufe und technische Indikatoren graphisch darzustellen, um eine Analysefunktion für Handelsstrategien erweitert werden. Aus den in der bislang vorliegenden Version implementierten Graphen lässt sich in der Regel nicht gut erkennen, welchen Gewinn oder Verlust ein Anleger erzielt hätte, wenn er den Handelssignalen gefolgt wäre. Der im Rahmen dieser Arbeit implementierte „StretegyBuilder” bietet dem Anwender die Möglichkeit, über beliebige, frei wählbare Berechnungsperioden sowie Signalparametern verschiedene technische Indikatoren auszuprobieren und die resultierenden Handelssignale gemäß ihrer Profitabilität zu bewerten. Eine weitere detaillierte Vorstellung des StrategyBuilder folgt im letzten Abschnitt dieses Kapitels. 5.4 Korrekturen der Indikatorberechnung Über die verschiedenen bisherigen Entwicklungsstufen von TInTo haben sich einige Fehler sowohl in die eigentliche Access Anwendung als auch in die Indikatorenberechnungen eingeschlichen. Da die Indikatorenberechnung auch als eine Grundlage für die Portierung nach Oracle dient, habe ich mich im folgenden hauptsächlich auf die Korrektur dieser Fehler konzentriert. Im Rahmen meiner Analyse der bislang vorliegenden TInTo-Implementierung habe ich festgestellt, dass von den 18 existierenden Indikatoren die überwiegende Mehrzahl auffällig waren. Daraufhin wurden diese 18 Indikatoren umfangreich auf ihre Formeln sowie ihr Verhalten hin untersucht und mit der einschlägigen Literatur abgeglichen. Im Ergebnis wurden für 14 Indikatoren Korrekturen oder Anpassungen vorgenommen. Weitere 2 Indikatoren, die eine rekursive Berechnung benötigen, deuten noch darauf hin, dass sie nicht stabil laufen. Eine Korrektur dieser Indikatoren ist im Rahmen dieser Arbeit noch nicht erfolgt. Es bleibt anzumerken, dass ein kompromisslos korrektes Verhalten etablierter Standardindikatoren für jegliche Wertpapieranalyse eine grundlegende Voraussetzung ist. Aus diesem Grund wurde der im folgenden beschriebenen Korrektur im Rahmen dieser Arbeit besondere Aufmerksamkeit gewidmet. 5.4.1 Indikatorformeln Die in TInTo umgesetzten Indikatoren sind im Allgemeinen weit verbreitet und zeigen im Vergleich unterschiedlicher im Internet frei verfügbarer Analysen fast immer identische Charts. In einschlägigen Artikeln jedoch werden die zugehörigen Formeln oft verkürzt, symbolisiert oder anderweitig verändert dargestellt. Ein Blick auf die Autorenschaft lässt vermuten, dass diese Darstellungen eher der prinzipiellen Erläuterung und Ergebnisinterpretation als der Erklärung der detaillierten Formeln dienen. Es ist mitunter sehr verwirrend, solche Formeln zu lesen, weshalb man schon verschiedene Artikel und Literaturstellen verwenden sollte, um Missverständnisse in der Darstellung der Indikatorenformeln zu vermeiden. 71 5. TInTo Korrektur Beispiel: CCI (Commodity Channel Index) Der CCI wurde von Donald Rambert, einem Rohstoffhändler in den 80er Jahren, entwickelt, um Handelszyklen zu erkennen. Der CCI ist ein Oszillator, welcher anzeigt wie weit sich ein Kurs von einem gewählten MA (Moving Average) entfernt hat. Damit kann man überkaufte- oder überverkaufte Marktsituation sowie auch mögliche Trendwechsel und die Richtung der Kursbewegungen erkennen. Mögliche Handelssignale können durch das Verlassen der extremen Marktsituationen oder mittels des Schnittpunktes an der Mittelpunktslinie entstehen. Formel: Die Berechnungsvorschrift lautet basierend auf [CT06], [SCharts08], [WiE08] und [ADT08] wie folgt: t: Fortlaufender Zeitpunkt Richtig n: Berechnungsperiode (5.1) Bei der Berechnung wird ein Typischer Kurs (TP) verwendet, welcher sich aus dem arithmetischen Mittel aus Höchst-, Tiefst- und Schlusskurs am jeweiligen Handelstag ermittelt. Die Differenz dieses typischen Kurses zum SMA des typischen Kurses über die Berechnungsperiode n (SMATPn (t)) wird durch den Multiplikationsfaktor 0,015 und die mittlere Abweichung (MDn (t)) normalisiert. Die mittlere Abweichung (MDn (t)) ergibt sich aus dem Durchschnitt aus der absoluten Differenz zwischen dem typischen Preis über n Berechnungszeitraum und SMATP des letzten Handelstages in der Berechnungsperiode. Im Vergleich zu obiger korrekter Beschreibung stellen die folgenden Formeln dar, worauf die CCI-Berechnung in TInTo basiert. Diese Formeln sind aus [Gep05] und [Sch07] entnommen: t: Fortlaufender Zeitpunkt n: Berechnungsperiode Falsch (5.2) Der Fehler lag in der Berechnung der mittleren Abweichung. Die Definition der mittleren Abweichung (engl. Mean Deviation) lautet wie folgt: Wobei Xn,mean das arithmetische Mittel über der Periode n ist. SMATPn(t) in Formel (5.1) berechnet genau den Durchschnitt des typischen Kurses über Periode n, woraus sich die mittlere Abweichung ergibt. Aber SMATPn(t-i) in (5.2) variiert fälschlicherweise zusammen mit dem jeweiligen Typischen Kurs. Als resultierender Fehler bezieht sich dadurch die gesamte CCI Formel auf eine fast doppelt so lange Berechnungsperiode. Der älteste Typische Kurs ist dann TP(t-n+1) und SMA von TP(t-n+1) bezieht sich damit bis auf den TP(t-2n+2). 72 5. TInTo SQL-Abfrage: Bei der Berechnung von CCI ist eine zweistufige Aggregatbildung notwendig, um den ersten Durchschnitt SMATP zu ermitteln und, basierend darauf, einen weiteren Durchschnitt MD zu erzeugen. JOIN tmpAggregation tmpAggregation AVG JOIN SMATP AVG SMATP MD CCI Erste Aggregatbildung Zweite Aggregatbildung Abbildung 5.4 CCI Berechnung mit zwei stufigen Aggregaten Abbildung 5.4 zeigt, dass die Tabelle tmpAggregation durch JOIN mit sich selbst ein Kreuzprodukt bildet und mit der ersten Aggregatbildung den SMATP berechnet. Anschließend wird eine weitere Aggregatbildung für den MD durchgeführt und schließlich der CCI auf Basis von SMATP und MD berechnet. Abfrage CCI0 1 SELECT tmpAggregation.ID, tmpAggregation.n, tmpAggregation.Date, tmpAggregation.High, 2 3 4 5 FROM 6 tmpAggregation.Low, tmpAggregation.Open, tmpAggregation.Close, tmpAggregation.Vol, AVG((TK1.High+TK1.Low+TK1.Close)/3) AS Ind1, tmpAggregation.Volstart tmpAggregation INNER JOIN tmpAggregation AS TK1 ON(tmpAggregation.ID=TK1.ID) 7 WHERE tmpAggregation.ID=spGetID() AND TK1.n<=tmpAggregation.n AND 8 TK1.n>tmpAggregation.n-spGetPar("Periodenvorgabe=20") 9 10 GROUP BY tmpAggregation.ID, tmpAggregation.n, tmpAggregation.Date, tmpAggregation.High, 11 tmpAggregation.Low, tmpAggregation.Open, tmpAggregation.Close, 12 tmpAggregation.Vol, tmpAggregation.Volstart 13 14 ORDER BY tmpAggregation.ID DESC, tmpAggregation.Date DESC; Die Abfrage CCI0 ermittelt den Durchschnitt des typischen Kurses, SMATP (Zeile 3) und benennt diesen um in Ind1. Dabei wird die Tabelle tmpAggregation mit sich selbst durch JOIN verknüpft. Der WHERE-Teil enthält die Einschränkung der Daten passend zum bezogenen Zeitpunkt n und zu der Periodenlänge. 73 5. TInTo 1 DELETE * FROM tmpCCI0; 1 INSERT INTO tmpCCI0 SELECT * FROM CCI0; 1 SELECT CCI0.ID, CCI0.n, CCI0.Date, CCI0.High, CCI0.Low, CCI0.Open, CCI0.Close, CCI0.Vol, 2 (((CCI0.High+CCI0.Low+CCI0.Close)/3)-CCI0.Ind1)/ Falsch 3 (0.015*AVG(ABS(((CCI1.High+CCI1.Low+CCI1.Close)/3)-CCI1.Ind1))) AS Ind1, 4 AVG(ABS(((CCI1.High+CCI1.Low+CCI1.Close)/3)-CCI1.Ind1)) AS Ind2, 5 CCI0.Ind1 AS Ind3, CCI0.Volstart 6 7 FROM tmpCCI0 AS CCI0 INNER JOIN tmpCCI0 AS CCI1 ON (CCI0.ID=CCI1.ID) 8 9 WHERE CCI1.n<=CCI0.n AND CCI1.n>CCI0.n-spGetPar("Periodenvorgabe=20") 10 11 GROUP BY CCI0.ID, CCI0.n, CCI0.Date, CCI0.High, CCI0.Low, CCI0.Open,CCI0.Close,CCI0.Vol, 12 CCI0.Ind1, CCI0.Volstart, (((CCI0.High+CCI0.Low+CCI0.Close)/3)-CCI0.Ind1) 13 Richtig 14 ORDER BY CCI0.ID DESC, CCI0.Date DESC; (((CCI0.High+CCI0.Low+CCI0.Close)/3)-CCI0.Ind1)/ (0.015*AVG(ABS(((CCI1.High+CCI1.Low+CCI1.Close)/3)-CCI0.Ind1))) Die berechnete Sicht CCI0 wird zuerst in einer Tabelle tmpCCI0 gespeichert, welche als eine Basistabelle für die nächsten Aggregatbildung dient. Im FROM-Teil wird diese jeweils in CCI0 und in CCI1 umbenannt und bildet mit sich selbst ein Kreuzprodukt. Die eigentliche Berechnung von CCI folgt in den Zeilen 2 und 3. Die mittlere Abweichung wird in der Zeile 3 ermittelt. Dabei ist in der ursprünglichen, hier zu korrigierenden Version CCI1.Ind1 verwendet, welcher zusammen mit den typischen Kursen variiert. Jedoch soll gemäß geltender Definition für die Berechnung von MD ein einfaches Arithmetisches Mittel, SMATP des letzten Handelstages in der Berechnungsperiode, CCI0.Ind1 konstant für den jeweiligen Wert des MDs verwendet werden. CCI1 JOIN CCI0 AVG Ind1 CCI0 Ind1 Ind1 CCI1 CCI0 Ind1 Abbildung 5.5 CCI0.Ind1 im Vergleich zu CCI1.Ind1 74 Ind2 5. TInTo Abbildung 5.5 zeigt, dass nunmehr CCI0.Ind1 richtigerweise gleichbleibend in der jeweiligen Zeile des Endergebnisses einfließt, während in der ursprünglichen falschen Version die verschiedenen Werte von CCI1.Ind1 zusammengesetzt wurden, um einen Wert des CCIs zu bilden. Die CCI-Ergebnisse sind in Abbildung 5.5 in der Ergebnistabelle als Ind1 dargestellt. Chart-Darstellung: Abbildung 5.6 zeigt, dass der erste Chart von StockCharts aus [SCharts08] und der zweite Chart von ChartDirector mittels CCI identische Signale liefern. Der dritte Chart ist der von TInTo berechnete CCI Chart in der ursprünglichen Version. Man erkennt, dass dieser Chart deutlich weniger überkaufte Marktsituation aufweist. Dieses abweichende Verhalten des originalen, urkorrigierten CCI Charts resultiert daraus, dass die verwendete falsche Formel deutlich mehr Kursdaten in die Berechnung einbezieht, was den Chartverlauf entsprechend glättet. Auch wenn dieser Chart durch eine fehlerhafte Formel entstanden ist, so weist er dennoch für die Beispielperiode interessante Eigenschaften auf. Es werden zu einem gewissen Grade die Störungen im August 2008 gefiltert, wodurch dieser „CCI“ eher signifikante Signale liefert. Das Grundproblem des CCI, zu frühe Signale zu liefern, scheint durch diese fehlerhafte Formel im Beispielzeitraum etwas abgeschwächt zu sein. Das vierte Chart in Abbildung 5.6 zeigt den CCI-Verlauf als Ergebnis der korrigierten, in der Literatur verbreiteten Formel. Im Vergleich zu den Darstellungen in StockCharts und ChartDirector erzeugt die korrigierte identische Handelssignale sowie einen identischen CCI Kursverlauf. StockCharts [SCharts08] ChartDirector TInTo Ursprünglich TInTo Korrigiert Abbildung 5.6 CCI für Dow Jones Industiral Average im Jahr 2008 75 5. TInTo 5.4.2 Berechnungsperioden In einigen Literaturstellen und Artikeln zum Thema technische Wertpapieranalyse sind die jeweiligen Berechnungsperioden in den Formeldarstellungen ebenfalls nicht eindeutig dargestellt oder auch nur verbal beschrieben worden. Als ein Beispiel für eine solche verallgemeinernde Darstellung sei im Folgenden eine SMA Formel aus einem Lexikon einer bekannten Website [TSO08] aufgeführt: n: Berechnungsperiode Gemeint ist allerdings, was korrekt und ausführlich dargestellt wie folgt aussieht : n: Berechnungsperiode t: Fortlaufender Zeitpunkt Die bisherige Umsetzung des SMA aus den vorausgegangenen Diplomarbeiten [Gep05] und [Sch07] basiert richtigerweise auf der zweiten oben angegebenen klar formulierten Formel, jedoch wurde in der Implementierung die Berechnungsperiode falsch in SQL umgesetzt. Die notwendige Korrektur wird weiter unten beschrieben. Bei der Implementierung von Indikatoren in SQL sind bezüglich der Berechnungsperioden im wesentlichen folgende drei Fällen zu berücksichtigen: • SMA-basierende Indikatoren • Momentum-basierende Indikatoren • Aroon-Indikatoren Die folgenden Darstellungen von Formeln basieren auf [CT06], [SCharts08], [WiE08], [BörV08]. 1. SMA-basierende Indikatoren Der SMA wird als ein Basisindikator in vielen weiteren Indikatoren verwendet, beispielsweise um den chaotischen Verlauf von Werten des Indikators zu glätten oder um eine Signallinie zu erzeugen. Die Berechnungsvorschrift lautet wie folgt: n: Berechnungsperiode t: Fortlaufender Zeitpunkt Dabei werden genau so viele Schlusskurse (Close) für den jeweiligen Wert des Indikators verwendet, wie die Berechnungsperiode abdeckt. Für einen Wert des Indikators sind demnach n viele Schlusskurse in der Berechnung zu verwenden. Dabei ist der Schlusskurs zum Zeitpunkt t auch für den Wert des Indikators zum Zeitpunkt t einzubeziehen. 76 5. TInTo SQL-Abfrage: Abweichend von der Formeldarstellung mit n als Berechnungsperiode und t als fortlaufender Zeitpunkt sind traditionsgemäß in TInTo in der SQL Implementierung leider n als fortlaufender Zeitpunkt verwendet worden. Diese Vereinbarung wurde im Rahmen dieser Diplomarbeit beibehalten. Es gilt also zu beachten, dass die Formeln und die SQL Skripte in der Verwendung dieser beiden Variablen voneinander abweichen. Die Berechnungsperiode wird durch die Funktion spGetPar() aus der Eingabemaske in die SQL Berechnung übertragen. Der Teil der SQL Abfrage zur Einschränkung der zu verwendenden Daten lautet wie folgt: ... FROM tmpAggregation INNER JOIN tmpAggregation AS TK1 ON(tmpAggregation.ID=TK1.ID) WHERE tmpAggregation.ID=spGetID() AND TK1.n<=tmpAggregation.n AND TK1.n>tmpAggregation.n-spGetPar("Periodenvorgabe=20") ... Beispielsweise sind für eine Berechnungsperiode 5 und für den Zeitpunkt 10 die folgenden Werte für die Berechnung eines Indikatorenwertes zu berücksichtigen: Betrachtungszeitpunkt: 10 Berechnungsperiode: 5 TK1 JOIN n ≦ 10 AND n > 10 - 5 n Ergebnis 6 7 8 9 10 tmpAggregation n 10 n Ind1 10 n: Fortlaufender Zeitpunkt Abbildung 5.7 SMA Berechnungsperiode Für den Wert des Indikators zum Zeitpunkt 10 werden ab den Zeitpunkten 6 bis 10 insgesamt 5 Datensätze verwendet. Dabei sollte man beachten, dass die Kursdaten vom Zeitpunkt 5 NICHT mit einbezogen werden. 2. Momentum-basierende Indikatoren Das Momentum dient ebenfalls häufig als ein Basiselement vieler Oszillatoren. Im Momentum wird die Beschleunigung bzw. die Verlangsamung von Kursbewegungen gemessen. Berechnet wird es, indem der aktuelle Schlusskurs mit dem Schlusskurs von vor der eingegebenen Berechnungsperiode in Relation gesetzt wird: n: Eingabeperiode t: Fortlaufender Zeitpunkt Eine alternative Berechnung besteht in: 77 5. TInTo SQL-Abfrage: In der folgenden SQL-Abfrage für die Berechnung des Momentums wird die Variable n wieder für den laufenden Zeitpunkt verwendet. Die Eingabeperiode wird mittels der Funktion spGetPar() ermittelt: ... FROM tmpAggregation INNER JOIN tmpAggregation AS TK1 ON(tmpAggregation.ID=TK1.ID) WHERE TK.n=tmpAggregation.n-spGetPar(„Kurseinheiten=10“) ... Hiermit wird ein Kursdatensatz aus tmpAggregation mit einem Kursdatensatz aus TK1 verknüpft. Aus tmpAggregation wird hierfür der aktuelle Kurs zum betrachteten Zeitpunkt n und aus TK1 der Kurs von Zeitpunkt n MINUS gewählter Berechnungsperiode verwendet. Abbildung 5.8 zeigt ein Beispiel für die Berechnung eines Momentumwertes für den Zeitpunkt 10 mit der Berechnungsperiode 5: Betrachtungszeitpunkt: 10 Eingabeperiode: 5 JOIN tmpAggregation TK1 n n 5 n = 10 - 5 Ergebnis n Ind1 10 10 n: Fortlaufender Zeitpunkt Abbildung 5.8 Momentum Berechnungsperiode Dabei wird nur eine Zeile, d.h. nur ein Kurswert, aus Tabelle TK1 durch JOIN zum jeweiligen Ergebniswert verbunden. Dabei muss beachtet werden, dass die Kursdaten zum Zeitpunkt 5, NICHT aber die Daten zum Zeitpunkt 6 verwendet werden (Zeitpunkt n 10 MINUS Betrachtungsperiode 5 = 5). 3. Aroon-Indikatoren Aroon-Indikatoren treten im Vergleich zum SMA oder Momentum nicht so häufig in der Berechnung von Indikatoren auf. Ihre Logik bezüglich der Berechnungsperiode wird aber beispielsweise bei der Berechnung von Aroon-Up, Aroon-Down, Aroon Oszillatoren verwendet. Im folgenden Beispiel dient der Aroon-Up zur Bestätigung und zur Anzeige der Stärke des Aufwärtstrends. Der Aroon-Up errechnet sich aus der Anzahl der innerhalb der vorgegebenen Berechnungsperiode seit dem letzten Kursmaximum vergangenen Tage. Diese Zahl wird durch die Eingabeperiode (Gesamtzahl an Tagen in der Berechnungsperiode) dividiert und mit 100 multipliziert: 78 5. TInTo n: Eingabeperiode t: Fortlaufender Zeitpunkt t max: Der Zeitpunkt des Kursmaximums während der Periode, t-n ≤ t max ≤ t Dabei ist zu beachten, dass gilt: Berechnungsperiode = Eingabeperiode +1. Dies ergibt sich daraus, dass sowohl der erste wie auch der letzte Tag einer Berechnungsperiode in die Betrachtung einfließen. Siehe Beispiel in Abbildung 5.10 Eingabeperiode ist hier 20, gemeint: betrachtete Betrachtungsperiode von Tag 80 bis Tag 100 = mathematisch 21 Tage. Daraus resultiert wie oben angegeben: BP = EP +1. SQL-Abfrage: In der beispielhaften SQL Abfrage steht, abweichend von obiger Formel, n wieder für den fortlaufenden Zeitpunkt. Die Eingabeperiode wird mittels der Funktion spGetPar() ermittelt. Die Abweichung in der Variablenkennzeichnung zwischen der Formel und dem SQL Code rührt wieder aus der “traditionellen” Notation in TInTo her. ... FROM tmpAggregation INNER JOIN tmpAggregation AS TK1 ON(tmpAggregation.ID=TK1.ID) WHERE tmpAggregation.ID=spGetID() AND TK1.n<=tmpAggregation.n AND TK1.n>=tmpAggregation.n-spGetPar("Periodenvorgabe=10") ... Abbildung 5.9 zeigt die gemäß oben dargestelltem SQL-Code erzeugte Tabellenverknüpfung bezüglich Aroon Berechnungsperiode. Wieder verwenden wir für den fortlaufenden Zeitpunkt 10 und für die Eingabeperiode 5. Aus t-n ≤ t max ≤ t in der obigen Formel ergibt sich Berechnungsperiode = Eingabeperiode +1. Im Beispiel werden mit einer Eingabeperiode von 5 daraufhin 6 Tageskurse aus TK1 von Aroon verwendet. Betrachtungszeitpunkt: 10 Eingabeperiode: 5 TK1 JOIN tmpAggregation n n ≦ 10 AND n ≧ 10 - 5 Ergebnis n 5 6 7 8 9 10 n Ind1 10 10 n: Fortlaufender Zeitpunkt Abbildung 5.9 Aroon Berechnungsperiode Im Vergleich dazu werden für die Berechnung von SMA-basierten Indikatoren nur genau so viele Tageskurse verwendet, wie die Eigabeperiode lang ist. Für SMA gilt also Eingabeperiode 79 5. TInTo = Berechnungsperiode, weshalb im Falle von SMA nicht zwischen beiden unterschieden werden muss. Abbildung 5.10 zeigt den Periodenvergleich zwischen SMA-basierenden, Momentumbasierenden und Aroon-Indikatoren: EP = 20: 80 81 82 83 ... 99 100 n : Fortlaufender Zeitpunkt Zeitpunkten der benötigen Datensätze 81 82 83 ... 80 80 81 82 83 99 100 SMA-basierende Indikatoren: BP = EP = 20 100 Momentum-basierende Indikatoren: BP = 2 ... 99 100 Aroon-Indikatoren: BP = EP + 1 = 21 BP: Berechnungsperiode EP: Eingabeperiode Abbildung 5.10 Periodenvergleich Korrektur Beispiel: RSI (Relative Strength Index) Der Indikator RSI stellt die relative Schwungstärke des Kurses dar, indem er die Kursgewinne einer Periode mit den Kursverlusten derselben Periode vergleicht. Dieser Indikator wird verwendet, um überkaufte- oder überverkaufte Marktsituationen zu erkennen und sich daraus gegebenenfalls ergebende Trendwechsel zu prognostizieren. Abschnitt 3.4.2 beinhaltet eine detaillierte Beschreibung des RSI und seiner Anwendungen. Die Berechnung des RSIs erfolgt in folgenden Rechenschritten: SMA-basierende Basisindikatoren: AvgSU, AvgSD Momentum-basierende Basisindikatoren: Up, Down n: Berechnungsperiode t: Fortlaufender Zeitpunkt (5.3) Der RSI berechnet sich gemäß dieser Gleichung aus der Relation des SMA aller positiven Kursveränderungen (AvgSU) zur Summe der beiden SMA der positiven und negativen Kursveränderungen (AvgSU und AvgSD). 80 5. TInTo SQL-Abfrage: Für die Formulierung der SQL-Abfrage werden zwei Verknüpfungen der Basistabelle tmpAggregation auf sich selbst benötigt. Dazu wird die Tabelle tmpAggregation in TK1 und TK2 umbenannt. JOIN TK2 Ergebnis JOIN TK1 tmpAggregation TK2 TK2 . . SMA-basierende Berechnung: AvgSU, AvgSD Momentum-basierende Berechnung: Up, Down Abbildung 5.11 RSI Berechnung Die erste Verknüpfung (tmpAggregation mit TK1) stellt die für die Berechnung des SMA aller positiven Kursveränderungen (AvgSU) und des SMA aller negativen Kursveränderungen (AvgSD) benötigten Datensätze zusammen. Damit werden AvgSU und AvgSD in der Formel berechnet. Die zweite Verknüpfung (TK1 mit TK2) vergleicht die zwei Schlusskurse (in Formel 5.3 Close(t) und Close(t-1)) zur Berechnung des Up und des Down. Dabei ist wiederum zu beachten, dass traditionell in TInTo in den Formeldarstellungen t und im SQL Code jedoch n für den fortlaufenden Zeitpunkt Verwendung findet. 1 SELECT tmpAggregation.ID, tmpAggregation.n, tmpAggregation.Date, tmpAggregation.High, 2 3 4 5 6 7 8 9 tmpAggregation.Low, tmpAggregation.Open, tmpAggregation.Close, tmpAggregation.Volstart, tmpAggregation.Vol, 100*(AVG(IIF(TK1.Close>TK2.Close,TK1.Close-TK2.Close,0))/ (AVG(IIF(TK1.Close>TK2.Close,TK1.Close-TK2.Close,0) +AVG(IIF(TK1.Close<TK2.Close,TK2.Close-TK1.Close,0)))) AS Ind1, AVG(IIF(TK1.Close>TK2.Close,TK1.Close-TK2.Close,0)) AS Ind2, AVG(IIF(TK1.Close<TK2.Close,TK2.Close-TK1.Close,0)) AS Ind3 10 FROM (tmpAggregation INNER JOIN tmpAggregation AS TK1 ON (tmpAggregation.ID=TK1.ID)) 11 INNER JOIN tmpAggregation AS TK2 ON (TK1.ID=TK2.ID AND TK1.n-1=TK2.n) 12 13 WHERE tmpAggregation.ID=spGetID() AND TK1.n<=tmpAggregation.n AND Falsch 14 TK1.n>=tmpAggregation.n-spGetPar("Periodenvorgabe=14") 15 16 GROUP BY tmpAggregation.ID, tmpAggregation.n, tmpAggregation.Date, tmpAggregation.High, 17 tmpAggregation.Low, tmpAggregation.Open, tmpAggregation.Close, 18 tmpAggregation.Vol, tmpAggregation.Volstart 19 20 ORDER BY tmpAggregation.ID DESC, tmpAggregation.Date DESC; tmpAggregation.ID=spGetID() AND TK1.n<=tmpAggregation.n AND TK1.n>tmpAggregation.n-spGetPar("Periodenvorgabe=14") 81 Richtig 5. TInTo Der FROM-Teil beinhaltet die beiden erläuterten JOIN-Verknüpfungen. Die eigentliche Berechnung des RSIs erfolgt im SELECT-Teil und ist in den Zeilen 4 bis 6 dargestellt. Der SMA basierende Formelteil AvgSu und AvgSD wird mit der ersten Verknüpfung (tmpAggregation mit TK1) gebildet. Dabei sind die Einschränkungen der benötigten Datensätze im WHERE-Teil in der Zeile 13-14 geschrieben. Die Anzahl der für die Berechnung des Indikatorenwertes von RSI benötigten Datensätze muss dabei der Eingabeperiode entsprechen. Aber der WHERE-Teil aus der originalen, unkorrigierten TInTo Version, dargestellt in den Zeilen 13-14, erfasst einen Datensatz mehr als benötigt, siehe farbliche Markierung im SQL Code. Daher ist der Vergleichsoperator in der Zeile 14 von “>=” auf nur “>” zu korrigieren, siehe im SQL Code in Blau markierter neuer Teil. Der Momentum-basierende Formelteil Up(t) und Down(t) wird in der zweiten Verknüpfung (TK1 mit TK2) ermittelt. Dessen Einschränkung der benötigen Datensätze war im originalen SQL-Code schon fehlerfrei wie in der Zeile 11 unverändert dargestellt. Chart-Darstellung: Abbildung 5.12 zeigt die sich aus den Korrekturen ergebenden geänderten Indikatorencharts. Änderungen ergeben sich ausschließlich aus den korrigierten Periodenlängen im SMA Teil der RSI-Berechnung. Als Referenz dienen die Charts aus ChartDirector. Im Ergebnis ist sichtbar, dass das Chart „TInTo Korrigiert“ nach der vorgenommenen Berechnungskorrektur einen identischen Verlauf zum Referenzchart aufweist. Der mittler Chart „TInTo Vorher“ stellt zum Vergleich den originalen Verlauf gemäß nicht korrigierter Berechnung dar. ChartDirector TInTo Ursprünglich TInTo Korrigiert Abbildung 5.12 RSI für Dow Jones Industiral Average im Jahr 2008 82 5. TInTo 5.4.3 Formelvariante Die in Ergänzung zu den in 5.4.1 und 5.4.2 beschriebenen Korrekturen der Formeln und der Berechnungsperioden werden abschließend noch Anpassungen der Formelvarianten durchgeführt. Dazu wurden in jenen Fällen, in welchen alternative Formelvarianten existieren, die jeweils gängigsten und gebräuchlichsten ausgewählt. Wenn sich auch im Allgemeinen die Aussagekraft und auch die Handelssignale durch diese Anpassungen nicht ändern, so ist es dennoch empfehlenswert, die jeweils geläufigsten Varianten der Indikatorenformeln zu verwenden. Anpassungsbeispiel: ROC (Rate of Change) Beispielhaft seien diese vorgenommenen Anpassungen am Indikator ROC dargestellt. Der ROC zeigt die Stärke der Kursschwankungen an. Dazu wird der aktuelle Kurs mit einem Kurs in der Vergangenheit verglichen. n: Berechnungsperiode t: Fortlaufender Zeitpunkt n: Berechnungsperiode t: Fortlaufender Zeitpunkt Die erste Formel ist jene Variante, welche in der ursprünglichen TInTo-Version verwendet wurde. Die zweite Variante ist aus [CT06], [CR08], [SCharts08] sowie [ForR08] entnommen. Beide Formeln vermitteln die gleichen Aussage. TInTo hat in der früheren Version allerdings einfach den Momentum-Indikator weiter für den ROC verwendet. Eine deutliche Mehrheit der Chartanbieter scheint die zweite Formelvariante zu bevorzugen. Aus Anwendersicht ist es sicher wesentlich einfacher, auf TInTo umzusteigen, wenn Indikatoren die von anderen Systemen oder Anwendungen bekannten Eigenschaften aufweisen. Darüber hinaus hat die zweite Formelvariante die angenehme Eigenschaft, um die Nulllinie zu oszillieren. Abbildung 5.13 zeigt die Charts von StockCharts, Yahoo!Finance, OnVista und ChartDirector, welche die zweite vorgestellte Formelvariante verwenden. Alle oszillieren um die Nullpunktlinie. Das fünfte Chart “TInTo Ursprünglich” ergibt sich aus der originalen, bislang in TInTo verwendeten Formel für den ROC. Chart 6 “TInTo Korrigiert” zeigt das Ergebnis gemäß der Formelkorrektur in der aktuellen Version. Die Berechnung des ROC erfolgt nunmehr nach der allgemein üblichen Formel und der Chartverlauf folgt den Referenzbildern der professionellen Anbieter. 83 5. TInTo StockCharts [SCharts08] Yahoo!Finance [YH08f] OnVista [OV08] ChartDirector TInTo Ursprünglich TInTo Korrigiert Abbildung 5.13 ROC für Dow Jones Industiral Average im Jahr 2008 84 6 Implementierung elementarer Handelsstrategien Elementare Handelsstrategien bestehen aus nur einem einzelnen Indikator und dessen starrer Signallinie. Details hierzu sind im Kapitel 4 ausführlich dargestellt. Für die Implementierung dieser Handelsstrategien ist die Berechnung der jeweiligen Handelssignale technisch umzusetzen. Im vorliegenden Kapitel wird zunächst auf die Modellierung elementarer Handelsstrategien, die Filterung relevanter Signale sowie die grundsätzlichen Annahmen für die Bewertung der Handelsstrategie (Profitabilität) eingegangen. Anschließend werden die verschiedenen Ansätze zur regelbasierten Implementierung beschrieben sowie detailliert auf die vorgenommenen Optimierungen eingegangen. Im Ergebnis dieser Optimierungen konnten die Laufzeitnachteile aus den notwendigen mehrfachen Schachtelungen von Sichten kompensiert und die Berechnung der Handelssignale erheblich beschleunigt werden. 6.1 Berechnung von Handelssignalen In einem ersten Teil dieses Abschnitts werden zunächst beispielhaft die regelbasierte Modellierung von Handelsstrategien und die Annahmen für die Generierung relevanter Handelssignale vorgestellt. Im weiteren wird dann auf die Besonderheiten der Signalberechnung für Strategiebewertungen eingegangen. 6.1.1 Bestimmung von Handelssignalen Elementare Strategien generieren Handelssignale auf der Basis nur eines technischen Indikators und dessen starrer Signallinien. Als starre Signallinien werden unter anderem folgende Linien verwendet: • Die Nulllinie • Die Mittelpunktslinie • Die Linien, welche die extremen Marktsituationen abgrenzen. 85 6. Implementierung elementarer Handelsstrategien Dabei gelten die Schnittpunkte der jeweiligen Indikatorlinie mit den entsprechenden Signallinien als Handelssignale. Alle Kaufsignale liegen jeweils dann vor, wenn die Linie des Indikators die jeweilige Signallinie von unten nach oben schneidet. Verkaufssignale wiederum entstehen, wenn die Linie des Indikators die jeweilige Signallinie von oben nach unten schneidet. Die folgende Abbildung illustriert beispielhaft erzeugte Handelssignale unter Verwendung der Signallinien, welche die extremen Marktsituationen abgrenzen: Die extremen Zonen abgrenzenden Linien, CCI Verkauf Verkauf Kauf Kauf Verkauf Kauf Kauf Abbildung 6.1 Signallinien und Handelssignale, [SCharts08] Eine Indikatorlinie ergibt sich aus der Verbindung der Punkte einzelner Indikatorwerte. In den Serien dieser Werte stehen jedoch nicht unbedingt genau jene diskrete Werte, welche den Schnittpunkt der beiden Linien beschreiben. Für die Ermittlung der Schnittpunkte müssen daher die hintereinander folgenden Einzelwerte verglichen werden. Die folgende Handelslogik legt bedingte Kauf- bzw. Verkaufssignale fest: • Ein Kaufsignal für den aktuellen Zeitpunkt liegt vor, wenn zum vorangegangenen Zeitpunkt der Wert des Indikators kleiner ist als der Wert der Signallinie für Kaufen (im Beispiel -100) und wenn gleichzeitig der jetzt aktuelle Wert des Indikators größer oder gleich dem Wert der Signallinie für Kaufen ist. Dies bedeutet, die Indikatorlinie hat die Signallinie von unten nach oben geschnitten und liegt aktuell über oder, bei Gleichheit der Werte, auf der Signallinie. • Ein Verkaufssignal für den aktuellen Zeitpunkt liegt vor, wenn zum vorangegangenen Zeitpunkt der Wert des Indikators größer ist als der Wert der Signallinie für Verkaufen (im Beispiel +100) und wenn gleichzeitig der jetzt aktuelle Wert des Indikators kleiner oder gleich dem Wert der Signallinie für Verkaufen ist. Dies bedeutet, die Indikatorlinie hat die Signallinie von oben nach unten geschnitten und liegt aktuell unter oder, bei Gleichheit der Werte, auf der Signallinie. Angemerkt sei hier, dass Kauf- und Verkaufssignale nicht in einer komplementären Beziehung zueinander stehen. So kann man für einen Zeitpunkt, zu welchem die Bedingung des Kaufsignals nicht erfüllt ist, von einem Verkaufssignal oder auch von „keinem Handel“ sprechen. Es bestehen dann drei mögliche Zustände für alle Zeitpunkte „Kauf“, „Verkauf“ oder „Kein Handel“. Das Komplement der beiden Zustandsmengen von „Kauf“ und „Verkauf“ bildet die Menge der Zustände von „Kein Handel“. Die Zustände „Kauf“ und „Verkauf“ sind hingegen exklusiv, das heisst es gibt keine Bedingung und damit auch keine Situation in welcher gleichzeitig ein Kauf- und ein Verkaufssignal generiert wird. 86 6. Implementierung elementarer Handelsstrategien Beispiel: CCI-basierende Strategie Die oben genannte Handelslogik kann für die CCI-basierte Strategie unter Verwendung der Prädikatenlogik wie folgt spezifiziert werden: Annahme : Sei n fortlaufender Zeitpunkt. Seien die Werte der Signallinien -100 für Kauf und 100 für Verkauf. ∀n : { (CCI(n-1) < -100) ∧ (CCI(n) ≧ -100) } ⇒ (Signal(n) = „Kauf“) ∀n : { (CCI(n-1) > 100) ∧ (CCI(n) ≦ 100) } ⇒ (Signal(n) = „Verkauf“) Abbildung 6.2 veranschaulicht, wie mittels der angegebenen Handelslogik aus der Sicht, welche die CCI-Werte enthält (linke Tabelle) die jeweiligen Handelssignale abgeleitet werden: n Date CCI n 37 17.01.2008 -106 37 38 18.01.2008 -110 38 39 21.01.2008 -104 39 40 22.01.2008 -92 41 23.01.2008 -88 40 (CCI(39) < -100) ∧ (CCI(40) ≧ -100) Wahr Signal Kauf 41 Wahr Wahr 112 25.04.2008 98 112 113 28.04.2008 103 113 114 29.04.2008 105 114 115 30.04.2008 97 (CCI(114) >100) ∧ (CCI(115) ≦ 100) Verkauf Wahr Wahr n: Fortlaufender Zeitpunkt 115 Wahr Abbildung 6.2 Ableitung der Handelssignale Dabei ist auch zu beachten, dass Situationen auftreten, in denen weder Kauf- noch Verkaufssignal generiert werden können. In diesen Fällen wird kein Wert in das Feld für das Signal in der rechten Tabelle eingetragen. Diese Situationen sind dann als die Menge der Zustände von „Kein Handel“ zu interpretieren und sind irrelevant für die Handelssignale. 6.1.2 Eliminierung irrelevanter Handelssignale Beim Kauf von Wertpapieren steht zur Auswahl, nur einen Teil des zu investierenden Kapitals einzusetzen und analog beim Verkauf nur einen Teil des investierten Kapitals wieder abzuziehen. Beispielsweise sind diese Teilkäufe oder Teilverkäufe sinnvoll in einer starken Trendphase einzusetzen, wenn man eine Handelsstrategie verwendet, welche auf Oszillatoren basiert, die in der Regel zu frühe Handelssignale liefern. Ein Beispiel ist eine auf CCI87 6. Implementierung elementarer Handelsstrategien basierende Handelsstrategie, welche Handelssignale mit Hilfe von extreme Marktsituationen abgrenzenden Signallinien generiert. In stark steigenden Märkten werden zu frühe Verkaufssignale hintereinander erzeugt, welche auf eine überverkaufte Marktsituation und eine baldige Trendumkehr hinweisen. Zu solch frühen Zeitpunkten ist ein Teilverkauf rentabler. Im Gegensatz dazu ist es allgemein profitabler, Vollkauf oder Vollverkauf in Seitwärtsphasen einzusetzen. Entscheidungen für einen Teilkauf/Vollkauf oder einen Teilverkauf/Vollverkauf sind von Fall zu Fall und auf Basis einer detaillierten Analyse zu treffen. Da sinnvolle und allgemein gültige Bedingungen für einen Teilkauf/Vollkauf oder einen Teilverkauf/Vollverkauf nur mit erheblichem Aufwand zu formulieren sind, ist für den Rahmen dieser Arbeit vereinbart worden, dass jeder Handel immer mit vollständigem Einsatz des zur Verfügung stehenden Kapitals zustande kommt. Zur Eingruppierung von Handelssignalen in relevant und nicht relevant muss auch geprüft werden, ob das Signal zur gegenwärtigen Investmentposition (ob man investiert ist oder nicht) passt. Um Wertpapiere verkaufen zu können, muss man vorab die zu verkaufenden Wertpapiere auch besitzen. Wenn alle zuvor vorhandenen Wertpapier bereits verkauft sind, können sie nicht noch einmal bei einem direkt darauf folgenden Verkaufssignal verkauft werden. Da Teilkäufe als ausgeschlossen vorab vereinbart worden sind, können Kaufsignale, welche direkt einem zuvor getätigtem Vollkauf folgen, dann nicht beachtet werden und müssen als irrelevante Signale ausgefiltert werden. Die folgende Abbildung 6.3 veranschaulicht relevante und irrelevante Signale: Verkauf Verkaufssignal 13.09.2006 Relevant Kauf Verkauf Verkaufssignal 10.10.2006 Relevant Kauf Verkauf Verkaufssignal 27.10.2006 Relevant Kauf Verkauf Verkaufssignal 24.11.2006 Relevant Kauf 88 6. Implementierung elementarer Handelsstrategien Verkauf Kaufsignal 22.12.2006 Relevant Relevant Kauf Kauf Abbildung 6.3 Verkaufssignale, Google Inc. [SCharts08] Nach dem Kauf der Wertpapiere im Sommer 2006 erscheint das erste Verkaufssignal am 13. September 2006. Die bereits gekaufte Wertpapiere sind vorhanden, die Investmentposition passt zum Handelssignal und die Wertpapiere können verkauft werden. Vereinbarungsgemäß sind Teilverkäufe ausgeschlossen und es findet ein Vollverkauf statt. Nachfolgend entstehen weitere Verkaufssignale am 10. Oktober, 27. Oktober und 24. November. Zu diesen Zeitpunkten sind keine Wertpapiere im Besitz, die Investmentposition passt nicht zum Handelssignal und die Signale werden als irrelevant herausgefiltert. Das nächste relevante Handelssignal nach dem Verkauf am 13. September ist dann ein Kaufsignal, welches am 22. Dezember folgt und auch wieder zur Investmentposition passt und demzufolge beachtet werden kann. n Signal n Signal 37 Verkauf 37 Verkauf 53 Kauf 53 Kauf 78 Verkauf 78 Verkauf 84 Verkauf 92 Verkauf 112 Verkauf 134 Kauf signal rkaufs ntes Ve Releva 84 92 112 134 l aufsigna Kauf 145 145 Kauf 189 Kauf 189 250 Verkauf 250 Verkauf 267 Kauf 267 Kauf tes K Relevan n: Fortlaufender Zeitpunkt Abbildung 6.4 Relevante Handelssignale Die Abbildung 6.4 illustriert tabellarisch, wie nur relevante Signale angenommen werden. In der linken Tabelle sind alle entstehenden Handelssignale aufgeführt. Dazu wurden die Zustände „Kein Handel“ aussortiert und nur noch Kauf- oder Verkaufssignale behalten. Aus diesem Grund sind die Zeitpunkte in der Spalte „n“ nicht immer um jeweils eins ansteigend. Nach einem erfolgten Kauf zum Zeitpunkt 53 entsteht ein relevantes Verkaufssignal zum Zeitpunkt 78. Das nächste relevante Signal „Kauf“ entsteht zum Zeitpunkt 134. 89 6. Implementierung elementarer Handelsstrategien Weiterhin ist festgelegt worden, im Rahmen dieser Arbeit Handelsstrategien für jeweils nur ein Wertpapier zu entwerfen. Adaptive Handelsstrategien mit Umstellung des Investments sowie eine Portfoliobildung aus verschiedenen Wertpapieren sind aus Gründen der Komplexität nicht berücksichtigt. 6.1.3 Bewertung von Handelsstrategien Für die Auswertung einer Handelsstrategie müssen die im letzten Abschnitt 6.1.2 ermittelten relevanten Handelssignale weiter bearbeitet werden. Dazu muss zusätzlich eine Handelsausführung in der Vergangenheit simuliert und zu diesem Zweck hypothetische Kaufsund Verkaufszeitpunkte ermittelt werden. Bei der Auswertung einer Handelsstrategie bezogen auf historische Kursdaten werden durch den Nutzer ein Wertpapier, eine Handelsstrategie und ein Analysezeitraum ausgewählt. Je nach Analysezeitraum können zuerst alle im letzten Abschnitt erläuterten relevanten Handelssignale abgeleitet werden. Anschließend sollten zusätzlich die folgenden zwei Bedingungen beachtet werden: • Das erste Handelssignal im Analysezeitraum darf kein Verkaufssignal sein, da sich noch keine verkäuflichen Wertpapiere im Besitz befinden. • Sollte das Ende des Analysezeitraums mit einer Bestandsposition (der Anleger hat in Wertpapiere investiert) zusammentreffen, sollten die Wertpapiere für den Zweck der Verkaufspreisermittlung für die Rentabilitätsberechnung verkauft werden. Hierzu wird gegebenfalls ein zusätzliches Verkaufssignal am Ende des Analysezeitraum erzeugt. Für einen vorgegebenen Analysezeitraum werden somit immer Signalpaare aus einem Kaufund einem darauf folgenden Verkaufssignal als relevante Signale für die Strategiebewertung ermittelt. Abbildung 6.5 zeigt ein zusammenfassendes Beispiel. Hier sei der Analysezeitraum vom Zeitpunkt 70 bis zum Zeitpunkt 150 festgelegt. In der ersten Tabelle werden alle Handelssignale berechnet und in der zweiten Tabelle werden alle relevanten Signale erzeugt. Zuletzt werden nur die relevanten Signale für die Strategiebewertung ermittelt. Dabei fällt das erste Verkaufssignal zum Zeitpunkt 78 weg und am Ende des Analysezeitraumes wird ein zusätzliches Verkaufssignal eingefügt. 90 6. Implementierung elementarer Handelsstrategien Relevante Handelssignale Handelssignale n Signal n Signal 37 Verkauf 37 Verkauf 53 Kauf 53 Kauf 78 Verkauf 78 Verkauf 84 Verkauf 84 92 Verkauf 92 112 Verkauf 112 134 Kauf 134 145 Kauf 145 189 Kauf 189 Kauf 250 Verkauf 250 Verkauf 267 Kauf 267 Kauf Analysezeitraum ab dem Zeitpunkt 70 bis zum Zeitpunkt 150 Relevante Handelssignale der Strategiebewertung n Signal 134 Kauf 150 Verkauf Kauf n: Fortlaufender Zeitpunkt Abbildung 6.5 Relevante Signale der Strategiebewertung 6.2 Sichtbasierte Signalberechnung und Optimierungen Die Signalberechnung elementarer Handelsstrategien dient als Fundament für die weitere Entwicklung von erweiterten Handelsstrategien sowie für den zukünftigen Entwurf strategischer Portfolios aus verschiedenen Handelsstrategien und verschiedenen Wertpapieren. Hieraus ergab sich die Aufgabenstellung, möglichst effiziente Methoden der Signalberechnung für die Strategiebewertung zu entwickeln. Mehrere Optimierungsschritte sind im Rahmen dieser Arbeit durchgeführt worden, deren Ergebnisse in den folgenden Abschnitten ausführlich dargestellt werden. Eine weitere Motivation zur Optimierung ergab sich aus dem Ziel, diese Signale in Handelsstrategien im Intraday-Handel einzusetzen. Die Geschwindigkeit der Signalberechnung sowie Strategiebewertung spielt in dieser Anwendung eine entscheidende Rolle. Als Bedingung für alle Optimierungen war vorgegeben worden, dass die Implementierung sichtbasiert in SQL vorgenommen werden soll. 91 6. Implementierung elementarer Handelsstrategien Die folgende Abbildung illustriert vorhandene Basisdaten, die Aufgabenstellung und das zu erreichende Ziel: Gegeben: Indikatorwerte (Ind1) n Ind1 91 -106 92 -110 93 -104 94 -92 95 -88 96 -78 97 -76 98 -56 Aufgaben Ziel 1. Berechnung von Handelssignale ↓ 2. Eliminierung irrelevanter Handelssignale ↓ 3. Signalberechnung für Strategiebewertung n Signal n Signal 134 Kauf 150 Verkauf 178 Kauf 234 Verkauf n: Fortlaufender Zeitpunkt Abbildung 6.6 Sichtbasierte Signalberechnung für Strategiebewertung Für die Optimierungsaufgabe können die in Kapitel 5 beschriebenen Sichtdefinitionen zur Berechnung der Indikatoren als gegebenen angenommen werden. Die linke Tabelle in der Abbildung 6.6 beinhaltet die entsprechenden Indikatorenwerte. Gesucht sind die basierend auf diesen Indikatorwerten berechneten Signalpaare für die Strategiebewertung. Die rechte Tabelle in Abbildung 6.6 enthält im Ergebnis dieser Berechnung die jeweilige Handelsinformation. Dabei ist es gewünscht, dass die jeweils zusammengehörigen Signalpartner nebeneinander in der selben Zeile stehen. Als ein Signalpaar sind ein relevantes Kaufsignal und das zeitlich darauf folgende erste relevante Verkaufssignal zu verstehen. Im Ergebnis liefert die endgültige Sicht, in Abbildung 6.6 die rechte Tabelle, die übersichtlichen Handelsinformationen. Die Kursgewinne können dann aus den in derselben Zeile stehenden Kursinformationen zum Kaufzeitpunkt und Verkaufszeitpunkt berechnet werden. Um dem Anwender eine Flexibilität bei der Einstellung der Parameter anzubieten, sind Hilfsfunktionen hinzugefügt worden. Diese Funktionen ermöglichen die vom Anwender gewünschten Parameter in der SQL-Formulierung der Indikatoren sowie der Handelsstrategie zu verwenden: • sbGetPar1(), sbGetPar2(), sbGetPar3() Diese Funktionen liefern die vom Anwender eingegebenen Berechnungsperioden oder sonstige Eingabeperioden zur Berechnung der Indikatoren. Dadurch können Anwender beliebig die Empfindlichkeit der Indikatorlinien bezüglich der Kurslinie einstellen. • getBuy(), getSell() Diese Funktionen liefern die Einstellungsparameter der Handelsstrategien. Dabei bilden diese Parameter den Wert der Signallinien bei Überkreuzen-System (engl. Crossover System). 92 6. Implementierung elementarer Handelsstrategien Die gängigsten Signallinien bei Oszillatoren sind die Nulllinie, die Mittelpunktslinie oder Linien, welche die extremen Zonen abgrenzen. Diese Einstellungsfunktion kann angewendet werden, um beispielsweise rauschende Signale zu filtern oder um mehr Signale zu erzeugen. Die extremen Zonen abgrenzenden Linien, CCI Verkauf Verkauf Kauf Kauf Verkauf Kauf Kauf Abbildung 6.7 CCI-Signallinien Beispielsweise verwendet die CCI-basierte Handelsstrategie in der Abbildung 6.7 zwei Signallinien mit den Werten -100 und 100, um Handelssignale zu erzeugen. In diesem Fall beträgt getBuy() -100 und getSell() 100. Abbildung 6.8 Eingabefelder des TInTo-StrategyBuilders Das maskierte Bild aus dem TInTo-StrategyBuilder in der Abbildung 6.8 zeigt die Eingabefelder für die Periodenparameter und die Parameter der Signallinien unterhalb des Listenfeldes. Mit einem Klick auf eine der angebotenen Handelsstrategien im Listenfeld werden automatisch die benötigten Einstellungsparameter mit den am meisten verbreiteten Parametern eingesetzt. Mit dem Klick auf der Strategie CCI aus der Liste werden beispielsweise automatisch die Berechnungsperiode 20 und die Werte der Signallinien für das Überkreuzen-System -100 und 100 eingeblendet. Natürlich können diese Werte vom Anwender auch beliebig geändert werden. In den folgenden Abschnitten werden verschiedene, im Rahmen dieser Arbeit implementierte und getestete, sichtbasierte Signalberechnungen für die Strategiebewertung und deren Optimierungen erläutert. Die erste Implementierung endete mit wenig Erfolg resultierend in der Microsoft Access Fehleranzeige „Your SQL-Query is too complex“. Erste, dann funktionsfähige Versionen lieferten die erwarteten Ergebnisse, waren auf Grund ihrer extrem langen Berechnungsdauern jedoch nicht praxistauglich. Im Ergebnis detaillierter Tests und Ergebnisanalysen ließ sich die Berechnungseffizienz sukzessive verbessern, bis akzeptable Rechenzeiten erreicht wurden. 93 6. Implementierung elementarer Handelsstrategien Nachfolgende Varianten werden in den folgenden Abschnitten im Detail in ihrer Implementierung, Effizienzanalyse und weiteren Optimierungsmöglichkeiten erläutert: 1. Naive Implementierung 2. Fortlaufende Nummern in Sichten 3. Separate Signalberechnung 4. Gruppieren der Datensätze 5. Materialisierte Sichten Da der Schwerpunkt dieses Kapitels auf der Signalberechnung liegt, wird auf weitere Erläuterungen zur Berechnung der Indikatoren hier verzichtet. Detaillierte Beschreibungen dazu finden sich in den Kapiteln 3 und 5. Die in den folgenden Abschnitten graphisch dargestellten Sichten sind für das Verständnis der Leser und für eine kompakte Darstellung erheblich vereinfacht und müssen nicht mit den realen Ergebnissen der jeweiligen Sichten übereinstimmen. 6.2.1 Naive Implementierung Die Implementierungsvariante Naive Implementierung war die erste funktionsfähige Version. Die gesamte Signalberechnung für die Strategiebewertung betrug etwa 65 Minuten für die CCIbasierte Handelsstrategie mit einem Analysezeitraum von einem Jahr und einer Berechnungsperiode von 20 Handelstagen. Im Ergebnis war dies eine inakzeptable Variante, die folgenden Ergebnisse der Performanzanalyse zeigen jedoch deutlich, wie aufwändig die Teilberechnungen sind und welches Optimierungspotential besteht. Diese Implementierung ist neben der Abfrage zur Berechnung des Indikators auf drei weitere Abfragen aufgebaut: sbInd n 78 79 80 81 82 sbSig0 Ind1 98 102 103 107 101 sbSig1 sbSig2 n Sig n Sig n Sig n 56 89 90 98 Buy Buy Sell Sell 56 90 Buy Sell 56 Buy 90 Sig Sell Abbildung 6.9 Aufbau und Datenfluss der Sichten • Die Abfrage sbInd übernimmt die Berechnung eines Indikators. • Die Abfrage sbSig0 ermittelt alle möglichen Handelssignale basierend auf den Werten des Indikators. • Die Abfrage sbSig1 erzeugt alle relevante Handelssignale für die Strategiebewertung beruhend auf sbSig0. • Die letzte Abfrage leitet die Signale aus der Sicht sbSig1 ab, so dass ein Kaufsignal und das darauf folgende erste Verkaufssignal als eine Handelseinheit zusammen in einer Zeile stehen. Bei der Durchführung der Abfrage sbSig2 werden alle unterstützenden Abfragen (sbInd, sbSig0, sbSig1) hierarchisch aufgerufen und als Basis verwendet. 94 6. Implementierung elementarer Handelsstrategien Berechnung der Handelssignale (sbSig0) Die Abfrage, sbSig0 berechnet die Handelssignale basierend auf der Abfrage sbInd nach den folgenden Handelsregeln, welche das Überkreuzen-System umsetzt: Annahme : Sei n fortlaufender Zeitpunkt. Liefere Ind1 den Indikatorwert auf dem gegebenen Zeitpunkt. ∀n : {(Ind1(n-1) < getBuy()) ∧ (Ind1(n) ≧ getBuy()) } ⇒ (Signal(n) =„Kauf“) ∀n : {(Ind1(n-1) > getSell()) ∧ (Ind1(n) ≦ getSell()) } ⇒ (Signal(n) =„Verkauf“) Die Abfrage sbSig0 besteht aus drei Teilen, die mit der UNION-Anweisung verbunden sind. Der erste Teil ermittelt alle Kaufsignale und der zweite Teil alle Verkaufssignale. Der dritte Teil generiert das letzte zusätzliche Verkaufssignal für die Strategiebewertung: Abfrage sbSig0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 ( SELECT sbI1.ID, sbI1.n, (sbI1.High+ sbI1.Low+ sbI1.Close)/3 AS TypicalPrice, "Buy" AS Signal FROM sbInd AS sbI0, sbInd AS sbI1 WHERE sbI0.n >= sbGetPar1() AND sbI1.n >= sbGetPar1() AND sbI0.n +1 = sbI1.n AND sbI0.Ind1<getBuy() AND sbI1.Ind1>= getBuy() ORDER BY sbI1.n ASC ) UNION ( SELECT sbI1.ID, sbI1.n, (sbI1.High+ sbI1.Low+ sbI1.Close)/3 AS TypicalPrice, "Sell" AS Signal FROM sbInd AS sbI0, sbInd AS sbI1 WHERE sbI0.n >= sbGetPar1() AND sbI1.n>= sbGetPar1() AND sbI0.n +1 = sbI1.n AND sbI0.Ind1>getSell() AND sbI1.Ind1<= getSell() ORDER BY sbI1.n ASC ) UNION ( SELECT LAST(sbInd.ID), LAST(sbInd.n), (LAST(sbInd.High)+LAST(sbInd.Low)+LAST(sbInd.Close))/3 AS TypicalPrice, "Sell" AS Signal FROM sbInd ); Der erste Teil in den Zeilen 2-7 berechnet alle Kaufsignale: • Der Bedingungsteil der Implikation der genannten Handelsregel für Kaufsignale ist in den Zeilen 4-6 umgesetzt und rot unterstrichen. Um die zeitlich hintereinander folgenden Werte zu vergleichen, ist die Abfrage sbInd mit sich selbst im FROM-Teil verknüpft. Dabei folgt die Verbindungsbedingung sbI0.n+1=sbI1.n in der Zeile 5. Die Vergleiche mit den Signalwerten sind in der Zeile 6 dargestellt. Die beiden Funktionen getBuy() und getSell() liefern die vom Anwender eingegebenen Werten für Signallinien. • Der Folgerungsteil der Implikation ist in der Zeile 3 im SELECT-Teil enthalten. 95 6. Implementierung elementarer Handelsstrategien Der SELECT-Teil bestimmt neben der Signalanzeige auch sonstige auszuliefernde Daten für die spätere Berechnung der Handelsrendite. Die ersten zwei Bedingungen im WHERE-Teil schließen die Hilfsdaten zur Berechnung des Indikators aus. Abschließend werden die Daten durch die ORDER-BY-Anweisung chronologisch sortiert. Die Verkaufssignale werden analog zur Berechnung der Kaufsignale in den Zeilen 11-16 ermittelt und durch eine UNION-Verbindung mit den Kaufsignalen zusammengesetzt. Abschließend werden in den Zeilen 20-23 die letzten Kursdaten aus dem Analysezeitraum als die Daten zum Zeitpunkt eines Verkaufssignals hinzugefügt, um später den Preis des vorhandenen Wertpapiers am Ende des Analysezeitraumes beurteilen zu können. Berechnung der relevanten Handelssignale (sbSig1) Basierend auf den ermittelten Handelssignalen werden nun anhand der Abfrage sbSig1 die relevanten Signale für die Strategiebewertung abgeleitet. sbSig0 n Signal Die Sicht sbSig0 enthält alle Handelssignale. Bei der Sicht sbSig0 in der Abbildung 5.10 sind die erzielte relevante Signale in Grün bzw. Rot markiert. 37 Verkauf 53 Kauf 78 Verkauf 84 Verkauf 92 Verkauf 112 Verkauf 134 Kauf 145 Kauf 189 Kauf 250 Verkauf Relevantes Verkaufssignal 267 Verkauf Letztes Signal ist immer ein Verkaufssignal. Verkaufssignal Relevantes Kaufsignal Kaufsignal • Ein relevantes Kaufsignal liegt vor, wenn das direkt davor befindliche Handelssignal in der Sicht sbSig0 ein Verkaufssignal ist. • Ein relevantes Verkaufssignal liegt vor, wenn das direkt davor befindliche Handelssignal in der Sicht sbSig0 ein Kaufsignal ist. Abbildung 5.10 Relevante Signale Das in der Abfrage sbSig0 zusätzlich hinzugefügte letzte Verkaufssignal kann dabei nach der vorgestellten Methodik für relevant oder irrelevant erklärt werden. Wenn das direkt davor befindliche Signal wie in der Abbildung 5.10 ein Verkaufssignal ist, gilt dieses als irrelevant. Sonst gilt dieses Signal als ein relevantes Verkaufssignal. Die Abfrage sbSig1 besteht aus drei Teilen, die mit UNION-Anweisung verbunden sind. Der erste Teil ermittelt alle relevanten Kaufsignale und der zweite Teil alle relevante Verkaufssignale. 96 6. Implementierung elementarer Handelsstrategien Abfrage sbSig1 1 2 3 6 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 ( SELECT E.ID, E.n, E.TypicalPrice, E.Signal FROM sbSig0 AS E, sbSig0 AS T WHERE E.Signal='Buy' AND T.Signal ='Sell' AND T.n = (SELECT MAX(H.n) FROM sbSig0 AS H WHERE H.n<E.n) ORDER BY T.n ASC, E.n ASC ) UNION ( SELECT E.ID, E.n, E.TypicalPrice, E.Signal FROM sbSig0 AS T, sbSig0 AS E WHERE E.Signal='Sell' AND T.Signal ='Buy' AND T.n = (SELECT MAX(H.n) FROM sbSig0 AS H WHERE H.n<E.n) ORDER BY T.n ASC, E.n ASC ) UNION ( SELECT J.ID, J.n, J.TypicalPrice, J.Signal FROM sbSig0 AS J WHERE J.Signal ='Buy' AND J.n = (SELECT FIRST(k.n) FROM sbSig0 AS k ) ); • Die relevanten Kaufsignale werden in den Zeilen 2-7 berechnet. Um die zwei hintereinander liegenden Signale in der Sicht sbSig0 zu vergleichen, wird ein Kreuzprodukt im FROM-Teil gebildet. Das direkt vor einem Kaufsignal befindliche Signal muss ein Verkaufssignal sein, um das Kaufsignal als relevant anzunehmen. Diese Bedingung ist dadurch implementiert, dass das letzte vor einem Kaufsignal stehende Signal ermittelt wird. Dieses Signal weist den maximalen n-Wert auf und wird in den Zeilen 4-6 durch die Aggregatfunktion MAX ermittelt. • Die relevanten Verkaufssignale werden in ähnlicher Weise in den Zeilen 11-16 ermittelt und mit der UNION-Verbindung zusammengesetzt. • Letztlich wird in den Zeilen 20-23 noch ein Kaufsignal angelegt, unter der Bedingung, dass das erste Handelssignal im Analysezeitraum eine Kaufsignal ist. Da das erste Signal nicht mit einem davor liegenden Signal verglichen werden konnte, muss dieses separat betrachtet werden. Wenn das erste Signal im Analysezeitraum ein Kaufsignal ist, ist es relevant. Wenn das erste Signal im Analysezeitraum jedoch ein Verkaufssignal ist, ist es irrelevant. Zum ersten Zeitpunkt im Analysezeitraum ist kein verkäufliches Wertpapier vorhanden. Berechnung der Signalpaare (sbSig2) Die endgültige Abfrage sbSig2 für die Signalberechnung stellt Handelssignale so dar, dass ein relevantes Kaufsignal und das zeitlich darauf folgende erste relevante Verkaufssignal nebeneinander in der Ergebnissicht stehen. Dabei liegt die Berechnung der Abfrage sbSig1 zugrunde: 97 6. Implementierung elementarer Handelsstrategien Abfrage sbSig2 SELECT * FROM sbSig1 AS T1, sbSig1 AS T2 3 WHERE T1.Signal='Buy' AND T2.Signal='Sell' AND T2.n = (SELECT MIN(T3.n) 4 FROM sbSig1 AS T3 5 WHERE T1.n < T3.n ); 1 2 Um die zwei hintereinander befindlichen Signale zu betrachten, wird wieder ein Kreuzprodukt im FROM-Teil gebildet. Das nach einem Kaufsignal folgende erste Verkaufssignal ist in den Zeilen 3-5 so abgeleitet worden, dass ein Verkaufssignal mit dem minimalen n-Wert aus den nachfolgenden Verkaufssignalen gesucht wird. Performanzanalyse Um die Leistungsfähigkeit der Berechnungen zu bewerten, wird beispielhaft die CCI-basierte Handelsstrategie mit einem ein jährigen Analysezeitraum verwendet. Zum Zweck der detaillierten Optimierungsanalyse wurde die Berechnungsdauer aller vorgestellten vier Sichten auch separat untersucht. Folgende Testbedingungen gelten für alle nachfolgenden Optimierungsvarianten und deren Berechnungsanalyse: CCI-basierte Handelsstrategie Werte von Signallininen : -100 für Kaufsignal, 100 für Verkaufssignal Berechnungsperiode : 20 Handelstage Analysewertpapier : Dow Jones Industrial Average Analysezeitraum : 01.01 2008 - 31.12.2008 (253 Datensätze) Anzahl der zu betrachtenden Datensätze : 272 Testinstrument : Microsoft XP SP3, Intel Pentium M Prozessor (1,60 GHz, 1,25GB), DSL 16MBit Besonderheit : 1) Abfrage sbInd holt die benötigte Daten aus der Tabelle tmpCCI0. 2) Die Berechnungsdauer einer Abfrage beinhaltet neben der Durchführung der Abfrage auch die Speicherung der Endergebnisse. Die gesamte Durchführungszeit für die Naive Implementierung beträgt über eine Stunde (3956 Sekunden): Datenfluss der Abfragen: sbInd (CCI) → sbSig0 → sbSig1 → sbSig2 98 Abfrage Berechnungsdauer (Sec) sbInd (CCI) 0,2812 sbSig0 1,2343 sbSig1 218,5938 sbSig2 3956,078 6. Implementierung elementarer Handelsstrategien Berechnungsdauer der Abfragen sbInd (CCI) sbSig0 sbSig1 sbSig2 0 1.000 2.000 3.000 4.000 Sec Abbildung 6.11 Berechnungsdauer der Abfragen Die Berechnungsdauern der Abfragen sbInd sowie sbSig0 sind im Vergleich zu den Berechnungsdauern der darauf weiter aufgebauten Abfragen sehr kurz. Die Durchführungszeit der Abfrage sbSig1 allerdings übersteigt deutlich die Berechnungsdauern der Basisabfragen sbInd und sbSig0 und beträgt ca. 3,6 Minuten. Die Durchführungsdauer der hierarchisch auf der letzten Ebene liegenden Abfrage, sbSig2 lag noch deutlich darüber und betrug etwa eine Stunde. Schon vom Aufbau der Abfrage sbSig1 her kann man ermitteln, dass diese Berechnung sehr zeitintensiv wird: Der erste Teil der Abfrage sbSig1: Die Berechnung der relevanten Kaufsignal 2 3 4 5 6 SELECT E.ID, E.n, E.TypicalPrice, E.Signal FROM sbSig0 AS E, sbSig0 AS T WHERE E.Signal='Buy' AND T.Signal ='Sell' AND T.n = (SELECT MAX(H.n) FROM sbSig0 AS H WHERE H.n<E.n) ● ● JOIN E n 67 78 92 101 Sig Buy Buy Buy Buy T n H n Sig Sig Sell Buy 52 67 52 84 153 167 Sell Sell Sell Sell Ergebnis MAX n H n Sig Sell Buy 52 67 Sig Buy MAX ● ● ● Abbildung 6.12 Die Berechnung der relevanten Kaufsignal: Der erste Teil der Sicht sbSig1 Um die relevanten Kaufsignale abzuleiten, wird die Sicht sbSig0 mit sich selbst in der Zeile 3 in obigem SQL-Code verknüpft. Dabei ist die Basissicht sbSig0 jeweils in E und T umbenannt. Abbildung 6.12 illustriert den Berechnungsaufwand, um lediglich „ein“ mögliches relevantes Kaufsignal zu ermitteln. Für jedes Verkaufssignal in der Sicht T wird eine Aggregatbildung (hier 99 6. Implementierung elementarer Handelsstrategien Maximum) benötigt. Die gesamte Anzahl solcher Aggregatbildungen zur Berechnung aller relevanten Kaufsignale erreicht insgesamt die Anzahl der abgeleiteten Kaufsignale aus der Sicht sbSig0 multipliziert mit der Anzahl der abgeleiteten Verkaufssignale aus der Sicht sbSig0. Die Abfrage sbSig1 berechnet zusätzlich alle relevanten Verkaufssignale mit vergleichbarem Aufwand. Der Berechnungsaufwand der dahinterliegenden Basissichten ist hierbei noch nicht einmal berücksichtigt. Jede Aggregatbildung, im Beispiel die Sicht H basiert auf der Berechnung der Sicht sbSig0. Die Abfrage sbSig0 wiederum beruht auf der Abfrage sbInd. Unter Verwendung der in der Abbildung 6.11 dargestellten CCI-basierten Strategie und deren Bedingungen ist der folgende Berechnungsaufwand gegeben: Bei „einmaliger“ Durchführung der Abfrage sbInd, die Abfrage sbSig0 benötigt deren 3 Durchläufe, entstehen je nach Anzahl der Handelstage ungefähr 5440 (= 272 Datensätze * 20 Berechnungsperiode) Datensätze. Die darauf folgende Abfrage sbSig0 besteht aus drei durch UNION verbundene Teile. Im Ergebnis beträgt die Anzahl der zu betrachtenden Datensätze dann ungefähr 16320 ( = 272 Datensätze * 20 Berechnungsperiode * 3). Basierend auf der Abfrage sbSig1 wird schließlich die Abfrage sbSig2 durchgeführt. Diese ist ähnlich aufgebaut wie sbSig1 und benötigt ebenfalls mehrfache Aggregatbildungen. Die auffällig lange Berechnungszeit der Abfrage sbSig2 ist auf die aufwändigen Berechnungen der Basisabfrage sbSig1 und die weiteren darauf aufbauenden vielfachen Aggregatbildungen zurückzuführen. Optimierungsidee In den folgenden Optimierungen wird versucht, diese zahlreichen und zeitaufwendigen Aggregatbildungen zu reduzieren. Eine weitere Idee besteht darin, die Berechnung der Kaufsignale und Verkaufssignale in zwei verschiedene Abfragen aufzuteilen. Durch eine separate Berechnung der Kaufsignale und der Verkaufssignale wird die Basistabelle im FROMTeil kleiner wodurch auch bei der Durchführung der Abfragen sbSig1 und sbSig2 das Kreuzprodukt aus den Basistabellen verkleinert wird. Demnach wird ein Teil der Bedingungskriterien zur Einschränkung der Abfrage auf Kauf- oder Verkaufssignale nicht benötigt und kann entfernt werden. Dadurch ist eine effizientere Berechnung zu erwarten. 6.2.2 Verwendung von fortlaufenden Nummern Dieser Optimierungsversuch hat letztendlich nicht zum gewünschten Ergebnis geführt. Die gesamte Berechnungsdauer erhöhte sich von etwa einer Stunde für die Naive Implementierung auf bis über zweieinhalb Stunden für diese Variante unter gleichen Testbedingungen. Jedoch sind alternative Lösungswege denkbar, um die hier zugrunde liegende Idee zu realisieren. Optimierungsidee und Implementierung Um die zahlreichen aufwändigen Aggregatbildungen in den Abfragen sbSig1 und sbSig2 in der Naiven Implementierung zu vermeiden, wurden die schon chronologisch sortierten Datensätze der Sichten fortlaufend durchnummeriert. Des Weiteren wurden zur Optimierung die 100 6. Implementierung elementarer Handelsstrategien Signalberechnungen für Kauf- und Verkaufssignale aufgetrennt sowie der signifikante Kurs7 durch den einfachen Schlusskurs ersetzt. Letzteres spart die Berechnung des signifikanten Kurses für jeden möglichen Handelstag. Neue fortlaufende Nummern sbSig0 sbSig0N n Signal n Signal Nr 92 Verkauf 92 Verkauf 21 112 Verkauf 112 Verkauf 22 134 Kauf 134 Kauf 23 145 Kauf 145 Kauf 24 189 Kauf 189 Kauf 25 250 Verkauf 250 Verkauf 26 267 Verkauf 267 Verkauf 27 Verkaufssignal Relevantes Kaufsignal Kaufsignal Relevantes Verkaufssignal n: Fortlaufender Zeitpunkt Abbildung 6.13 Einfügen von fortlaufenden Nummern in der Sicht sbSig0 Um in der in 6.2.1 vorgestellten Naiven Implementierung relevante Signale abzuleiten, wurde eine Vielzahl von Aggregatfunktionen MAX() verwendet. Ziel war dabei, zwei hintereinander liegende Datensätze in der Sicht sbSig0 zu vergleichen. Diese Prinzip ist nochmals in der Abbildung 6.13 links verdeutlicht. Angemerkt sei hier nochmals, dass die fortlaufenden Zeitpunkte (n-Werte) nicht gleichmäßig inkrementierende Nummern sind, da die Menge der Signalzustände „Kein Handel“ zuvor aussortiert worden sind. Der Optimierungsansatz besteht nun darin, dass, wenn es jeweils eine um eins inkrementierende fortlaufende Nummerierung für jeden der Datensätze geben würde, die zwei hintereinander liegenden Datensätze einfach mit Hilfe dieser zusätzlichen Indizes verglichen werden könnten: • Naive Implementierung im Abschnitt 6.2.1 (Die Berechnung der relevanten Kaufsignal: Der erste Teil der Abfrage sbSig1) 1 2 3 4 5 SELECT E.ID, E.n, E.TypicalPrice, E.Signal FROM sbSig0 AS E, sbSig0 AS T WHERE E.Signal='Buy' AND T.Signal ='Sell' AND T.n = (SELECT MAX(H.n) FROM sbSig0 AS H WHERE H.n<E.n) • Implementierung mit Hilfe von fortlaufender Nummerierung in Sicht (Die Berechnung der relevanten Kaufsignal: Der erste Teil der Abfrage sbSig1K ) 1 2 3 SELECT E.n, E.Close, E.Sig FROM sbSig0N AS E, sbSig0N AS T WHERE E.Sig='Buy' AND T.Sig ='Sell' AND T.Nr+1=E.Nr 7 Signifikanter Kurs (engl. Typical Kurs : TP ), TP(n) = (Close(n)+High(n)+Low(n))/3, n: Fortlaufender Zeitpunkt. 101 6. Implementierung elementarer Handelsstrategien Die aufwändigen Maximum-Bildungen bei dem in blau markierten Bedingungskriterium der Naiven Implementierung könnten durch eine Vergleichsbedingung ersetzt werden, welche anhand der fortlaufenden Nummerierung zu realisieren ist. Aufbau der Sichten und Implementierung Diese Optimierungsvariante ist im Vergleich Naiven Implementierung wie folgt aufgebaut: • Naive Implementierung im Abschnitt 6.2.1 (Datenfluss der Sichten) sbInd → sbSig0 → sbSig1 → sbSig2 • Implementierung mit Hilfe von fortlaufenden Nummern in Sicht (Datenfluss der Sichten) sbInd sbSig0 sbSig1K sbSig1KN sbSig1V sbSig1VN sbSig0N sbSig2 • In beiden Varianten berechnet die Abfrage sbSig0 alle Handelssignale in gleicher Vorgehensweise. Jedoch wurde bei dieser Variante der Schlusskurs anstatt des signifikanten Kurses für den auszuliefernden Kurspreis verwendet. Dies spart die Berechnung des signifikanten Kurses ein. • Die Abfragen sbSig0N, sbSig1KN sowie sbSig1VN sorgen dafür, dass die fortlaufenden Nummern in der jeweiligen Sicht entstehen. • Die Abfrage sbSig1 der Naiven Implementierung berechnet alle relevanten Signale für die Strategiebewertung. Dabei ist die Berechnung relevanter Kaufsignale und Verkaufssignale mit der UNION-Verbindung realisiert. In dieser neuen Variante findet die jeweilige Berechnung relevanter Kaufsignale und relevanter Verkaufssignale durch die Abfrage sbSig1K und sbSig1V separat statt. • Die Abfrage sbSig2 stellt bei beiden Varianten die zusammengehörigen Signalpartner in derselben Zeile als Signalpaare zusammen. In der Naiven Implementierung musste bei der Durchführung der Abfrage sbSig2 die Sicht sbSig1 mit sich selbst verknüpft werden. Angenommen, es gäbe jeweils 50 relevante Kaufsignale und Verkaufssignale. Dann enthält das Kreuzprodukt 10,000 (=100 * 100) Datensätze. In der neuen Version enthält das Kreuzprodukt bei der Abfrage sbSig2 durch separate Berechnung nur 2,500 (= 50*50) Datensätze, welche durch sbSig2 für die Zusammenstellung der Signalpartner zu durchlaufen sind. Anhand der fortlaufenden Nummern kann die Abfrage sbSig2 wie folgt ohne zusätzliche Minimum-Bildungen realisiert werden: Abfrage sbSig2 1 2 3 SELECT E.n, E.Close, E.Sig, T.n, T.Close, T.Sig FROM sbSig1KN AS E, sbSig1VN AS T WHERE T.Nr=E.Nr Nach der Berechnungslogik ist die Anzahl der relevanten Kaufsignale und die Anzahl der relevanten Verkaufssignale für die Strategiebewertung gleich. Daher besitzen die chronologisch 102 6. Implementierung elementarer Handelsstrategien sortierten zusammengehörigen Signalpartner denselben Nr-Wert. Diese Bedingung ist in der 3. Zeile der Abfrage sbSig2 aufgeführt. Implementierung der Vergabe der fortlaufenden Nummern in Sichten Die Ursache für die verlängerte Laufzeit dieser Variante lag schließlich an der Realisierung der fortlaufenden Nummern in den Sichten. Als ein Beispiel für die Implementierung dient hier die Abfrage sbSig0N: Abfrage sbSig0N SELECT n, Close, Sig, (SELECT Count(*) FROM sbSig0 as Temp WHERE Temp.n < sbSig0.n) AS Nr 4 FROM sbSig0; 1 2 3 Die Abfrage sbSig0N vergibt von null an fortlaufend immer eine um eins inkrementierende Nummer für jeden Datensatz in der Sicht sbSig0. Die Funktion COUNT in der erste Zeile zählt hier alle Datensätze auf, deren n-Wert kleiner als der des gerade aufgerufenen Datensatzes ist. Damit wird eine Spalte mit fortlaufenden Nummern simuliert, wofür hier leider eine Aggregatfunktion COUNT für jeden Datensatz der Sicht sbSig0 verwendet werden musste. Performanzanalyse In dieser Implementierung ist feststellbar, dass die Berechnungen für die Vergabe der fortlaufenden Nummern sehr aufwändig sind: Datenfluss der Abfragen: sbInd (CCI) sbSig0 Abfrage Berechnungsdauer (sec) sbInd(CCI) 0,2812 sbSig0 1,2968 sbSig0N 29,7812 sbSig1K 234,375 sbSig1V 213,4531 sbSig1KN 1179,594 sbSig1VN 1069,016 sbSig2 8466,672 sbSig1K sbSig1KN sbSig1V sbSig1VN sbSig0N sbSig2 Getestet wurde hier beispielsweise die CCI basierte Handelsstrategie über ein Jahr. Das Einfügen der fortlaufenden Nummern in die Sicht sbSig0 dauert ca. 30 Sekunden, während die Laufzeit der Sicht sbSig0 ungefähr nur 1,3 Sekunden ergibt. Die Vergabe der fortlaufenden Nummern in den Sichten sbSig1K und sbSig1V beträgt bis zum Fünffachen der Berechnungszeit von sbSig1K und sbSig1V. Abbildung 6.14 Die Berechnungsdauer der Abfragen ( Testbedingungen 8 ) 8 Die Teststrategie sowie Testbedingungen sind unverändert gegenüber der Performanzanalyse in der Naiven Implementierung im Abschnitt 6.2.1. Weitere Details sind auch im Anhang 6-A aufgeführt. 103 6. Implementierung elementarer Handelsstrategien Neben den aufwändigen Berechnungen für die Vergabe der fortlaufenden Nummern ist die gesamte Durchführungsdauer, die Berechnung der Abfrage sbSig2 beträchtlich: Berechnungsdauer der Abfragen (Version : Fortlaufende Nummern in Sichten) sbInd (CCI) sbSig0 sbSig0N sbSig1K sbSig1V sbSig1KN sbSig1VN sbSig2 0 2.250 4.500 9.000 Sec 6.750 Laufzeit der Signalberechnung für Strategiebewertung (Abfrage sbSig2 ) Naive Implementierung Fortlaufende Nummern in Sichten 0 2.250 4.500 6.750 9.000 Sec Abbildung 6.15 Die Berechnungsdauer der Abfragen ( Testbedingungen 9 ) Die gesamte Dauer zur Signalberechnung der Strategiebewertung beträgt etwa zweieinhalb Stunden und damit über das Zweifache verglichen mit der Naiven Implementierung aus Abschnitt 6.1.1. Dieser Berechnungsaufwand resultiert daraus, dass die für die Vergabe der fortlaufenden Nummern verwendete COUNT-Funktion für alle Datensätze der Sichten ohne Einschränkungen verwendet werden musste. Die auf dieser Basis konstruierten Sichten dienen weiterhin als Basistabellen für die folgenden Abfragen. Dieselbe Nummerierungsmethode findet in den weiteren Sichtebenen Verwendung, was im Ergebnis zu dem schlechten Laufzeitverhalten führt. Optimierungsideen Alternative Lösungswege zur Realisierung fortlaufender Nummern und weitere Optimierungen sind vorstellbar: • NEXT()- oder PRIOR()-Funktion Zum Navigieren in Datensätzen bietet Access 2003 nur die Funktionen FIRST() und LAST(). Funktionen wie NEXT() oder PRIOR(), welche sich auf zwei hintereinander befindliche Datensätze in Sicht beziehen, wären sehr sinnvoll in der Signalberechnung einsetzbar, fehlen allerdings in Access. Eine Simulation in SQL ist zwar möglich, könnte allerdings zu vergleichbarem Aufwand und negativem Laufzeitverhalten führen wie die Aggregatfunktionen MAX() und COUNT(). 9 Die Teststrategie sowie Testbedingungen sind unverändert gegenüber der Performanzanalyse in der Naiven Implementierung im Abschnitt 6.2.1. Weitere Details sind auch im Anhang 6-A aufgeführt. 104 6. Implementierung elementarer Handelsstrategien • Realisierung der fortlaufenden Nummern anhand von VBA Als eine umgehende Lösung kann eine in VBA implementierte Funktion in der Zielliste, also im SELECT-Teil, anlegt werden, welche bei jedem Datensatz erneut aufgerufen wird und je Aufruf eine um eins fortlaufende Zahl liefert. Damit können fortlaufende Nummern in Sichten simuliert werden, wobei der Gewinn an Effizienz vielversprechend erscheint. • Materialisieren der Sichten Ein Speichern der Sichten wäre der einfachste Ausweg mit garantierter Verbesserung an Laufzeit um den Preis eines erhöhten Speicherbedarfs. Beim Materialisieren kann eine Spalte durch den Datentyp Autonumber definiert werden, wodurch die automatisch fortlaufenden Nummern in der Tabelle realisiert werden können. Alternativ kann man bei materialisierten Sichten mit der ALTER TABLE-Anweisung mit COUNTER-Funktion fortlaufende Nummern erzeugen. Beide Methoden sind im nächsten Kapitel für die Renditeberechnung der Handelsstrategien verwendet worden und werden dort im Detail beschrieben. • Optimierungen an SQL-Formulierungen Um die Größe der Basistabellen für die folgenden Abfragen klein zu halten, sind die Berechnungen relevanter Kaufsignale und Verkaufssignale bei dieser Variante separat implementiert. Für die Realisierung einer höheren Effizienz könnten die separaten Berechnungen schon frühzeitig bei den Berechnungen der Handelssignale verwendet werden. Die umgehende Lösung anhand von VBA oder durch Materialisieren versprechen, die Laufzeit sicher zu verkürzen. Es bleibt allerdings die Frage zu beantworten, ob die umgehende Lösung anhand von VBA für zukünftige Erweiterungen der Handelsstrategien und für die Portfoliobildungen aus verschiedenen Strategien ein stabiles Fundament bieten kann. Weiterhin ist vorhersehbar, dass das Materialisieren der günstiger strukturierten Sichten (siehe Punkt oben „Optimierungen an SQL Formulierungen“) einen noch größeren Berechnungsvorteil ermöglichen wird als in dieser Implementierung nach 6.2.2. Darüber hinaus unterstützt Access 2003 materialisierte Sichten nicht direkt, so dass diese simuliert werden müssen. Auf Grund dieser Unsicherheiten hinsichtlich der zur erwartenden Ergebnisse aus der VBANummerierung und der simulierten Materialisierung fiel die Entscheidung für eine Umsetzung der Optimierungsversuche an den SQL-Formulierungen. In den nächsten Abschnitten folgen weitere Optimierungsvarianten, die die Laufzeit deutlich verbessern. 6.2.3 Separate Berechnung von Handelssignale Der Ansatz dieser Optimierung ist, die Basistabellen für Sichten möglichst klein zu halten mit dem Ziel, den Aufwand für die gesamte Berechnung zu reduzieren. Dazu wird die Berechnung der Kaufsignale und Verkaufssignale frühzeitig auf die nach der Berechnung des Indikators folgende Sichtebene aufgeteilt: sbBuy sbInd sb0 sbSell 105 sb1 6. Implementierung elementarer Handelsstrategien • Die Abfrage sbBuy bzw. sbSell berechnet alle Kaufsignale bzw. Verkaufssignale basierend auf der Berechnung des Indikators, der Abfrage sbInd. Diese separate Berechnung der Handelssignale erzielt einen weiteren Effizienzvorteil. Dabei können Kaufsignale aus der Sicht sbBuy und Verkaufssignale aus der Sicht sbSell einfach durch Kreuzprodukt-Bildung in der Sicht sb0 ohne zusätzliche Bedingungskriterien verknüpft werden, so dass im Ergebnis ein Kaufsignal und ein Verkaufssignal in einem Datensatz stehen. Diese Signale sind aber im Folgenden noch in Signalpaare zu sortieren. Im Vergleich dazu war bei der Naiven Implementierung im Abschnitt 6.2.1. feststellbar, dass die zusätzliche Darstellung der relevanten Signale als Signalpaare sehr aufwändig ist. Diese Durchführung dauerte über eine Stunde, während die Berechnung der relevanten Signale in weniger als 4 Minuten abgeschlossen war. • Basierend auf den Abfragen sbBuy und sbSell liefert die Abfrage sb0 die relevanten Verkaufssignale zusammen mit allen Kaufsignalen. • Schließlich filtert die Abfrage sb1 nur relevante Kaufsignale und liefert paarweise alle relevanten Kaufsignale mit ihren schon berechneten relevanten Verkaufssignalen. Die Berechnungsmethode für die Handelssignale in den Abfragen sbBuy und sbSell sind wieder gleich den Berechnungen in der Naiven Implementierung. Die in der Naiven Implementierung durch UNION verbundenen Berechnungsteile für Kauf- bzw. Verkaufssignale werden hier nun allerdings in zwei Abfragen sbBuy und sbSell aufgeteilt. Dabei wird bei dieser Variante der Schlusskurs analog 6.2.2 anstatt des signifikanten Kurses in der Zielliste angewendet. Berechnung der relevanten Verkaufssignale (sbSig0) Als Basissichten für die Berechnung der relevanten Signale verwenden wir jetzt zwei Sichten, welche alle Kaufsignale bzw. Verkaufssignale enthalten: Naive Implementierung: Sicht sbSig0 Separate Signalberechnung : Sicht sbBuy n Sig 35 Sell 39 Buy 48 Buy 60 Sell 81 Sell 98 Buy 109 Buy 123 Buy 150 Sell Sicht sbSell n Sig n Sig 39 Buy 35 Sell 48 Buy 60 Sell 98 Buy 81 Sell 109 Buy 150 Sell 123 Buy n: Fortlaufender Zeitpunkt Abbildung 6.16 Die Basistabellen für die Berechnung der relevanten Signale. Bei den Sichten in der Abbildung 6.16 sind die ermittelten relevanten Kaufsignale grün und die Verkaufssignale rot markiert. Die grau markierten Signale sind irrelevant und müssen hier wegsortiert werden. In der Sicht sbSig0 in der Naiven Implementierung kann man die relevanten 106 6. Implementierung elementarer Handelsstrategien Signale einfacher erkennen. Relevante Verkaufssignale werden dort immer am Ende einer Serie von Kaufsignalen erzeugt. Dies ist nicht so in der hier beschriebenen Implementierung Separate Signalberechnung. Hier folgt beispielsweise ein relevantes Verkaufssignal zum Zeitpunkt 150 in der Sicht sbSell nach einer Reihe von Kaufsignalen zu den Zeitpunkten 98, 109 und 123 in der Sicht sbBuy. Dies bedeutet, dass ein relevantes Verkaufssignal das jeweils erste Verkaufssignal ist, dessen n-Wert größer ist als der n-Wert des jeweiligen Kaufsignals. Diese Regel für das erste Verkaufssignal ist durch die Suche nach dem minimalen n-Wert in den Zeilen 4-6 in der folgenden Abfrage realisiert, ähnlich der Naiven Implementierung: Abfrage sb0 1 SELECT B.n AS BN, B.Close AS BClose, B.Sig AS BSig, S.n AS SN, S.Close AS SClose, S.Sig AS SSig sbBuy AS B, sbSell AS S 4 WHERE S.n IN ( SELECT MIN(S2.n) 5 FROM sbSell AS S2 6 WHERE B.n < S2.n ); 2 3 FROM Im FROM-Teil werden alle Kaufsignale mit allen Verkaufssignalen verknüpft. Im Ergebnis stehen alle Kaufsignale und nur die relevanten Verkaufssignale nebeneinander. Anders als bei der Naiven Implementierung sind die Bedingungskriterien zur Unterscheidung für Kauf- bzw. Verkaufssignale hier nicht nötig, da diese in sbBuy und sbSell separat erzeugt werden. Auch ist eine zusätzliche Berücksichtigung bzgl. des ersten Verkaufssignals nicht nötig. Wenn das erste Signal im Analysezeitraum ein Verkaufssignal ist, wird dieses immer ausgefiltert. In diesem Fall existiert kein Kaufsignal, welches für den Analysezeitraum einen kleineren n-Wert als dieses erste Verkaufssignal enthält. Dieses erste Signal erfüllt dann die Bedingung in der Zeile 6 der Abfrage sb0 nicht. Berechnung der relevanten Kaufsignale (sbSig1) Für die anschließende Ermittlung der relevanten Kaufsignale dient dann die erläuterte Sicht sb0 als Basissicht : Sicht sb0 BN BSig SN SSig 39 Buy 60 Sell 48 Buy 60 Sell 98 Buy 150 Sell 109 Buy 150 Sell 123 Buy 150 Sell Abbildung 6.17 Basissicht sb0 Abbildung 6.17 zeigt die Sicht sb0, welche auf den in der Abbildung 6.16 dargestellten Sichten sbBuy und sbSell basiert. Die Sicht sb0 enthält auf der linken Seite alle Kaufsignale, alle relevanten Verkaufssignale finden sich auf der rechten Seite. Die relevanten Kaufsignale sind 107 6. Implementierung elementarer Handelsstrategien grün und relevante Verkaufssignale rot markiert. Auffällig ist, dass man Kaufsignale nach dem n-Wert des Verkaufssignals gruppieren kann. Das erste Kaufsignal der jeweiligen Gruppe ist das jeweils relevante Kaufsignal. In der folgenden Abfrage sb1 wird diese Logik durch eine Minimum-Bildung in den Zeilen 3-5 realisiert: Abfrage sb1 1 SELECT * 2 FROM sb0 AS A 3 WHERE A.BN IN ( SELECT MIN(C.BN) FROM sb0 AS C GROUP BY C.SN ); 4 5 In dieser Implementierung ist eine zusätzliche Berücksichtigung bzgl. des ersten Kaufsignals nicht nötig. Wenn das erste Handelssignal im Analysezeitraum ein Kaufsignal ist, wird dieses immer als ein relevantes Signal erkannt. In dem Fall enthält das erste Kaufsignal immer den kleinsten n-Wert der ersten Gruppe. Dies erfüllt dann die Bedingungskriterien in den Zeilen 3-5. Performanzanalyse Die Durchführungszeit dieser Optimierungsvariante Separate Signalberechnung wird im Vergleich zu den vorausgegangenen beiden Implementierungen in 6.2.1 und 6.2.2 erheblich verkürzt: Laufzeit der Signalberechnung für Strategiebewertung Naive Implementierung Fortlaufende Nummer in Sichten Separate Signalberechnung 0 2.250 4.500 6.750 9.000 Sec Abbildung 6.17 Gesamte Berechnungsdauer ( Testbedingung10 ) Unter denselben Testbedingungen beträgt die Berechnungszeit dieser vorliegenden Variante ca. 80 Sekunden, während die Berechnung bei der Naiven Implementierung 3956 Sekunden und bei der Variante mit den fortlaufenden Nummern in Sichten 8466 Sekunden in Anspruch nahm. Wie wurden diese Verbesserungen erzielt? Die folgenden Tabellen stellen die Berechnungsdauern jeder Sicht für die Varianten Naive Implementierung sowie Separate Signalberechnung dar: sbBuy Datenfluss der Abfragen : sbInd (CCI) (Version: Separate Signalberechnung) sb0 sb1 sbSell 10 Die Teststrategie sowie Testbedingungen sind unverändert gegenüber der Performanz Analyse der Naiven Implementierung im Abschnitt 6.2.1. Weitere Details sind in Anhang 6-A aufgeführt. 108 6. Implementierung elementarer Handelsstrategien Separate Signalberechnung Naive Implementierung Abfrage Berechnungsdauer (Sec) Abfrage Berechnungsdauer (Sec) sbInd (CCI) 0,2812 sbInd (CCI) 0,2812 sbSig0 1,2343 sbBuy 0,5156 sbSig1 218,5938 sbSell 0,7343 sbSig2 3956,078 sb0 63,2501 sb1 79,6415 Abbildung 6.18 Vergleich der Berechnungsdauern ( Testbedingung 11 ) Die Ursachen für die verkürzte Berechnungsdauer liegen hier hauptsächlich in der frühzeitigen separaten Signalberechnung begründet: Die Basistabelle für die weiteren Sichten sind kleiner und es müssen weniger Datensätze durchlaufen werden, um die Erfüllbarkeit der Bedingungskriterien zu beurteilen. Die Berechnung aller relevanten Signale in der vorliegenden Implementierung (Abfrage sb1) dauert merklich kürzer als die Berechnung der relevanten Signale bei der Naiven Implementierung (Abfrage sbSig1). Weiterhin brauchen Signale bei dieser Variante nicht mehr durch eine zusätzliche Abfrage in Signalpaare zugeordnet zu werden. Eine aufwändige Berechnung, analog der Abfrage sbSig2 in der Naiven Implementierung fällt damit weg. Optimierungsidee In dieser Variante ist es auffällig, dass die Berechnungsdauer der Abfrage sb0 sehr zeitaufwändig ist: Berechnungsdauer der Abfragen (Version : Separate Signalberechnung ) sbInd(CCI) sbBuy sbSell sb0 sb1 0 20 40 60 80 Sec Abbildung 6.19 Die Berechnungsdauer der Abfragen ( Testbedingung12 ) Die Durchführung der Abfrage sb0 benötigt die über 50-fache Zeit verglichen mit den summierten Berechnungsdauern der Basisabfragen sbBuy und sbSell. Im Vergleich dazu ist die Berechnungsdauer der Abfrage sb1 nur ca. 25% länger als die Durchführungszeit der Basissicht sb0. 11 Die Teststrategie sowie Testbedingungen sind unverändert gegenüber der Performanz Analyse in der Naiven Implementierung im Abschnitt 6.2.1. Weitere Details sind in Anhang 6-A aufgeführt. 12 Die Teststrategie sowie Testbedingungen sind unverändert gegenüber der Performanz Analyse in der Naiven Implementierung im Abschnitt 6.2.1. Weitere Details sind in Anhang 6-A aufgeführt. 109 6. Implementierung elementarer Handelsstrategien Die höhere Effizienz ist unter anderem darauf zurückzuführen, dass die in der Abfrage sb1 verwendete Gruppierung den Berechnungsaufwand deutlich reduziert hat. In der nachfolgenden Optimierung in 6.2.4 steht das Ziel, solche Gruppierungen für weitere Abfragen effektiv einzusetzen. 6.2.4 Gruppieren der Datensätze Durch die Verwendung von Gruppierungen für die Berechnung relevanter Kaufsignale, aber auch relevanter Verkaufssignale konnte der Berechnungsaufwand der bisherigen zahlreichen Aggregatbildungen deutlich reduziert werden. In dieser nun folgenden Implementierung unter Verwendung von Gruppieren der Datensätze sind Optimierungen an allen zugrunde liegenden Abfragen durchgeführt worden. Die gesamte Berechnungsdauer hat sich im Ergebnis von 80.000 Millisekunden für die in 6.2.3 erläuterte Implementierung bis auf 840 Millisekunden in dieser weiteren Optimierung bei unveränderten Testbedingungen reduziert. Die gesamte Berechnung ist wie folgt aufgebaut: sbBuy sbInd sb0 sb1 sbSell SBT sb2 • Die Abfrage sbInd übernimmt wieder die Berechnung des Indikators. • Basierend auf der Abfrage sbInd berechnen die Abfragen sbBuy bzw. sbSell die Kaufsignale bzw. die Verkaufssignale. • Die Abfrage sb0 bzw. sb1 berechnet relevante Verkaufssignale bzw. Kaufsignale. • Ein Besonderheit dieser Variante besteht darin, dass die Abfragen sbBuy, sbSell, sb0 und sb1 nur die n-Werte (fortlaufende Zeitpunkte) betrachten, da nur diese für die Berechnung relevanter Signale benötigt werden. Die zugrunde liegenden Berechnungen liefern nur die nWerte, die Abfrage sb2 ermittelt die sonstigen Dateninformationen wie Datum und Schlusskurs für die Darstellung des Ergebnisses. • Letztlich stellt die Abfrage SBT das vollständige Ergebnis basierend auf den Abfragen sb1 und sb2 dar. Neben den Optimierungen bei den Signalberechnungen der Strategiebewertung sind auch Optimierungen bei den Berechnungen aller in TInTo angebotenen Indikatoren durchgeführt worden. Berechnung der Indikatoren (sbInd) Für die Berechnungen der Indikatoren sind bisher die schon vorhandenen Sichtdefinitionen aus der früheren TInTo-Version aber mit den in Kapitel 5 vorgestellten Korrekturen verwendet worden. Allerdings werden dabei nicht benötigte Daten immer mit aggregiert und bei den Berechnungen der weiteren Abfragen stets mitgeführt. Um die Recheneffizienz zu erhöhen, werden solche nicht benötigte Daten in dieser neuen Implementierung nunmehr frühzeitig beschränkt. Als ein Beispiel soll hier die Berechnung der RSI-Werte dienen. Dessen Formel sowie Rechenschritte sind bereits in den Abschnitten 3.4.2 sowie 5.4.2 erläutert worden. Auf eine detaillierte Erläuterung der Berechnung des Indikators wird hier deshalb verzichtet und nur auf 110 6. Implementierung elementarer Handelsstrategien die Unterschiede zwischen der ursprünglichen und der nunmehr verbesserten Abfrage eingegangen. Ursprüngliche Berechnung: Bei der folgenden Abfrage sind nur die benötigten Daten für die weiteren Abfragen rot unterstrichen dargestellt: Abfrage sbInd (Vorher) 1 SELECT tmpAggregation.ID, tmpAggregation.n, tmpAggregation.Date, tmpAggregation.High, 2 3 4 5 6 7 tmpAggregation.Low, tmpAggregation.Open, tmpAggregation.Close, tmpAggregation.Volstart, tmpAggregation.Vol, 100*(AVG(IIF(TK1.Close>TK2.Close,TK1.Close-TK2.Close,0))/ (AVG(IIF(TK1.Close>TK2.Close,TK1.Close-TK2.Close,0) +AVG(IIF(TK1.Close<TK2.Close,TK2.Close-TK1.Close,0)))) AS Ind1, AVG(IIF(TK1.Close>TK2.Close,TK1.Close-TK2.Close,0)) AS Ind2, AVG(IIF(TK1.Close<TK2.Close,TK2.Close-TK1.Close,0)) AS Ind3 8 9 10FROM (tmpAggregation INNER JOIN tmpAggregation AS TK1 ON (tmpAggregation.ID=TK1.ID)) 11 INNER JOIN tmpAggregation AS TK2 ON (TK1.ID=TK2.ID AND TK1.n-1=TK2.n) 12 13 WHERE tmpAggregation.ID=spGetID() AND TK1.n<=tmpAggregation.n AND 14 TK1.n>tmpAggregation.n-sbGetPar1() 15 16 GROUP BY tmpAggregation.ID, tmpAggregation.n, tmpAggregation.Date, tmpAggregation.High, 17 tmpAggregation.Low, tmpAggregation.Open, tmpAggregation.Close, 18 tmpAggregation.Vol, tmpAggregation.Volstart 19 20 ORDER BY tmpAggregation.ID DESC, tmpAggregation.Date DESC; • In der Tabelle tmpAggregation sind ursprünglich die gesamten Kursdaten sowie Handelsvolumen für die Berechnung zusammengefasst. Aber für die Signalberechnung sowie Bewertung der beispielsweise RSI-basierten Handelsstrategie werden nur das Datum, die nWerte (fortlaufender Zeitpunkt) und die Schlusskurse benötigt. Zu diesem Zweck wird eine temporäre Tabelle sbA hergestellt, darin nur die benötigten Daten aggregiert und die Tabelle am Ende der Berechnungen gelöscht. • Bei der dargestellten Abfrage sbInd können dann überflüssige Kursdaten sowie Handelsvolumen in den Zeilen 1-3 und ebenfalls Zwischenergebnisse in den Zeilen 7-8 entfernt werden. • Dementsprechend kann der GROUP BY-Teil ebenfalls reduziert werden. • Da die Tabellen sbA sowie tmpAggregation immer die Kursdaten eines gewünschten Wertpapiers zusammenfassen, ist hier die Bedingung bzgl. der Wertpapier-ID unnötig. 111 6. Implementierung elementarer Handelsstrategien Optimierte Berechnung: Die neu definierte RSI-Berechnung lautet nach der Optimierung wie folgt: Abfrage sbInd (Nachher) 1 SELECT 2 3 4 5 6 A.n, 100*(AVG(IIF(B.Close>C.Close,B.Close-C.Close,0))/ (AVG(IIF(B.Close>C.Close,B.Close-C.Close,0)) +AVG(IIF(B.Close<C.Close,C.Close-B.Close,0)))) AS Ind FROM (sbA AS A INNER JOIN sbA AS B ON (B.n<=A.n) AND (B.n>A.n-sbGetPar1()) ) INNER JOIN sbA AS C ON B.n-1=C.n GROUP BY A.n; Bei der neuen Abfrage sbInd werden nur die für die weiteren Berechnungen absolut notwendigen Daten betrachtet. Diese sind die n-Werte (fortlaufende Zeitpunkte) und die Werte des Indikators in der Zielliste im SELECT-Teil. Berechnung der Handelssignale (sbBuy, sbSell) Auf Basis der vorgestellten Anfrage sbInd werden Handelssignale berechnet. Dabei sind für die folgende Berechnung der relevanten Signale nur die n-Werte (fortlaufende Zeitpunkte) erforderlich. Deshalb werden hier gleichermaßen überflüssige Daten entfernt. Repräsentativ wird hier nur die Berechnung der Verkaufssignale im Detail dargestellt. Ursprüngliche Berechnung: Die ausführliche Erläuterung dieser Berechnung ist bereits im Abschnitt 6.2.1 in der Beschreibung der Naiven Implementierung enthalten. Im Folgenden soll nur auf den Optimierungsteil eingegangen werden. 1 ( SELECT 2 3 4 5 sbI1.ID, sbI1.n, sbI1.Close, "Sell" AS Signal FROM sbInd AS sbI0, sbInd AS sbI1 WHERE sbI0.n >= sbGetPar1() AND sbI1.n>= sbGetPar1() AND sbI0.n +1 = sbI1.n AND sbI0.Ind1>getSell() AND sbI1.Ind1<= getSell() ORDER BY sbI1.n ASC ) 6 7 UNION 8 9 ( SELECT LAST(sbInd.ID), LAST(sbInd.n), LAST(sbInd.Close), "Sell" AS Signal 10 FROM sbInd ); Nach der folgenden Handelsregel werden in den Zeilen 1-5 alle Verkaufssignale berechnet : Sei n fortlaufender Zeitpunkt. ∀n : {(Ind1(n-1) > getSell()) ∧ (Ind1(n) ≦ getSell()) } ⇒ (Signal(n) =„Verkauf“) Um den Preis der vorhandenen Wertpapiere zum Ende des Analysezeitraums zu ermitteln, wird zu diesem Zeitpunkt ein zusätzliches Verkaufssignal in den Zeilen 9-10 generiert. 112 6. Implementierung elementarer Handelsstrategien • Wiederum ist die Information Wertpapier-ID in den Zeilen 1 und 9 und im ORDER BY Teil in der Zeile 5 für die weitere Berechnung überflüssig, da nur die Daten eines gewählten Wertpapiers in der temporären Tabelle aggregiert sind. • Auf die zusätzlichen Angaben der Signale („Sell“ AS Signal) in den Zeilen 1 und 9 kann verzichtet werden, da Kaufsignale und Verkaufssignale separat berechnet und betrachtet werden. • Um ein zusätzliches Signal am Ende des Analysezeitraums zu erzeugen, ist die erneute Berechnung des Indikators Abfrage sbInd überflüssig. In diesem Fall können die benötigten Daten aus der schon vorliegenden Basistabelle abgeleitet werden. Optimierte Berechnung: Die angepasste Sichtdefinition lautet wie folgt : Abfrage sbSell (Nachher) 1 ( SELECT B.n sbInd AS A INNER JOIN sbInd AS B ON (A.n +1 = B.n) AND (A.Ind > getSell() AND B.Ind<= getSell()) 4 WHERE A.n>= 0 AND B.n>= 0 ) 5 UNION 6 ( SELECT LAST(n) FROM sbA ); 2 3 FROM Die auszuliefernden Daten sind nur die n-Werte im SELECT-Teil in den Zeilen 1 und 6 für die nachfolgende Berechnung der relevanten Signale. Bei der Aggregation der Daten in der temporären Tabelle sbA sind schon die Einschränkungskriterien bzgl. der Berechnungsperiode berücksichtigt. Dabei werden die Hilfsdaten für die Berechnung des Indikators aussortiert. Demnach sind die ersten zwei Bedingungen in der Zeile 3 aus der vorherigen Version durch die Bedingungen im WHERE-Teil in dieser angepassten Sichtdefinition zu ersetzen. Berechnung der relevanten Verkaufssignale (sb0) Basierend auf den Abfragen sbSell und sbBuy werden im Weiteren die relevanten Signale berechnet. Bei dieser Berechnung kommt die Methode „Gruppierung der Datensätze“ zum Einsatz, welche einen großen Zugewinn an Effizienz mit sich bringt. Auf eine detaillierte Erläuterung der Berechnung der relevanten Signale analog der letzten Implementierung Separate Signalberechnung wird hier verzichtet und sich nur auf den zu vergleichenden Berechnungsaufwand konzentriert. Ursprüngliche Berechnung: Bei der letzen Implementierung war es auffällig, dass die Berechnung der relevanten Verkaufssignale sehr aufwändig ist. Die Berechnungsdauer relevanter Signale stieg drastisch auf das über 50-Fache der summierten Berechnungsdauern der Basisabfragen an. Bei dieser Berechnung wird ein Kreuzprodukt aus der Sicht mit Kaufsignalen und der Sicht mit Verkaufssignalen gebildet. Im Weiteren wird eine Minimumbildung für jedes Verkaufssignal im Kreuzprodukt durchgeführt: 113 6. Implementierung elementarer Handelsstrategien Abfrage sb0 (Vorher) 1 SELECT . . . 2 FROM sbBuy AS B, sbSell AS S 3 WHERE S.n IN ( SELECT MIN(S2.n) FROM 4 sbSell AS S2 . . . ); ● sbBuy n 39 48 98 109 Sig sbSell n Sig Buy Buy Buy Buy 35 60 81 150 Sell Sell Sell Sell n Sig 81 150 Sell Sell MIN Ergebnis: BN n Sig 60 81 Sell Sell MIN Sig SN Sig Buy Sell ● ● Anzahl der benötigten Minimumbildungen = (Anzahl der Kaufsignale) * (Anzahl der Verkaufssignale) Abbildung 6.20 Aufbau der Sicht sb0 bei der Implementierung Separate Signalberechnung Die Abbildung 6.20 veranschaulicht den Aufwand der Minimumbildungen zu einem Kaufsignal für die Berechnung der relevanten Verkaufssignale. Diese sind in den Tabellen rosa dargestellt. Somit ergibt sich die Anzahl der gesamten Minimumbildungen für die Berechnung aller relevanten Verkaufssignale aus der Multiplikation der Anzahl aller Kaufsignale mit der Anzahl aller Verkaufssignale. Optimierte Berechnung: Die folgende neu definierte Abfrage für die Berechnung relevanter Verkaufssignale reduziert erheblich die Anzahl der benötigten Minimumbildungen auf die Anzahl aller Kaufsignale: Abfrage sb0 (Nachher) 1 SELECT B.n, MIN(S.n) AS SellN 2 FROM sbBuy AS B INNER JOIN sbSell AS S ON B.n < S.n 3 GROUP BY B.n; 114 6. Implementierung elementarer Handelsstrategien sbBuy n 39 48 98 109 Ergebnis: sbSell n B.n MIN SellN 60 81 150 Anzahl der benötigten Minimumbildungen = (Anzahl der Kaufsignale) Abbildung6.21 Aufbau der Sicht sb0 bei der Implementierung Gruppieren der Datensätze Relevante Verkaufssignale werden mit derselben grundsätzlichen Methodik wie bei der Implementierung Separate Signalberechnung abgeleitet. Dabei wird das erste Verkaufssignal selektiert, welches nach einem jeweiligen Kaufsignal folgt. Solche bedingte erste Verkaufssignale werden wieder mittels der Minimumbildungen in der Zeile 1 ermittelt. In der ON-Anweisung in der Zeile 2 steht die Bedingung, dass das jeweilige Kaufsignal zeitlich älter als das gesuchte Verkaufssignal ist. Allerdings wird hier das Kreuzprodukt aus den Sichten sbBuy und sbSell nach dem n-Wert des Kaufsignals in der Zeile 3 gruppiert. Abbildung 6.21 zeigt die Methodik für die Ableitung eines relevanten Verkaufssignals. Im Vergleich zu der vorherigen Version aus Abbildung 6.20 ist der Berechnungsaufwand erheblich reduziert worden: Anzahl der benötigten Minimumbildungen : (Anzahl der Kaufsignale) * (Anzahl der Verkaufssignale) → (Anzahl der Kaufsignale) Angemerkt sei hier, dass in der Zielliste im SELECT-Teil nur die n-Werte enthalten sind. Wenn beispielsweise zusätzlich die Schlusskurse in der Sicht sbSell vorhanden wären, könnten die jeweils relevanten Schlusskurse wegen der Minimumbildung der n-Werte in der Zielliste im SELECT-Teil nur mit einem Verlust an Effizienz selektiert werden. Weiterhin müssten dann solche für die Signalberechnung irrelevante Daten immer in jeder Abfrage mitgeführt werden. Aus diesem Grund werden für die Berechnung relevanter Signale nur die n-Werte betrachtet. Zusätzliche Daten wie das Datum und die Schlusskurse werden später hinzugefügt. Alle Datensätze in den Basistabellen können hierfür durch die n-Werte eindeutig identifiziert werden. Berechnung der relevanten Kaufsignale (sb1) Bei der Berechnung der relevanten Kaufsignale wurde ebenfalls ein Effizienzgewinn realisiert. Auf eine Wiederholung der detaillierten Erläuterung zur Berechnung der relevanten Kaufsignale aus der Implementierung Separate Signalberechnung wird hier verzichtet und sich im Folgenden nur auf den zu vergleichenden Berechnungsaufwand konzentriert. Ursprüngliche Berechnung: Für die Berechnung aller relevanten Kaufsignale in der vorausgegangenen Implementierung erreicht die Anzahl der benötigten Minimumbildungen die Anzahl aller Kaufsignale multipliziert mit der Anzahl der relevanten Verkaufssignale: 115 6. Implementierung elementarer Handelsstrategien Abfrage sb1 (Vorher) • Die Spalte BN in der Sicht sb0 enthält die n-Werte aller Kaufsignale. 1 SELECT * 2 FROM sb0 AS A 3 WHERE A.BN IN ( SELECT MIN(C.BN) FROM sb0 AS C GROUP BY C.SN ); 4 5 • Die Spalte SN in der Sicht sb0 enthält die n-Werte aller relevanten Verkaufssignale Anzahl der benötigten Minimumbildungen = (Anzahl der Kaufsignale) * (Anzahl der relevanten Verkaufssignale) A.BN in der Zeile 3 sind die n-Werte der Kaufsignale. Für jedes Kaufsignal wird eine Minimumbildung für jede Gruppe von relevanten Verkaufssignalen berechnet. Optimierte Berechnung: Die neu definierte Abfrage für die Berechnung relevanter Kaufsignale reduziert die Anzahl der benötigten Minimumbildungen bis zu der Anzahl relevanter Verkaufssignale: sb0 B.n SellN 39 48 98 109 60 60 150 150 Abfrage sb1 (Nachher) 1 SELECT MIN(n) AS BuyN, SellN 2 FROM sb0 3 GROUP BY SellN; Anzahl der benötigten Minimumbildungen = (Anzahl der relevanten Verkaufssignale) Die relevanten Kaufsignale sind mit demselben methodischen Ansatz wie bei der Implementierung Separate Signalberechnung zu erhalten. Dabei wird das erste Kaufsignal der jeweiligen Gruppe aus relevanten Verkaufssignalen gesucht. Die Sicht sb1 enthält dann im Ergebnis die n-Werte aller relevanten Handelssignale für die Strategiebewertung. Darstellung der Ergebnisse (sb2, SBT) Wie bereits zuvor erläutert, ist aus Effizienzgründen auf das Mitführen der Kurs- und Datumsinformationen in der Signalberechnung verzichtet worden. Für die reine Signalberechnung sind diese Daten auch irrelevant. Da in den bisherigen Berechnungen nur die n-Werte betrachtet worden sind, müssen die weiteren Daten im Folgenden hinzugefügt werden. Basierend auf der temporären Tabelle sbA werden alle benötigen Daten für die Anzeige und die Berechnung der Strategiebewertung zusammengefasst: Abfrage sb2 1 SELECT A.n AS BN, A.Date AS BuyDate, A.Close AS BuyClose, B.n AS SN, B.Date AS SellDate, B.Close AS SellClose sbA AS A INNER JOIN sbA AS B ON A.n<B.n 4 WHERE A.n>= 0 AND B.n>= 0 ; 2 3 FROM 116 6. Implementierung elementarer Handelsstrategien Dabei wird ein Kreuzprodukt von sbA mit sich selbst gebildet, damit immer zwei Datensätze nebeneinander in einer Zeile stehen. Die WHERE-Bedingung sogt dafür, dass die nicht benötigten Hilfsdaten aus der Berechnung des Indikators aussortiert werden. Basierend auf den Abfragen sb1 und sb2 werden dann alle relevanten Handelssignale mit den sonstigen Daten für die Strategiebewertung zusammengesetzt: Abfrage SBT 1 SELECT A.BuyDate, A.BuyClose, A.SellDate, A.SellClose 2 FROM sb2 AS A INNER JOIN sb1 AS B ON (A.SN=B.SellN) AND ( A.BN=B.BuyN) 3 ORDER BY A.BuyDate ASC; Dabei dienen die n-Werte zur Identifizierung der Datensätze in der Zeile 2. Im Ergebnis wird die folgende Sicht erzeugt: Sicht SBT BuyDate BuyClose SellDate SellClose 05.03.2008 12254,99 25.03.2008 12532,6 29.05.2008 12646,22 24.07.2008 11349,28 Dabei sind die Signale wie „Buy“ und „Sell“ implizit anhand der Spaltennamen dargestellt. Durch eine Differenzbildung aus den Schlusskursen beim Kaufen und Verkaufen können die jeweiligen Kursgewinne oder Kursverluste der Handel ermittelt werden. Die Umsetzung für diese Berechnung folgt im nächsten Kapitel. Performanzanalyse Die Berechnungsdauer hat sich durch die Optimierungen an allen Abfragen merklich verkürzt. Unter unveränderten Bedingungen konnte die gesamte Durchführungszeit von ca. 80.000 Millisekunden in der letzten Implementierung auf bis 844 Millisekunden in dieser Version reduziert werden: sbBuy Datenfluss der Abfragen: (Version: Gruppieren der Datensätze) sbInd sb0 sb1 sbSell SBT sb2 117 6. Implementierung elementarer Handelsstrategien Separate Signalberechnung Gruppieren der Datensätze Abfrage Berechnungsdauer (Sec) Abfrage Berechnungsdauer (Sec) sbInd(CCI) 0,2812 sbInd(CCI) 0,2312 sbBuy 0,5156 sbBuy 0,4218 sbSell 0,7343 sbSell 0,422 sb0 63,2501 sb0 0,8281 sb1 79,6415 sb1 0,8437 sb2 0,25 SBT 0,8441 Berechnungsdauer der Abfragen (Version: Gruppieren der Datensätze) sbInd(CCI) sbBuy sbSell sb0 sb1 sb2 SBT 0 0,225 0,450 0,675 0,900 Sec Abbildung 6.22 Die Berechnungsdauer der Abfragen ( Testbedingung13 ) Eine solche drastische Zunahme der Berechnungsdauer wie bei der Ermittelung relevanter Verkaufssignale (Abfrage sb0) in der Implementierung Separate Signalberechnung ist in dieser neuen Version Gruppieren der Datensätze nicht zu finden. Die Abfrage sb0 in der vorausgegangenen Implementierung benötigte das über 50-Fache der Berechnungszeit der summierten Berechnungsdauern der Basisabfragen sbBuy und sbSell. Im Gegensatz dazu erfordert die Berechnung relevanter Verkaufssignale in der neuen Version nicht einmal die einfache summierte Berechnungsdauer der Basisabfragen (0,8281 < 0,4218+0,422). Diese erhebliche Effizienzsteigerung ist auf den Einsatz der Minimumbildungen mittels Gruppieren der Datensätze zurückzuführen. Das zusätzliche Hinzufügen der sonstigen Daten erfordert lediglich einen minimalen zusätzlichen Aufwand. Die Durchführungsdauer der entsprechenden Abfrage SBT hat im Vergleich zu der Berechnungsdauer der Abfrage sb1 nur geringfügig zugenommen. In dieser Implementierung sind unter anderem Optimierungen an allen Sichtdefinitionen für die Berechnung der Indikatoren durchgeführt worden. Wie effektiv sind diese Optimierungsschritte? Getestet wurden drei Handelsstrategien mit einer gewählten Analysezeitraum von einem Jahr und jeweils mit und ohne der optimierten Schichtdefinition für die Berechnung des Indikators. 13 Die Teststrategie sowie Testbedingungen sind unverändert gegenüber der Performanzanalyse in der Naiven Implementierung im Abschnitt 6.2.1. Weitere Details sind in Anhang 6-A enthalten. 118 6. Implementierung elementarer Handelsstrategien Indikatorberechnung Optimierte Indikatorberechnung Signalberechnung der Strategiebewertung OHNE optimierter Indikatorberechnung Signalberechnung der Strategiebewertung MIT optimierter Indikatorberechnung Berechnungszeit (sec) 1,100 0,825 0,550 0,275 0 CCI-basierte RSI-basierte CMF-basierte Handelsstrategie Abbildung 6.23 Optimierungen an den Berechnungen der Indikatoren ( Testbedingungen und Basisdaten 14 ) Der Effizienzgewinn bei der Berechnung nur des Indikators beträgt um die 30 Millisekunden. Der Unterschied bei der gesamten Berechnung ist jedoch noch deutlicher und beträgt bis über 170 Millisekunden im Beispiel der CCI-basierte Strategie. Dabei ist in beiden Implementierungen die identische optimierte Signalberechnung verwendet worden. Ein Unterschied besteht lediglich in der Verwendung der optimierten Indikatorberechnung. Durch die bisherigen Optimierungsmassnahmen ist die gesamte Berechnungsdauer von 3956 Sekunden für die Naive Implementierung auf 0,84 Sekunden für die vorliegender Variante reduziert worden. Dieses Ergebnis gilt für das Testbeispiel der CCI-basierten Strategie mit der Analysezeitraum von einem Jahr. Über einen längeren Analysezeitraum betrachtet, ist die gesamte Berechnung noch recht zeitintensiv. Folgendes Diagramm zeigt die durchschnittliche Durchführungsdauer und die Standardabweichung für die Signalberechnung der CCI-, RSIund CMF-basierte Handelsstrategien mit unterschiedlichen Analysezeiträumen. 14 Die Testbedingungen sowie die Basisdaten für die Darstellung des Diagramms sind in Anhang 6-B aufgeführt. 119 6. Implementierung elementarer Handelsstrategien Berechnungszeit (sec) Durchschnittliche Berechnungsdauer für die Signalberechnung der Strategiebewertung 20 16,67 15 10,89 10 6,23 2,93 5 0,85 0 0 1 2 3 4 5 Standardabweichung (sec) Analysezeitraum (Jahr) Standardabweichung der Berechnungsdauer für die Signalberechnung der Strategiebewertung 0,300 0,24 0,225 0,14 0,150 0,02 0,075 0,12 0,07 0 0 1 2 3 4 5 Analysezeitraum (Jahr) Stichproben: CCI-, RSI-, CMF-basierte Handelsstrategie Abbildung 6.24 Durchschnitt und Standardabweichung der Berechnungsdauer ( Testbedingungen und Basisdaten15 ) Die durchschnittliche Berechnungsdauer nimmt bei steigender Testdauer überproportional zu und erreicht bis zu 16 Sekunden für einem Analysezeitraum von 5 Jahren. Die jeweilige Berechnungsdauern der drei genannten Strategien weichen nur geringfügig ab, diese Abweichungen nehmen bei längerer Testdauer ebenfalls tendenziell zu. Optimierungsidee Die Berechnungsdauer für längere Analysezeiträume ist trotz Optimierungen noch vergleichsweise lang. Im Rahmen dieser Arbeit sind in einem finalen Optimierungsschritt materialisierte Sichten zum Einsatz gekommen. 15 Die Testbedingungen sowie die Basisdaten für die Darstellung der Diagramme sind in Anhang 6-C aufgeführt. 120 6. Implementierung elementarer Handelsstrategien 6.2.5 Verwendung materialisierter Sichten Durch die Speicherung der Sichten wird erwartet, noch weitere Verbesserungen an der Laufzeit der Strategiebewertung zu erzielen. Da Access materialisierte Sichten nicht direkt unterstützt, sind diese mittels zusätzlicher temporärer Tabellen simuliert worden. Implementierung Der Aufbau der Berechnungsmethodik sowie die Abhängigkeiten zwischen den Abfragen sind identisch wie bei der letzten Implementierung Gruppieren der Datensätze. Die vorgenommenen Optimierungen sind ebenfalls beibehalten. sbBuyM sbIndM sb0M sb1M sbSellM SBT sb2 Die im letzten Abschnitt 6.2.4 erläuterten Sichten sbInd, sbBuy, sbSell, sb0 und sb1 werden nun jeweils in einer Tabelle gespeichert. Diese Abfragen sind mit einem zusätzlichen „M“ in ihrer Bezeichnung gekennzeichnet. Die SQL Formulierungen sind aus der Implementierung in 6.2.4 übernommen und wurden lediglich um eine INTO-Klausel zur Speicherung der jeweiligen Abfrage erweitert. Das folgende Beispiel zeigt die Berechnung aller relevanten Verkaufssignale: Abfrage sb0M 1 SELECT B.n, MIN(S.n) AS SellN INTO sb0 2 FROM sbBuy AS B INNER JOIN sbSell AS S B.n < S.n 3 GROUP BY B.n; Durch diese Aktionsabfrage unter Verwendung der INTO-Anweisung werden die ermittelten Ergebnisse als eine Tabelle sb0 materialisiert. Diese zusätzlichen Tabellen werden am Ende der gesamten Berechnung der Strategiebewertung durch eine Anweisung „DROP TABLE sb0“ gelöscht. In der weiteren Entwicklung des TInTo-Projektes sollten die Namen der hier zu materialisierenden Sichten: sbInd, sbBuy, sbSell, sb0, sb1 für die Berechnungen des StrategyBuiler reserviert bleiben. Auf Grundlage der bisher erzielten Optimierungen war eine weitere Effizienzsteigerung durch die Materialisierung zu erzielen. Da die zu materialisierenden Sichten nur die minimal benötigten Daten enthalten, verursacht das Speichern relativ geringen Aufwand. Die materialisierte Sicht sbInd enthält lediglich n-Werte und Indikatorwerte, die weiteren materialisierten Sichten enthalten nur n-Werte, welche als Primärschlüssel dienen. Mittels dieser n-Werte werden zusätzliche Daten zur Anzeige oder benötigte Daten für weitere Berechnungen herausgefiltert. Die Abfragen sb2 sowie SBT dienen nur zur Darstellung der Ergebnisse zusammen mit den zusätzlich gewünschten Daten und werden nicht materialisiert. Die Abfrage SBT wird für die in Kapitel 8 beschriebenen Renditeberechnung dort nochmals abgeändert. Performanzanalyse Durch die Materialisierung konnte die gesamte Berechnungsdauer für die CCI-basierte Strategie, unter ansonsten unveränderten Testbedingungen, im Vergleich zur 121 6. Implementierung elementarer Handelsstrategien Durchführungsdauer in der Implementierung Gruppieren der Datensätze bis zu 70% reduziert werden: Gruppieren der Datensätze Materialisierte Sichten Abfrage Berechnungsdauer (Sec) sbInd (CCI) 0,2312 sbBuy 0,4218 sbSell 0,422 sb0 0,8281 sb1 0,8437 sb2 0,25 SBT 0,8441 Abfrage Berechnungsdauer (Sec) sbIndM (CCI) 0,2343 sbBuyM 0,2343 sbSellM 0,2343 sb0M 0,25 sb1M 0,25 sb2 0,25 SBT 0,2516 [Die Berechnungsdauer einer Abfrage beinhaltet ebenso die Durchführungszeit der zu grundliegenden Aktionsabfragen] Abbildung 6.25 Die Berechnungsdauer der Abfragen Durch den Einsatz materialisierter Sichten ist die Effizienz der Signalberechnung erheblich gesteigert worden. Ab der Durchführungszeit für die Berechnung nur des Indikators von 234 Millisekunden hat die gesamte Berechnungsdauer bis 252 Millisekunden nur leicht zugenommen. Nach dieser Optimierung bildet die Berechnung des Indikators Abfrage sbIndM den aufwändigsten Teil der Gesamtberechnung. Die effizienzsteigernde Wirkung der materialisierten Sichten ist noch offensichtlicher, wenn man die Berechnungen über längere Analysezeiträume betrachtet. Das folgende Diagramm zeigt die durchschnittliche Berechnungszeit für drei Handelsstrategien aus der letzten Implementierung Gruppieren der Datensätze verglichen mit der aktuellen materialisierten Variante: Durchschnittliche Berechnungsdauer OHNE materialisierten Sichten Durchschnittliche Berechnungsdauer MIT materialisierten Sichten Berechnungszeit (sec) 20 16,67 15 10,89 10 6,23 2,93 5 0,85 4,27 2,81 0 0 0,25 1 0,87 1,63 3 2 4 Analysezeitraum (Jahr) Stichproben: CCI-, RSI-, CMF-basierte Handelsstrategie Abbildung 6.26 Durchschnittiche Berechnungsdauer ( Testbedingung und Basisdaten16 ) 16 Die Testbedingungen sowie die Basisdaten für die Darstellung des Diagramms sind im Anhang 6-D aufgeführt. 122 5 6. Implementierung elementarer Handelsstrategien Die Differenz in der Berechnungsdauer zwischen den beiden Varianten nimmt bei ansteigender Länge des Analysezeitraumes beträchtlich zu. Diese Differenz für den Analysezeitraum 5 Jahre beträgt über 12 Sekunden, während die Differenz bei einem 1-jährigen Analysezeitraum nur 0,6 Sekunden beträgt. Bei einer hohen Anzahl an zu verarbeitenden Datensätzen (aus einem langen Analysezeitraum) kann das Materialisieren offensichtlich seine Stärken besonders gut ausspielen. Für eine Verwendung der Materialisierung muss aber immer abgewogen werden zwischen gewünschter Effizienz der Laufzeit und dem benötigten Speicherbedarf. Bei der vorliegenden Implementierung konnte dieser Konflikt durch die Speicherung nur minimaler Datenvolumen (nur die n-Werte) und durch lediglich temporäre Speicherung einigermaßen ausgeglichen werden. Im Ergebnis wird eine erhebliche Effizienzsteigerung erzielt. Abschließend werden hier kurz die bisherigen Optimierungen für die Signalberechnung der Strategiebewertung zusammengefasst. Zur Erläuterung dient wieder dasselbe Testbeispiel, die CCI-basierte Strategie über einen Analysezeitraum von einem Jahr. Optimierungen und Berechnungsdauer 8466,078 9.000 6.750 4.500 79,6415 Berechnungszeit (sec) 3956,078 1 0,8441 2.250 2 Naive 0,2516 3 0 Implementierung Fortlaufende 4 Nummern Separate Signalberechnung Gruppieren 5 Materialisierte der Datensätze Sichten Abbildung 6.27 Bisherigen Optimierungen ( Testbedingung 17 ) Für die Naive Implementierung beträgt die Berechnungsdauer über eine Stunde. Dies ist zurückzuführen auf die aufwändig aufgebauten Aggregatbildungen sowie die sehr zeitintensiven Berechnungen für die Darstellung der zusammengehörigen Signale als Signalpaare. Mit der weiteren Implementierung Fortlaufende Nummern wurden die Laufzeiten nicht verbessert und es entstanden die Überlegungen zur Materialisierung sowie alternative Lösungen anhand von VBA. Eine erhebliche Reduzierung der Berechnungsdauer auf 80 Sekunden konnte nachfolgend mit der Implementierung Separate Signalberechnung erreicht werden. Dabei wurde die aufwändige Berechnung für die Zusammenstellung der Handelssignale als Signalpaare vermieden. Die anschließende Gruppierung der Datensätze bei den Minimumbildungen erzielte einen großen Gewinn an Laufzeit. Im Ergebnis dieser Optimierung beträgt die Berechnungszeit nur noch ca. 844 Millisekunden. In einem finalen Schritt ist die Durchführungsdauer durch Materialisieren der Sichten noch einmal erheblich verbessert worden und beträgt nunmehr lediglich 250 Millisekunden. Dazu werden nur die minimal benötigten Daten in jeweils temporären Tabellen gespeichert. 17 Die Teststrategie sowie Testbedingungen sind unverändert gegenüber der Performanzanalyse in der Naiven Implementierung im Abschnitt 6.2.1. Weitere Details sind in Anhang 6-A aufgeführt. 123 6. Implementierung elementarer Handelsstrategien Weitere zusätzliche Optimierungen sind denkbar. So ist im Ergebnis der zweiten Optimierung Fortlaufende Nummern die Entscheidung gegen die weitere Verwendung der fortlaufenden Nummern getroffen worden. Eine vorgeschlagene alternative Lösung mit Einfügen fortlaufender Nummern in materialisierte Sichten scheint jedoch weitere Effizienzsteigerungen zu ermöglichen. Bei der Umsetzung von TInTo in Oracle sollte dieser Lösungsweg weiter verfolgt werden. 124 7 Implementierung erweiterter Handelsstrategien In diesem Kapitel werden Funktionsweise und Implementierungen von erweiterten Handelsstrategien vorgestellt. Ziel dieser erweiterten Strategien ist die Erhöhung des Handelsgewinns mittels Einbeziehung weiterer Informationen in den Entscheidungsprozess. Während die Signalberechnung elementarer Handelsstrategien als Basis nur die Berechnung eines Indikators benötigt, erfordert die Signalberechnung erweiterter Handelsstrategien neben der Berechnung eines Indikators zusätzliche Berechnungen für die Generierung der Handelssignale. Im Folgenden werden regelbasierte Strategieerweiterungen mittels gleitender Signallinie, zusätzlicher Signalbedingungen und zusätzlicher Indikatoren erläutert sowie deren Signalberechnungen im Detail dargestellt. Darüber hinaus werden Implementierungen von kombinierten Handelsstrategien mit alternativer Investitionen während der Zeit von Handelspausen und auch deren Signalberechnung erläutert. Dabei können diese alternativen Investitionen in Handelspausen optional durch den Anwender sowohl mit elementaren Strategien als auch mit erweiterten Strategien kombiniert werden. 7.1 Erweiterte Teilberechnungen Der Signalberechnung erweiterter Strategien liegen die in den Kapiteln 5 und 6 dargestellten Berechnungen zu Grunde. Die Basisarchitektur für die Signalberechnung zur Strategiebewertung ist identisch wie bei den elementaren Handelsstrategien: sbBuyM sbIndM sb0M sb1M sbSellM SBT sb2 125 7. Implementierung erweiterter Handelsstrategien Die Abfrage sbIndM übernimmt die Berechnung des Indikators. Darauf basierend berechnet die Abfrage sbBuyM bzw. sbSellM Kauf- bzw. Verkaufssignale je nach gewählter Handelsstrategie. sb0M bzw. sb1M ermitteln daraus die relevanten Verkaufssignale bzw. relevanten Kaufsignale für die Strategiebewertung. Dabei werden die ermittelten Sichten temporär materialisiert. Abschließend werden alle ermittelten Signale mit deren zusätzlichen Informationen mittels der Abfragen sb2 und SBT dargestellt. Erweiterte Strategien und kombinierte Strategien mit der Investition in den Handelspausen erfordern Berechnungserweiterungen an unterschiedlichen Teilberechnungen für die Signalberechnung zur Strategiebewertung. Bei erweiterten Strategien sind die Berechnung des Indikators (sbIndM) und der Handelssignale (sbBuyM, sbSellM) zu erweitern: sbBuyM sbIndM sb0M sb1M sbSellM SBT sb2 Die weiteren Berechnungen für die Ermittlung relevanter Signale (sb0M, sb1M) sowie die Berechnung für die Darstellung der Strategieevaluierung (sb2, SBT) gleichen den schon zuvor erläuterten Berechnungen elementarer Strategien. Für die nötigen zusätzlichen Berechnungen werden weitere Abfragen verwendet, deren Sichten ebenfalls mittels INTO-Anweisung materialisiert sind. Die dadurch entstehenden Tabellen sind temporär, werden also am Ende der gesamten Berechnung wieder entfernt. Die Strategieerweiterungen in Handelspausen, welche im Abschnitt 7.3 erläutert werden, sind abhängig von relevanten Handelssignalen. Demnach ist nur die Berechnung der relevanten Signale in Abfrage sb1M zu erweitern: sbBuyM sbIndM sb0M sb1M sbSellM SBT sb2 Anschließend an diese kurze Übersicht folgen nähere Erläuterungen zu den Erweiterungen in den nächsten Abschnitten. Dabei liegt der Schwerpunkt in der Beschreibung der erweiterten Teilberechnungen und der Vorgehensweise bei deren Implementierung. Identische Teilberechnungen, wie sie auch bei den elementaren Handelsstrategien Anwendung finden werden hier nicht wiederholt und können in den Kapiteln 5 und 6 nachgeschlagen werden. Grundlagen, Erläuterungen und Analysen zu den Handelsstrategien sind in Kapitel 3 und 4 ausführlich beschrieben. 126 7. Implementierung erweiterter Handelsstrategien 7.2 Erweiterte Handelsstrategien Folgende Strategieerweiterungen werden beispielhaft in den nächsten Abschnitten vorgestellt: • Gleitende Signallinie (Abschnitt 7.2.1) • Zusätzliche Signalbedingungen (Abschnitt 7.2.2) • Kombination mit anderem Indikator (Abschnitt 7.2.3) 7.2.1 Gleitende Signallinien Die in Kapitel 6 erläuterten elementaren Strategien basierend beispielsweise auf den Indikatoren CCI, RSI und CMF verwenden jeweils eine starre Signallinie. Dabei können konkrete Signalwerte für den gesamten Analysezeitraum für jeweils das Kauf- und das Verkaufssignal festgelegt werden. Zum Beispiel verwendet die im letzten Kapitel für die Performanzanalyse herangezogene CCI-basierte Strategie zwei feste Signalwerte von -100 und 100. Bei manchen Indikatoren allerdings, wie zum Beispiel SMA, MACD oder Stochastics, ist es verbreitet, einen zusätzlich berechneten Hilfsindikator als eine gleitende Signallinie zu benutzen. Solche gleitende Signallinie besitzt für jeden fortlaufenden Zeitpunkt einen neuen Wert und hat damit nicht starre, sondern gleitende Eigenschaften. In der Praxis werden diese Unterschiede zwischen starrer und gleitender Signallinie leider oft nicht präzise hervorgehoben, sondern in beiden Fällen einfach von einer Signallinie gesprochen. Beispiel: SMA Crossover (SMAC) Die im Rahmen dieser Arbeit in TInTo-StrategyBuilder integrierte Handelsstrategie SMA Crossover verwendet neben dem SMA einen weiteren SMA mit längerer Berechnungsperiode als Hilfsindikator, welcher als eine gleitende Signallinie dient. Die entsprechende Handelslogik wird im Folgenden beschrieben. Darüber hinausgehende detaillierte Erläuterungen und Anwendungen dieser Handelslogik finden sich im Abschnitt 3.4.1 in Kapitel 3 sowie im Abschnitt 4.3.3 im Kapitel 4. Handelslogik: • Kaufe ein Wertpapier, wenn der SMA mit der kürzeren Periode den SMA mit der längeren Periode von unten nach oben schneidet. • Verkaufe ein Wertpapier, wenn der SMA mit der kürzeren Periode den SMA mit der längeren Periode von oben nach unten schneidet. Berechnung: Um den Schnittpunkt zweier SMAs zu ermitteln, kann die relative Lage beider SMA-Linien zueinander zum jeweiligen Zeitpunkt betrachtet werden. Dabei stellen die SMA-Linien die im Chart miteinander verbundenen diskreten Werte der SMA-Indikatoren dar. Der Schnittpunkt der Linien ist dann nicht einfach aus der Gleichheit zweier Werte beider SMA zum selben Zeitpunkt zu erhalten. Es muss vielmehr die Lage beider SMA-Linien zueinander aus der Differenz beider Linien zum selben Zeitpunkt ermittelt werden. 127 7. Implementierung erweiterter Handelsstrategien Dow Jones Industrial Average (blau) SMAShort : 21-Tage-SMA (rot) SMALong : 150-Tage-SMA (Gleitende Signallinie grün) Verkauf Verkauf Kauf Fortlaufender Zeitpunkt n SMAShort(n) - SMALong(n) < 0 SMAShort(n) - SMALong(n) < 0 SMAShort(n) - SMALong(n) > 0 Abbildung 7.1 Handelssignale der Strategie SMA Crossover, Dow Jones Industiral Average [YH08f] Daraufhin können Handelssignale so erzeugt werden, dass solche Differenzen beider Linien zu hintereinander folgenden Zeitpunkten verglichen werden. Demnach sind die Handelsregeln wie folgt zu formulieren: Sei Ind(n) = SMAShort(n) - SMALong(n), n: Fortlaufender Zeitpunkt ∀n : { (Ind(n-1) < 0) ∧ (Ind(n) ≧ 0) } ⇒ (Signal(n) = „Kauf“) ∀n : { (Ind(n-1) > 0) ∧ (Ind(n) ≦ 0) } ⇒ (Signal(n) = „Verkauf“) Umsetzung: Zusätzlich zu den SMA Berechnungen ist noch eine gleitende Signallinie, also ein weiterer SMA mit längerer Berechnungsperiode zu ermitteln: 1 SELECT A.n, AVG(B.Close) AS Ind1 INTO sbInd1 2 FROM sbA AS A INNER JOIN sbA AS B ON (A.n>= B.n) AND (B.n>A.n-sbGetPar2()) 3 GROUP BY A.n; Hier wird die Schlusskurse enthaltende Tabelle sbA mit sich selbst verknüpft, so dass für jeden Zeitpunkt (A.n) die benötigten Daten abhängig von der Berechnungsperiode (sbGetPar2()) zusammengestellt werden (Zeile 2). Die eigentliche Berechnung des Durchschnitts (SMA) erfolgt dann im SELECT-Teil, wofür eine Gruppierung nach jeweiligem Zeitpunkt in der Zeile 3 der umgenannten Tabelle A notwendig ist. Diese Sicht wird dann mit der INTO-Anweisung in einer Tabelle sbInd1 gespeichert (Zeile 1). Die Differenz zweier SMA-Linien ergibt sich wie folgt: 1 SELECT A.n, A.Ind0-B.Ind1 AS Ind INTO sbInd 2 FROM sbInd0 AS A INNER JOIN sbInd1 AS B ON A.n=B.n; Dabei enthält die Spalte Ind0 in der Tabelle sbInd0 die schon ermittelten SMA-Werte mit der kürzen Berechnungsperiode. Die Tabelle sbInd1 enthält die SMA-Werte mit der längeren Berechnungsperiode. Durch eine JOIN-Verbindung können zwei SMA-Werte aus beiden Tabelle zum selben Zeitpunkt verglichen (Zeile 2) und schließlich subtrahiert (Zeile 1) werden. 128 7. Implementierung erweiterter Handelsstrategien Für die Berechnung der Handelssignale wird hier als Beispiel die Berechnung der Kaufsignale erläutert und die Berechnung der Verkaufssignale können analog ermittelt werden: 1 SELECT B.n INTO sbBuy 2 FROM sbInd AS A INNER JOIN sbInd AS B 3 ON (A.n +1 = B.n) AND (A.Ind < getBuy() AND B.Ind >= getBuy()) 4 WHERE A.n>= 0 AND B.n>= 0; • Basierend auf der schon ermittelten Differenz beider SMA-Werte in der Tabelle sbInd wird hier die oben genannte Handelsregel implementiert. In den Zeilen 2-3 folgt der Bedingungsteil der Implikation { (Ind(n-1) < 0) ∧ (Ind(n) ≧ 0) }. Um hintereinander folgend die Differenz beider Linien zu vergleichen, ist hier wieder eine JOIN-Verbindung angewendet worden. Die erste Bedingung in der ON-Klausel (A.n +1 = B.n) sorgt dafür, dass die genau zeitlich hintereinander folgenden Differenzen (Ind) zusammen verknüpft werden. Die Funktion getBuy() in der Zeile 3 liefert die vom Benutzer gewünschte Differenz zweier SMALinien. Um den Schnittpunkt zweier SMA-Linien zu verfolgen, ist „0“ für die Differenz in das Trade Signal Corssover genannte Eingabefeld der Benutzeroberfläche des TInToStrategyBuilder einzugeben. • Der Folgerungsteil der Implikation (Signal(n) = „Kauf“) ist implizit angegeben, indem die ermittelten n-Werte in die Tabelle für alle Kaufsignale gespeichert werden (Zeile 1). • Durch die Bedingungen im WHERE-Teil bleiben die bei der Berechnung der Indikatoren verwendeten Hilfsdaten ausgeschlossen. Anwendungsmöglichkeiten für die Eingabefunktionen: Die Funktion getBuy() liefert die vom Benutzer gewünschte Differenz zweier SMA-Linien, womit die Empfindlichkeit der zu generierenden Kaufsignale beeinflusst werden kann. Beispielsweise sei angenommen, dass der Anwender eine positive Zahl für die Differenz zweier SMA-Linien eingegeben hat. Damit ist vorgegeben, dass ein Kaufsignal entsteht, wenn der Trend im Kursverlauf des entsprechenden Wertpapiers schon entwickelt ist. Mit dieser Vorgabe könnte man Fehlsignale in trendschwachen Phasen eliminieren und nur signifikante Signale zulassen. Jedoch liegt die Schwierigkeit bei der praktischen Anwendung in der Abwägung zwischen Rendite und Risiko. Das Generieren nur der signifikanten Signale bringt auch einen Verlust an etwaigen Gewinnmöglichkeiten mit sich. Die Funktion getSell() für die Differenz zweier SMA-Linien lässt den Anwendern analog die Empfindlichkeit der zu generierenden Verkaufssingle einstellen. In der TInTo-StrategyBuilder Benutzeroberfläche können die vorgewählten Differenzen zweier SMA-Linien im Eingabefeld Crossover Buy für Kaufsignale und Crossover Sell für Verkaufssignale eingegeben werden: 129 7. Implementierung erweiterter Handelsstrategien Abbildung 7.2 TInTo-StrategyBuilder Eingabefelder Crossover Buy Sell 7.2.2 Zusätzliche Strategiebedingungen Zu den mittels gleitender Signallinien erzeugten Handelssignalen können zusätzlich weitere Bedingungen angewendet werden, um möglichst nur wichtige Signale zuzulassen. Als Beispiel soll hier die Signalberechnung der in TInTo-StrategyBuilder angebotenen Hadelsstrategie MACD Crossover Plus erläutert werden. Beispiel: MACD Crossover Plus Die Strategie MACD Crossover Plus generiert Handelssignale mittels Überkreuzen der MACDLinie mit deren gleitender Signallinie. Dabei sind jedoch weitere Bedingungen für gültige Handelssignale gestellt. Mittels Nulllinie wird nun zusätzlich die Gültigkeit der zu erzeugenden Signale weiter eingeschränkt. Die entsprechende Handelslogik ist im Folgenden dargestellt. Weitere detaillierte Erläuterungen und Anwendungen finden sich im Abschnitt 4.3.4 in Kapitel 4. Handelslogik: • Kaufe ein Wertpapier, wenn die MACD-Linie die Signallinie von unten nach oben schneidet und gleichzeitig die MACD-Linie und die Signallinie kleiner als null sind. • Verkaufe ein Wertpapier, wenn die MACD-Linie die Signallinie von oben nach unten schneidet und gleichzeitig die MACD-Linie und die Signallinie größer als null sind. Berechnung: Um den Schnittpunkt der MACD-Linie mit deren Signallinie zu verfolgen, müssen wieder die Differenzen beider Werte zum selben Zeitpunkt ermittelt und zu hintereinander folgenden Zeitpunkten miteinander verglichen werden. 130 7. Implementierung erweiterter Handelsstrategien 12-26-Tage-MACD (schwarz) 9-Tage-SL (Gleitende Signallinie rot) Sei Ind(n) = MACD(n) - SL(n) Verkauf Verkauf Verkauf MACD(n)>0 SL(n)>0 Nulllinie Kauf MACD(n)<0 SL(n)<0 Verkauf Kauf Kauf Kauf Ind(n) < 0 Ind(n) > 0 Ind(n) < 0 Ind(n) > 0 Ind(n) < 0 n Fortlaufender Zeitpunkt Ind(n) > 0 Abbildung 7.3 Handelssignale der Strategie MACD Crossover Plus, Microsoft Corp. [SCharts08] Neben dem Überkreuzen der MACD-Linie mit der Signallinie verwendet die genannte Handelslogik als zusätzliches Kriterium für gültige Signale noch die Lage dieser beiden Linien zum selben Zeitpunkt. Demnach wird beispielsweise das mittels Überkreuzen erzeugte Verkaufssignal am 9. Juli in Abbildung 7.3 aussortiert, da die Lage beider Linien unterhalb der Nulllinie ist. Demnach sind die Handelsregeln wie folgt zu formulieren: Sei Ind(n) = MACD(n) - SL(n), n: Fortlaufender Zeitpunkt. ∀n : { (Ind(n-1) < 0)∧(Ind(n) ≧ 0) ∧ (MACD(n) < 0) ∧ (SL(n) < 0) } ⇒ (Signal(n) = „Kauf“) ∀n : { (Ind(n-1) > 0)∧(Ind(n) ≦ 0) ∧ (MACD(n) > 0) ∧ (SL(n) > 0) } ⇒ (Signal(n) = „Verkauf“) Umsetzung: Die Signalberechnung dieser Handelsregeln basiert auf dem schon berechneten Indikator MACD und dessen gleitender Signallinie. Die gleitende Signallinie des MACD wird als EMA (Exponentail Moving Average) des MACD selber berechnet. Darauf aufbauend ermittelt die folgende Abfrage die benötigen Daten für die Signalberechnung: 1 SELECT n, (v1-v2)-v3 AS Ind, (v1-v2) AS MACD, v3 AS SL INTO sbInd 2 FROM sbA; Im SELECT-Teil wird die Differenz des MACD(v1-v2) zu dessen Signallinie(v3) berechnet und als Ind umbenannt. Neben den n-Werten werden dann die Differenz aus MACD und Signallinie, die MACD-Werte sowie die Signallinien-Werte für die folgende Signalberechnung mittels INTO-Anweisung in der Tabelle sbInd gespeichert. Beispielhaft wird hier die Berechnung der Kaufsignale vorgestellt. Die Berechnung der Verkaufssignale erfolgt analog: 1 SELECT B.n INTO sbBuy 2 FROM sbInd AS A INNER JOIN sbInd AS B 3 ON (A.n +1 = B.n) AND (A.Ind < getBuy() AND B.Ind>= getBuy()) 4 WHERE A.n>= 0 AND B.n>= 0 AND B.MACD<getBuyR() AND B.SL<getBuyR(); • Basierend auf der zuvor erstellten Tabelle sbInd wird die genannte Handelsregel implementiert. 131 7. Implementierung erweiterter Handelsstrategien • Die erste Hälfte des Bedingungsteils {(Ind(n-1) < 0) ∧ (Ind(n) ≧ 0)} der Implikation ist implementiert wie bei der im letzten Abschnitt erläuterten Handelsstrategie SMA Crossover (dort Zeilen 2-3). • Weitere Kriterien für die Gültigkeit eines Kaufsignals, also die zweite Hälfte des Bedingungsteils der Implikation, sind als zusätzliche Bedingungen am Ende des WHERETeils eingefügt. Dabei liefert die Funktion getBuyR() das vom Benutzer gewünschte Beschränkungsmaß für das Kaufsignal. Um die Gültigkeit der Signale mittels Nulllinie wie bei dieser Handelsregel gefordert zu unterscheiden, ist „0“ in das mit Trade Signal Range benannte Eingabefeld auf der Benutzeroberfläche einzusetzen. Die ersten zwei Bedingungen im WEHRE-Teil sortieren die Hilfsdaten aus der Berechnung des Indikators aus. • Schließlich werden nur die n-Werte zu allen ermittelten Kaufsignalen für die weitere Berechnung durch die INTO-Anweisung in die Tabelle sbBuy gespeichert. Anwendungsmöglichkeiten für die Eingabefunktionen: Die Funktion getBuy() kann für die Einstellung der Empfindlichkeit bei der Generierung der Signale benutzt werden, analog wie bei der Strategie SMA Crossover. Die zusätzliche Funktion getBuyR() liefert das vom Benutzer eingegebene Beschränkungsmaß für das Kaufsignal und bietet damit dem Anwender die Möglichkeit zur Berücksichtigung der vorherrschenden Marktsituationen. Auf Grund der Oszillatoreneigenschaften des MACD können dessen Signale in extremen Marktsituationen als „signifikante“ Signale interpretiert werden. Um Kaufsignale nur in überverkaufter Marktsituation zu generieren, kann eine je nach Wertpapier angemessene negative Zahl als Beschränkungskriterium für das Kaufsignal eingegeben werden. Analog lässt sich mit getSellR() der Beschränkungsgrad für Verkaufssignale einsetzen. In der TInTo Eingabemaske können solche Beschränkungsgrade im Eingabefeld Range Buy für Kaufsignale und Range Sell für Verkaufssignale eingegeben werden: Abbildung 7.4 TInTo-StrategyBuilder Eingabefelder Trade Signal Range Buy Sell 132 7. Implementierung erweiterter Handelsstrategien 7.2.3 Kombination mehrerer Indikatoren Mit dem Ziel, stabilere Signale zu erzeugen, können mehrere Indikatoren zusammengesetzt eine Handelsstrategie bilden. Als Beispiel wird im Folgenden die Signalberechnung der im TInTo-StrategyBuilder angebotenen Handelsstrategie MACDCOP + CMF erläutert. Beispiel : MACDCOP + CMF Die Strategie MACDCOP+CMF ist eine Kombination aus der im letzten Abschnitt erläuterten Strategie MACD Crossover Plus mit dem Volumenindikator CMF. Diese Kombination generiert Handelssignale in gleicher Art wie MACD Crossover Plus mittels Überkreuzen der MACDLinie mit deren gleitender Signallinie. Dabei dient noch die Lage dieser beiden Linien zur Nulllinie als weiteres Kriterium für die Gültigkeit der Signale. Zusätzlich kommt nun noch der CMF zum Einsatz, um die geeignete Marktsituation für gültige Handelssignale zu bestätigen. Die Handelslogik für diese Strategie ist im Folgenden dargestellt. Weitere detaillierte Erläuterung und Anwendungen der Handelsstrategie MACD Crossover Plus sowie des Indikators CMF sind in Kapitel 3 und 4 zu finden. Handelslogik: • Kaufe ein Wertpapier, wenn die MACD-Linie deren Signallinie von unten nach oben schneidet und gleichzeitig die MACD-Linie, deren Signallinie und die CMF-Linie kleiner als null sind. • Verkaufe ein Wertpapier, wenn die MACD-Linie deren Signallinie von oben nach unten schneidet und gleichzeitig die MACD-Linie und deren Signallinie und die CMF-Linie größer als null sind. Berechnung: Das Überkreuzen der MACD-Linie und der Signallinie wird, wie auch bei den bereits zuvor erläuterten Strategien SMA Crossover und MACD Crossover Plus, durch den Differenzvergleich beider Linien zu hintereinander folgenden Zeitpunkten ermittelt: 12-26-Tage-MACD (schwarz) 9-Tage-SL (Gleitende Signallinie rot) Sei Ind(n) = MACD(n) - SL(n) Verkauf Verkauf Verkauf Kauf 20-Tage-CMF (schwarz) Kauf Ind(n) > 0 Ind(n) < 0 Verkauf MACD(n)>0 SL(n) > 0 Kauf MACD(n)<0 SL(n) < 0 Verkauf CMF(n) > 0 Kauf CMF(n) < 0 Fortlaufender Zeitpunkt: n Abbildung 7.5 Handelssignale der Strategie MACD + CMF, Microsoft Corp. [SCharts08] 133 7. Implementierung erweiterter Handelsstrategien Zusammen mit den genannten weiteren Kriterien für gültige Handelssignale ergeben sich folgende Handelsregeln für die Implementierung: Sei Ind(n) = MACD(n) - SL(n), n: Fortlaufender Zeitpunkt ∀n : { (Ind(n-1) < 0) ∧ (Ind(n) ≧ 0) ∧ (MACD(n) < 0) ∧ (SL(n) < 0) ∧ (CMF(n) < 0) } ⇒ (Signal(n) = „Kauf“) ∀n : { (Ind(n-1) > 0) ∧ (Ind(n) ≦ 0) ∧ (MACD(n) > 0) ∧ (SL(n) > 0) ∧ (CMF(n) > 0) } ⇒ (Signal(n) = „Verkauf“) Nach diesen Regeln erfüllt das mittels Überkreuzen erzeugte Verkaufssignal am 9. Juli in der Abbildung 7.5 die weiteren Bedingungen nicht und wird daher aussortiert. Umsetzung: Die Signalberechnung dieser Handelsstrategie basiert auf den schon ermittelten MACD-Werten und deren Signalwerten sowie den berechneten CMF-Werten. Die folgende Abfrage aggregiert die benötigten Daten bezüglich MACD und speichert diese in die Tabelle sbInd für die Signalberechnung: 1 SELECT n, (v1-v2)-v3 AS Ind, (v1-v2) AS MACD, v3 AS SL INTO sbInd 2 FROM sbA; Dabei wird die Differenz von MACD-Werten und Signallinie-Werten im SELECT-Teil ermittelt und als Ind umbenannt. Repräsentativ wird hier die Berechnung der Kaufsignale vorgestellt. Die Berechnung der Verkaufssignale ist analog umgesetzt: 1 SELECT B.n INTO sbBuy 2 FROM (sbInd AS A INNER JOIN sbInd AS B 3 ON (A.n +1 = B.n) AND (A.Ind < getBuy() AND B.Ind>= getBuy())) 4 INNER JOIN sbIndV AS C ON B.n=C.n 5 WHERE A.n>= 0 AND B.n>= 0 AND B.MACD<0 AND B.SL<0 AND C.Ind<0; • Die im FROM-Teil verwendeten Basistabellen sind sbInd, welche die Daten bezüglich MACD enthält und eine weitere Tabelle sbIndV, welche neben den n-Werten auch die CMFWerte in der mit Ind benannten Spalte enthält. • Die Kriterien {(Ind(n-1) < 0) ∧ (Ind(n) ≧ 0)} im Bedingungsteil der Implikation der gegebenen Handelsregel für Kaufsignale sind in den Zeile 2-3 in gleicher Weise wie bei der Strategie SMA Crossover implementiert. Dabei ist die Tabelle sbInd mit sich selbst verküpft, um die hintereinander folgenden, hier als Ind umbenannten Differenzen von MACD-Werten und Signal-Werten, zu vergleichen. Die zusätzliche JOIN-Bindung in der Zeile 4 wird benötigt, um CMF-Werte mit einfließen zu lassen. • Die weiteren Bedingungen der Implikation {(MACD(n) > 0) ∧ (SL(n) > 0) ∧ (CMF(n) > 0) } folgen im WHERE-Teil. Die ersten zwei Bedingungen im WHERE-Teil schließen die Hilfsdaten für die Berechnung der Indikatoren aus. • Abschließend werden nur die n-Werte zur weiteren relevanten Signalberechnung der Strategiebewertung mittels INTO-Anweisung in die Tabelle sbBuy gespeichert (Zeile 1). 134 7. Implementierung erweiterter Handelsstrategien 7.3 Kombinierte Strategien mit Investition in Handelspausen Um zusätzliche Gewinne während einer möglichen Handelspause zu erzielen, können Anleger das verfügbare Kapital in alternative Produkte in den Handelspausen investieren. Demnach kann eine Aktive-Markt-Strategie um eine Handelspausen-Strategie erweitert werden. Die bisher vorgestellten erweiterten Strategien sind durch Erweiterungen an den Berechnungen des Indikators (sbIndM) oder der Handelssignale (sbBuyM, sbSellM) realisiert worden. sbBuyM sbIndM sb0M sb1M sbSellM SBT sb2 Etwaige Handelssignale für Investitionen in alternative Produkte während Handelspausen sind abhängig von relevanten Handelssignalen der Aktiven-Markt-Strategie. Dies heißt in der Praxis, alternative Produkte sollen dann gekauft werden, nachdem die Wertpapiere der Aktiven-MarktStrategie verkauft sind. Daher ist zur Ermittlung der Handelspause nur die Berechnung der relevanten Signale (sb1M) zu erweitern. Zur Veranschaulichung soll hier die zuletzt erläuterte Strategie MACDCOP + CMF verwendet werden. Diese Strategie generiert durch die erweiterten Abfragen sbBuyM und sbSellM folgende, in der Abbildung 7.6 mit 1 bis 6 beschriftete Handelssignale. Dabei wird das vierte Signal aussortiert, da es die folgende Bedingung der Handelsregel (MACD(n) > 0) ∧ (SL(n) > 0) ∧ (CMF(n) > 0) nicht erfüllt. Handelsregeln: Sei Ind(n) = MACD(n) - SL(n), n: Fortlaufender Zeitpunkt ∀n : { (Ind(n-1) < 0) ∧ (Ind(n) ≧ 0) ∧ (MACD(n) < 0) ∧ (SL(n) < 0) ∧ (CMF(n) < 0) } ⇒ (Signal(n) = „Kauf“) ∀n : { (Ind(n-1) > 0) ∧ (Ind(n) ≦ 0) ∧ (MACD(n) > 0) ∧ (SL(n) > 0) ∧ (CMF(n) > 0) } ⇒ (Signal(n) = „Verkauf“) 135 7. Implementierung erweiterter Handelsstrategien 12-26-Tage-MACD 9-Tage-SL(Gleitende Signallinie) Sei Ind(n) = MACD(n) - SL(n) 2.Verkauf 6.Verkauf 4.Verkauf 3.Kauf 1.Kauf Ind(n) > 0 20-Tage-CMF 1.Kauf Handelspause 5.Kauf Verkauf CMF(n) > 0 Ind(n) < 0 2.Verkauf Handelspause Verkauf MACD(n)>0 SL(n) > 0 Kauf MACD(n)<0 SL(n) < 0 3.Kauf 6.Verkauf Handelspause Kauf CMF(n) < 0 n Fortlaufender Zeitpunkt Abbildung 7.6 Handelssignale der Strategie MACD+CMF, Microsoft Corp. [SCharts08] Durch die Berechnung der relevanten Signale mittels der Abfragen sb0M und sb1M wird weiterhin das fünfte Kaufsignal aussortiert, da es einem Kaufsignal folgt. Im Ergebnis werden die mit 1, 2, 3 und 6 beschrifteten Signale als relevante Signale abgeleitet. Abhängig von diesen relevanten Signalen können, wie in der Abbildung 7.6 gezeigt, die Anfangs- und Endpunkte der Handelspausen berechnet werden. Der TInTo-StrategyBuilder bietet die Möglichkeit, alle in TInTo-StrategyBuilder angebotene Aktive-Markt-Strategien optional mit einer von zwei vorgegebenen Handelspausen-Strategien zu kombinieren: Aktive-Markt-Strategien: Handelspausen-Strategien: Abbildung 7.7 TInTo-StrategyBuilder, Handelspausen-Strategien, Microsoft Corp. [SCharts08] Die erste Handelspausen-Strategie „Combine with Opposite Product“ bietet die Möglichkeit, die gewählte Aktive-Markt-Strategie um eine weitere Investition in ein alternatives Wertpapier zu erweitern, dessen Kurs sich gegenläufig zum Kurs der Wertpapiere der Aktiven-MarktStrategie entwickelt. 136 7. Implementierung erweiterter Handelsstrategien Die zweite Handelspausen-Strategie „Combine with Cash Deposit“ sieht vor, die gewählte Aktive-Markt-Strategie um eine alternative Investition in ein fest verzinsliches Produkt zu erweitern. Berechnung: Als ein Beispiel für die Signalberechnung der kombinierten Strategien mit der Investition in den Handelspausen dient hier die kombinierte Strategie mit der Handelspausen-Strategie „Combine with Cash Deposit“. Die Signalberechnung für die kombinierte Strategie mit der Handelspausen-Strategie „Combine with Opposite Product“ erfolgt analog. In Abhängigkeit von den relevanten Verkaufssignalen aus der Aktiven-Markt-Strategie können Kaufsignale für eine alternative Investition in den Handelspausen berechnet werden: Relevante Signale: Kauf Verkauf Verkauf Kauf Kauf Verkauf ... ... Handelspause Handelspause n Fortlaufender Zeitpunkt Handelspause ∀n : (SignalRelevant(n) = „Verkauf“) ⇒ (SignalPause(n) = „Kauf“) Nach einem relevanten Verkaufssignal aus der Aktiven-Markt-Strategie (SignalRelevant(n) = „Verkauf“) steht Kapital für eine alternative Investition zur Verfügung. Anschließend kann ein Kaufsignal für eine alternative Investition in der Handelspause (SignalPause(n) = „Kauf“) generiert werden. Beide Signale werden zum gleichen Zeitpunkt realisiert. Bei tagesbasierten Zeitpunkten ist dies so zu verstehen, dass die von diesem Handelssignalen ausgelösten Handelsaktionen nacheinander, aber am selben Tag erfolgen. Umsetzung: Die Signalpartner der berechneten Kaufsignale der Handelspausen-Strategie können wie folgt ermittelt werden: sb1 BuyN SellN BuyN SellN 39 72 150 60 112 196 ∀BuyN ∀SellN : SellN ⇒ BuyN 39 60 72 112 150 Die temporäre Tabelle sb1 enthält die Zeitpunkte aller relevanten Handelssignale aus der Aktiven-Markt-Strategie. BuyN, SellN: Fortlaufende Zeitpunkten relevanter Kaufsignale bzw. Verkaufssignale. 60 72 112 150 196 Handelssignale der Handelspausen-Strategie Signalpartner der berechneten Kaufsignale der HandelspausenStrategie ist die zeitlich hinterher folgende erste Kaufsignal von der Aktiven-Markt-Strategie. Dabei ist die vorgestellte Regel ∀n : (SignalRelevant(n) = „Verkauf“) ⇒ (SignalPause(n) = „Kauf“) durch eine sinngleiche Regel ∀BuyN ∀SellN : SellN ⇒ BuyN zu ersetzen. 137 7. Implementierung erweiterter Handelsstrategien Um Handelssignale aus der Aktiven-Markt-Strategie von denen aus der HandelspausenStrategie unterscheiden zu können, kann die im Abschnitt 6.2.4 und 6.2.5 erläuterte Abfrage sb1M erweitert werden. Dabei wird eine zusätzliche Spalte CD erstellt: Abfrage sb1M 1 SELECT MIN(n) AS BuyN, SellN, 0 AS CD INTO sb1 2 FROM sb0 3 GROUP BY SellN; Ein konstanter Wert „0“ in der Spalte CD (Zeile 1) weist darauf hin, dass die ermittelten Zeitpunkte der Signale aus der Aktiven-Markt-Strategie stammen. Zu der durch die Abfrage sb1M erstellten Tabelle sb1 werden Zeitpunkte für die Handelssignale aus der Handelspausen-Strategie durch folgende INSERT INTO Aktionsabfrage hinzugefügt: 1 2 3 4 INSERT INTO sb1 SELECT A.SellN AS BuyN, MIN(B.BuyN) AS SellN, 1 AS CD FROM sb1 AS A INNER JOIN sb1 AS B ON A.SellN<B.BuyN GROUP BY A.SellN; • Die vorgestellte Regel ∀BuyN ∀SellN : SellN ⇒ BuyN ist durch eine Umbenennung (A.SellN AS BuyN) in der Zeile 2 implementiert. • Um die jeweiligen Signalpartner von Kaufsignalen von der Handelspausen-Strategie zu finden, ist die Tabelle sb1 mit sich selbst verknüpft. Dabei sorgt die ON-Bedingung dafür, dass solche Signalpartner, also das zugehörige Verkaufssignal, zeitlich jünger als das jeweilige Kaufsignal ist. Eine Minimum-Bildung in der Zeile 2 ermittelt das gesuchte Verkaufssignal, indem es zusammen mit der GROUP BY-Klausel das erste Kaufsignal der jeweiligen Gruppe aus durch die ON-Klausel bedingten Kaufsignalen berechnet. • Alle ermittelte Zeitpunkte der Handelssignale von der Handelspausen-Strategie werden durch einen konstanten Wert 1 in der Spalte CD gekennzeichnet (Zeile 2). Abbildung 7.8 veranschaulicht das generelle Verhalten dieser Aktionsabfrage. Die Anzahl an Zeitpunkten aller Signale aus der Handelspausen-Strategie im Analysezeitraum ist um zwei Zeitpunkte niedriger als die Anzahl von Zeitpunkten aller Signale aus der Aktiven-MarktStrategie. Insgesamt werden 6 Signale im Analysezeitraum nach Aktiver-Markt-Strategie generiert, aber nur 4 Signale nach Handelspausen-Strategie. Die zwei mit * markierten Signale aus der Handelspausen-Strategie werden nicht generiert, da zu diesen Signalzeitpunkten die Logik der Gruppierung und die ON-Bedingung (Zeile 3-4) nicht erfüllt werden. Im Ergebnis der Strategieerweiterung werden ab dem Zeitpunkt des ersten Kaufsignals aus der Aktiven-MarktStrategie bis zum Zeitpunkt des letzten Verkaufssignals aus dieser Aktiven-Markt-Strategie Kapital angelegt. Die sich in diesem Zeitraum abwechselnden Investitionen in Wertpapiere aus der Aktiven-Markt-Strategie und in alternative Produkte während der Handelspausen sind in Abbildung 7.8 entlang der Zeitachse als blaue Felder dargestellt. 138 7. Implementierung erweiterter Handelsstrategien Handelssignale aus Aktiver-Markt-Strategie Kauf Verkauf * Kauf Kauf Verkauf Kauf Verkauf Fall 1 Fortlaufender Zeitpunkt n Fall 2 Anfang des Analysezeitraumes Verkauf Kauf Verkauf Handelssignale aus Handelspausen-Strategie * Ende des Analysezeitraumes Abbildung 7.8 Handelssignale aus Aktiver-Markt-Strategie und Handelspausen-Strategie Weiterhin müssen folgende drei Sonderfälle für die Signalberechnung der Strategiebewertung berücksichtigt werden: • Fall 1: Erste zwei Handelssignale. • Fall 2: Letzte zwei Handelssignale. • Fall 3: Kein Signal aus der Aktiven-Markt-Strategie. Fall 1: Erste zwei Handelssignale. Dieser Fall ist in der Abbildung 7.8 mit Fall 1 gekennzeichnet. Wenn der Zeitpunkt des ersten Kaufsignals aus der Aktiven-Markt-Strategie nicht mit dem Anfangszeitpunkt des Analysezeitraumes zusammenfällt, dann muss die erste Handelspause zusätzlich berücksichtigt werden: 1 2 3 4 5 6 INSERT INTO sb1 SELECT Iif((SELECT MIN(BuyN) FROM sb1 )>0, 0, NULL) AS BuyN, MIN(sb1.BuyN) AS SellN, Iif((SELECT MIN(BuyN) FROM sb1 )>0, 1, NULL) AS CD FROM sb1 WHERE (SELECT MIN(BuyN) FROM sb1 )>0; • Die Basistabelle sb1 enthält alle relevanten Signale aus der Aktiven-Markt-Strategie und die letzten, mit Aktionsabfrage generierten Signale der Handelspausen-Strategie. Im Fall der Abbildung 7.8 enthält die Tabelle sb1 die Zeitpunkte aller mit Kauf und Verkauf gekennzeichneten Signale. Insgesamt werden dann 10 Signale generiert. • Die WHERE-Bedingung in der Zeile 6 ist nur den Fall beschränkt, bei dem das erste Kaufsignal nach dem Anfangszeitpunkt des Analysezeitraumes erscheint. Der Anfangszeitpunkt des Analysezeitraumes ist immer „0“. • Im SELECT-Teil werden dann „0“ als Kaufzeitpunkt von der Handelspausen-Strategie und der Zeitpunkt des ersten Kaufsignals als Verkaufszeitpunkt der Handelspausen-Strategie angelegt (Zeile 2-3). Um die Signalzeitpunkte aus der Handelspausen-Strategie zu kennzeichnen, wird „1“ in die Spalte CD geschrieben (Zeile 3). Die Syntax der Funktion Iif ist wie folgt: Iif(Bedingung, Wert_wenn_Wahr, Wert_wenn_Falsch) Bedingung ist der auszuwertende Ausdruck. Wert_wenn_Wahr ist der auszulieferende Wert, wenn die angegebene Bedingung wahr ist. Wert_wenn_Falsch ist der auszulieferende Wert, wenn die angegebene Bedingung falsch ist. 139 7. Implementierung erweiterter Handelsstrategien Angemerkt sei hier, dass die Bedingung für die Existenz einer Handelspause vor dem ersten Kaufsignal aus der Aktiven-Markt-Strategie (SELECT MIN(BuyN) FROM sb1 )>0 redundant in den Zeilen 2, 4 und 6 verwendet wird. Eliminiert man allerdings diese Bedingung in den Zeilen 2 und 4, wird im Fall des Fehlschlags der WHERE-Bedingung eine ungewünschte Zeile hingefügt: BuyN SellN CD Fehlerhaft ! Wenn die WHEREBedingung falsch ist, wird solche Zeile hinzugefügt: 1 INSERT INTO sb1 2 SELECT 0 AS BuyN, 3 MIN(sb1.BuyN) AS SellN, 1 AS CD sb1 6 WHERE (SELECT MIN(BuyN) FROM sb1 )>0; 4 5 FROM 72 112 0 112 150 1 0 1 Aber gewünscht ist, dass kein Signal generiert wird: Wenn am Anfangszeitpunkt des Analysezeitraumes eine Investition nach Aktiver-MarktStrategie angelegt werden sollte ((SELECT MIN(BuyN) FROM sb1 ) = 0), muss kein Signal für eine alternative Investition nach Handelspausen-Strategie am Anfangszeitpunkt des Testzeitraumes generiert werden. Um fälschlicherweise generierte Signale auszugrenzen, wird die zusätzliche Bedingung (Iif((SELECT MIN(BuyN) FROM sb1 )>0, 0, NULL)) in den Zeile 2 und 4 verwendet. Anhand von NULL-Werten wird dabei kein Signal im Falle des Fehlschlags im Bedingungsteil generiert. Fall 2: Letzte zwei Handelssignale. Dieser Fall ist in der Abbildung 7.8 mit Fall 2 gekennzeichnet. Wenn der Zeitpunkt des letzten Verkaufssignals aus Aktiver-Markt-Strategie mit dem Endzeitpunkt des Analysezeitraumes nicht identisch ist, dann muss die letzte Handelspause zusätzlich berücksichtigt werden: 1 INSERT INTO sb1 2 SELECT Iif((SELECT MAX(SellN) FROM sb1 )<(SELECT MAX(n) FROM sbA), 3 (SELECT MAX(SellN) FROM sb1 ), NULL) AS BuyN, 4 5 MAX(sbA.n) AS SellN, Iif((SELECT MAX(SellN) FROM sb1 )<(SELECT MAX(n) FROM sbA), 1, NULL) AS CD 6 FROM sbA 7 WHERE (SELECT MAX(SellN) FROM sb1 )<(SELECT MAX(n) FROM sbA); • Um den Endzeitpunkt des Analysezeitraumes zu berücksichtigen, wird hier die Tabelle sbA als Basistabelle verwendet (Zeile 6). Die temporäre Tabelle sbA enthält alle benötigten Daten für Indikatorberechnung sowie Signalberechnung zusammen mit den jeweiligen Zeitpunkten. • Die WHERE-Bedingung in der Zeile 7 überprüft, ob eine Handelspause nach dem letzten Verkaufssignal existiert. Dabei liefert der linke Teil des Vergleichs den Zeitpunkt des letzten Verkaufssignals und der rechte Teil des Vergleichs den Endzeitpunkt des Analysezeitraumes. • Im SELECT-Teil werden dann der letzte Verkaufszeitpunkt als Kaufzeitpunkt für ein alternatives Produkt nach Handelspausen-Strategie und der Endzeitpunkt des Testzeitraumes als Verkaufszeitpunkt von dieser Handelspausen-Strategie angelegt (Zeile 2-4). Zeile 5 kennzeichnet die Signale aus der Handelspausen-Strategie. 140 7. Implementierung erweiterter Handelsstrategien • Hier werden wieder zusätzliche Bedingungen in den Zeilen 2, 3 und 5 verwendet, um die im Fall 1 vorgestellte fälschliche Signalgenerierung zu vermeiden. Fall 3: Kein Signal aus Aktiver-Markt-Strategie. Wenn kein relevantes Handelssignal aus der Aktiven-Markt-Strategie generiert worden ist, werden in den bisherigen Abfragen keine Signale generiert. In diesem Fall ist aber der gesamte Analysezeitraum als Handelspause zu betrachten und eine Investition in alternative Produkte nach Handelspausen-Strategie soll vorgenommen werden: 1 INSERT INTO sb1 2 SELECT Iif((SELECT COUNT(n) FROM sb0)=0, 0, NULL) AS BuyN, MAX(A.n) AS SellN, Iif((SELECT COUNT(n) FROM sb0)=0, 1, NULL) AS CD 5 FROM sbA AS A 6 WHERE (SELECT COUNT(n) FROM sb0)=0; 3 4 • Um den Endzeitpunkt des Analysezeitraumes zu ermitteln, wird hier wieder die Tabelle sbA als Basistabelle verwendet (Zeile 5). • Die WHERE-Bedingung in der Zeile 6 überprüft, ob keine relevanten Handelssignale aus der Aktiven-Markt-Strategie generiert worden sind. Die Tabelle sb0 enthält alle relevanten Verkaufssignale aus der Aktiven-Markt-Strategie im Analysezeitraum zusammen mit möglichen Signalpartnern. • Im SELECT-Teil werden dann der Anfangszeitpunkt des Analysezeitraumes „0“ als Kaufzeitpunkt für alternative Produkte und der Endzeitpunkt des Analysezeitraumes als Verkaufszeitpunkt dieser alternativen Produkte angelegt. Zeile 4 kennzeichnet die Signale aus der Handelspausen-Strategie. • Die zusätzliche Bedingung in den Zeilen 2 und 4 wird verwendet, um die im Fall 1 vorgestellte fehlerhafte Signalgenerierung zu vermeiden. 141 7. Implementierung erweiterter Handelsstrategien Neben den elementaren Handelsstrategien wurden im Rahmen dieser Diplomarbeit folgende erweiterte Handelsstrategien innerhalb des TInTo-StrategyBuilder realisiert: Strategie-Kategorie Erweiterte Strategie Signalgenerierung Gleitende Signallinien Strategie SMA Crossover (SMAC) MACD Crossover (MACDC) Fast Stochastics Crossover (FSTOCC) Slow Stochastics Crossover (SSTOCC) Zusätzliche Strategiebedingungen MACD Crossover Plus (MACDCP)* FSTOC Crossover Plus (FSTOCCP)* SSTOC Crossover Plus (SSTOCCP)* Handelspausen-Strategie Kombination mehrerer Indikator MACDCP+CMF (MCF) Erweiterungsoptionen in Handelspause Combine with Opposite Product Combine with Cash Deposit Tabelle 7.1 Erweiterte Handelsstrategien und Handelspausen-Strategien in TInTo-StrategyBuilder 142 8 Bewertung von Handelsstrategien Eine entworfene Handelsstrategie lässt sich anhand ihrer Rendite bezogen auf historische Daten bewerten. Das in dieser Arbeit implementierte Modul TInTo-StrategyBuilder ermöglicht es Anwendern, sowohl die Rendite einer vorhandenen Strategie zu überprüfen, als auch die Entwicklung der Rendite innerhalb des Analysezeitraumes der Strategie zu analysieren und gegebenenfalls durch Eingabefunktionen weiter zu optimieren. In diesem Kapitel wird die Modellierung und die Implementierung der Renditeberechnung entworfener Strategien vorgestellt. Dabei liegt die in den Kapiteln 6 und 7 erläuterte Signalberechnung für die Strategiebewertung zu Grunde. Anschließend folgen eine technische Performanzanalyse zur Berechnungsdauer im TInTo-System sowie beispielhafte Profitabilitätsbewertungen der im TInTo-StrategyBuilder angebotenen Handelsstrategien. Die Informationen zur Berechnung der Zinserträge basieren sich auf [ZinB08]. 8.1 Renditeberechnung Eine Handelsstrategie kann durch hypothetisch erzielte Gewinne unter Verwendung historischer Daten und Investitionen in Analysewertpapiere über vorgewählte Analysezeiträume bewertet werden. Verschiedene Wertpapiere ermöglichen unterschiedliche Ertragsformen. Eine Rendite aus Investitionen in Aktien kann durch Kursgewinne und Dividenden erzielt werden. Darüber hinaus sollten auch ein subjektiver Gewinn aus den Stimmrechten, aber auch mögliche Kosten (zum Beispiel Depotgebühr, Provision) und Steuern (zum Beispiel Abgeltungssteuer ab 2009) berücksichtigt werden. Für Anlagen in Fonds fallen darüber hinaus Verwaltungskosten für Fondmanagement und Ausgabeaufschläge an. Renditemöglichkeiten von festverzinslichen Wertpapieren wie zum Beispiel Anleihen und Pfandbriefen hängen dagegen hauptsächlich vom gewährten Zinssatz ab. Der Schwerpunkt dieser Diplomarbeit liegt auf der Aktiven-Markt-Strategie, deren Rendite aus der Wertsteigerung von Wertpapieren resultiert. Die technische Analyse, worauf die 143 8. Bewertung von Handelsstrategien Handelsstrategien dieser Arbeit basieren, sieht definitionsgemäß vor, dass Erträge ausschließlich aus Kursgewinnen entstehen. Ein möglicher zusätzlicher Ertrag aus Dividenden kann relativ gering sein im Verhältnis zu der gesamten Wertsteigerung, vorausgesetzt die Investition fokussiert auf Kursgewinne. Mögliche Handelskosten und Besteuerungen sind je nach Anleger, beauftragter Transaktionsbank und dem Rechtsrahmen des jeweiligen Landes sehr unterschiedlich zu betrachten. Auf Grund dieser Komplexität und der Abhängigkeit von den persönlichen Gegebenheiten der jeweiligen Investoren ist die Entscheidung getroffen worden, im Rahmen dieser Arbeit die Berechnung des erzielten Gewinns in einem vereinfachten, pauschalen Lösungsweg zu implementieren. Dazu wird im Folgenden eine Strategie ausschließlich durch den erzielten Kursgewinn bewertet. Für den Fall, dass eine Investition eine dividendenträchtige Aktie oder Fonds beinhaltet oder wenn eine Investition mit erheblichem Kosteneinsatz (Transaktionskosten durch extrem häufige Handelsaktionen) verbunden ist, sollten diese Kapital Zu- oder Abflüsse ebenfalls mit in die Gewinnberechnung mit einbezogen werden. Eine zukünftige Version von TInTo kann um diese zusätzlichen Gewinn- oder Kostenelemente erweitert werden. Die Renditeberechnung einer Handelseinheit aus Wertpapierkauf und späterem Verkauf nach der Aktiven-Markt-Strategie gemäß TInTo-StrategyBuilder lautet dann wie folgt: Kauf Verkauf n : Fortlaufender Zeitpunkt Dabei wird der erzielte Kursgewinn zum eingesetzten Kapital, also dem ursprünglichen Kaufpreis, ins Verhältnis gesetzt. Die Renditeberechnung der alternativen Investitionen in einer Handelspause, bietet Ertragsmöglichkeiten in anderer Weise: Handelssignale aus Aktiver-Markt-Strategie: Verkauf Kauf Handelspause Handelssignale aus Handelspausen-Strategie: n: Fortlaufender Zeitpunkt Kauf Verkauf • Für die Handelspausen-Strategie „Combine with Opposite Product“ in TInTo-StrategieBuilder lässt sich die Profitabilität anhand der gegenläufigen Kursbildung zum Kurs der AktivenMarkt-Strategie berechnen: 144 8. Bewertung von Handelsstrategien • Für die Handelspausen-Strategie „Combine with Cash Deposit“ in TInTo-StrategyBuilder lässt sich die Profitabilität über den Zinssatz der alternativen Investition während der Handelspause berechnen: Dabei ist hier die englische Zinsmethode verwendet worden. Diese Methode setzt voraus, dass die Zinstage kalendergenau bestimmt werden und zur Ermittlung des tagesgenauen Anteils der nominale Jahreszinssatz durch 365 geteilt wird. Im Vergleich dazu sieht die deutsche Zinsmethode vor, dass jeder Monat mit 30 Zinstagen und ein gesamtes Jahr mit 360 Zinstagen berechnet wird. Da meistens im Analysezeitraum mehrere Käufe und Verkäufe vorgenommen werden, muss die Gesamtrendite aus allen einzelnen Handelseinheiten im Analysezeitraum kumulativ betrachtet werden. Darüber hinaus kann eine Strategie noch durch Rentabilitätstests auf Basis mehrere Beispiel-Wertpapiere und über mehrere Testzeiträume bewertet werden. 8.2 Implementierung Die Renditeberechnung für die Aktive-Markt-Strategie sowie für die kombinierte Strategie mit der Investition in den Handelspausen müssen separat betrachtet werden, da die Rendite jeweils auf andere Weise ermittelt wird. 8.2.1 Aktive-Markt-Strategien Für die Renditeberechnung Aktiver-Markt-Strategie werden ausschließlich die Kursgewinne betrachtet. Wobei ist Aktive-Markt-Strategie ein Oberbegriff für elementare Strategie und erweiterte Strategie. Das Ziel bei der Implementierung waren eine Anzeige sowohl der prozentualen Rendite aller einzelnen Handelseinheiten als auch der prozentualen kumulativen Rendite über den gesamten Analysezeitraum. Dabei basiert die Renditeberechnung auf den in den Kapiteln 6 und 7 erläuterten Signalberechnungen. Sicht SBT BuyDate BuyClose SellDate SellClose Profit(%) CMLProfit(%) 05.03.2008 12254,99 25.03.2008 12532,6 XX XX Handelseinheit: 29.05.2008 12646,22 24.07.2008 11349,28 XX XX Signalberechnung(Vorhanden) 145 Neu Renditeberechnung 8. Bewertung von Handelsstrategien Berechnung: Die Rendite einer einzelnen Handelseinheit ergibt sich aus der Division des Kursgewinns durch den Kaufkurs. Die prozentuale Rendite wird dann berechnet, indem die ermittelte Rendite mit 100 multipliziert wird: Dabei richtet sich diese Berechnung nach dem Schlusskurs (Close), mit dem eine Handelsaktion abgeschlossen worden wäre. Die kumulative Renditeberechnung basiert dann auf der Renditeberechnung der einzelnen Handelseinheiten. Die Kapitalhöhe am Ende des Zeitraumes ergibt sich nach chronologisch geordneten Handelseinheiten wie folgt: ... ... Das vorhandene Kapital nach Abwicklung einer Handelseinheit aus Kauf und anschließendem Verkauf ergibt sich durch eine rekursive Berechnung. Dabei wird der erneut erworbene Ertragswert (Sh-1·Rh) zu der Kapitalhöhe am Ende der vorangegangenen Handelseinheit(Sh-1) addiert. Die kumulative Rendite wird dann ermittelt, indem die Gewinngröße (Sh - S0) durch das Anfangskapital dividiert wird: Die im Analysezeitraum erzielte Gesamtrendite entspricht dann der kumulativen Rendite nach der letzten abgeschlossnen Handelseinheit im betreffenden Analysezeitraum. Umsetzung: Die Berechnung der kumulativen Rendite erfordert die Formulierung von rekursiven Sichten, welche mit dem von Access 2003 unterstützten SQL-92 nicht möglich sind. Für eine analoge Aufgabenstellung, die Berechnung rekursiver Indikatoren, haben die zuvor erwähnten Diplomarbeiten im TInTo-Projekt als eine Behelfslösung die Eigenschaft der UpdateAnweisung verwendet. Diese Methode wird im Folgenden ebenfalls für die kumulative 146 8. Bewertung von Handelsstrategien Renditeberechnung verwendet. Jedoch besteht eine potenzielle Fehlermöglichkeit bei der Renditeberechnung nach dieser Methode, welche im Rahmen dieser Arbeit gemäß Vereinbarung nicht behoben werden konnte. Diese bekannte Problemstellung wird im Abschnitt 8.3 näher erläutert. Die Renditeberechnung basiert auf der in den Kapiteln 6 und 7 erläuterten Signalberechnung. Die letzte Sicht bei der Signalberechnung enthält das Datum und den Schlusskurs für alle relevanten Handelssignale im Analysezeitraum: 1 SELECT A.BuyDate, A.BuyClose, A.SellDate, A.SellClose 2 FROM sb2 AS A INNER JOIN sb1 AS B ON (A.SN=B.SellN) AND ( A.BN=B.BuyN) 3 ORDER BY A.BuyDate ASC; Dabei sind alle relevante Signalzeitpunkte aus der Tabelle sb1 mit den zugehörigen Darstellungsdaten (Date, Close) aus der Abfage sb2 mittels Zeitpunktvergleich (ON-Bedingung) verknüpft. Die Daten werden schließlich durch die Anweisung in der letzten Zeile chronologisch sortiert. Diese Abfrage wird nun für die Renditeberechnung erweitert, indem die Renditen einzelner Handelseinheiten berechnet werden und die Anfangswerte für die kumulative Renditeberechnung initialisiert werden: 1 SELECT A.BuyDate, A.BuyClose, A.SellDate, A.SellClose (SellClose-BuyClose)/BuyClose AS R, R*100 AS P, 1+R AS acmR, (acmR-1)*100 AS acmP INTO SBT 4 FROM sb2 AS A INNER JOIN sb1 AS B ON (A.SN=B.SellN) AND ( A.BN=B.BuyN) 5 ORDER BY A.BuyDate ASC; 2 3 • Die Erweiterung findet in den Zeilen 2 und3 statt. • Der erste Teil in der Zeile 2 berechnet die Rendite der jeweiligen Handelseinheit und der zweite Teil ermittelt die prozentuale Rendite der jeweiligen Handelseinheit. • Der erste Teil in der Zeile 3 (1+R AS acmR) initialisiert die vorhandene Kapitalhöhe nach Abschluss der ersten Handelseinheit. Dabei ist für das Anfangskapital die Zahl „1“ eingesetzt. Diese Vorgabe der Zahl „1“ vereinfacht die gesamte Berechnung und reicht für unseren Zweck, die prozentuale kumulative Renditeberechnung. Der nächste Teil in der Zeile 3 ((acmR-1)*100 AS acmP) ermittelt die prozentuale kumulative Rendite nach Abschluss der ersten Handelseinheit. Folgender Teil aus der erläuterten Formel ist damit in der Zeile 3 realisiert: SQL SQL 1 (Anfangskapital) 1 + R AS acmR (acmR-1)*100 AS acmP • Die Sicht wird durch die INTO-Anweisung materialisiert (Zeile 3). Jedoch wird diese Sicht am Ende der Berechnung gelöscht. Das Materialisieren dieser Sicht ist notwendig, um die folgenden Aktionsabfragen für die rekursive Berechnung verwenden zu können. Der folgende rekursive Formelteil erfordert eine Verknüpfung der Daten der aktuellen Handelseinheit mit den Daten der vorherigen Handelseinheit: 147 8. Bewertung von Handelsstrategien Für eine solche Verknüpfung ist eine Nummerierung von Handelseinheiten wünschenswert. Folgende Aktionsabfrage fügt fortlaufende Nummern zu der mittels der letzten Aktionsabfrage erstellten Tabelle SBT hinzu: 1 ALTER TABLE SBT ADD COLUMN NR COUNTER(1,1) 2 CONSTRAINT PrimaryKey PRIMARY KEY; Mittels der ALTER TABLE-Anweisung wird die Tabelle SBT modifiziert, indem eine zusätzliche Spalte NR für die fortlaufenden Nummern anhand einer ADD COLUMNAnweisung hinzugefügt wird. Dabei startet die Funktion COUNTER die Autonummerierung mit der Nummer „1“ in der ersten Zeile und inkrementiert diese bei jeder weiteren Zeile um eins. Damit ist eine Spalte mit fortlaufenden Nummern umgehend simuliert. Die Syntax der verwendeten Funktion COUNTER lautet wie folgt: COUNTER (Startwert, Inkrementierender Wert) Für die rekursive Berechnung wird die in den bisherigen Diplomarbeiten zum TInTo-Projekt erläuterte Behelfslösung eingesetzt. Dabei wird eine Eigenschaft der UPDATE-Anweisung verwendet, womit die Datensätze in der Tabelle sukzessiv hintereinander aktualisiert werden. Folgende Abfrage berechnet die jeweils vorhandene Kapitalhöhe und die jeweilige kumulative Rendite in Prozent: 1 UPDATE SBT AS A INNER JOIN SBT AS B ON A.NR-1=B.NR 2 SET A.acmR = B.acmR + B.acmR*A.R, A.acmP = (B.acmR + B.acmR*A.R-1)*100; • Anhand der realisierten fortlaufenden Nummern (NR) sind die Daten aktueller Handelseinheiten mit den Daten vorheriger Handelseinheiten verknüpft (Zeile 1). • Der erste Teil in der Zeile 2 berechnet die jeweilige Kapitalhöhe. Da die Berechnung mittels UPDATE-Anweisung sukzessiv Zeile für Zeile erfolgt, enthält die für die Berechnung der Kapitalhöhe der aktuellen Handelseinheit (A.acmR) benötigte Kapitalhöhe aus der vorherigen Handelseinheit (B.acmR) bereits den zuvor berechneten Wert (B.acmR). Der zweite Teil in der Zeile 2 ermittelt die kumulative Rendite. Somit sind hier folgende Formeln in SQL umgesetzt: 1 (Anfangskapital) SQL SQL A.acmR = B.acmR + B.acmR*A.R A.acmP = (B.acmR + B.acmR*A.R-1)*100 Die Ergebnisse aus den bisherigen Berechnungen (die temporäre Tabelle SBT) werden für die Anzeige in die Tabelle TstrBuilderShow hinzugefügt: 1 INSERT INTO TstrBuilderShow(Info) VALUES(getSbInfo()); 1 INSERT INTO TstrBuilderShow( BuyDate, BuyClose, SellDate, SellClose, P, acmP) 2 SELECT SBT.BuyDate, SBT.BuyClose, SBT.SellDate, SBT.SellClose, SBT.P, SBT.acmP 3 FROM SBT ; Die Funktion getSBInfo() in der ersten Aktionsabfrage liefert die Symbole der gewählten Wertpapiere, den Namen der gewählten Handelsstrategie und die eingegebenen Parameter für die aktuelle Strategie. 148 8. Bewertung von Handelsstrategien Die Tabelle TstrBuilderShow bleibt permanent in der Datenbank, im Gegensatz zu den anderen Tabellen, welche temporär nur für die Berechnung erstellt wurden. Um die Profitabilität verschiedener Handelsstrategien zu vergleichen, werden auch weitere Berechnungsergebnisse anderer Strategien in diese Tabelle hinzugefügt. In dieser Tabelle ist eine Spalte mit dem Datentyp AutoNumber definiert. Diese Lösung nummeriert jeden hinzugefügten Datensatz und dient dazu, dass die Ergebnisse aus verschiedenen Strategien in der hinzugefügten Reihenfolge gespeichert und angezeigt werden. Die Daten aus der Tabelle TstrBuilderShow werden wie folgt auf der Benutzeroberfläche angezeigt: Rendite aus jeweiliger Handelseinheit im Prozent Kumulative Rendite in Prozent Analysewertpapier und Strategieinformation Abbildung 8.1 Anzeige der Rendite von Aktiver-Markt-Strategie 8.2.2 Kombinierter Strategien mit Investition in Handelspausen Wenn eine Handelsstrategie um alternative Investitionen in Handelspausen erweitert wird, muss die Renditeberechnung auch dementsprechend angepasst werden. Der TInTo-StrategyBuilder bietet zwei optionale Handelspausen-Strategien „Combine with Opposite Product“ und „Combine with Cash Deposit“ für weitere Investitionen in einer Handelspause. Als Beispiel für die erweiterte Renditeberechnung dient im Folgenden die Option „Combine with Cash Deposit“. Beispiel „Combine with Cash Deposit“: Die Rendite aus der Aktiven-Markt-Strategie ergibt sich ausschließlich aus Kursgewinnen und wird auch so berechnet. Dagegen hängt die Rendite aus alternativen Investitionen in festverzinsliche Produkte von der Anlagedauer und dem gewährten Zinssatz ab. Als Ziel war vorgegeben, eine Anzeige der jeweiligen prozentualen Rendite aller einzelnen Handelseinheiten sowie des prozentualen kumulativen Gewinns nach der jeweiligen Handelseinheit aus der Aktiven-Markt-Strategie zu realisieren. Weiterhin sollte eine gesamte prozentuale Rendite für den Analysezeitraum ermittelt werden. 149 8. Bewertung von Handelsstrategien Signalberechnung (Vorhanden) BuyDate BuyClose 05.03.2008 12254,99 25.03.2008 12532,6 0 29.05.2008 12646,22 24.07.2008 11349,28 1 Info Handelseinheit: CD SellDate SellClose CD BuyDate BuyClose SellDate 05.03.2008 12254,99 25.03.2008 29.05.2008 Neu Renditeberechnung SellClose Profit(%) CMLProfit(%) 12532,6 24.07.2008 CD Due XX XX XX XX Dabei zeigt „CD“ in der Spalte Info an, dass es sich bei der jeweiligen Handelseinheit um eine alternative Investition in festverzinsliche Produkte in einer Handelspause handelt. „CD Due“ stellt die gesamte kumulative Rendite am Laufzeitende der Zinsen dar. Berechnung: Die Renditeberechnung wird in folgenden fünf Schritten vorgenommen: Schritt 1) Im Fall des Handels nach Aktiver-Markt-Strategie (CDh=0) ergibt sich die Rendite mittels Division des Kursgewinns durch den Kaufkurs. Im Fall des Handels nach Handelspausen-Strategie mit alternativer Investition (CDh=1) ermittelt sich die Rendite dadurch, dass der nominale Zinssatz mit dem Anteil der Zinstage im Jahr multipliziert wird: Schritt 2) Basierend auf der berechneten Rendite einzelner Handelseinheiten kann die kumulative Kapitalhöhe nach Abschluss der jeweiligen Handelseinheit ermittelt werden. Dabei wird zuerst nur die Rendite aus der Aktiven-Markt-Strategie (CDh=0) betrachtet: 150 8. Bewertung von Handelsstrategien ... ... Die prozentuale kumulative Rendite ergibt sich dann dadurch, dass die Gewinnhöhe in Relation zum Anfangskapital gesetzt und anschließend mit 100 multipliziert wird: Der Ertragswert aus der Handelspausen-Strategie kann nicht nach jeder einzelnen Handelseinheit erzielt werden, da die Verzinsung am Laufzeitende, also im Beispiel des verzinslichen Verrrechnungskontos, erst am Jahresende fällig ist. Schritt 3) Die Berechnung des Ertragswertes einzelner Handelseinheiten in einer Handelspause setzt die Berechnungen aus den Schritten 1 und 2 voraus. Der Ertragswert Eh wird berechnet durch die Multiplikation des angelegten Kapitals mit der jeweiligen Rendite Rh: Als angelegtes Kapital in dieser Handelseinheit der Handelspause fließt dabei ein die kumulative Kapitalhöhe im Ergebnis der vorangegangenen Handelseinheit Sh-1 aus der AktivenMarkt-Strategie. Es gilt die Logik: Handelspause folgt Aktiver-Markt-Strategie. Schritt 4) Die gesamte Kapitalhöhe am Ende des Analysezeitraumes wird mittels Addition der letzten kumulativen Kapitalhöhe aus der Aktiven-Markt-Strategie mit den summierten Ertragswerten aus der Handelspausen-Strategie ermittelt: Das berechnete Endkapital (Kend) beinhaltet das Anfangskapital sowie alle Gewinne aus der Aktiven-Markt-Strategie und der Handelspausen-Strategie, nachdem die Verzinsung fällig geworden ist. Zur Vollständigkeit: Zinseszins auf die jährliche Verzinsung des für die 151 8. Bewertung von Handelsstrategien Handelspausen verwendeten Verrechnungskontos ist in diesem Modell zur Vereinfachung nicht berücksichtigt. Die erzielte prozentuale Rendite im Analysezeitraum ergibt sich dann wie bereits zuvor dargestellt dadurch, dass der gesamte Ertragswert mit dem Anfangskapital ins Verhältnis gesetzt und mit 100 multipliziert wird: Schritt 5) Ein Sonderfall muss noch berücksichtigt werden. Sollten keine Handelssignale nach Aktiver-Markt-Strategie erzeugt worden sein, wird das Anfangskapital über den gesamten Analysezeitraum für alternative Investitionen gemäß Handelspausen-Strategie angelegt. Da aber der Ertragswert aus dieser alternativen Investition (Eh) bei der Berechnung des Endkapitals (Kend) kein Anfangskapital enthält, muss dies wie folgt berücksichtigt werden: Umsetzung: Die Berechnung der kumulativen Rendite enthält rekursive Formeln. Die dafür erforderliche rekursive Berechnung ist gemäß der bisher in TInTo verwendeten Methode implementiert worden. Das bestehende Problem rekursiver Berechnung wird im nächsten Abschnitt beschrieben. Der Grundgerüst ähnelt der im letzten Abschnitt vorgestellten Renditeberechnung und wird mittels mehrerer Aktionsabfragen durchgeführt. Auf die wiederholten Teilberechnungen wird hier nur kurz eingegangen. Diese basieren auf der ebenfalls in den Kapiteln 6 und 7 erläuterten Signalberechnung. Für die Umsetzung der Renditeberechnung wird die letzte Abfrage SBT der Signalberechnung wie folgt erweitert: 1 SELECT A.BuyDate, Iif(B.CD=0, A.BuyClose, NULL) AS BuyClose, A.SellDate, 2 3 4 5 6 7 8 Iif(B.CD=0, A.SellClose, NULL) AS SellClose, Iif(B.CD=0,(SellClose-BuyClose)/BuyClose, '" & Irate & "'/100*DateDiff('d',BuyDate,SellDate)/365) AS R, R*100 AS P, 1+R AS acmR, (acmR-1)*100 AS acmP, CD INTO SBT FROM sb2 AS A INNER JOIN sb1 AS B ON (A.SN=B.SellN) AND (A.BN=B.BuyN); ORDER BY A.BuyDate ASC; • Die Erweiterung findet nur im SELECT-Teil statt. • Die Handelskurse werden mittels einer Fallentscheidung von Iif-Klausel nur bei Handel nach Aktiver-Markt-Strategie (CD=0) übertragen (Zeile 1-2). Die Syntax von der Funktion Iif lautet: Iif(Bedingung, Wert_wenn_Wahr, Wert_wenn_Falsch) Bedingung ist der auszuwertende Ausdruck. Wert_wenn_Wahr ist der auszuliefernde Wert, wenn die angegebene Bedingung wahr ist. Wert_wenn_Falsch ist der auszuliefernde Wert, wenn die angegebene Bedingung falsch ist. 152 8. Bewertung von Handelsstrategien Die prozentuale Rendite einer einzelnen Handelseinheit wird in den Zeilen 3 und 4 ermittelt. Damit wird folgende Berechnungsformel aus Schritt 1) implementiert: Der Parameter Irate in der Zeile 4 liefert den vom Anwender eingegebenen jährlichen prozentualen Zinssatz. Die von Access angebotene Funktion DateDiff liefert die Zinstage zwischen Kaufdatum und Verkaufsdatum der jeweiligen Handelseinheit. Die Syntax der Funktion DateDiff lautet: DateDiff(Intervall, Startdatum, Enddatum) Intervall ist der Zeitintervall, mit dem die Differenz zwischen Startdatum und Enddatum berechnet werden soll. Mögliche Werte für Intervall sind h für Stunden, d für Tag, m für Monat etc. Startdatum und Enddatum sind die Datumsangaben zur Berechnung der Differenz. • Der erste Teil (1+R) in der Zeile 6 dient zur Initialisierung der rekursiven Berechnung der kumulativen Rendite. Dabei wird die Kapitalhöhe nach der ersten Handelseinheit berechnet. Die Zahl 1 wird wieder für das Anfangskapital verwendet. Der folgende Teil ((acmR-1)*100) ermittelt die prozentuale kumulative Rendite nach der ersten Handelseinheit. Zu der durch die letzte Aktionsabfrage erstellten Tabelle SBT wird noch eine zusätzliche Zeile hinzugefügt, um die erzielte gesamte Rendite am Ende der Verzinsungslaufzeit darzustellen. Dabei enthält diese Zeile eine Konstante „2“ in der Spalte CD: 1 INSERT INTO SBT(CD) VALUES(2); Analog der vorhergehenden Implementierung in Abschnitt 8.2.1 werden fortlaufende Nummern mittels COUNTER Funktion in die Tabelle SBT hinzugefügt. Diese fortlaufenden Nummern werden für die folgende rekursive Berechnung verwendet. 1 ALTER TABLE SBT ADD COLUMN NR COUNTER(1,1) 2 CONSTRAINT PrimaryKey PRIMARY KEY; Für die rekursive Berechnung der kumulativen Rendite aus der Aktiven-Markt-Strategie wird wieder die Eigenschaft der sukzessiven Abarbeitung der UPDATE-Anweisung verwendet: 1 UPDATE SBT AS A INNER JOIN SBT AS B ON A.NR-2=B.NR 2 SET 3 WHERE A.acmR = B.acmR + B.acmR*A.R, A.acmP = (B.acmR + B.acmR*A.R-1)*100 A.CD=0; • Die Daten der aktuellen Handelseinheit werden mit den Daten der vorherigen Handelseinheit aus der Aktiven-Markt-Strategie (CD=0) verknüpft (Zeile 1, 3). Dabei stehen Handelseinheiten aus Aktiver-Markt-Strategie und Handelspausen-Strategie (CD=1) immer abwechselnd in der Tabelle SBT. Durch die ON- und WHERE-Bedingungen werden hier nur die Daten aus der Aktiven-Markt-Strategie behandelt. • Der erste Teil der zweiten Zeile berechnet die vorhandene Kapitalhöhe. Durch die sukzessive Berechnung der UPDATE-Anweisung enthält die Kapitalhöhe der vorherigen Handelseinheit 153 8. Bewertung von Handelsstrategien (B.acmR) den für die Berechnung der Kapitalhöhe der aktuellen Handelseinheit (A.acmR) benötigte zuvor berechneten Wert (B.acmR). Der zweite Teil berechnet die kumulative Rendite. Die damit in SQL umgesetzten Formeln lauten wie folgt: Das Anfangskapital S0 ist durch die Zahl 1 umgesetzt. Basierend auf der schon bereits berechnete Kapitalhöhe (acmR) wird die Ertragshöhe der einzelner Handelseinheit aus der Handelspausen-Strategie (CD=1) ermittelt: 1 UPDATE SBT AS A INNER JOIN SBT AS B ON A.NR-1=B.NR 2 SET A.R=A.R*B.acmR 3 WHERE A.CD=1; Die hier realisierte Berechnungsformel lautet wie folgt: Der ermittelte Ertragswert einer einzelnen Handelseinheit wird hier durch die UPDATEAnweisung sukzessive summiert: 1 UPDATE SBT AS A INNER JOIN SBT AS B ON A.NR-2=B.NR 2 SET 3 WHERE A.R=A.R+B.R A.CD=1; Die folgende Aktionsabfrage ermittelt basierend auf den berechneten Teilergebnissen das Endkapital und die gesamte Rendite im Analysezeitraum: 1 UPDATE (SBT AS A INNER JOIN SBT AS B ON A.NR-1=B.NR) 2 INNER JOIN SBT AS C ON B.NR-1=C.NR 3 SET 4 A.acmR=Iif(B.CD=1,B.R+C.acmR,B.acmR+C.R), A.acmP=Iif(B.CD=1,(B.R+C.acmR-1)*100, (B.acmR+C.R-1)*100) 5 WHERE A.CD=2; Für die Berechnung des Endkapitals werden die bereits berechnete kumulative Kapitalhöhe (acmR) aus der Aktiven-Markt-Strategie sowie der ermittelte gesamte Ertragswert (R) aus der Handelspausen-Strategie benötigt. Diese beiden Teilergebnisse befinden sich in den beiden letzten Zeilen der Tabelle SBT. Für die Berechnung des Endkapitals wird eine Verknüpfung in der Zeile 2 benötigt. Das Endkapital im Analysezeitraum wird anschließend in die mit CD-Wert „2“ reservierte letzte Zeile geschrieben, wofür die weitere Verknüpfung in der Zeile 1 verwendet wird. Im Zuge dieser Verknüpfung wird auch die Tabelle SBT in A, B, C umbenannt. Für die Berechnung des Endkapitals Kend wird eine Fallentscheidung in Zeile 3 benötigt, um jeweils die entsprechenden Daten zu addieren: 154 8. Bewertung von Handelsstrategien Fall 1) Der Analysezeitraum endet mit einer alternativen Investition in einer Handelspause (B.CD=1) CD 0 C (Aktive-Markt-Strategie) 1 B (Handelspausen-Strategie) 2 A (Endergebnis) Das Endkapital ergibt sich dadurch, dass die bereits berechnete kumulative Kapitalhöhe aus der Aktiven-MarktStrategie (C.acmR) und der ermittelte gesamte Ertragswert aus der Handelspausen-Strategie (B.R) addiert werden: A.acmR = B.R + C.acmR Fall 2) Der Analysezeitraum endet mit dem Handel nach Aktiver-Markt-Strategie (B.CD=0) CD 1 C (Alternative Strategie) 0 B (Handelspausen-Strategie) 2 A (Endergebnis) Das Endkapital ergibt sich dadurch, dass die bereits berechnete kumulative Kapitalhöhe aus der Aktiven-MarktStrategie (B.acmR) und der ermittelte gesamte Ertragswert aus der Handelspausen-Strategie (C.R) addiert werden: A.acmR = B.acmR + C.R Dabei wird dann das Endkapital im Analysezeitraum in die mit CD-Wert „2“ reservierte letzte Zeile geschrieben. Die vierte Zeile ermittelt dann die gesamte Rendite in Prozent. Dabei wird eine analoge Fallentscheidung verwendet. Folgende Formeln aus Schritt 4 sind hier somit implementiert: Für den Sonderfall, dass nur eine Handelseinheit vorliegt (siehe Schritt 5), ist die Berechnung des Endkapitals sowie der gesamten Rendite anhand von dieser Aktionsabfrage nicht möglich. Diese Einschränkung entsteht, weil die letzte Aktionsabfrage mindestens 2 Handelseinheiten für die JOIN-Verknüpfungen benötigt. CD Nr 1 1 B oder 2 2 A (Endergebnis) CD Nr 0 1 B 2 2 A (Endergebnis) Für diesen Fall wird dann das initialisierte Handelsergebnis in der ersten Aktionsabfrage als Endergebnis übertragen: 1 UPDATE SBT AS A INNER JOIN SBT AS B ON A.NR-1=B.NR 2 SET A.acmR=B.acmR, A.acmP=B.acmP 3 WHERE A.CD=2 AND A.NR=2; 155 8. Bewertung von Handelsstrategien Mit dieser Lösung ist der im Berechnungsschritt 5 erläuterte Sonderfall anhand von initialisierten Werten berücksichtigt: Die Ergebnisse der vorausgegangenen Berechnungen (die temporäre Tabelle SBT) werden für die Anzeige in die Tabelle TstrBuilderShow hinzugefügt: 1 INSERT INTO TstrBuilderShow(Info) VALUES(getSbInfo()); 1 INSERT INTO TstrBuilderShow( Info, BuyDate, BuyClose, SellDate, SellClose, P, acmP) 2 SELECT Iif(SBT.CD=0, NULL, Iif(SBT.CD=1,' C D', ' C D Due')), 3 SBT.BuyDate, SBT.BuyClose, SBT.SellDate, SBT.SellClose, SBT.P, 4 5 FROM Iif(SBT.CD=1,NULL, SBT.acmP) SBT ; Dabei liefert die Funktion getSbInfo() in der ersten Aktionsabfrage das Symbol des Analysewertpapiers sowie die Strategieinformation. Dabei werden die Handelseinheiten aus der Handelspausen-Strategie mit „CD“ in der Spalte Info gekennzeichnet. Schließlich wird das Endergebnis mit „CD Due“ gekennzeichnet. Die zwei Iif-Funktionen in der zweiten Zeile realisieren folgende Fallentscheidung: Die Ergebnisse aus der Tabelle TstrBuilderShow werden beispielsweise wie folgt auf der Benutzeroberfläche angezeigt: Rendite aus jeweiliger Handelseineheit in Prozent Analysewertpapier und Strategieinformation Kumulative Rendite in Prozent Aktive-Markt-Strategie→ Handelspausen-Strategie→ Gesamte Rendite am Laufzeitende der Handelspausen-Strategie Optionale kombinierbare Handelspausen-Strategien Abbildung 8.2 Anzeige der Rendite von kombinierter Strategien mit Investition in Handelspausen 156 8. Bewertung von Handelsstrategien 8.3 Bestehende Fehlermöglichkeit Für die Berechnung der rekursiven Formeln für technische Indikatoren hat Christian Hübel im Rahmen seiner Arbeit (TInTo-Version-2007) eine umgehende Methode verwendet, da die von Access 2003 unterstützte Sprache SQL-92 eine rekursive Formulierung von Abfragen nicht unterstützt. Dieser Lösungsansatz wurde weiterhin in allen folgenden TInTo Aktualisierungen, auch in dieser vorliegenden Arbeit, verwendet. Im Rahmen dieser Diplomarbeit ist eine potenzielle Fehlermöglichkeit dieses Lösungsansatzes identifiziert worden. Auf Grund der geplanten Portierung von TInTo in Oracle ist jedoch entschieden worden, den Aufwand für eine Lösungskorrektur auf Basis von MS-Access nicht mehr zu betreiben. Im Folgenden werden die Fehlerursachen, Auswirkungen auf die ermittelten Berechnungsergebnisse sowie eine Korrekturmöglichkeit beschrieben. Folgende drei Berechnungen in TInTo erfordern eine rekursive Formulierung der Abfragen, d.h., für die Berechnung eines Wertes einer Formel zum aktuellen Zeitpunkt wird mindestens ein schon bereits berechneter Wert derselben Formel aus einem vergangenen Zeitpunkt benötigt. • Der MACD Indikator Rekursiv Wobei t: Fortlaufender Zeitpunkt, Ewn(t): Gewichtungsfaktor n, n1, n2 : Eingabeperiode, n1 < n2 • Der ADL Indikator Rekursiv Wobei t: Fortlaufender Zeitpunkt, CLV(t): Closing-Location-Value auf Zeitpunkt t • Kumulative Renditeberechnung Rekursiv Wobei h: Fortlaufende Nummer, Rh: Rendite aus h-ter Handelseinheit Solch rekursive Berechnungen sind in TInTo durch die UPDATE-Anweisung implementiert. Als Beispiel dient hier eine EMA-Berechnung für den MACD: UPDATE chInd AS A INNER JOIN chInd AS B ON A.n=B.n-1 SET A.v1= (A.Close-B.v1)*2/(12+1)+B.v1 ... Dabei ist bislang angenommen worden, dass die UPDATE-Anweisung sukzessiv Zeile für Zeile arbeitet. Damit würde der Zugriff auf den vorherigen EMA-Wert (B.v1) über die JOINVerknüpfung den bereits berechneten EMA-Wert (B.v1) für die Berechnung des aktuellen EMAWertes (A.v1) liefern: 157 8. Bewertung von Handelsstrategien n v1 n v1 26 XX 26 XX 27 Initialisierung Join Update n v1 26 XX 27 XX 28 Join Update n v1 26 XX 27 XX 28 XX Join 29 .. Update Abbildung 8.3 Sukzessive Aktualisierung Dabei sind in den Beispieltabellen schon berechnete Werte in Blau verdeutlicht. Es ist allerdings festzustellen, dass die UPDATE-Anweisung von SQL-92 in Access 2003 bei der Verarbeitung größerer Datenmengen oder bei aufwendigeren Berechnungen beispielsweise folgendermaßen parallel arbeitet: n v1 26 XX 27 Join Update n v1 26 XX 27 XX Join n v1 n v1 26 XX 26 XX 27 XX 27 XX 28 XX 28 XX 29 XX 28 28 29 29 29 30 30 30 .. .. .. 737 .. Update .. .. 737 .. 738 738 739 739 739 .. .. .. Update 30 .. .. Join 737 738 .. Join .. .. .. Update .. .. .. Join Update 737 738 XX Join .. 739 .. .. Parallele Aktualisierung .. .. .. Update Parallele Aktualisierung Abbildung 8.4 Parallele Aktualisierung Ab der dritte Tabelle in der Abbildung 8.4 sind parallele Aktualisierungen an zwei Stellen verdeutlicht. Die EMA-Berechnung für den MACD der Aktie Microsoft Corp. über 3 Jahre zeigt beispielsweise einen Fall paralleler Aktualisierung. Folgende Tabelle beinhaltet einen Ausschnitt der Ergebnisse aus der EMA-Berechnung: 158 8. Bewertung von Handelsstrategien UPDATE chInd AS A INNER JOIN chInd AS B ON A.n=B.n-1 SET A.v1= (A.Close-B.v1)*2/(12+1)+B.v1 ... n Close v1 734 8273,58 8724,49 735 8424,75 8678,38 (8424,75 - 8724,49) * 2/13 + 8724,49 = 8678,38 736 7997,28 8573,59 (7997,28 - 8678,38) * 2/13 + 8678,38 = 8573,59 737 7552,29 1161,89 Parallele Berechnung (7552,29 - 0) * 2/13 + 0 = 1161,89 Sukzessive Berechnung (7552,29 - 8573,59) * 2/13 + 8573,59 = 8416,472 Wenn die Aktualisierung (Update) sukzessiv zeilenweise erfolgt wäre, hätte sich als EMA-Wert in der Spalte v1 zum Zeitpunkt 737 ein Wert von 8416,472 ergeben. In der Ergebnistabelle ist allerdings zu sehen, dass ein Wert von 1161,89 ermittelt worden ist. Diese Abweichung rührt daher, dass Access in der Zeile mit dem Zeitpunkt 737 einen zusätzlichen Prozess zur Aktualisierung gestartet hat und es keinen bereits berechneten EMA-Wert des Vortages zum Zeitpunkt 736 gab. Daher ist der Nullwert für den EMA-Wert des Vortags verwendet worden und im Ergebnis ergab sich ein falscher EMA-Wert von 1161,89. Die Abbildung 8.5 zeigt, dass rekursive Formeln mittels UPDATE-Anweisung von SQL-92 in Access 2003 sowohl richtig als auch fehlerhaft berechnet werden können. Als Referenz dienen hier die Charts aus ChartDirector. Das zweite von TInTo berechnete Chart TInTo Fehlerfrei weist einen identischen Verlauf zum Referenzchart auf. Für diesen Fall ist festzustellen, dass die rekursive Berechnung mittels UPDATE-Anweisung zeilenweise sukzessiv erfolgt ist. Im Fall von parallelen Aktualisierungen zeigt das Chart wie im Fall von TInTo Fehlerhaft abnormale drastische Verlaufsänderung wie beispielsweise im November 2008. Die Abweichung des Chartverlaufes im Vergleich zu dem Bild des ChartDirector ist markiert und deutlich erkennbar. ChartDirector TInTo Fehlerfrei ChartDirector TInTo Fehlerhaft Berechnungsfehler ist aufgetreten. Abbildung 8.5 Rekursive Berechnung mittels UPDATE-Anweisung, MSFT Corp. 159 8. Bewertung von Handelsstrategien Als Ursache für diese beobachteten Abweichungen wird vermutet, dass Access 2003 parallele Aktualisierungen nur bei großen Datenmengen oder aufwendigen Berechnungen durchführt. In der Praxis sind solche Fehlberechnungen bei der Berechnungen von MACD sowie bei Berechnungen von ADL über Zeiträume von über 3 Jahren (ca. 750 Datensätze) gefunden worden. Bei der Berechnungen von ADL unter 3 Jahren sowie Renditeberechnungen, die vergleichsweise wenige Datensätze und Berechnungsaufwand benötigen, sind bei erneuten Tests keine Fehlberechnungen gefunden worden. Dennoch besteht die Möglichkeit potenzieller Fehler, da alle diese Berechnungen dieselbe Methode für rekursive Formeln verwenden. Zur Abstellung dieses Problems in Access muss eine andere umgehende Lösung für rekursive Berechnungen gefunden werden. Eine sichere Variante wäre es, die UPDATE-Anweisung mittels VBA erneut für jeden Datensatz nach und nach aufzurufen. Diese Lösung liefert sicher ein richtiges Endergebnis, wäre aber in einer Datenbanklösung nicht gewünscht , da zum Beispiel bei der Berechnung von MACD über 5 Jahren mindestens eine Anzahl von 2500 (= 250 (Datensätze pro Jahr) *5 (Zeitraum) *2 (Anzahl der benötigten EMA-Berechnungen)) UPDATE-Anweisungen wiederholt durchgeführt werden müssten. Weitere alternative Lösungswege sind nicht untersucht worden, da wie eingangs erwähnt die von Oracle unterstützte SQL schon komfortable Möglichkeiten für die Formulierung rekursiver Abfragen bietet. 8.4 Performanzanalyse Im sechsten Kapitel wurde die Performanzanalyse detailliert für jeden angewandten Optimierungsschritt der Signalberechnung dargestellt. In diesem Abschnitt 8.4.1 wird nunmehr die gesamte allgemeine Berechnungsdauer zur Bewertung einer Strategie untersucht. Diese gesamte Berechnung beinhaltet neben der Renditeberechnung auch die zu Grunde liegende Indikator- und Signalberechnung. Weiterhin wird im folgenden Abschnitt 8.4.2 die Profitabilität der im TInTo-StrategyBuilder angebotenen Handelsstrategien unter Anwendung der vorgestellten Renditeberechnung getestet. Dabei wurde der im vorangegangen Kapitel erwähnte potenzielle Berechnungsfehler bei rekursiven Formeln manuell überprüft. 8.4.1 Berechnungsdauer Um die allgemeine Recheneffizienz zu bewerten, sind 11 verschiedene Handelsstrategien mit allgemein gültigen Eingabeparametern als Stichproben verwendet worden. Die verwendeten Strategien sind dabei allgemein für mittelfristigen Handel (Anlagedauer ca. 2-3 Monate) angepasst . Als Analysewertpapier wurde der Dax (Xetra: ^GDAXI) verwendet. Als Testinstrument diente Microsoft XP SP3 auf Intel Pentium M Prozessor (1,60 GHz, 1,25GB) Hardware und über DSL 16MBit an das Internet angebunden. Gemessen wurde die Laufzeit ab dem Zeitpunkt der Betätigung des „Trade“ Button durch den Anwender bis zur Anzeige der Ergebnisse auf der Benutzeroberfläche. Dabei laufen grob folgende Berechnungen hintereinander durch: • • • • • Einlesen der Eingabeparameter Aggregieren der benötigten Datensätze Berechnen der Indikator/Signallinie Ermitteln der Handelssignale Berechnen der Rendite 160 8. Bewertung von Handelsstrategien • Anzeigen der Ergebnisse Handelsstrategien lassen sich grob wie in den vorangegangene Kapiteln erläutert in folgende drei Komplexitätsklassen unterteilen: • Elementare Strategie mit einem Indikator • Erweiterte Strategie auf Basis mehrerer Indikatoren (beide in Kombination als „Aktive-Markt-Strategie“ bezeichnet) • Kombinierte Strategie mit der Investition in den Handelspausen Der folgender Graph zeigt die durchschnittliche Berechnungsdauer unterschiedlicher Strategiekomplexitäten über verschiedenen Analysezeiträume: Elementare Strategie Erweiterte Strategie Kombinierte Strategie mit Investition in Handelspausen Stichproben 7.869 Elementare Strategien 8.000 ROC (12/-5/5) RSI (14/30/70) CCI (20/-120/120) 7.222 6.400 SMAC (50/130/100/0) SSTOCCP (21/3/3/0/0/20/80) MACDCP (12/26/9/0/0/20/80) MACD+CMF 4.800 4.820 3.296 4.510 Kombinierte Strategien mit Investition in Handelspausen RSI+Bonds (14/30/70) SMAC+Bonds (50/130/100/0) RSI+CD (14/30/70/4%) SMAC+CD (50/130/100/0/4%) 0 0 734 2.958 1.507 593 3.200 2.925 1.757 Berechnungszeit (ms) 5.328 Erweiterte Strategien 1.600 1.749 0 864 1 322 Jahr 0 1 Jahr 2 Jahre 0 3 Jahre 4 Jahre 5 Jahre Analysezeitraum Abbildung 8.6 Durchschnittliche Berechnungsdauer unterschiedlicher Strategiekomplexität ( Testbedingungen und Basisdaten18 ) Die Berechnungsdauer nimmt für längere Analysezeiträume überproportional zu. Sie beträgt unter 1 Sekunde für einen Analysezeitraum von 1 Jahr und zwischen 4 und 8 Sekunden für einen Anylsezeitraum von 5 Jahren. Wie erwartet ist die benötigte Berechnungsdauer umso länger, je höher die Strategiekomplexität ist. Die Berechnungsdauer für elementare Strategien ist messbar kürzer im Vergleich zu Strategien anderer Komplexitätsklassen. Elementare Strategien basieren auf einer starren 18 Die Testbedingungen sowie die Basisdaten für die Darstellung des Diagramms sind im Anhang 8-A aufgeführt. 161 8. Bewertung von Handelsstrategien Signallinie, welche über den ganzen Analysezeitraum konstant bleibt, und erfordern daher keine weiteren Berechnungen für diese Signallinie. In Gegensatz dazu muss für die erweiterten Strategien zusätzlich eine gleitende Signallinie ermittelt werden. Erweiterte Strategien mit mehreren Indikatoren benötigen darüber hinaus auch noch die Berechnung weiterer Indikatoren wie im Beispiel MACD+CMF. Diese steigende Komplexität trägt wesentlich zur Erhöhung der benötigten Berechnungsdauer bei. Für die Bewertung einer kombinierten Strategie mit der Investition in den Handelspausen sind wiederum zusätzliche Berechnungen von Signalen sowie der Rendite der alternativen Investitionen in Handelspausen erforderlich. Der resultierende Unterschied in der Berechnungsdauer im Vergleich zu der Berechnungsdauer der Aktiven-Markt-Strategie ist jedoch nicht wesentlich. Es ist daher zu vermuten, dass die Signalberechnungen sowie die Renditeberechnungen für die alternativen Investitionen in den Handelspausen sehr effizient vorgehen und im Vergleich zu der Berechnung der Indikatoren und der Signallinie einen geringeren Aufwand erfordern. Das folgende Diagramm zeigt den Anteil der Berechnungsdauer des Indikators und gegebenenfalls dessen Signallinie im Vergleich zur gesamten Berechnungsdauer der Strategiebewertung über unterschiedliche Analysezeiträume. Getestet wurden die zwei Strategien RSI und SMAC. Indikator Berechnung (RSI) Gesamte Berechnung (Strategie: RSI) Indikator- und Signallinieberechnung (Strategie: SMAC) Gesamte Berechnung (Strategie: SMAC) 15.000 9.000 6.000 312 218 1 Jahr 828 734 2 Jahre 1.687 2.875 4.390 3.000 1.609 3 Jahre 0 2.765 4 Jahre Berechnungszeit (ms) 12.000 4.281 5 Jahre Analysezeitraum Abbildung 8.7 Berechnungsdauer von Teilberechnung verglichen mit gesamter Berechnungsdauer ( Testbedingungen und Basisdaten19 ) Aus dieser Messung ist ersichtlich, dass die Berechnung des Indikators und der Signallinie den hauptsächlichen Berechnungsaufwand verursacht. Der Unterschied zwischen dieser Teilberechnung für den Indikator und die Signallinie und der gesamten Berechnungsdauer ist sehr gering und bleibt auch für längere Analysezeiträumen unwesentlich. 19 Die Testbedingungen sowie die Basisdaten für die Darstellung des Diagramms sind im Anhang 8-A aufgeführt. 162 8. Bewertung von Handelsstrategien Dieser vergleichbar große Aufwand für die Indikator- und die Signallinienberechnung beruht darauf, dass die Anzahl der zu betrachtenden Datensätze durch die Verknüpfung der Daten für die gleitende Durchschnittsbildung je nach Berechnungsperiode um ein Mehrfaches expandiert. Im Vergleich dazu benötigt die Berechnung aller Handelssignale lediglich eine Verknüpfung für den Vergleich zwischen dem aktuellen und dem vorherigen Tag, um den Signalpunkt (Kreuzungspunkt) zu verfolgen. Weitere Signalberechnungen verarbeiten noch kleinere Datenmengen, da die Datensätze dabei erst nur auf Handelstage und anschließend auf für die Strategiebewertung relevante Handelstage gefiltert werden. Ein zusätzlicher Gewinn an Effizienz bei den Signalberechnungen ist durch die im Kapitel 6 vorgestellten Optimierungsschritte erreicht worden. Die abschließend folgende Renditeberechnung wird dann schließlich nur auf Basis der ausgefilterten minimalen Datensätze durchgeführt. Die folgende Darstellung zeigt die Untersuchungsergebnisse zur durchschnittlichen gesamten Berechnungsdauer und deren Standardabweichung für 11 verschiedene Strategien über verschiedene Analysezeiträume: Durschschnitt Standard Abweichung 6.718 Strategie Berechnungsdauer (Stichproben) über 5 Jahren (ms) 7.000 5.600 4.200 4.569 2.740 1.423 0 571 2.800 3.069 1.877 1.400 988 00 399 1 Jahr 1 Jahr 2 Jahre 3 Jahre 0 4 Jahre 5 Jahre Berechnungszeit (ms) 4.497 ROC 125 RSI 4390 CCI 9015 SMAC 11296 SSTOCCP 12593 MACDCP 265 MACDCP+CMF 4734 RSI+OP 4390 SMAC+OP 1134 RSI+CD 4400 SMAC+CD 11343 Analysezeitraum Abbildung 8.8 Durchschnittliche Berechnungsdauer und Standard Abweichung ( Testbedingungen und Basisdaten20 ) Die durchschnittliche Berechnungsdauer nimmt für längere Analysezeiträume überproportional zu und erreicht bis über 6 Sekunden für den Analysezeitraum von 5 Jahren. Es ist dabei auffällig, dass die Berechnungsdauer verschiedener Strategien sich wesentlich unterscheidet. Die Standardabweichung ist hoch in Relation zum Durchschnitt und nimmt für längere Analysezeiträume ebenfalls überproportional zu. Die elementare Strategie ROC benötigt die kürzeste Berechnungsdauer mit 125 ms für den Analysezeitraum über 5 Jahre. Die erweiterte Strategie SSTOCP hingegen braucht über 12 Sekunden für den gleiche Analysezeitraum. Die 20 Die Testbedingungen sowie die Basisdaten für die Darstellung des Diagramms sind im Anhang 8-A aufgeführt. 163 8. Bewertung von Handelsstrategien MACDCP Berechnung benötigt wiederum eine relativ kurze Rechenzeit, da die erforderliche rekursive Berechnung mittels Aktionsabfrage (UPDATE-Anweisungen) durchgeführt wird. Ist ein Anwender bereit, 12 Sekunden für die Bewertung einer Handelsstrategie zu warten? Um die Berechnungen zu beschleunigen wäre zum einen die Erhöhung der Hardwareleistung sicher eine mögliche Lösung. Die im Test verwendete Hardware aus Pentium M mit 1,6 GHzTaktung ist für komplexe Analysen sicher nicht mehr als state-of-the-art anzunehmen. Zum anderen sind weitere Optimierungen an den aufwändigsten Teilberechnungen für die Indikatoren sowie die Signallinien möglich. Vorschläge hierfür sind am Ende von Kapitel 6 aufgeführt. Eine interaktive Anzeige der geschätzten Rechendauer wäre für den Anwender, insbesondere bei aufwändigen erweiterten oder kombinierten Handelsstrategien, eine wünschenswerte Ergänzung. 8.4.2 Profitabilitätstest von Handelsstrategien In diesem Abschnitt wird die Profitabilität der in dieser Arbeit implementierten Strategien beispielhaft vorgestellt. Um die Testergebnisse allgemein vergleichbar und abschätzbar zu halten, ist der am Markt gehandelte Deutsche Aktienindex Dax als Analysewertpapier verwendet worden. Dieser Index spiegelt den Kursverlauf der 30 wichtigsten deutschen Unternehmen wider und dient als Leitindex für den deutschen Aktienmarkt. Da der Dax als Index einen allgemein abgerundeten Kursverlauf aufweist, ist ein weiterer Rentabilitätstest der Handelsstrategien mit Aktien eines einzelnen Unternehmens durchgeführt worden. Als Beispiel hierfür wurde die Aktie der Firma Microsoft, Anbieter des DBMS Access, verwendet. Bezüglich dieser Auswahl sei allgemein angemerkt, dass bewusst Analysewertpapiere mit einem für den Analysezeitraum typischen Kursverlauf ausgewählt wurden. Aktien mit einem außergewöhnlichen Wertzuwachs wie zum Beispiel der Firma Apple oder mit im Jahr 2008 krisenfesten Verlauf wie im Beispiel der Firma McDonalds sind für einen allgemein gültigen Strategietest als nicht genügend repräsentativ eingeschätzt worden und wurden nicht ausgewählt. Als Testsoftware wurde das im Rahmen dieser Arbeit entwickelte Modul TInToStrategyBuilder verwendet. Beispiel: DAX (XETRA:^GDAXI ) Das gewählte Testpapier des Index DAX weist für die vergangenen 5 Jahre einen relativ stetig ansteigenden Kursverlauf auf. Typisch für diesen Zeitraum sind die Kursgewinne bis in die Jahre 2006 und 2007 sowie die rasanten Kursstürze ab Mitte des Jahres 2008. Das folgende Diagramm zeigt die kumulative Rendite in Prozent für die ausgewählten Handelsstrategien über fünf Jahre von 2004 bis einschließlich 2008: 164 8. Bewertung von Handelsstrategien MACDCP SMAC CCI RSI AOS 80 68 60 40 33 40 14 34 20 2004 2005 Kumulative Rendite (%) 68 71 59 ROC 0 2006 2007 2008 Jahr Strategie Anzahl der Anzahl der Max. Gewinn Max. Verlust Höchster Punkt von Gesamte (Eingabeparametern) Gewinnhandel Verlusthandel pro Handel pro Handel kumulativer Rendite Rendite (%) (%) (%) (%) MACDCP (12/26/9/0/0/0/0) 11 1 7,56 -25,1 56,55 17,25 SMAC(50/130/100/0) 2 0 32,49 - 68,22 68,22 CCI(20/-120/120) 18 4 6,49 -18,54 71,07 34,37 RSI(14/30/70) 11 3 9,9 -28,96 60,26 9,8 AOS(50/0/0) 7 5 14,8 -7,43 63,57 33,6 ROC(12/-5/5) 11 5 18,91 -21,27 78,29 33,81 Abbildung 8.9 Strategie Analyse mit dem Analysewertpapier DAX ( Testbedingungen und Basisdaten21 ) Dabei ist zu erkennen, dass von 2004 bis 2007 die kumulative Rendite aller Teststrategien allmählich zunimmt. Bis zum Jahr 2007 erreichen alle Handelsstrategien einen kumulativen Gewinn zwischen 60% und 70 % nach vierjährigem Handel. Im Vergleich ist dabei die Performanz der Strategien CCI und ROC überdurchschnittlich gut. Nach dem höchsten Punkt der kumulativen Rendite, welcher in 2007 erreicht ist, führen die Kursverluste des DAX im Jahr 2008 auch zu drastischen Handelsverlusten der verglichenen Strategien. Die teils rekordverdächtigen Verluste bis zu -20% in 2008 sind in Tabelle 8.9 einzeln pro Strategie aufgeschlüsselt dargestellt. Eine wichtige Erkenntnis aus dem Krisenjahr 2008 und eine mögliche Verbesserungsidee für die weitere Entwicklung von Handelsstrategien wäre es dann, als Anleger eine Festlegung von Risikogrenzen pro Handel vorzugeben. Mit einer Risikogrenze von 5% pro Handel hätten 21 Die Testbedingungen sowie die Basisdaten für die Darstellung des Diagramms sind im Anhang 8-B aufgeführt. 165 8. Bewertung von Handelsstrategien beispielswese alle Teststrategien mindestens um die 50% kumulative Rendite über 5 Jahre, trotz der Kursabstürze im Jahr 2008, geliefert. Die Strategie SMAC hat in den Analysezeitraum fallenden Märkten ihre Stärke als eine Trendfolgeindikator-basierende Strategie ausspielen können. Am Ende des Analysezeitraumes Ende 2008 behält diese Strategie weiterhin ihren höchsten Punkt und erleidet keinen Verlust an kumulativer Rendite. Alle anderen Teststrategien haben Oszillatoreigenschaften, welche im überverkauften Markt, im Beispiel im Jahr 2008, Kaufsignale liefern. Dabei wird eine baldige Trendumkehr prognostiziert und vorausgesetzt, was aber im Jahr 2008 nicht eingetreten ist. Die bärische Marktsituation bei überverkauftem Markt blieb weiter bestehen. Die Strategie SMA dagegen ist trendfolgend und liefert tendenziell in bärischer Marktsituation keine Kaufsignale. Darüber hinaus sind mittels der Eingabefunktion (Trade Crossover Buy) im TInToStrategyBuilder Fehlsignale in trendlosen Märkten im Wesentlichen eliminiert. Als weitere Besonderheit der Strategie SMAC gilt, dass diese wenige Handelssignale liefert und im Analysezeitraum zu keinem Verlusthandel geführt hat. Das folgende Diagramm zeigt die kumulative Rendite für die Strategie SMAC sowie für zwei weitere kombinierte Strategien von SMAC mit alternativen Investitionen in den Handelspausen. Als Analysezeitraum wurden wieder die Jahre 2004 bis 2008 verwendet: 100 SMAC (50/130/100/0) SMAC + Opposite Product SMAC + Cash Deposit (4%) 82 33 3326 00 33 33 0 0 -5 75 68 50 45 25 14 0 01.01.04 07.12.04 29.06.06 Kumulative Rendite (%) 68 68 0 100 -25 11.10.06 25.09.07 31.12.08 Handelsdatum Abbildung 8.10 SMAC und ihre kombinierte Strategien mit Investition in Handelspause ( Testbedingungen und Basisdaten22 ) Die Strategie SMAC liefert wenige Signale dem längerfristigem Trend folgend. Im Analysezeitraum über 5 Jahre erzeugt diese Strategie lediglich 4 Handelssignale. Daher resultiert SMAC in besonders langen Handelspausen, wenn wie in 2004 und 2008 der Markt sich über längere Perioden seitwärts bewegt bzw. fällt. Durch alternative Investitionen in festverzinsliche Produkte mit einem Zinssatz von 4% p.a während der Handelspausen erzielt die Strategie SMAC+Cash Deposit eine Rendite von 82% 22 Die Testbedingungen sowie die Basisdaten für die Darstellung des Diagramms sind im Anhang 8-B aufgeführt. 166 8. Bewertung von Handelsstrategien über 5 Jahre. Mit der kombinierten Investition in Handelspausen in ein Produkt, dessen Kurs den DAX-Kurs gegenläufig abbildet, erzielt die Strategie SMAC+Opposite Product bis zu 100% Rendite. Dabei gilt zu beachten, dass diese Strategie besonders hohen Gewinn im fallenden Markt in 2008 geliefert hat. Beispiel: Microsoft Corp. (MSFT) Im Vergleich zu einem Index wie dem DAX entwickelt sich der Kurs von Microsoft volatiler. In den Jahren 2004 bis 2006 weist der Kurs eine seitwärts Tendenz auf, gefolgt von einer positiven Entwicklung in 2007 und einem stark negativen Verlauf in 2008. Das folgende Diagramm zeigt die kumulative Rendite in Prozent für die ausgewählten Handelsstrategien über die fünf Jahre von 2004 bis 2008: MACDCP SMAC CCI RSI AOS SSTOCP 90 81 52 54 40 31 23 12 36 37 27 4 18 -3 2004 0 2005 Kumulative Rendite (%) 72 -18 2006 2007 2008 Jahr Anzahl der Anzahl der Max. Gewinn Max. Verlust Höchster Punkt von Gesamte Gewinnhandel Verlusthandel pro Handel pro Handel kumulativer Rendite Rendite (%) (%) (%) (%) MACDCP (12/26/9/0/0/-0,3/0,3) 5 2 17,08 -29,76 81,46 27,44 SMAC(12/26/0,2/0) 12 6 24,18 -6,37 55,87 36,7 CCI(20/-180/180) 9 1 9,51 -25,51 44,8 7,85 RSI(21/30/70) 7 3 12,7 -30,81 36,57 -5,52 AOS(50/0/0) 14 6 25,68 -11,38 47,81 35,1 SSTOCCP (12/-5/5/0/0/10/90) 6 3 30,02 -31,65 41,74 -3,11 Abbildung 8.11 Strategie Analyse mit dem Testwertpapier MSFT ( Testbedingungen und Basisdaten23) 23 Die Testbedingungen sowie die Basisdaten für die Darstellung des Diagramms sind im Anhang 8-C aufgeführt. 167 8. Bewertung von Handelsstrategien Die mit den verschiedenen Strategien über den gesamten Analysezeitraum erzielten Renditen sind durchwachsen. Mit der positiven Kursentwicklung im Jahr 2007 erzielen alle Strategien auch positive Ergebnisse mit sehr hohen Gewinnraten. Im Gegensatz dazu machen im Krisenjahr 2008 alle Strategien wiederum Verluste. Die Verlustrate pro Handel liegt dabei zwischen -6 % bis -32%. Es ist wieder feststellbar, dass eine Festlegung von Risikogrenzen die gesamte Rendite im Analysezeitraum deutlich erhöhen würde. Auch beweist die Strategie SMAC wieder ihre trendfolgende und verlustmindernde Fähigkeit im fallenden Markt in 2008. Im Ergebnis liefert SMAC eine gesamte Rendite von 37% über 5 Jahre. Eine weitere auffällige Strategie ist die MACDCP, welche eine Rendite von 81% über die 4 Jahre von 2004 bis 2007 erzielt hat. Da die MACDCP mit ihrer Oszillatoreigenschaft auf schwankende und trendschwache Kursverläufe sehr schnell reagieren kann, steigt ihr Gewinn bis 2007 deutlich stärker als bei der Strategie SMAC. Das folgende Diagramm zeigt die Entwicklung der kumulativen Rendite der Strategie MACDCP und ihrer kombinierten Strategien mit alternativen Investitionen in den Handelspausen für die letzten fünf Jahre von 2004 bis einschließlich 2008: MACDCP (12/26/9/0/0/-0,3/0,3) MACDCP + Opposite Product MACDCP + Cash Deposit (4%) 199 200 116 98 103 110 81 49 0 9 0 0 12 2004 25 12 22 10 32 10 2005 23 100 83 75 22 150 40 23 55 40 81 55 50 Kumulative Rendite (%) 153 40 0 2006 2007 2008 Jahr Abbildung 8.12 MACDCP und ihre kombinierte Strategien mit alternativer Investition in Handelspausen ( Testbedingungen und Basisdaten24 ) Alle Strategien zeigen für die MSFT-Aktie positive Gewinnentwicklungen bis 2007 gefolgt von einem stark negativen Verlauf in 2008. Die Strategie MACDCP bietet eine Rendite von 27% über 5 Jahre. Durch alternative Investitionen in den Handelspausen war hier eine zusätzliche Rendite zu erzielen. Die kombinierte Strategie MACDCP + Cash Deposit erreicht eine gesamte Rendite von 40% während die Strategie MACDCP+Opposite Product eine Rendite von 110% bis zum Ende des Analysezeitraumes erzielt. Die MACDCP + Opposite Product nutzt die fallenden Kursphasen in 2006 und 2008 aus und erreicht fast 200% Rendite am Anfang 2008. 24 Die Testbedingungen sowie die Basisdaten für die Darstellung des Diagramms sind im Anhang 8-C aufgeführt. 168 8. Bewertung von Handelsstrategien Besonderes Potential zeigen die in dieser Arbeit entworfenen Handelsstrategien wie SMAC und MACDCP sowie kombinierte Strategien mit Investition in Handelspause mit auffällig positiven Handelsergebnissen. Unter Verwendung des in den TInTo-StrategyBuilder implementierten Moduls zur Renditeberechnung ist es möglich, die kumulative Rendite sowie die Gewinn- oder Verlustentwicklung einer Strategie exakt zu verfolgen. Damit kann der Anwender eine geeignete Handelsstrategie auswählen, Stärken und Schwächen der Strategie erkennen und weiter analysieren sowie die Strategie durch Eingabefunktionen für Handelskriterien weiter verbessern. Für die zukünftige Entwicklung der Strategiebewertung sollten darüber hinaus weitere Funktionen in TInTo umgesetzt werden, welche zum Beispiel aus Kombinationen mehrere Wertpapiere die erzielte Rendite zusammenfassend berechnen und die Ergebnisse graphisch darstellen kann. 169 9 Zusammenfassung und Ausblick Das Ziel dieser Arbeit bestand darin, Handelsstrategien für Wertpapiere basierend auf technischen Indikatoren zu entwerfen und auf Profitabilität zu optimieren. Die so formulierten Strategien sollten regelbasiert unter Verwendung von SQL Skripten implementiert und für kürzest mögliche Berechnungszeiten optimiert werden. Die Implementierung sollte ebenfalls über eine Funktion zur Profitabilitätsbewertung der gewählten Strategien verfügen. Im Rahmen dieser Arbeit wurden mehrere profitable Handelsstrategien entwickelt, welche sowohl aus einzelnen Indikatoren als auch aus Kombinationen von Indikatoren bestehen können wie im Beispiel „MACDCP plus CMF (Moving Average Convergance Divergance Crossover mit Chaikin Money Flow). Im Ergebnis ausführlicher Tests am Beispiel des „Deutschen Aktienindex DAX“ über einen Zeitraum von 5 Jahren von 2004 bis 2008 wurde festgestellt, dass die Strategie „SMAC(Simple Moving Average Crossover)“ in trendstarken Phasen besonders profitabel ist. Einstiegskurse werden ebenso gut signalisiert wie Trendwechsel hin zu einem wieder fallenden Markt mit der Möglichkeit zum rechtzeitigen Ausstieg. Für trendschwache Phasen oder Seitwärtsphasen ist, nach vorgenommenen Tests die Handelsstrategie „MACDCP“ am Erfolg versprechendsten. In der Beispielanalyse für den Kurs der Aktie von „Microsoft Corp. (MSFT)“ für den Zeitraum von 2004 bis 2007 wurde ein Handelsergebnis von 81% Rendite erzielt. In einer weiteren Kombination des aktiven Wertpapierhandels mit einer alternativen Investition in Handelspausen sind weitere Steigerungen der Gewinnmöglichkeiten erzielt worden. Für das Beispiel des Wertpapiers der Aktie von „Microsoft Corp.“ beträgt die Gewinnsteigerung mit der Strategie „Combine with Opposite Product“ gegenüber keiner Investition in Handelspausen 72 Prozentpunkte. „Opposite Product“ ist in diesem Fall ein Derivatefonds, welcher einen invertierten Kursverlauf gegenüber dem jeweiligen Aktienkurs aufweist. Mit Blick auf die erforderlichen Berechnungszeiten für die Analyse der historischen Wertpapierdaten sind in mehreren Optimierungsschritten erhebliche Effizienzsteigerungen erzielt worden. Benötigte die Berechnung einer „CCI-basierten Strategie“ für die so genannte „Naive Implementierung“ noch 3956 Sekunden für das Wertpapier Dow Jones Industrial Average, so konnte die Rechenzeit durch die Implementierung „Materialisierter Sichten“ auf 251 Millisekunden verkürzt werden. Allerdings mussten einige Unzulänglichkeiten von SQL 92 171 9. Zusammenfassung und Ausblick in MS Access umgangen werden, zum Beispiel die nicht als Funktion angebotenen rekursiven Formeln sowie die nicht vorhandenen materialisierten Sichten. Beide Funktionalitäten werden für die Implementierung und Profitabilitätsbewertung von Handelsstrategien benötigt und mussten im Rahmen dieser Arbeit aufwändig simuliert werden. Dennoch kann die Eignung von MS Access für die regelbasierte Implementierung generell bejaht werden. Das im Ergebnis dieser Arbeit erstellte Modul TInTo-StrategyBuilder bietet dem Anwender vielseitige Analysemöglichkeiten und kann sowohl für die Bewertung bestehender Strategien als auch für Strategieentwurf verwendet werden. Ein ganz entscheidender Vorteil besteht dabei darin, dass sich Strategien an historischen oder auch aktuellen Kursen prüfen lassen, ohne eigentlich in die entsprechenden Papiere zu investieren. Dazu können Anwender den Ertragswert aus dem Handel mit verschiedenen Wertpapieren für unterschiedliche Zeiträume und unter Verwendung verschiedener Strategien berechnen lassen. Zur Auswahl stehen im Modul StrategyBuilder sowohl elementare Strategien, welche auf jeweils nur einem technischen Indikator basieren, als auch acht (8) erweiterte Strategien, welche jeweils durch weitere, ebenfalls durch das Modul analysierte Handelskriterien unterstützt werden. Als besondere Option sind mögliche Investitionen in Handelspausen in den StrategyBuilder integriert worden. Wie eingangs erwähnt bieten diese Investitionen zusätzliche Renditemöglichkeiten in ansonsten ungünstigen Marktverhältnissen. Um dem Anwender eine maximale Flexibilität in der Analyse von Handelsstrategien zu bieten, wurden darüber hinaus sämtliche Indikatoren- und StrategienParameter sowohl mit sinnvollen Standardwerten voreingestellt als auch komplett konfigurierbar gestaltet. Damit erhält der Anwender sowohl die Möglichkeit, Analysen anhand dieser „Standard- Strategiewerte“ vorzunehmen als auch Tests mit verschiedenen eigenen Parametern durchzuführen. Je nach Marktsituation, Wertpapier und persönlichen Risikopräferenzen lassen sich damit optimale Renditen erzielen. Die Rentabilitäten der so eingestellten Handelsstrategien können in dem eingebauten Formular Trades untereinander verglichen und vom Anwender weiter analysiert werden. Schliesslich kann die so überprüfte Handelsstrategie unter Berücksichtigung erkannter etwaiger Stärken und Schwächen im realen Handel Verwendung finden. Ausführliche Darstellungen finden sich in den verschiedenen Kapiteln dieser Arbeit entlang folgender Themenschwerpunkte: In Kapitel 1 wurden die Motivation und die Aufgabenstellung dieser Arbeit dargestellt sowie die Gliederung der Kapitel und die Aufteilung der Themenschwerpunkte dargelegt. Ziel der zu erstellenden Arbeit ist die Entwicklung profitabler Handelsstrategien auf Basis technischer Indikatoren und eine effiziente regelbasierte Implementierung in TInTo. Im darauf Folgenden Kapitel 2 wurden die theoretischen Grundlagen zu relationalen Datenbanken, ein Standard welcher für TInTo Verwendung findet, beschrieben. In diesem Zusammenhang wurde auch die Frage gestellt, ob relationale Datenbanken für die Verwaltung komplexer Anwendungsobjekte geeignet sind und komfortabel genutzt werden können. Für die zukünftig weiter ansteigende Komplexität von TInTo wäre Objektdatenbank ein denkbares Datenbankmodell, wofür jedoch die noch fehlenden Standards zur Datenverwaltung als eine Einschränkung noch zu beachten sind. Im Weiteren wurden in Kapitel 2 wesentliche Eigenschaften der für die Implementierung von StrategyBuilder extensiv verwendeten Datenbanksprache SQL kurz erläutert und die Möglichkeiten aber auch die Nachteile von Sichtexpandierungen erwähnt. Eine Vorstellung der Grundfunktionen des Datenbank Management Systems (Database Management System - DBMS) Microsoft Access und der integrierten Programmsprache „VBA“ sowie ein kurzer Vergleich von MS Access mit anderen DBMS schliessen das Kapitel ab. 172 9. Zusammenfassung und Ausblick Eine Einführung in die Grundlagen der Wertpapieranalyse wurde in Kapitel 3 gegeben. Verschiedene Analysemethoden wie die fundamentale Analyse, die Chartanalyse und die Sentimentanlyse wurden beschrieben sowie deren vielfältige Umsetzungsmöglichkeiten in TInTo vorgeschlagen. Im Detail wurden die technische Analyse und insbesondere die vielfältigen technischen Indikatoren vorgestellt, welche in TInTo Verwendung finden. Philosophische oder rationale Prämissen der technischen Analyse wurden erläutert vor dem Hintergrund, dass auch die Analyse fundamentaler Daten und rationales Verhalten der Marktteilnehmer Voraussetzungen für die Anwendbarkeit der technischen Analyse sind. Eine Auswahl technischer Indikatoren mit ihren unterschiedlichen Eigenschaften wurden beispielhaft präsentiert und besonders auf ihre verschiedenen Interpretationsmöglichkeiten, einschließlich zahlreicher Charts, und Handelsempfehlungen hin untersucht. In Kapitel 4 wurden die Entwürfe der in dieser Arbeit erstellten Handelsstrategien mit ihren spezifischen Eigenschaften beispielhaft dargestellt. Neben elementaren Strategien, deren Handelssignale auf den Handelsempfehlungen eines einzelnen technischen Indikators basieren, wurden auch erweiterte Handelsstrategien unter Verwendung zusätzlicher Indikatoren entworfen. Dabei wurde insbesondere Nachgewiesen, dass sich positiv ergänzende Indikatoren zu einer Steigerung des Handelsergebnisses (Rendite) führen können. Detaillierte Analyseergebnisse sowie die entsprechenden Berechnungsformeln wurden dargestellt und Schritt für Schritt erläutert. Für den spezifischen Fall von Handelspausen wurden geeignete Investitionen zur weiteren Renditesteigerung, zum Beispiel Investition in festverzinsliche Papiere, identifiziert. Im Ergebnis wurde beispielhaft demonstriert, dass eine Strategie aus Investition in den aktiven Markt kombiniert mit Investitionen in Handelspausen ein unter den meisten Marktbedingungen attraktives Handelsergebnis (Rendite) liefert. In Kapitel 5 wurde das bestehende System TInTo mit seinen grundlegenden Funktionen vorgestellt. Im Detail wurden die an der Berechnungen der technischen Indikatoren vorgenommenen Aktualisierungen beispielhaft erläutert. Für 14 der vorhandenen Indikatoren wurden die Berechnungen auf den aktuellen Stand angepasst. Die nachfolgende Implementierung der entworfenen elementaren Strategien wurde in Kapitel 6 beschrieben. Die in Kapitel 4 entworfene Handelslogik wurde regelbasiert modelliert und die zu Grunde liegenden Annahmen für die Modellierung erläutert. Weiterhin wurden die Berechnungen aller Handelsaktionen für die Strategiebewertung beschrieben, welche auf Grund ihrer Abhängigkeit von mehreren Basisberechnungen von Indikatoren und Handelssignalen durch mehrstufigen Schachtelungen von Sichtdefinitionen implementiert sind. Im Weiteren wurden die vorgenommenen Optimierungsschritte, wie zum Bespiel Verbesserungen der Effizienz der Indikatorberechnung, Aufteilung der Sichtdefinitionen, effektiver Einsatz von Gruppierungen der Datensätze und die Materialisierung der Sichten im Detail beschrieben. Für eine Teststrategie konnte im Ergebnis die Berechnungsdauer auf nur 251 Millisekunden reduziert werden. In Kapitel 7 wurde es beispielhaft dargestellt, wie erweiterte Strategien sowie kombinierte Strategien mit Investition in Handelspausen regelbasiert modelliert und implementiert wurden. Im Detail wurden die zusätzlich erforderlichen Berechnungen für zum Beispiel eine gleitende Signallinie, für die Berücksichtigung zusätzlicher Handelskriterien oder zusätzlicher Indikatoren erläutert. Weiterhin wurde die Signalberechnung der Handelspausen-Strategien beschrieben, welche von Signalen der Aktiven-Markt-Strategie abgeleitet werden und die Berücksichtigung von Sonderfällen notwendig machen. 173 9. Zusammenfassung und Ausblick Die abschliessende Modellierung und Implementierung der Strategiebewertung (Profitabilität) wurde in Kapitel 8 beschrieben. Die jeweils unterschiedlichen Implementierungswege für die Bewertung der Aktiven-Markt-Strategie sowie der kombinierten Strategien mit der Investition in Handelspausen sind beispielhaft vorgestellt. Im Detail wurden die Ergebnisse zweier Optimierungsziele dieser Arbeit vorgestellt, einerseits die Handelsergebnisse der wesentlichen in dieser Arbeit entwickelten Handelsstrategien und andererseits die Effizienzsteigerungen im Laufe der verschiedenen regelbasierten Implementierungen. Dabei ist festgestellt worden, dass die Berechnungsdauer für verschiedene Strategien sehr unterschiedlich ist und der wesentliche Aufwand auf die Berechnungen der Indikatoren und gegebenenfalls der Signallinien entfällt. Die Berechnung der Handelssignale sowie die Renditeberechnung konnten im Ergebnis der vorgenommenen Optimierungen deutlich in ihrer Effizienz gesteigert werden. Auf noch bestehende Fehlermöglichkeiten bei der Durchführung rekursiver Berechnungen ist abschliessend hingewiesen worden, welche allerdings im Zuge der geplanten Portierung aufgehoben werden können. Zusammenfassend lässt sich feststellen, dass Handelsstrategien basierend auf technischen Indikatoren jährliche Renditen im zweistelligen Prozentbereich realisieren können. Die hierfür empfohlenen und in TInTo integrierten Indikatoren und Strategien lassen sich durch wählbare Parameter in weiten Bereichen individuellen Anforderungen anpassen. Darüber hinaus lässt sich ebenfalls feststellen, dass sich diese Handelsstrategien regelbasiert in MS Access implementieren lassen. Einige eingangs erwähnte Funktionen sind in SQL 92 nicht verfügbar und müssen simuliert werden. Im Ergebnis konnten jedoch Berechnungszeiten in einem für Anwender durchaus akzeptablen Rahmen von wenigen Sekunden für komplexe Strategien und längere Analysezeiträume realisiert werden. In zukünftigen Weiterentwicklungen der implementierten Handelsstrategien können unter Anderem die in Kapitel 8 vorgeschlagenen festen Risikogrenzen sowie die in Kapitel 4 erwähnte Strategie unter Verwendung adaptiver Divergenzanalyse weiter untersucht werden. Mit Blick auf die technische Weiterentwicklung kann eine Portierung auf Oracle helfen, die in Access notwendigen Simulationen der rekursiven Berechnungen und der materialisierten Sichten zu überwinden sowie weitere Effizienzsteigerungen zu erzielen. Bei steigender Komplexität der Anwendung kann gegebenenfalls eine objektorientierte Datenbank zur Anwendung kommen. Aus Benutzersicht wären parallel ablaufende Bewertungen verschiedener Strategieoptionen und für verschiedene Wertpapiere wünschenswert und könnten in einer zukünftigen Version von TInTo umgesetzt werden. Zur Aussagekraft technischer Analysen wurde an verschiedenen Stellen dieser Arbeit der Hinweis gegeben, dass diese davon abhängig sind, dass historische und aktuelle Wertpapierkurse die Entwicklung fundamentaler Daten widerspiegeln. Mit zunehmender Popularität des computergestützten Wertpapierhandels ist gegebenenfalls zu befürchten, dass die notwendige Analyse fundamentaler Daten in den Hintergrund gerät und die überwiegend trendfolgenden Handelsentscheidungen mittels technischer Analyse zu extremen Marktsituationen so genannten „Blasen“ führen können. Das Ziel eines automatischen Handelssystems sollte deshalb kombiniert werden mit dem Ziel, in diesem System auch ausgewählte Fundamentaldaten in die Bewertungen der Handelsstrategien mit einfliessen lassen zu können. 174 Anhang 1- A: Begriffe Im Folgenden werden wesentliche, in dieser Arbeit Verwendung findende Begriffe erläutert. Da einige spezifische Begriffe in der Literatur oder in der Praxis nicht oder nicht eindeutig definiert sind, werden diese in der Reihenfolge ihrer Verwendung in den folgenden Kapiteln hier eingeführt: Technische Indikatoren (Indikatoren) sind Instrumente der Wertpapieranalyse, welche eine bestimmte Entwicklung eines Wertpapierkurses mittels mathematischer Berechnungen auf der Basis von Kurs- und/oder Volumendaten anzeigen sollen. Diese Indikatoren werden in der Regel graphisch in Charts dargestellt. Trendfolger ist ein technischer Indikator, welcher die vorherrschende Trendrichtung (Aufwärtstrend/Abwärtstrend/Seitwärtstrend) des Kursverlaufs aufzeigt, dies allerdings in der Regel zeitlich verzögert, wenn sich der neue Trend bereits etabliert hat. Oszillatoren sind technische Indikatoren, welche überkaufte oder überverkaufte Marktsituationen anzeigen, woraus sich in der Regel baldige Trendwechsel prognostizieren lassen. Fortlaufende Zeitpunkte sind chronologisch nummerierte Handelstage für die Wertpapieranalyse auf Basis voller Handelstage. Eingabeperiode (EP) ist die vom Anwender gewählte Anzahl von Handelstagen für die Berechnung eines Indikatorwertes. Die Verwendung dieses Wertes in der Berechnung richtet sich nach der spezifischen jeweiligen Indikatordefinition. Berechnungsperiode (BP) ist die definierte Anzahl der fortlaufenden Zeitpunkte (Handelstage) für die Berechnung eines jeweiligen Indikatorwertes. Der Zusammenhang zwischen Berechnungsperiode und Eingabeperiode ist abhängig von der jeweiligen Indikatordefinition. SMA (Simple Moving Average) ist ein Trendfolger, welcher als Durchschnitt der, typischerweise, Schlusskurse einer gegebenen Berechnungsperiode berechnet wird. Der SMA lässt sich durch Verbinden berechneter Einzel-SMA-Werte beispielsweise wie folgt in Charts darstellen: 3-Tage-SMA (Berechnungsperiode: 3) Durchschnitt der Schlusskurse aus den Zeitpunkten 75-77 72 73 74 75 76 73 74 75 74 75 75 76 76 77 78 77 175 Fortlaufender Zeitpunkt Anhang Vollkauf/Vollverkauf ist Kauf/Verkauf von Wertpapieren mit dem gesamten zu investierenden Kapitals. Teilkauf/Teilverkauf ist Kauf/Verkauf mit einem Teil des zu investierenden Kapitals. Relevante Handelssignale (Relevante Signale) sind Handelssignale, welche zur Handelsaktionen führen, also für den Anleger relevant sind. Signalpaar ist ein Paar aus einem Kaufsignal und dem dazugehörigen folgenden Verkaufssignal. Signalpartner ist fallweise entweder ein Kaufsignal zu einem nachfolgenden Verkaufssignal bzw. ein Verkaufssignal zu einem vorangegangen Kaufsignal. Handelseinheit ist eine Kaufaktion und die dazugehörige folgende Verkaufsaktion. Starre Signallinie ist eine Hilfslinie für technische Indikatoren zur Generierung von Handelssignalen. Starre Signallinien haben einen über fortlaufende Zeitpunkte hinweg konstanten Wert. Gleitende Signallinie ist eine Hilfslinie für technische Indikatoren zur Generierung von Handelssignalen und werden mittels Durchschnittsberechnung (SMA) aus Schlusskursen oder Indikatorwerten für jeden fortlaufenden Zeitpunkt ermittelt. Indikatorlinie Indikatorlinie Starre Signallinie Gleitende Signallinie Verkauf Verkauf Kauf Kauf Kauf Kauf Fortlaufender Zeitpunkt Fortlaufender Zeitpunkt Analysezeitraum ist die Zeitspanne, für welche der Anwender die Kursentwicklung eines Wertpapiers und die Rentabilität einer Handelsstrategie bewerten möchte. Handelsstrategie sind Strategien für Investitionen, welche dem Anwender Kaufsignale und Verkaufssignale liefern. Ziel ist in der Regel, eine maximale Rendite zu erzielen. Elementare Strategie ist eine Handelsstrategie, welche basierend auf einem einzelnen technischen Indikator und dessen starrer Signallinie Kaufsignale und Verkaufssignale liefert. Erweiterte Strategie ist eine Handelsstrategie, welche basierend auf einem technischen Indikator oder mehreren technischen Indikatoren, deren gleitenden Signallinien und/oder weiteren Handelskriterien Kaufsignale und Verkaufssignale liefert. Aktive-Markt-Strategie ist ein Oberbegriff für elementare Strategie und erweiterte Strategie und bezeichnet jene Handelsstrategien, in welchen der Anleger aktiv über den Erwerb oder die Veräußerung von Wertpapieren am Handel teilnimmt. 176 Anhang Handelspausen-Strategie ist eine Investitionsoption, welche in den Handelspausen der Aktiven-Markt-Strategie Anwendung finden kann. In der Regel investiert der Anleger in den Handelspausen in alternative Anlagen wie Festgeld oder „parkt“ verfügbares Kapital zum Beispiel auf einem verzinsten Verrechnungskonto. Kombinierte Strategie mit Handelspausen ist eine zusammengesetzte Strategie aus der Aktiven-Markt-Strategie und der Handelspausen-Strategie. Aktive-Markt-Strategie Elementare Strategie Erweiterte Strategie Indikatorlinie + Handelspausen-Strategie → Kombinierte Strategie mit Investition in Handelspause Signallinien Verkauf Kauf Verkauf Kauf Verkauf Kauf Fortlaufender Zeitpunkt Kauf Verkauf HP Kauf Verkauf Kauf HP Kauf Verkauf Verkauf Kauf HP kauf Verkauf Verkauf HP : Analyse Zeitraum : Aktive-Markt-Strategie (HP: Handelspause) kauf Verkauf : Handelspausen-Strategie : Kombinierte Strategie mit Investition in Handelspause 1-B: TInTo-StrategyBuilder-Anleitung Im Folgenden werden drei Anwendungsfälle vorgestellt, um einen Überblick über die grundlegenden Funktionen des implementierten Moduls TInTo-StrategyBuilder zu geben. Die Charts von Wertpapierkursen und technischen Indikatoren können im TInTo-Hauptfenster angezeigt werden. Detaillierte weitere Funktionen für die Darstellungen von Charts sind im Abschnitt 5.1 erläutert. Mit dem TInTo-StrategyBuilder können Sie Handelsstrategien basierend auf technischen Indikatoren bewerten, detailliert analysieren und anhand von Eingabefunktionen optimieren. Klicken Sie auf „StrategyBuilder“ im TInTo-Hauptfenster, um das Programmmodul zu verwenden. 177 Anhang Wählen Sie ein zu analysierendes Wertpapier und einen Analysezeitraum. Vergleichen Sie die Rentabilität verschiedener Strategien und analysieren Sie die Strategien ihrer Merkmale. Analysieren Sie die erzeugten Handelssignale. Wählen Sie ihre Strategie und verwenden Sie Eingabefunktionen, um ihre Strategie zu optimieren. Bewerten von Aktiven-Markt-Strategien 1. Wählen Sie ein zu analysierendes Wertpapier und geben Sie einen Analysezeitraum ein. 2. Wählen Sie eine Aktive-Markt-Strategie aus. Automatisch werden dabei alle Eingabeparameter mit den gängigsten Standardparametern eingeblendet. ● Aktive-Markt-Strategien sind nach der Eigenschaft ihrer verwendeten Indikatoren wie folgt sortiert: Trendfolger Oszillatoren Volumenindikatoren Zusammengesetzte Indikatoren ● Elementare Strategien enthalten identische Namen wie die technischen Indikatoren auf welchen sie basieren. ● Erweiterte Strategien sind nach den Namen der verwendeten technischen Indikatoren und den Eigenschaften der Strategien benannt. 3. Kicken Sie auf „Trade“, um die Rentabilität der gewählten Strategie zu überprüfen. 4. Wiederholen Sie Schritte 1 bis 3 und vergleichen Sie die Rentabilität der verschiedenen Strategien, bis Sie eine überzeugende Strategie gefunden haben. 178 Anhang Vergleichen Sie die gesamte Rendite verschiedener Strategien. Analysewertpapier und Strategieinformation Handelsdaten Rendite aus jeweiliger Handelseinheit Kumulative Rendite 5. Klicken Sie auf „Clear All“, um alle Handelsergebnisse zu löschen. Bewerten von kombinierten Strategien mit Investition in Handelspausen und weitere Optionen 1. Wählen Sie ein zu analysierendes Wertpapier und geben Sie den Analysezeitraum ein. 2. Wählen Sie eine Aktive-Markt-Strategie aus. 3. Kombinieren Sie ihre Aktive-Markt-Strategie mit einer Handelspausen-Strategie, um zusätzlichen Gewinn in den Handelspausen zu erzielen: • Wählen Sie die Option „Combine With Opposite Product“, um ihre Investition in Handelspausen mit Produkten, deren Kurs gegenläufig zu dem Kurs ihrer Aktiven-MartStrategie verläuft, zu erweitern. • Wählen Sie Option „Combine With Cash Deposit“, um ihre Investition in Handelspausen um festverzinsliche Produkte zu erweitern. Handelsergebnisse aus Aktiver-Markt-Strategie Handelsergebnisse aus Handelspausen-Strategie „Opposite Product“ sind mit „B“ verdeutlicht. Investitionsergebnisse aus Handelspausen-Strategie „Cash Deposit“ sind mit „CD“ verdeutlicht. 4. Kicken Sie auf „Trade“, um die Rentabilität der erstellten Strategie zu überprüfen. 5. Wiederholen Sie Schritte 1 bis 4 und vergleichen Sie die Rentabilität verschiedener Strategien, bis Sie ihre überzeugende Strategie gefunden haben. 179 Anhang 6. Vergleichen Sie noch die Rentabilität ihrer Strategie mit folgenden einfachen Investitionen und optimieren Sie ihre Strategie: • Wählen Sie „Profit Without Intermediate Trade“ und klicken Sie „Go“, um die Rentabilität aus einem alternativen Handel aus einmaliger Kaufaktion am Anfang des Analysezeitraumes und einmaliger Verkaufsaktion am Ende des Analysezeitraumes zu überprüfen. • Wählen Sie „Cash Deposit Interest“ und klicken Sie „Go“, um die Rentabilität au einer Investition in festverzinsliche Produkte über den gesamten Analysezeitraum zu überprüfen. Handelsergebnis aus der Strategie „Profit Without Intermediate Trade“ ist mit „Without“ verdeutlicht. Rendite aus der Investition „Cash Deposit Interest“ ist mit „C.D. Interest“ verdeutlicht. Analysieren und entwerfen von eigenen Strategien 1. 2. 3. 4. Wählen Sie ein zu analysierendes Wertpapier und geben Sie einen Analysezeitraum ein. Wählen Sie eine Aktive-Markt-Strategie aus. Kicken Sie auf „Trade“, um die Rentabilität ihrer gewählten Strategie zu überprüfen. Klicken Sie auf „Signal“, um alle mittels ihrer Strategie erzeugten Signale abzufragen. 5. Verwenden Sie die Eingabefunktionen „Periode Parameter“ für die Indikator-/SignallinieBerechnung, um schnellreagierende oder trägere Signale zu erzeugen. 6. Verwenden Sie Ihre Strategie mit weiteren Eingabefunktionen „Trade Signal“, um die Empfindlichkeit der Signalgenerierung zu beeinflussen und um die vorherrschenden Marktsituationen zu berücksichtigen: • Wenn Sie eine elementare Strategie für eine Aktive-Markt-Strategie gewählt haben, verwenden Sie „Trade Signal“ wie folgt: - Setzen Sie einen kleineren Wert für „Crossover Buy“ und einen größeren Wert für „Crossover Sell“ als die eingeblendeten Standardparameter ein, um beispielsweise schnell-reagierende Signale oder mehr Signale zu erzeugen. - Setzen Sie einen größeren Wert für „Crossover Buy“ und einen kleineren Wert für „Crossover Sell“ als die eingeblendeten Standardparameter ein, um beispielsweise schwache Signale zu eliminieren oder Signale nur in extremen Marktsituationen zu erzeugen. 180 Anhang Indikator-Linie Signallinien Verkauf Verkauf Verkauf Der Wert für „Crossover Sell“ bestimmt den Signallinienwert für Verkaufssignale. Der Wert für „Crossover Buy“ bestimmt den Signallinienwert für Kaufsignale. Kauf Fortlaufender Zeitpunkt Kauf • Wenn Sie eine erweiterte Strategie für eine Aktive-Markt-Stratgie gewählt haben, verwenden Sie „Trade Signal“ wie folgt: - Setzen Sie einen größeren Wert für „Crossover Buy“ und/oder einen kleineren Wert für „Crossover Sell“ als die eingeblendeten Standardparameter von null ein, um beispielsweise schwache Signale in der Seitwärtsphase oder zu frühe Signale zu eliminieren. - Verwenden einen kleineren Wert für „Range Buy“ und/oder einen größeren Wert für „Range Sell“ als die eingeblendeten Standardparameter von null ein, um beispielsweise Signale nur in extremen Marktsituationen zu erzeugen und um Fehlsignale in einer trendlosen Phase zu eliminieren. (Eingabefunktion „Range Buy/Sell“ ist nur für die mit Stern markierten Strategien anwendbar.) Indikator-Linie Signallinie Verkauf Verkauf Mittelpunktslinie Verkauf Verkauf Der Wert für „Range Buy“ bestimmt den gültigen Bereich für Kaufsignale. Kauf Kauf Kauf Der Wert für „Range Sell“ bestimmt den gültigen Bereich für Verkaufssignale. Kauf Kauf Fortlaufender Zeitpunkt Die Werte für „Crossover Buy“ und „Crossover Sell“ bestimmen die Differenz aus Indikatorwert und jeweiligem Signalliniewert, welche ein Signal erzeugt. In der Abbildung oben sind Signale mittels Schnittpunkt „0“ für „Crossover Buy“ und „Crossover Sell“ erzeugt. (Vielfältige weitere Möglichkeiten der Eingabefunktion „Trade Signal“ können je nach gewählter Strategie und deren Basisindikatoren unterschiedlich eingesetzt werden.) 7. Kicken Sie auf „Trade“, um die Rentabilität der erstellten Strategie zu überprüfen. 8. Wiederholen Sie die Schritte 1 bis 5 und vergleichen Sie die Rentabilität verschiedener Strategien, bis Sie Ihre überzeugende Strategie gefunden haben. Hinweis: • Die Rendite der Aktiven-Markt-Strategie ist ausschließlich aus den Kursgewinnen berechnet. Dividenden sowie Gebühren werden nicht zugerechnet bzw. abgezogen. • Die jeweiligen Handelsaktionen folgen nur dem Ansatz des Vollkauf bzw. Vollverkauf. • Die Zinsberechnung für die Handelspausen-Strategie „Cash Deposit“ richtet sich nach englischer Zinsmethode (act/365). Dabei werden die erzielten Zinserträge am Ende des Analysezeitraumes addiert und Zinseszins nicht berücksichtigt. 181 Anhang 4-A Testsoftware: TInTo-StrategyBuilder Analysezeitraum: 01.01.2005-31.12.2007 Analysewertpapier: Dow Jones Indutrial Average In (^DJI) • Strategie: SMAC (Parameter: 23/130) + ADX (Parameter: 14/14), SMAC (Parameter: 23/130) Handelstag SMAC + ADX SMAC BuyDate SellDate Profit cmlProfit Profit cmlProfit 29.07.2005 12.10.2005 -3,98 -3,98 -3,98 -3,98 18.11.2005 19.06.2006 1,63 -2,42 1,63 -2,42 18.08.2006 29.03.2007 8,5 5,88 8,5 5,88 04.04.2007 16.11.2007 - 5,88 5,16 11,34 • Strategie: SMAC (Parameter: 23/130) + CMF (Parameter: 20) Handelstag SMAC + ADX BuyDate SellDate Profit cmlProfit 29.07.2005 12.10.2005 -3,98 -3,98 18.11.2005 19.06.2006 1,63 -2,42 18.08.2006 16.11.2007 15,77 12,97 4-B Testsoftware: TInTo-StrategyBuilder Darstellung von Parametern (Par1/ Par2/ Tradecrossover Buy/ Tradecrossover Sell) Hierbei werden nur die Handelsergebnisse des jeweiligen Jahres dargestellt. GDax(^GDAXI) Microsoft Corp.(MSFT) SMAC (50/130/100/0) SMAC (50/130/0/0) SMAC (12/26/0,2/0) SMAC (12/26/0/0) 2004 SellDate - - 23.11.2004 30.12.2004 2004 cmlProfit - - -2,99 -3,83 2005 SellDate - - 15.12.2005 15.12.2005 2005 cmlProfit - - 4,44 6,17 2006 SellDate 29.06.2006 29.06.2006 12.12.2006 07.02.2007 2006 cmlProfit 32,49 44,81 31,26 30,36 2007 SellDate 25.09.2007 25.09.2007 26.11.2007 14.01.2008 2007 cmlProfit 68,22 88,75 51,66 48,84 2008 SellDate - 24.01.2008 08.09.2008 24.12.2008 2008 cmlProfit 68,22 62,31 36,69 26,27 182 Anhang 4-C Testsoftware: TInTo-StrategyBuilder Analysewertpapier: Microsoft Corp. (MSFT) Strategie Par 1 Par 2 Par 3 Trade Crossover: Trade Crossover: Trade Range: Buy Sell Buy Trade Range: Sell MACDCP + 12 26 9 0 0 -0,3 0,3 MACDCP - 12 26 9 0 0 0 0 Hierbei werden nur die Handelsergebnisse des jeweiligen Jahres dargestellt. 2004 SellDate MACDCP + MACDCP - 06.07.2004 15.10.2004 2004 cmlProfit 11,95 6,02 2005 SellDate 29.11.2005 29.11.2005 2005 cmlProfit 23,39 10,24 2006 SellDate 01.09.2006 01.09.2006 2006 cmlProfit 39,91 24,9 2007 SellDate 09.11.2007 09.11.2007 2007 cmlProfit 81,46 58,86 6-A CCI-basierte Handelsstrategie Signalwerten: -100 für Kaufsignal, 100 für Verkaufssignal Berechnungsperiode: 20 Handelstage Analysewertpapier: Dow Jones Industrial Average Analysezeitraum: 01.01 2008 - 31.12.2008 (253 Datensätze) Anzahl der zu betrachtenden Datensätze: 272 Testinstrument: Microsoft XP SP3, Intel Pentium M Prozessor (1,60 GHz, 1,25GB), DSL 16MBit Besonderheit: 1) Abfrage sbInd holt die benötigte Daten aus der Tabelle tmpCCI0. 2) Die Berechnungsdauer einer Abfrage beinhaltet neben der Durchführung der Abfrage bis auf Speicherung der Endergebnisse. 6-B Analysewertpapier: Dow Jones Industrial Average Analysezeitraum: 01.01 2008 - 31.12.2008 (253 Datensätze) Testinstrument: Microsoft XP SP3, Intel Pentium M Prozessor (1,60 GHz, 1,25GB), DSL 16MBit Besonderheit: 1) Abfrage sbInd bei der CCI-basierte Strategieholt die benötigte Daten aus der Tabelle tmpCCI0. 2) Die Berechnungsdauer einer Abfrage beinhaltet neben der Durchführung der Abfrage bis auf Speicherung der Endergebnisse. Strategie Signalwert Berechnungsperiode Anzahl der Benötigten Datensätze CCI-basierte -100, 100 20 272 RSI-basierte 30, 70 14 267 CMF-Basierte 0, 0 21 273 183 Anhang Strategie IndikatorBerechnung Optimierte IndikatorBerechnung Signalberechnung der Strategiebewertung OHNE optimierter Indikatorberechnung Signalberechnung für Strategiebewertung MIT optimierter Indikatorberechnung CCI-basierte 0,2812 0,2312 1,0156 0,8441 RSI-basierte 0,2556 0,2187 0,9062 0,8437 CMF-Basierte 0,2656 0,2512 0,9843 0,8906 6-C Analysewertpapier: Dow Jones Industrial Average Testinstrument: Microsoft XP SP3, Intel Pentium M Prozessor (1,60 GHz, 1,25GB), DSL 16MBit Stichproben: CCI- , RSI-, CMF-basierte Handelsstrategie Besonderheit: 1) Abfrage sbInd bei der CCI-basierte Strategieholt die benötigte Daten aus der Tabelle tmpCCI0. 2) Die Berechnungsdauer einer Abfrage beinhaltet neben der Durchführung der Abfrage bis auf Speicherung der Endergebnisse. Strategie Signalwert Berechnungsperiode CCI-basierte -100, 100 20 RSI-basierte 30, 70 14 CMF-Basierte 0, 0 21 Analysezeitraum (Jahr) Benötige Datensätze CCI-Basis Berechnungsdauer (Sec) RSI-Basis CMF-Basis CCI-Basis RSI-Basis CMF-Basis 1 (1.1.08 - 31.12.08) 272 267 273 0,8441 0,8437 0,8906 2 (1.1.07 - 31.12.08) 523 518 524 2,9062 2,875 3,0156 3 (1.1.06 - 31.12.08) 774 769 775 6,2343 6,0937 6,3906 4 (1.1.05 - 31.12.08) 1026 1021 1027 10,8281 10,8125 11,0312 5 (1.1.04 - 31.12.08) 1278 1273 1279 16,5625 16,5156 16,9531 Analysezeitraum (Jahr) Durchschnitt der Berechnungsdauer Standard Abweichung der Berechnungsdauer 1 (1.1.08 - 31.12.08) 0,8594 0,0269 2 (1.1.07 - 31.12.08) 2,9322 0,0738 3 (1.1.06 - 31.12.08) 6,2395 0,1485 4 (1.1.05 - 31.12.08) 10,8906 0,122 5 (1.1.04 - 31.12.08) 16,677 0,2401 6-D Analysewertpapier: Dow Jones Industrial Average Testinstrument: Microsoft XP SP3, Intel Pentium M Prozessor (1,60 GHz, 1,25GB), DSL 16MBit Stichproben: CCI- , RSI-, CMF-basierte Handelsstrategie (Die Parametern für jeweilige Strategien sind identisch wie die in 6-C angegebenen Parametern der jeweiligen Strategie) Besonderheit: 1) Abfrage sbInd bei der CCI-basierte Strategieholt die benötigte Daten aus der Tabelle tmpCCI0. 2) Die Berechnungsdauer einer Abfrage beinhaltet neben der Durchführung der Abfrage bis auf Speicherung der Endergebnisse. 184 Anhang Analysezeitraum (Jahr) Berechnungsdauer(Sec) Durchschnittliche Berechnungsdauer CCI-Basis RSI-Basis CMF-Basis 1 (1.1.08 - 31.12.08) 0,2516 0,2343 0,2656 0,2505 2 (1.1.07 - 31.12.08) 0,7812 0,7656 1,0781 0,8749 3 (1.1.06 - 31.12.08) 1,625 1,5625 1,7031 1,6302 4 (1.1.05 - 31.12.08) 2,8281 2,7187 2,8906 2,8124 5 (1.1.04 - 31.12.08) 4,3125 4,1093 4,3906 4,2708 8-A Analysewertpapier : Dax(^GDAXI) Testsoftware: TInTo-StrategyBuilder Testinstrument: Microsoft XP SP3, Intel Pentium M Prozessor (1,60 GHz, 1,25GB), DSL 16MBit Messdauer: Begin: Klick des „Trade“ Button auf der Benutzeroberfläche durch den Anwender Ende: Anzeige des Handelsergebnisses auf der Benutzeroberfläche. - Stichproben Handelsstrategien Strategie Par 1 Par 2 Par 3 ROC 12 - - Trade Trade Trade Trade Crossover: Buy Crossover: Sell Range: Buy Range: Sell -5 Zinssatz % 5 - - - RSI 14 - - 30 70 - - - CCI 20 - - -120 120 - - - SMAC 50 130 - 100 0 - - - SSTOCCP 21 3 3 0 0 20 80 - MACDCP 12 26 9 0 0 0 0 - MACDCP+CMF - - - - - - - - RSI+OP 14 - - 30 70 - - - SMAC+OP 50 130 - 100 0 - - - RSI+CD 14 - - 30 70 - - 4 SMAC+CD 50 130 - 100 0 - - 4 Berechnungsdauer (Millisekunde) 1 Jahr (2008) 2 Jahre (2007-2008) 3 Jahre (2006-2008) 4 Jahre (2005-2008) 5 (2004-2008) ROC 93 93 109 109 125 RSI 312 828 1687 2875 4390 CCI 562 1671 3453 5890 9015 SMAC 1125 2640 4875 7734 11296 SSTOCCP 703 2218 4703 8156 12593 MACDCP 140 171 203 234 265 MACDCP+CMF 406 1000 1921 3156 4734 RSI+OP 328 843 1703 2875 4390 SMAC+OP 1140 2656 4875 7765 11343 RSI+CD 328 859 1734 2906 4400 SMAC+CD 1140 2671 4875 7765 11343 Durchschnitt 571 1423 2740 4497 6718 Standard Abweichung 399 988 1877 3069 4569 185 Anhang Durchschnittliche Berechnungsdauer (Millisekunde) 1 Jahr (2008) 2 Jahre (2007-2008) 3 Jahre (2006-2008) 4 Jahre (2005-2008) 5 Jahre (2004-2008) Elementare Strategie 322 864 1749 2958 4510 Erweiterte Strategie 593 1507 2925 4820 7222 Kombinierte Strategie im Handelspause 743 1757 3296 5328 7869 Berechnungsdauer (Millisekunde) 1 Jahr (2008) 2 Jahre (2007-2008) 3 Jahre (2006-2008) 4 Jahre (2005-2008) 5 Jahre (2004-2008) 218 734 1609 2765 4281 Indikatorberechnung (RSI) Gesamte Berechnung (Strategie: RSI) 312 828 1687 2875 4390 Indikator/Signallinieberechnung (SMAC) 1046 2578 4750 7671 11178 Gesamte Berechnung (Strategie: SMAC) 1125 2640 4875 7734 11296 8-B Analysewertpapier: Dax(^GDAXI) Testsoftware: TInTo-StrategyBuilder Strategie Par 1 Par 2 Par 3 MACDCP 12 26 9 SMAC 50 130 - CCI 20 - - Trade Crossover: Trade Crossover: Trade Range: Buy Sell Buy 0 Trade Range: Sell 0 0 0 100 0 - - -120 120 - - RSI 14 - - 30 70 - - AOS 50 - - 0 0 - - ROC 12 - - -5 5 - - MACDCP SMAC CCI RSI AOS ROC 24.09.2004 - 04.11.2004 22.11.2004 27.04.2004 15.11.2004 2004 cmlProfit 5,96 - 14,35 15,4 1,45 17,77 2005 SellDate 14.12.2005 - 16.11.2005 09.12.2005 08.11.2005 16.11.2005 2005 cmlProfit 21,62 - 39,58 34,62 22,1 30,61 2004 SellDate 2006 SellDate 06.09.2006 29.06.2006 19.12.2006 05.07.2006 17.05.2006 20.12.2006 2006 cmlProfit 28,68 32,5 59,42 39,25 34,71 54,03 2007 SellDate 19.12.2007 25.09.2007 12.12.2007 13.12.2007 27.11.2007 06.12.2007 2007 cmlProfit 54,44 68,22 71,07 60,26 55,02 78,29 2008 SellDate 30.12.2008 - 11.12.2008 30.12.2008 30.12.2008 11.12.2008 2008 cmlProfit 17,25 68,22 34,37 9,81 33,61 33,82 186 Anhang Handelstag SMAC SMAC + OP SMAC + CD(4%) BuyDate SellDate Profit cmlProfit Profit cmlProfit Profit cmlProfit 02.01.2004 07.12.2004 - - -4,83 -4,83 4,66 - 07.12.2004 29.06.2006 32,5 32,5 32,5 26,09 32,5 32,5 29.06.2006 11.10.2006 - 32,5 -9,63 13,95 1,43 32,5 11.10.2006 25.09.2007 26,96 68,22 26,96 44,67 26,96 68,22 25.09.2007 30.12.2008 - 68,22 38,09 99,78 6,33 68,22 CD Due - - - - - 81,98 8-C Analysewertpapier: Microsoft Corp.(MSFT) Testsoftware: TInTo-StrategyBuilder Strategie Par 1 Par 2 Par 3 Trade Crossover: Buy Trade Crossover: Trade Range: Trade Range: Sell Buy Sell MACDCP 12 26 9 0 0 -0,3 0,3 SMAC 12 26 - 0,2 0 - - CCI 20 - - -180 180 - - RSI 21 - - 30 70 - - AOS 25 - - 0 0 - - SSTOCP 21 3 3 0 0 10 90 MACDCP SMAC CCI RSI AOS SSTOCCP 2004 SellDate 06.07.2004 23.11.2004 28.04.2004 08.07.2004 15.11.2004 10.11.2004 2004 cmlProfit 11,95 -2,99 4,65 8,86 5,79 10,88 2005 SellDate 29.11.2005 15.12.2005 04.11.2005 06.12.2005 19.12.2005 09.11.2005 2005 cmlProfit 23,39 4,44 7,26 26,25 13,41 11,83 2006 SellDate 01.09.2006 12.12.2006 23.08.2006 16.08.2006 28.04.2006 07.07.2006 2006 cmlProfit 39,91 31,26 22,77 16,18 3,4 -2,92 2007 SellDate 09.11.2007 26.11.2007 23.07.2007 27.12.2007 03.12.2007 05.11.2007 2007 cmlProfit 81,46 51,66 27,55 36,57 47,81 33,61 2008 SellDate 31.12.2008 08.09.2008 31.12.2008 31.12.2008 31.12.2008 31.12.2008 2008 cmlProfit 27,44 36,69 7,85 -5,52 35,1 -3,11 Handelstag MACDCP Profit MACDCP + OP cmlProfit Profit SellDate 02.01.2004 26.03.2004 - - 8,82 8,82 0,92 - 26.03.2004 06.07.2004 11,95 11,95 11,95 21,81 11,95 11,95 06.07.2004 06.12.2004 - 11,95 2,46 24,81 1,68 11,95 06.12.2004 16.08.2005 -2,16 9,53 -2,16 22,12 -2,16 9,53 16.08.2005 18.10.2005 - 9,53 8,12 32,03 0,69 9,53 18.10.2005 29.11.2005 12,66 23,39 12,66 48,74 12,66 23,39 29.11.2005 23.05.2006 - 23,39 17,67 75,02 1,92 23,39 23.05.2006 01.09.2006 13,38 39,91 13,38 98,44 13,38 39,91 01.09.2006 19.03.2007 - 39,91 -7,7 83,16 2,18 39,91 19.03.2007 18.05.2007 10,78 54,99 10,78 102,9 10,78 54,99 187 cmlProfit MACDCP + CD(4%) BuyDate Profit cmlProfit Anhang 18.05.2007 24.08.2007 - 54,99 6,55 116,2 1,07 54,99 24.08.2007 09.11.2007 17,08 81,46 17,08 153,12 17,08 81,46 09.11.2007 22.02.2008 - 81,46 17,94 198,52 1,15 81,46 22.02.2008 31.12.2008 -29,77 27,43 -29,77 109,65 -29,77 27,43 CD Due 40,16 9-A Die beiliegende CD-ROM enthält folgenden Dateien: • TInTo_2009.mdb: Die Datenbankdatei TInTo. • DA_SoheeShin: Diese Diplomarbeit als PDF-Datei. 188 Literaturverzeichnis [ADT08] The New York Times Company About.com: DayTrading, New York, 2008. http://daytrading.about.com [BörV08] TM Börsenverlag AG.: Börsenwissen, Rosenheim, 2008 http://www.börsenverlag.de [Cod70] Codd, Edgar F.: A Relational Model of Data for Large Shared Data Banks. In: Communications of the ACM, New York, 1970 [CR08] Aktienratgeber Chart und Rat GbR: Lexikon: Chatanalyse Aktienanalyse, 2008 http://www.chartundrat.de [CT06] Junghwan Kim: Charttechnik, Ire Media, Korea, 2006. (김정환: 차트의 기술, 이레미디어, 경기도 고양시 대한민국, 2006) [CW08] IDG Business Media GMBH: Computerzeitschrift Computerwoche: Datenbanken, München 2008 http://www.computerwoche.de [FA06] Timothy P. Vick: How to Pick Stocks Like Warren Buffet: Profiting from the Bargin Hunting Strategies of the World‘s Greatest Value Investor, Mcgraw Hill Audio, Auflage März 2004 [ForR08] ForexRealm: Forex technical Indicators, 2008 http://www.forexrealm.com [Gep05] Geppert, Alexander: Ein regelbasierter Ansatz zur Modellierung der technischen Analyse von Wertpapierkursen. Diplomarbeit, Rheinische Friedlich-WilhelmsUniversität Bonn, 2005 [Gra34] Graham, Benjamin: Security Analysis: The Classic 1934 Edition, Mcgraw-Hill Professional, Auflage: 6th. ed. 2008 [Han07] Hahn, Nargis: Entwurf und Implementierung einer webbasierten Version des TInTo-Systems. Diplomarbeit, Rheinische Friedlich-WilhelmsUniversität Bonn, 2007 [HM08r] Hochschule der Medien Stuttgart Fakultät Information und Kommunication: Relationale Datenbank, 2008 http://www.v.hdm-stuttgart.de/ [Hüb07] Hübel, Christian: TInTo - Ein datenbankgestütztes Werkzeug zur regelbasierten Wertpapier Analyse. Diplomarbeit, Rheinische Friedlich-Wilhelms-Universität Bonn, 2007 [ITW08] ITWissen: Das große Online-Lexikon für Informationstechnologie, 2008 http://www.itwissen.info 189 Literaturverzsichnis [Man07] Manthey, Rainer: Folien zur Vorlesung Informationssysteme. Rheinische FriedlichWilhelms-Universität Bonn, Institut for Informatik III, 2007 [Mur96] Murphy, John J.: The Visual Investor: How to Spot Market Trands. John Wiley & Sons, Inc. USA, 1996 [Mur99] Murphy, John J.: Technical Analysis of the financial Markets. New York Institute of Finance, USA, 1999 [NYSE08] NYSE Euronext Inc. : NYSE Group Volume Records, 2008 http://www.nyxdata.com [OV08] OnVista Media GmbH. Onvista: Wertpapieranalyse, Köln, 2008 http://www.onvista.de [SCharts08] StockCharts.com, Inc.: Free stock charts and market analysis for online Investors: Chart School, Redmond WA, 2008 http://www.StockCharts.com [Sch07] Schüller, Gereon: Änderungspropagierung zur regelbasierten Analyse von Finanz-Datenströmen in TInTo. Diplomarbeit, Rheinische Friedlich-WilhelmsUniversität Bonn, Institut for Informatik III, 2007 [TSO08] Tradesignal GmbH: Tradesignalonline Financial Charts: Lexikon, Bremen, 2008 http://www.tradesignalonline.com [Wik08] Wikimedia Founndation Inc.: Wikipedia, Die freie Enzyklopedia, San Francisco, USA, 2008 http://de.wikipedia.org [Wik08r] Wikimedia Founndation Inc.: Wikipedia, Die freie Enzyklopedia: Relationale Datenbank, San Francisco, USA, 2008. http://de.wikipedia.org [YH08f] Yahoo! Inc.: Yahoo! Finance, Finance Search, Sunnyvale CA USA, 2008. http://finance.yahoo.com [ZNet08] CBS Interactive GmbH, ZDNet.de: IT-Business, München, 2008. http://www.ZDNet.de [ZinB08] Thomas Gottfried, Zinsen-berechnen.de: Zinsmethode, Heidelberg, 2008 http://www.zinsen-berechnen.de 190 Erklärung Hiermit erkläre ich, dass ich diese Diplomarbeit selbstständig durchgeführt, keine anderen als die angegebenen Quellen und Hilfsmittel benutzt sowie Zitate als solche kenntlich gemacht zu haben. Bonn, den 26 März 2009 ________________________________________________ Herzlichen Dank für Ihr Feedback. Ihre So Hee Shin E-mail: [email protected] 191