Rheinische Friedrich-Wilhelms-Universität Bonn Institut für Informatik III Nargis Hahn Entwurf und Implementierung einer webbasierten Version des TInTo-Systems zur regelbasierten Wertpapieranalyse 27. Dezember 2007 Diplomarbeit Erstgutachter: Prof. Dr. Rainer Manthey Erklärung Hiermit erkläre ich, Nargis Hahn, diese Diplomarbeit selbständig verfasst und keine anderen als die angegebenen Quellen und Hilfsmittel benutzt sowie Zitate als solche kenntlich gemacht zu haben. Bonn, den 27. Dezember 2007 Dankwort An dieser Stelle möchte ich mich recht herzlich bei allen Personen bedanken, die diese Arbeit unterstützt haben. Zunächst gilt mein Dank Herrn Prof. Dr. Rainer Manthey, der mir diese Arbeit ermöglicht hat. Herrn Dr. Andreas Behrend möchte ich recht herzlich für die kompetente Betreuung danken. Weiterhin möchte ich mich bedanken bei Emine Groche für die Zeit, die in Anmerkungen und Korrekturen investiert wurde. Darüber hinaus gilt mein herzlicher Dank meinem verstorbenen Vater, Gurbanov Yusuf, der mir das Informatik - Studium in Deutschland ermöglicht hat. Last but not least möchte ich mich vielmals beim meinen Man Eric einfach für alles bedanken. Inhaltsverzeichnis 1 Einleitung 5 2 Relationale Datenbanken 2.1 Relationaler Datenbank - Entwurf . . . 2.2 SQL . . . . . . . . . . . . . . . . . . . 2.3 Relationale Datenbanksysteme . . . . . 2.3.1 Microsoft Access . . . . . . . . 2.3.2 Microsoft SQL Server . . . . . . 2.3.3 Oracle . . . . . . . . . . . . . . 2.3.4 Datenbanksysteme im Vergleich . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 8 10 12 13 14 15 17 3 Technische Wertpapieranalyse 3.1 Wertpapieranalyse . . . . . . . 3.1.1 Chart - Analyse . . . . . 3.1.2 Technische Indikatoren . 3.2 TInTo - Das Technical Indicator 3.2.1 Softwarearchitektur . . . 3.2.2 Datenbankschema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 19 22 25 29 30 31 . . . . . . . . . . . . . . ADO.NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 34 34 36 40 42 . . . . . . . . . Tool . . . . . . 4 Webbasierte Anwendung 4.1 Die .NET - Technologie . . . . . . . 4.1.1 Das .NET - Framework . . . 4.1.2 Zugriff auf Datenquellen mit 4.1.3 Programmiersprache C# . . 4.2 Die Ajax - Technologie . . . . . . . . . . . . . 5 Entwurf einer webbasierten TInTo - Anwendung 47 5.1 Anforderungsprofil und Anwendungsfall . . . . . . . . . . . . . 47 5.2 Neuentwurf der Softwarearchitektur . . . . . . . . . . . . . . . 50 5.3 Erweiterung des Datenbankschemas . . . . . . . . . . . . . . . 54 6 Ausgewählte Aspekte der Programmierung 6.1 Struktur der webbasierten Anwendung . . . . . . . 6.1.1 Programmlogik . . . . . . . . . . . . . . . . 6.1.2 Präsentationslogik . . . . . . . . . . . . . . 6.2 Umsetzung der Indikatoren in Oracle . . . . . . . . 6.2.1 Umformulierung der Indikatoren - Definition 6.2.2 Ausführung der Indikatoren . . . . . . . . . 7 Beispielszenarien . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 57 57 59 61 62 64 67 3 8 Bewertung und Ausblick 73 A Installation und Konfiguration der TInTo-Webanwendung 76 4 1 Einleitung Das Internet drängt immer mehr in alle Bereiche des täglichen Lebens, gleich ob es private, geschäftliche oder finanzielle sind. Das Bedienen einer Anwendung, welche auf einem entfernten Server ausgeführt wird, ist längst keine Seltenheit mehr, insbesondere webbasierten Anwendungen haben in den letzten Jahren stark an die Popularität gewonnen. Der Vorteil solcher Anwendungen ist, daß der Benutzer auf seinem Rechner im Wesentlichen nur einen Internet Zugang und einen internetfähigen Browser wie z. B. den Internet Explorer von Microsoft installiert hat. Auf diese Weise wird einem Benutzer die umfangreiche Installation, Konfiguration und die Wartung einer webbasierten Anwendung erspart. Das Ziel dieser Diplomarbeit ist, für das Technical Indicator Tool (TInTo) - System eine webbasierte Anwendung zu realisieren. Dabei soll eine parallele Mehrbenutzung dieser Anwendung gewährleistet werden. TInTo ist eine Software zur technischen Wertpapieranalyse, und basiert auf einer relationalen Datenbank. Die Entwicklung des TInTo - Systems wurde in mehreren wissenschaftlichen Arbeiten vorangetrieben. Eine erste lauffähige TInTo - Version wurde im Rahmen einer Diplomarbeit von Christian Hübel [19] vorgestellt, deren Weiterentwicklung in der Diplomarbeit von Gereon Schüller [23] fortgeführt wurde. In dieser Arbeit sollen die Kernfunktionalitäten dieses Systems in eine webbasierte Anwendung übernommen und zusätzlich eine Benutzer - Verwaltung für das System realisiert werden. Der fachliche Gegenstand des TInTo - Systems ist die technische Analyse von Wertpapieren. Die technische Analyse stellt Methoden zur Verfügung, mit deren Hilfe Erfassung und Interpretation beispielsweise von Kursverläufen auf Finanzmärkten ermöglicht wird. Als Basis für die Berechnung der Kursverläufe werden Eröffnungs -, Höchst -, Tiefst - und Schlußkurs des betrachteten Wertpapiers für einen vorgegebenen Zeitraum genommen. Bei der Erfassung von Kursdaten von Wertpapieren werden meistens zwei Arten unterschieden. Mit den sogenannten End Of Day - Kursdaten werden Eröffnungs-, Höchst-, Tiefst - und Schlußkurs eines Tages betrachtet werden. Mit Intraday - Kursdaten werden diese vier Kurse in kürzeren Zeiträumen (z. B. 1 Sekunde, 20 Minuten) innerhalb eines Tages bestimmt werden. Im Rahmen dieser Diplomarbeit wird die Analyse der End of Day - Kursdaten realisiert. Zu den verbreiteten Werkzeugen der technischen Wertpapieranalyse gehö5 ren Indikatoren - und Chart - Analyse. Bei der Indikatoren - Analyse werden statistische Formeln bereitgestellt, anhand deren eine Vorhersage über die Entwicklung der Finanzmärkte getroffen und ein Signal zum Kauf oder Verkauf bestimmt werden kann. Die Chart - Analyse dient dem gleichen Zweck, allerdings werden die Aussagen anhand der Diagramme getroffen. Abbildung 1: Die webbasierte TInTo - Anwendung. Die Entwicklung einer webbasierten Anwendung kann anhand mehrerer Technologien umgesetzt werden. die Implementierung der webbasierten TInTo - Anwendung wird in Rahmen dieser Arbeit mit der .NET - Technologie realisiert. Programme der .NET - Plattform werden unter Verwendung einer objektorientierten, virtuellen Maschine und einer gemeinsame Klassenbibliothek, der sog. Framework Class Library ausgeführt. Mit dem .NET - Framework rückt auch der Begriff ADO.NET in den Vordergrund. ADO.NET ist eine Schnittstellendefinition zur Vereinheitlichung des Zugriffs auf unterschiedliche Datenquellen. Der inhaltliche Aufbau der Arbeit ist in acht Teile gegliedert: Im ersten Teil des Kapitels 2 werden die Grundlagen relationaler Datenbanken vorgestellt und das relationale Datenmodell sowie die relationale Anfrage - Sprache 6 SQL eingeführt. Im zweiten Teil dieses Kapitels werden die meist verbreiteten Datenbanksysteme Microsoft Access, Microsoft SQL Server und Oracle vorgestellt. Anschließend werden diese untereinander verglichen. Das Kapitel 3 beschäftigt sich zum einen mit der fachlichen Thematik dieser Arbeit, der technischen Wertpapieranalyse, zum anderen werden die Kernfunktionalitäten, die Softwarearchitektur und das Datenbankschema des bestehenden TInTo vorgestellt. In Kapitel 4.1 wird das notwendige Wissen für die Entwicklung der webbasierten Anwendung vermittelt. Zuerst werden die Eigenschaften der webbasierten Anwendung beschrieben, anschließend werden die .NET - und Ajax - Technologie vorgestellt. Nach dem einführenden Teil der Arbeit wird die Umsetzung der webbasierten TInTo - Anwendung beschrieben. Im Kapitel 5 werden die Anforderungen analysiert und Anwendungsfall abgeleitet. Des weiteren werden die neue Softwarearchitektur sowie die Erweiterung des Datenbankschemas beschrieben. Ausgewählte Aspekte der Programmierung wie Programmcode - Struktur der TInTo - Anwendung und die Umsetzung der Indikatoren in Oracle werden in Kapitel 6 beschrieben. Anhand zweier Beispielszenarien, „Wertpapier Analysieren“ und „Benutzer Verwalten“, wird die Funktionsweise der webbasierten TInTo - Anwendung erläutert. Im Anhang werden anschließend die für die Installation und Konfiguration notwendigen Schritte beschrieben. 7 2 Relationale Datenbanken Relationale Datenbanken werden überall dort eingesetzt, wo es um die Datenaufbewahrung und Datenverwaltung geht. Das von E. F. Codd in den 70er Jahren entwickelte Konzept des relationalen Modells bildet die Grundlage der relationalen Datenbanken. Die wesentlichen Aspekte des relationalen Datenmodells [24] werden im Abschnitt 2.1 erläutert und im darauf folgenden Abschnitt 2.2 wird die relationale Datenbanksprache Structured Query Language (SQL) vorgestellt [13]. Weiterhin werden die relationale Datenbankmanagementsysteme Microsoft Access (Abschnitt 2.3.1), Microsoft SQL Server (Abschnitt 2.3.2) und Oracle (Abschnitt 2.3.3) beschrieben und anschließend einzelne Aspekte der jeweiligen Datenbankmanagementsysteme verglichen (Abschnitt 2.3.4). 2.1 Relationaler Datenbank - Entwurf Bei dem Entwurf des relationalen Datenmodels wird häufig auf das Entity Relationship Modell (ER - Modell) zurückgegriffen, welches bei dem konzeptuellen Entwurf der relationalen Datenbank verwendet wird. Im ER - Modell werden Objekte der realen Welt als Entities und deren Zwischenbeziehungen als Relationships bezeichnet. Allgemein werden drei Beziehungstypen unterschieden: • (1:1) - Beziehung: Jedes Objekt aus einem Entity steht in Beziehung zu höchstens einem Objekt aus dem anderen Entity. • (1:N) - Beziehung: Jedes Objekt aus einem Entity steht in Beziehung zu mindestens einem Objekt aus dem anderen Entity. • (N:M) - Beziehung: Mindestens ein Objekt aus einem Entity steht in Beziehung zu mindestens einem Objekt aus dem anderen Entity. Zusätzlich werden zu den Entities und Relationships Attribute zugeordnet, die die Eigenschaften der jeweiligen Entity bzw. des Relationships beschreiben. In einem Entity Relationship Diagramm (ER - Diagramm) werden Entitätstypen und Beziehungstypen grafisch dargestellt (siehe Abbildung 2). Im relationalen Datenmodell werden Daten mengenorientiert verarbeitet, wobei das Konzept der relationalen Algebra benutzt wird. Aus mathematischer Sicht ist eine Relation R eine Teilmenge des kartesischen Produkts D1 × D2 × ... × Dn : R ⊆ D1 × D1 × ... × Dn , 8 Abbildung 2: Das ER - Diagramm, welches eine N:M - Beziehung zwischen Student- und Vorlesung - Entity abbildet. Die Beziehung wird mittels einer Raute symbolisiert und die Attribute der jeweiligen Entities mit ovalen Kreisen dargestellt. D1 × D2 × ... × Dn = {(d1 , d2 , ..., dn )|dj ∈ Dj , j = 1, 2, .., n}, wobei D1 , D2 , ..., Dn beliebige Mengen (die auch Werterbereiche oder Domänen heißen), (d1 , d2 , ..., dn ) ein n-Tupel und dj die j-te Komponente ist. Im Datenbank - Sinne wird eine Relation durch eine Tabelle abgebildet, deren Spalten die Attribute repräsentieren und deren Zeilen den Tupeln entsprechen. Um es zu verdeutlichen sei die Relation Studenten dargestellt: MatrNr 12314 Studenten Name Semester Musterman 5 Hier enthält die Relation ein dreistelliges Tupel, dessen Attributwerte aus den Domänen integer, string und integer stammen: Studenten ⊆ integer × string × integer Die dazu gehörige Relationenschemata lautet also: Studenten : {M atrN r : integer, N ame : string, Semester : integer} Ein Schema der relationalen Datenbank spezifiziert, welche Daten gespeichert werden und wie deren Beziehung zu einander ist. Anhand eines Schlüssels (Candidate Key) wird eine Tupel in der Relation identifiziert. Dieser Schlüssel setzt sich aus einer minimalen Menge von Attributen zusammen, für die gilt, daß kein zweites Tupel dieser Attributmenge die gleichen Werte annehmen darf. Hat eine Relation zwei Schlüssel, dann kann einer von beiden als Primärschlüssel (Primary Key) festgelegt werden, 9 wobei dieser niemals einen NULL - Wert enthalten darf. Im obigen Beispiel ist die Matrikelnummer der Primärschlüssel der Relation Studenten. Eine Relation kann auch einen Schlüssel anderer Relation enthalten, den sogenannten Fremdschlüssel (Foreign Key). Mittels dieses Fremdschlüssels werden die aus dem ER - Modell bekannten Beziehungen zwischen Relationen realisiert. 2.2 SQL Zur Definition, Manipulation und Abfrage von Daten in kommerziellen relationalen Datenbanken wird nahezu ausschließlich die Datenbanksprache Structured Query Language (SQL) eingesetzt. SQL, die in ihrer ersten Version Structured English Query Language (SEQUEL) hieß, wurde Ende der 70er Jahre bei IBM für die relationale Datenbank DB2 entwickelt. Der erste SQL - Standard wurde im Jahr 1986 durch das American National Standards Institute (ANSI) und ein Jahr später durch die International Standards Organization (ISO) veröffentlicht. Danach folgten mehrere Versionen von SQL, der erste am Markt etablierte SQL - Standard wurde allerdings erst 1992 veröffentlicht (SQL92 Standard). SQL läßt sich in sechs Sprachbereiche unterteilen: • Die Data Query Language (DQL) beinhaltet die Anweisungen, die für das Auswählen, Aufbereiten und Auslesen der Datenbankdaten zuständig sind. Schlüsselwörter sind SELECT, WHERE, ORDER BY, GROUP BY und HAVING und zur Formulierung von Unteranfragen (IN, ANY, ALL, EXISTS), Schnittmengen und Joins. Sehr oft werden die DQL - Anweisungen in Kombination mit anderen SQL Anweisungskategorien verwendet. • Mit der Data Definition Language(DDL) werden Objekte des Datenbankschemas definiert. Die von ANSI hierfür reservierten Wörter sind CREATE, DROP und ALTER. Mit DDL - Anweisungen werden Tabellen, Sichten, Indexe, Prozeduren und weitere Strukturelemente der Datenbank beschrieben. • Bei der Data Manipulation Language (DML) handelt es sich um die Teilsprache, die für das Einfügen, Ändern und Löschen von Daten zuständig ist. Die DML - Befehle sind INSERT, UPDATE und DELETE. Die DQL - Anweisungen werden oft den DML - Anweisungen zugeordnet, da nach vorherrschender Meinung auch die DQL - Befehle die Daten manipuliert ausliefern. 10 • Die Transaction Processing Language (TPL) sorgt dafür, daß alle DML - Anweisungen in einer Transaktion aktualisiert werden. Hierbei werden die DML - Anweisungen in einen Block zusammengefaßt, welcher mit den Schlüsselwörtern BEGIN TRANSACTION und COMIT TRANSACTION umschlossen wird. • Mittels der Data Control Language (DCL) lassen sich rollen- oder gruppenbasierter Zugriffe auf Datenbankobjekte definieren, wobei auf die DCL - Befehle GRANT und REVOKE zurückgegriffen wird. • Die Cursor Control Language (CCL) besteht aus Anweisungen, die einzelne Datensätze einer Tabelle bearbeiten. Zu den CCL - Befehlen gehören DECLARE CURSOR (definiert einen Zeilenzeiger für eine Tabelle), FETCH INTO (bewegt den Zeiger zur nächsten Zeile) und UPDATE WHERE CURRENT (aktualisiert die Zeile, auf die der Zeiger zeigt). CCL - Anweisungen werden oft in gespeicherten Prozeduren oder Funktionen verwendet. Eine wichtige Thematik in der Programmierwelt stellt die Kopplung der SQL - Anweisungen mit einer klassischen Programmiersprache (z.B. Visual Basic, C#) dar. Hierzu existieren die folgenden drei Möglichkeiten: • Embedded - SQL • Call Level Interface • Persistent Stored Module Bei Embedded - SQL handelt es sich um eine SQL - Erweiterung, welche mit SQL92 zum erstmal eingeführt wurde. Embedded - SQL erlaubt die SQL - Anweisungen direkt in den Programmcode einzubetten, wobei zwei Arten der SQL - Anweisungen unterschieden werden. Zum einen statisches SQL, bei welchem die SQL - Anweisungen zum Zeitpunkt der Programmierung festgelegt werden und zum anderen dynamisches SQL, bei welchem die SQL - Anweisungen erst zum Zeitpunkt der Ausführung erstellt werden. DasCall Level Interface (CLI) ist eine vereinheitliche Datenbankschnittstelle, mit der eine Bibliothek von Prozeduren und Funktionen zur Verfügung gestellt werden. Jedes relationale Datenbankmanagementsystem (siehe Abschnitt 2.3) verfügt über mindestens eine CLI. Als Beispiel seien an dieser 11 Stelle die Open Database Connectivity (ODBC)1 - API und Java2 Database Connectivity (JDBC)3 - API erwähnt. Persistent Stored Modules (PSM) sind SQL - Scripte oder auch in einer klassischen Programmiersprache geschriebene Module, welche innerhalb der Datenbank gespeichert werden. PSM gehören zur SQL - Erweiterung, welche erst mit SQL99 standardisiert wurde. PSM wird mit der call - Anweisung angesprochen und ausgeführt. Jedes Datenbankmanagementsystem hat für PSM vorgesehene Programmiersprachen. In Oracle wird beispielsweise Procedural Language/SQL (PL/SQL) und in Microsoft SQL Server Transact-SQL (T-SQL) verwendet. 2.3 Relationale Datenbanksysteme In den vorigen Abschnitten wurden das den relationalen Datenbanken zugrunde liegende relationale Datenmodell und die für die Definition und Manipulation der Datenbankdaten entwickelte Anfragesprache SQL vorgestellt. Eine Datenbank ist im Wesentlichen eine strukturierte Ansammlung von Daten, die in Tabellen zusammengefaßt und kategorisiert werden. Das Abspeichern und das Auffinden der Datenbankdaten, die Festlegung des rollenbasierten Zugriffs auf eine Datenbank sowie das Bereitstellen sämtlicher Datenoperationen in einer Datenbank sind die essentiellen Aufgaben eines Datenbankmanagementsystems (DBMS). In einem DBMS können ggf. mehrere Datenbanken erstellt und verwaltet werden. Die Datenbank und das DBMS sind die Komponenten eines Datebanksystems Seit den 70er Jahren wurde eine Vielzahl an Datenbanksysteme, denen das relationale Datenmodell zugrunde liegt, entwickelt. Zu den bekanntesten relationalen Datenbanksystemen (RDBS) gehören Microsoft Access, Microsoft SQL Server und Oracle (für die bessere Lesbarkeit wird nachfolgend die Bezeichnung Microsoft bei Access und SQL Server weggelassen ). Diese werden in nachfolgenden Abschnitten näher vorgestellt. 1 ODBC ist eine standardisierte Datenbankschnittstelle, die SQL als Datenbanksprache verwendet. 2 Java ist eine objektorientierte Programmiersprache, welche im Jahre 1995 von der Firma Sun Microsystems veröffentlicht wurde. 3 JDBC ist eine Datenbankschnittstelle der Java - Plattform, die eine einheitliche Schnittstelle zu Datenbanken verschiedener Hersteller relationaler Datenbanken bietet 12 2.3.1 Microsoft Access Access ist ein RDBS für das Microsoft Windows - Betriebssystem und ist (neben Microsoft Word und Microsoft Excel) der Bestandteil des Microsoft - Office Pakets. Es wurden mehrere Versionen von Access, angefangen von MS Access 97 Standard Edition bis Access 2007, durch Microsoft auf dem Markt gebracht. Allerdings ist an diese Stelle anzumerken, daß die Access Versionen keine gravierenden Unterschiede untereinander vorweisen. Als Informationsquelle für dieses Kapitel diente die Microsoft Access Homepage [14]. Access ist ein interaktives Datenbankmanagementsystem mit einer grafischen Benutzeroberfläche (GUI), wodurch der einfache und visuelle Zugriff auf die Daten mit der Mächtigkeit von SQL ermöglicht wird. Access basiert auf den SQL92 - Standard und verfügt mit der Programmiersprache Access Basic über die Möglichkeit, komplexe Anwendungen zu realisieren. Durch den Einsatz von ActiveX Data Objects (ADO) kann man auch mit anderen Programmiersprachen, wie Visual Basic, Delphi und weitere, eine Access Anwendung schreiben. Durch die ODBC - Schnittstelle wird ein Zugriff auf heterogene Access - Datenquellen ermöglicht. Access lasst sich in zwei Kernkomponente unterteilen. Zum einen die Microsoft Jet Engine, welche den eigentlichen Datenbankern bildet. Zum anderen die Benutzeroberfläche, welche die Engine anspricht, um Datendefinitionen und -manipulationen durchzuführen. Der Benutzer kann in Access neben Tabellen und Abfragen auch weitere Anwendungsobjekte erstellen: • Mit Formularen wird die Oberfläche (GUI) einer Access - Anwendung erstellt. Der Benutzer wird durch Formularassistenten bei der Entwicklung seiner Formulare unterstützt. Zudem steht dem Benutzer eine breite Palette an Steuerelementen zur Verfügung, die per Drag and Drop in die Formularen eingebunden werden können. • Berichte sind für die Gruppierung, die Sortierung und die übersichtliche Darstellung von Daten zuständig. Auch hier kann man auf die Unterstützung von Assistenten zurückgreifen. • Makros sind aufgezeichnete Abfolgen von Aktionen. Wie auf ein Ereignis reagiert werden soll, wird durch den Benutzer spezifiziert. • Module sind Ansammlungen von Deklarationen, Anweisungen und Prozeduren, die in benannten Einheiten gespeichert werden. Die Module werden mit Access - Basic geschrieben. 13 Die aufgeführten Anwendungsobjekte werden in einer einzigen Microsoft Datenbankdatei (.mdb - Datei) gespeichert. Access kann als eine vollständige Anwendungsentwicklungsumgebung gesehen werden, welche den Benutzer bei der Erstellung einer Datenbank - Anwendung unterstützt. 2.3.2 Microsoft SQL Server In diesem Kapitel wird das von Microsoft für Microsoft Windows - Plattformen entwickelte RDBS Microsoft SQL Server vorgestellt. Die Informationen in diesem Teilkapitel beruhen auf der Homepage des MS SQL Servers [15]. Microsoft hat SQL Server ursprünglich in Kooperation mit der Firma Sybase für die Plattform IBM OS/2 entwickelt. Eigenständige Weiterentwicklung des SQL Servers, welcher im Jahre 1993 in der Version 4.21 erschien, hat Microsoft mit dem Erscheinen des Betriebssystems Windows NT betrieben. Dem SQL Server 4.21 folgten die Versionen des SQL Server 6.0 und 6.5. All diese genannten Versionen basieren auf Sybase - Codebasis. Erst mit der Version SQL Server 7 wurde von Microsoft eine neue Datenbank - Engine entwickelt, die ebenfalls in die SQL Server 2000 und SQL Server 2005 übernommen wurde. Im Jahr 2008 bringt Microsoft den SQL Server 2008 auf den Markt. Ab der Version SQL Server 2000 wird dem Benutzer eine Plattform bereitgestellt, die nicht nur für das Datenmanagement, sondern auch für die Datenanalyse geeignet ist. Hiermit sind unter anderem die Analysis 4 - und Reporting - Services 5 und Volltextsuche 6 zu verstehen. Der Kerndienst zum Verwalten von Daten des SQL Servers ist die Datenbank - Engine. Zu den Aufgaben des Datenbankmoduls gehören das Erstellen von Tabellen, Indexe und Sichten sowie das Anzeigen, Verwalten und Sichern von Daten. SQL Server unterstütz zusätzlich die Erstellung folgender Datenbankobjekten: • Indexe sind Datenstrukturen, die direkten Zugriff auf Tupel mittels Attributwerten ermöglichen. • Trigger (deutsch Äuslöser") verknüpfen ein Ereignis in einer Tabelle mit bestimmten Aktionen. Ein auslösendes Ereignis kann INSERT, UPDATE oder DELETE und ein ausgelöste Aktion kann eine beliebige gespeicherte Prozedur sein. 4 Der Einsatz von Analysis Services ist besonders für das Vorbereiten von Auswertungen der relationalen und der multidimensionalen Daten vorteilhaft. 5 Möchte der Benutzer Berichte über die Inhalte von relationalen und multidimensionalen Datenquellen erstellen, so greift man auf Reporting Services des SQL Servers zu. 6 Die Volltextsuche ermöglicht die schnelle und flexible Indizierung für die schlüsselwortbasierte Abfrage von Textdaten. 14 • Eine gespeicherte Prozedur ist eine Abfolge von mehreren SQL-Anweisungen in einem Block, welche auf dem Datenbankserver gespeichert und ausgeführt wird. Die koppelt wiederkehrenden Datenbankanfragen in einem einzigen Aufruf. • Eine gespeicherte Funktion wird entspricht der gespeicherte Prozedur, zusätzlich wird von einer Funktion einen Rügabewert erwartet. Hierfür stellt SQL Server das grafische Tool SQL Enterprise Manager und den Query-Analyzer zur Verfügung. Für SQL Server wurde eine eigene Datenbank - Programmiersprache Transact-SQL (T-SQL) entwickelt. T-SQL erweitert lediglich die SQL - Befehle um eigene Befehle, wodurch die Datenbankverwaltung flexibler wird. Unter Datenbankverwaltung ist z.B. Erstellen, Ändern und Löschen von Tabellen, Sichten und Indexen, Programmieren von Triggern und gespeicherten Prozeduren oder Funktionen zu verstehen. Zusätzlich ist es mit T-SQL möglich, die Änderungen an der Konfiguration von SQL Server und Ad-Hoc Abfragen über die grafischen Query Analyzer vorzunehmen. Was besonders an SQL Server 2005 noch hervorzuheben ist, ist die Integration der Common Language Runtime 7 (CLR) in die Datenbankmaschine. Dadurch kann der Entwickler in den klassischen Programmiersprachen VB.NET oder C# Datenbankobjekte implementieren, wobei darunter gespeicherte Prozeduren, benutzerdefinierte Funktionen und Datentypen, Aggregatfunktionen und Trigger zu verstehen sind. 2.3.3 Oracle Ein weiteres auf dem Markt etabliertes RDBS ist das Oracle DBS der Firma Oracle. Die erste markttaugliche Oracle Version wurde im Jahre 1979 von der Firma Relational Software Inc. (RSI), die ihren Namen vier Jahre später in Oracle Corporation änderte, veröffentlicht. Seit der ersten Version wurden von Oracle Corporation in regelmäßigen Abständen weitere Oracle - Versionen auf den Markt gebracht, die derzeit aktuellsten die im August 2007 erschienene Version Oracle 11g ist. In diesem Abschnitt wird allerdings der Fokus auf die Vorgängerversion Oracle 10g gelegt, wobei als Hilfsquelle die Produkt - Dokumentation auf der Oracle Homepage [16] benutzt wird. Oracle ist ein mächtiges Datenbanksystem, welches sowohl relationale und multidimensionale als auch die objektorientierte Datenquellen verwalten 7 CLR ist die Laufzeitumgebung der .NET - Plattform (siehe Kapitel 4.1). 15 kann. Wie jedes andere Datenbanksystem besteht Oracle aus einer Datenbank und einem Datenbankmanagementsystem. Die Oracle - Datenbank ist eine Sammlung von unterschiedlichen physischen Dateien: die Datendateien, die Redo Log - Dateien, welche Datenblockänderungen von Transaktionen aufnehmen, und die Kontrolldateien, welche die Struktur- und Zustandsinformation der Datenbank enthalten. Das Oracle - Datenbankmanagementsystem besteht aus • Oracle - Instanzen, die aus Hintergrundprozessen und aus einem gemeinsamen Arbeitspeicher (Shared Memory), worauf die Hintergrundprozesse operieren, bestehen. Zu den Aufgaben von Hintergrundprozessen gehören unter anderem die Zugriffsregelung, das Speichern von Daten- und Redo Log - Dateien, Wiederherstellung der Benutzerdaten und Überwachung von Oracle - Prozessen. • Benutzer- und Server - Prozesse sind für das Ausführen von SQL Anweisungen zuständig, wobei der Benutzer - Prozeß nur durch das Starten des Server - Prozesses den Kontakt mit der Oracle - Instanz aufnimmt, um die angefragten Ergebnisse zu bekommen. Damit der Benutzer - Prozeß die Server - Prozesse startet, muß dieser sich beim Listener - Prozeß registrieren. Auch Oracle bietet eine eigene Datenbanksprache, die sogenannte Procedural Language/SQL (PL/SQL). PL/SQL ist, wie der Name schon verrät, eine prozedurale Sprache, welche SQL um ein Sprachbereich erweitert. In diesem Sprachbereich werden Variablen, Bedingungen, Schleifen und Ausnahmebehandlungen unterstützt. Mit PL/SQL lassen sich nicht nur gespeicherte Prozeduren8 und Datenbanktrigger, sondern auch Oracle - Formulare und Oracle - Berichte programmieren. Durch die integrierte Java - Laufzeitumgebung (JVM) in der Datenbank wird den Nicht - PL/SQL - Entwicklern ermöglicht auch Java - Prozeduren in Oracle zu speichern und auszuführen. Interessant ist die Tatsache, daß ab dem Oracle 10g Release 2 Datenbank - Erweiterungen für .NET mit Microsoft .NET Support über gespeicherte Prozeduren angeboten werden. Es sind Oracle Developer Tools für Visual Studio .NET9 , womit auch in .NET geschriebene Prozeduren in Oracle Datenbank gespeichert und benutzt werden können. 8 9 Bibliotheken von gespeicherten Prozeduren werden als PL/SQL - Pakete bezeichnet. Visual Studio .NET ist die Entwicklungsumgebung der .NET - Plattform 16 2.3.4 Datenbanksysteme im Vergleich In diesem Kapitel wird eine Diskussion über die in den vorigen drei Abschnitten vorgestellten relationalen Datenbanksysteme Access, SQL Server und Oracle eröffnet, wobei die Vor - und die Nachteile der jeweiligen Datenbanksysteme erörtert werden. Alle drei oben erwähnten Datenbanksysteme sind käuflich zu erwerben. Nur die reduzierten Varianten des SQL Servers (SQL Server Express Edition) und der Oracle DBS (Oracle Database Express Edition) sind für die kommerziellen Zwecke kostenlos erhältlich. Die vollständigen Varianten von Access und SQL Server werden von der MSDN Academic Alliance zur Verfügung gestellt, allerdings mit der Voraussetzung, daß diese ausschließlich für Forschung und Lehre eingesetzt werden. Analog geht auch Oracle Corporation vor, indem sie die vollständige Version von Oracle DBS nur für die private Nutzung zur Verfügung stellt. Im folgenden werden nur vollständigen Varianten der jeweiligen Datenbanksysteme betrachtet. Mit Access lassen sich schnell und unkompliziert Datenbank - Anwendungen erstellen. Außerdem ist es bedeutend kostengünstiger in Programmierung und Betreibung als seine Konkurrenz. Access eignet sich gut, wenn die Größe der benutzten Datenbank niemals 2GB Datenvolumen überschreitet und nur eine kleine Anzahl an Benutzern parallel auf die Datenbank - Anwendung zugreift. Was die Nachteile bzw. die Vorteile von Access sind, werden zu den Vorteilen bzw. den Nachteilen von Oracle und SQL Server. Diese beiden Datenbanksysteme haben nahezu keine Größeneinschränkung und sind durch ausgeklügelten Cache - Mechanismen besonders gut für den Mehrbenutzerbetrieb geeignet. Sowohl SQL Server als auch Oracle sind komplexere Datenbanksysteme und können nicht nur relationale, sondern auch, im Gegensatz zu Access, multidimensionale und objektrelationale Datenquellen verwalten. Möchte man SQL Server und Oracle vergleichen, so sind die unterschiedlichen Sichtweisen bezüglich der Datenbank - Verwaltung hervorzuheben. Oracle weist jedem Datenbank - Benutzer eine eigene DMBS - Umgebung zu, das heißt benutzerspezifischen Tabellen, Prozessen, Dateien, Puffern und weitere Objekte des Datenbankschemas. SQL Server hingegen hat eine DBMS - Umgebung für alle Datenbank - Benutzer, denen nur eigene Tabellen und Daten zugeordnet werden. 17 Ein weiterer interessanter Aspekt, welcher den Unterschied zwischen Access, SQL Server und Oracle verdeutlicht, ist deren Handhabung von materialisierten Sichten10 . Eine materialisierte Sicht ist dann von Vorteil, wenn häufig SQL - Anfragen an die Datenbank gesendet werden, wobei mehrere Tabellen durchsucht werden müssen. Das Konzept der materialisierten Sichten unterstützt Access, im Gegensatz zu SQL Server und Oracle, generell nicht. Im SQL Server handelt es sich bei materialisierten Sichten um indizierten Sichten. Dies bedeutet, daß es lediglich ein geclusterter Index für die Sicht erstellt wird, wobei diese Sicht eine Reihe an Voraussetzungen erfüllen muß: Der Einsatz von indizierten Sichten ist nur dann vorteilhaft, wenn die CREATE UNIQUE CLUSTERED INDEX index_name on view_name(column) Daten der dieser Sicht zugrunde liegenden Tabellen sich ganz selten ändern. Der Grund dafür ist, daß der Index nach jeder Änderung der Daten in den Basistabellen erneut erstellt werden muß. Dies führt beim häufigen Vorkommen zu höheren Kosten und Performance - Verlusten. Oracle hat bei der Thematik der materialisierten Sichten eine ganz andere Herangehensweise. Die Ergebnisse einer materialisierten Sicht werden in Oracle tatsächlich „materialisiert“, d.h., in einer eigenständigen Tabelle gespeichert. Ein einfacher SQL - Befehl für das Erstellen von einer materialisierten Sicht ist wie folgt aufgebaut: CREATE MATERIALIZED VIEW view_name view_definition Weiterhin ermöglicht Oracle dem Datenbank - Entwickler die Aktualisierung der materialisierten Sicht zweierlei zu gestalten. Zum einen wird die materialisierte Sicht nach jeder Änderung komplett neu berechnet (complete refresh). Zum anderen werden nur die von der Änderung betroffenen Datensätze in der materialisierten Sicht neu berechnet(fast refresh), was zu Reduzierung der Berechnungskosten führt. 10 Bei der materialisierten Sicht wird deren Ergebnis physisch gespeichert und muß bei jeder Aktualisierung erneut berechnet werden. 18 3 Technische Wertpapieranalyse Dieses Kapitel befaßt sich mit der technischen Analyse, wobei im Abschnitt 3.1 die grundlegenden Begriffe der Wertpapieranalyse eingeführt werden und das Konzept der technischen Analyse erläutert wird. Dabei werden die wesentlichen Techniken dieser Analyse nämlich die Chart- und Indikatoranalyse besprochen. Als Hilfsquellen für den ersten Teilabschnitt wurden [20], [21] und [12] verwendet. Im Abschnitt 3.2 wird das datenbankgestütztes Technical Indicator Tool zur regelbasierten Wertpapieranalyse (TInTo) vorgestellt, wobei das notwendige Wissen über die Vorgänger - Diplomarbeiten von Christian Hübel [19] und von Gereon Schüller [23] übermittelt wird. 3.1 Wertpapieranalyse Bevor auf die Aspekte der Wertpapieranalyse eingegangen wird, ist es notwendig, einige grundlegende Begriffe der Wertpapieranalyse zu erläutern. Das Wertpapier ist eine Urkunde, die ein Vermögensrecht verbrieft. Dies bedeutet also, daß um das Recht, z. B. an einem Unternehmen, geltend zu machen, ist zumindest der Besitz der Urkunde notwendig. Unter Wertpapieren versteht man vor allem Aktien, Anleihen, Schuldverschreibungen, Optionsscheine und Investmentzertifikate. Da in dieser Diplomarbeit allgemein von Aktien bzw. Aktienindizes gesprochen wird, wird weiterer Fokus auf die Begriffe rund um den Aktienbegriff gelegt. Die Aktie ist als gedrucktes Wertpapier eine Urkunde, die ihrem Inhaber (Aktionär) einen Anteil am Grundkapital einer Aktiengesellschaft und damit verbundene bestimmte Eigentumsrechte am Unternehmen verbrieft. Die Aktien kann man auch als das Eigenfinanzierungsinstrument der Aktiengesellschaft verstehen, wobei die Aktionäre einen unmittelbaren Einfluß auf wirtschaftliche Entwicklung der Aktiengesellschaft haben. Schon Anfang des 19. Jahrhunderts gab es Überlegungen, ob man die Aktien in bestimmten Gruppen, in sogenannten Aktienindizes, zusammenfassen sollte, um die wirtschaftliche Situation eines Landes besser zu beurteilen. Das Aktienindex ist die Zusammenfassung bestimmter Aktien zu einem Index, der die Kursentwicklung des Markts im Zeitablauf angibt. Am 3. Juli 1884 wurde erstmalig in der Börsengeschichte ein Aktienindex von Charels Dow, dem Pioneer der technischen Wertpapieranalyse, veröf19 fentlicht. Mittlerweile gibt es eine Vielzahl an Aktienindizes weltweit. Zu den bekanntesten gehören der Dow Jones (Aktienindex der New Yorker Stock Exchange, NYSE), der DAX (Deutscher Aktienindex) und NIKKEI (Japanischer Atienindex, Tokio). Die Aktien werden an einer Börse gekauft und verkauft. Eine Börse ist ein organisierter Markt, an denen bestimmte Güter (Wertpapiere, Edelmetalle, Devisen, Unternehmensanteile, Kreditverbriefungen und weitere) gehandelt werden. In Deutschland existieren zur Zeit sieben Börsen: Berlin - Bremen, Düsseldorf, Hamburg, Hannover, Frankfurt, Stuttgart und München. Der Punktestand eines Index wird von den im Index enthaltenen Aktienkursen bestimmt. Der Aktienkurs gibt den Preis für das Wertpapier wieder, der an der Börse gehandelt wird. Man kann vier Kursgrössen pro Börsensitzung unterscheiden: Eröffnungs-, Höchst-, Tiefst- und Schlußkurs. Spricht man von Preis- und Volumendaten, so kategorisiert man diese in End Of Day (EOD) - Daten, also ein Datensatz pro Tag, und Intraday - Daten. Bei Intraday - Daten werden die Kursschwankungen einer Aktie innerhalb eines Handelstages dargestellt. Basierend auf diese Daten und auf die Informationen über den vorherrschenden Trend versuchen die Analysten bestmögliche Entscheidungen über die bevorstehenden Investitionen zu treffen. Als Trend wird die Neigung eines Markts bezeichnet, sich in eine bestimmte Richtung zu entwickeln. Es gibt verschiedene Verfahren zur Wertpapieranalyse (auch Aktienanalyse genannt), von denen folgende zwei am gängigsten sind: • Fundamentale Analyse • Technische Analyse Bei der fundamentalen Analyse wird eine Bewertung von Wertpapieren anhand von betriebswirtschaftlichen und volkswirtschaftlichen Einflußfaktoren vorgenommen. Um den „realistischen“ Preis für das Wertpapier zu bestimmen, werden interne Informationen (z. B. Bilanzkennzahlen) und externe Informationen des Unternehmens (z. B. Auftragslage oder Gewinnerwartungen) herangezogen. Der Ansatz der technischen Analyse unterscheidet sich wesentlich von dem fundamentalen. Hier wird angenommen, daß der Markt immer recht hat und der Preis des Wertpapiers durch das Angebot und die Nachfrage auf dem Markt bestimmt wird. Zusätzlich kann anhand der vergangenen 20 Kursbewegungen die zukünftige Kursenentwicklung vorhergesagt werden. Da der Gegenstand dieser Diplomarbeit auf die technische Analyse beruht, wird folglich auf das Konzept der technischen Analyse näher eingegangen. Um das Wesen der technischen Analyse verstehen zu können, sollte man die drei grundlengeden Annahmen dieser Analyse kennen: • Marktbewegungen diskontieren alles. Damit wird behauptet, daß alle betriebswirtschaftlichen und volkswirtschaftlichen Einflußfaktoren sich sofort in den Wertpapierenkursen widerspiegeln und keine Auswirkungen mehr für die künftige Kursentwicklung haben. • Kurse bewegen sich in Trend. Wertpapierkurse bewegen sich grundsätzlich in Trends. Die Anleger reagieren auf die Richtungswechsel der Trends, sobald anhand der vergangenen Kursverläufe ein überzeugender Anhaltspunkt dafür bestimmt wird. • Die Geschichte wiederholt sich. Dies war die Schlußfolgerung von Charles Dow, der der erste Börsenbeobachter war. Durch das Studieren der vergangenen Kursentwicklungen wurde festgestellt, daß die Wertpapierkurse unter ähnlichen Umständen ein ähnliches Grundmuster aufweisen. Dieses Grundmuster ist auf die bullsche (Kauf) und bärische (Verkauf) Psychologie des Marktes zurückzuführen. Basierend auf diese Grundannahmen wurden im Laufe der Jahrzehnte mehrere umfangreiche Methoden und Techniken der technischen Analyse entwickelt. Zu den meist verbreiteten Analyseverfahren gehören die Chart - und die Indikatoren - Analyse. Das Grundprinzip der Chart - Analyse ist es, auf Basis der historischen Kursentwicklungen mit Hilfe von grafischen Darstellungen, den sogenannten Charts, Aussage über die zukünftige Kursentwicklung zu treffen. Die Indikatorenanalyse beschäftigt sich mit den statistischen Modellen historischer Zahlen- bzw. Kursreihen. Beide Analyseverfahren führen zum erwünschten Ziel, nämlich einen Trend zu bestimmen und in diesem die richtigen Kauf- und Verkaufsignale zu identifizieren. Es ist schließlich den Vorlieben der Analysten überlassen, ob eine oder die Kombination der beiden Analyseverfahren bevorzugt wird. Wie schon oben erwähnt wurde, verfügt die technische Analyse über eine Vielzahl von Analyseverfahren. Da aber für diese Diplomarbeit nur die Chart21 und Indikatorenanalyse von Bedeutung sind, wird auf diese beiden Techniken in den folgenden Abschnitten 3.1.1 und 3.1.2 näher eingegangen. 3.1.1 Chart - Analyse Die Chart - Analyse ist die älteste Methode der technischen Analyse. Basierend auf der zweiten Grundannahme, daß die Kurse sich in Trends bewegen, wird mittels der Charts versucht diese Trends zu bestimmen. Die Charts sind in der Regel zweidimensionale Diagramme, wobei auf der Abzisse der Zeithorizont und auf der Ordinate die beobachtete Kurshöhe abgetragen werden. Zu den meist verbreiteten Chartformen gehören (Abb. 3) • Linienchart • Barchart • Candelstick - Chart Der Linienchart ist die einfachste Form des Charts. Hier werden lediglich die Kurse am Ende von definierter Zeitspanne (z. B. der Börsentag) in die Grafik eingetragen und durch eine Linie verbunden. Bei dem Barchart handelt es sich um die erweiterte Darstellung des Liniencharts. Bei dieser Form werden auf der senkrechten Linie pro Beobachtungsraum die Höchst- , Tiefst-, Eröffnungs- und Schlusskurse abgebildet, wobei die Höhe dieser Linie die Differenz zwischen dem Höchst- und dem Tiefstkurs ist. Der Eröffnungskurs wird durch eine waagerechte Linie links und der Schlußkurs rechts repräsentiert. Der Candelstick - Chart ähnelt dem Barchart. Zusätzlich besitzt die senkrechte Linie einen Rechteck, der unterschiedliche Färbungen annehmen kann. Dieser Rechteck wird rot angefärbt, wenn der Eröffnungskurs höher als der Schlußkurs ist. Das Rechteck enthält die grüne Farbe, wenn der Eröffnungskurs unter dem Schlußkurs liegt. Durch die Untersuchung der Kurvenverläufe und Verlaufsformationen von Charts werden Schlußfolgerungen über zukünftige Kursenentwicklungen vorgewonnen. Ein Chartist versucht stets die Trendumkehrpunkte zu erkennen, um dann in Richtung des Trends handeln zu können. Dabei stehen dem Chartisten zwei Techniken der Chart - Analyse zu Verfügung: • Trendanalyse • Formationsanalyse 22 Abbildung 3: Beispiele c)Candelstick - Chart für Chartformen: 23 a)Linienchart b)Barchart Abbildung 4: Möglichkeiten der Trendentwicklungen: a)Aufwärtstrend b)Abwärtstrend c)Seitwärtstrend Die Trendanalyse stellt den wesentlichen Aspekt der technischen Analyse dar. Das Ziel dieser Analyse ist es, die Richtung der Trends möglichst früh zu erkennen, damit die Anleger möglichst lange dieser Richtung folgen können und entsprechend ihren Profit daraus ziehen können. Hierbei werden drei Möglichkeiten der Trendentwicklung unterschieden (Abb. 4): • Ein Aufwärtstrend liegt dann vor, wenn die neue Hochpunkte und Tiefpunkte über den letzten Hochpunkten bzw. Tiefpunkten liegen. • Der Abwärtstrend läßt sich hingegen als eine fallende Tief- und Hochpunktreihen kennzeichnen. • Im Gegensatz zu den obigen zwei Trendentwicklungen, weist der Markt beim Seitwärtstrend keine oder geringe Kursschwankungen auf. Die Formationsanalyse beschäftigt sich mit der Herleitung der bestimmten Chartmustern, die einem den „optimalen“ Zeitpunkt für Kauf und Verkauf zu identifizieren helfen. Die Formationsanalyse wird in zwei Kategorien untergliedert: • Die Trendbestätigungsformationen, wie der Name schon sagt, „bestätigen“ diese Formationen den Trend. Hier entwickeln sich die Kurse seitwärts oder leicht gegen die Trendrichtung. • Während die Trendbestätigungsformationen einen Trend „bestätigen“, deuten die Trendwendeformationen auf das Auslaufen eines Trends hin. 24 3.1.2 Technische Indikatoren Ein weiteres bedeutendes Teilgebiet der technischen Analyse stellt die Indikatoren - Analyse dar. Die technische Analyse befaßt sich auch mit den statistischen Verfahren, um verschiedene Aussagen über die Kursbewegungen der Aktien zu treffen. Bei diesen Verfahren handelt es sich um mathematische Formeln bzw. Funktionen, die man als technische Indikatoren bezeichnet. Allgemein lassen sich die technischen Indikatoren in fünf Gruppen klassifizieren [20]: • Trendfolgerindikatoren • Oszillatoren • Trendintensitätsindikatoren • Umsatzindikatoren • Volatilitätsindikatoren Die Kursentwicklungen, wie schon im vorherigen Kapitel erwähnt wurde, unterliegen Aufwärts-, Abwärts- und Seitwärtstrends. Die Trendfolgerindikatoren „folgen“ dem Trend und zeigen solange eine Trendphase an, bis ein Richtungswechsel stattgefunden hat. Dies hat zur Konsequenz, daß die Kauf- bzw. Verkaufssignale erst dann ausgelöst werden können, wenn die neue Trendphase schon seit einer Weile präsent ist. Die Trendfolger haben also eine zeitverzögerte Reaktion auf eine Trendveränderung und können zu Fehlprognosen beim Seitwärtstrend führen. Zu der Gruppe der Trendfolgeindikatoren gehört das „Moving Average Convergence / Divergence (MACD)“. Der „MACD“ - Indikator basiert zum einen auf einen „Moving Average (Gleitende Durchschnitt)“, zum anderen auf deren Gegenüberstellung, also der Phase der Convergenz und der Divergenz. Die „MACD“ - Linie berechnet sich aus der Differenz zweier exponentieller „Moving Averages (EMA)“ in einem Beobachtungszeitraum. Die Signallinie („Trigger“) ergibt sich durch das Anwenden von exponentiellen „Moving Average“ auf die „MACD“ - Kurve. M ACDt = EM A1t − EM A2t , wobei 25 EM A1t = EM Ax (Closet ) = EM At−1 + (( x2 + 1)∗ (Closet − EM At−1 )) EM A2t = EM Ay (Closet ) = EM At−1 + (( y2 + 1)∗ (Closet − EM At−1 )) T riggert = EM Az (M ACDt ) = EM At−1 + (( z2 + 1)∗ (M ACDt − EM At−1 )) und t, x, y, z die Berechnungszeiträume sind. Sofern die „MACD“ - Kurve die Signallinie von oben/unten nach unten/oben schneidet, ist ein Verkaufsbzw. Kaufsignal gegeben. Der aus der Physik stammende Begriff Oszillation ist als regelmäßiges Hin- und Herschwingen zu interpretieren. Tatsächlich schwingt die Trendlinie eines Oszillators innerhalb einer oberen und einer unteren horizontalen Begrenzung. Ziel der Oszillatoren, im Gegensatz zu den Trendfolgerindikatoren, ist die frühzeitige Verdeutlichung der Extremphasen im Kursverlauf (d.h. übertriebene Kursgewinne bzw. -verluste). Gerade bei den Seitwärtstrends sind die Oszillatoren nützlich. Ein solcher Indikator ist das „Momentum“. Dieser mißt die Geschwindigkeit bzw. die Stärke von Kursbewegungen. Man erhält das „Momentum“, indem man fortlaufend Kursdifferenzen für ein Beobachtungszeitraum bildet. M omentum = Closet − Closet−n+1 Alternativ kann dieser Indikator durch eine Quotientenbildung von aktuellem Schlußkurs und dem Schlußkurs von n Tagen und anschließend einer Multiplikation mit dem Faktor 100, womit dort der Mittelpunkt der Schwankungen liegt, berechnet werden. M omentum = Closet ∗ 100 Closet−n+1 Durchkreuzt die Indikatorlinie die Mittellinie von unten nach oben, so ist diese Kursentwicklung als Kaufsignal zu interpretieren. Im umgekehrten Fall deutet diese auf das Verkaufsignal. Befindet sich die Indikatorlinie oberhalb bzw. unterhalb der Mittellinie und steigt bzw. fällt, so herrscht ein Aufwärtstrend der Kursenentwicklung. Die Trendintensitätsindikatoren, auch Trendbestimmungsindikatoren genannt, beschäftigen sich mit der Frage, wann ein Trend vorliegt und wann 26 nicht. Diese dienen also zur Identifikation von Trendphasen und unterstützen bei der Entscheidung, welchen Indikatortyp man anwenden soll. Als Beispiel für ein Trendintensitätsindikator sei der „Average Directional Movement Index (ADX)“ gegeben. Der „ADX“ - Indikator zeigt an, ob es sich um einen Aufwärts-, Abwärts- oder Seitwärtstrend handelt. Die Berechnung des „ADX“ läuft in mehreren Schritten ab: 1. Berechnung des „Aufwärts-Direction Movement (+DM )“ und des „AbwärtsDirection Movement (−DM )“: Lowt−1 − Lowt , falls Lowt > Lowt−1 −DMt = 0 sonst Hight − Hight−1 , falls Hight > Hight−1 +DMt = 0 sonst 2. Ermittlung der „True Range (TR)“: Hight − Lowt , T Rt = max Hight − Closet−1 , Lowt − Closet−1 3. Berechnung der beiden „Directional Indikator (+/ − DI)": +DI = +DM/T R −DI = −DM/T R 4. Glättung der beiden Indikatoren (+/ − DI): +DIx = +DMx /T Rx −DIx = −DMx /T Rx 5. Berechnung des „Direction Movement Index“: DM I = (+DI) − (−DI) ((+DI) + (−DI))∗ 100 6. Durch Glättung des „DMI“ ergibt sich der „ADX“ - Indikator: ADX = DM Ix 27 Liegt „+DI“ über/unter „−DI“, so deutet der „ADX“ - Indikator auf eine Kursentwickung im Aufwärts- bzw. im Abwärtstrend. Die Wirtschaftsgröße Umsatz bzw. Volumen ist von zentraler Bedeutung in der technischen Analyse. Es ist allgemein schwierig ohne Volumeninformationen ein Urteil über die Kursbewegung zu fällen. Die Aufgabe der Umsatzindikatoren ist es die Volumentrends und den Volumentrendwechsel zu identifizieren. Diese Indikatoren werden entweder allein oder im Zusammenhang mit anderen Indikatoren eingesetzt, um Kauf- bzw. Verkaufssignale zu bestimmen. Mittels der Volatilitätsindikatoren können Aussagen über die Beweglichkeit der Kurse getroffen werden, wobei die Trendrichtung unbekannt bleibt. Diese Indikatoren sind in der Lage die Trendausläufe zu identifizieren, so daß höhere Gewinneinnahmen erzielt werden können. Trotz der Klassifizierung der Indikatoren in diese fünf Gruppen, kommt es öfters vor, daß einem Indikator mehrere Gruppen zugeordnet werden kann. Als Beispiel sei an dieser Stelle der Umsatztindikator erwähnt, der ebenso als Oszillator, wie als Trendfolger ausgerichtet sein kann. 28 3.2 TInTo - Das Technical Indicator Tool Das Technical Indicator Tool (TInTo) ist ein Werkzeug zur technischen Analyse von Wertpapieren. TInTo ist eine Access - Anwendung, welche erstmalig von Christian Hübel in Rahmen seiner Diplomarbeit [19] entwickelt wurde. In der ersten Version lag der Schwerpunkt auf der Wertpapieranalyse auf der Basis der EOF - Kursdaten. Die Intraday - Analyse wurde in einer späteren Weiterentwicklung des TInTo - Systems von Gereon Schüller [23] implementiert. Mit dieser Arbeit vor allem die Kernfunktionalitäten der ersten Version in Form einer Webanwendung neu implementiert. Daher wird im Folgenden ein Einblick in die Softwarearchitektur und das Datenbankschema der ersten Version gegeben. Abbildung 5: TInTo - das Hauptformular. Zu den Kernfunktionalitäten der ersten Tinto - Version gehören: • Anbindung der externen ChartDirector - Komponente11 [3] und zur 11 ChartDirector ist ein Produkt der Firma Advanced Software Engineering. Es wird zur Darstellung von Finanz - Charts benötigt. 29 Verfügungstellung der Chart - Diagramme und vordefinierten Indikatoren für die technischen Analyse. • Chart - Einstellungen wie Diagramm - Ansicht, Preis - Band, Volumenbalken oder logarithmische Skalierung für die technische Analyse. • Indikatoren - und Chart - Analyse der in der Datenbank gespeicherten Wertpapiere. • Abfrage der EOF - Kursdaten und der Umsatzdaten für ein ausgewähltes Wertpapier vom Yahoo - Webservice. • Anlegen, Bearbeiten und Löschen von in SQL definierten Indikatoren. In Abbildung 5 ist das Hauptformular der Anwendung abgebildet, in welchem die Analyse eines ausgewählten Wertpapier vorgenommen werden kann. Diverse Analyse - Einstellungen wie Diagramm - Ansicht, Preis - Band, Auswahl des ChartDirector - und des TInTo - Indikators können im gleichen Formular vorgenommen werden. 3.2.1 Softwarearchitektur TInTo ist eine Access - Anwendung, welche auf einem lokalen Rechner auszuführen und von einzelnen einem Benutzer zu bedienen ist. Zu den wesentlichen Komponenten des TInTo - gehören: • Internet - Schnittstelle: Diese Komponente implementiert eine Schnittstelle zum Yahoo - Finanzportal, mit welcher die benötigten Kurs und Umsatzdaten abgefragt werden können. Vom Yahoo - Finanzportal wird hierzu eine CSV - Datei12 zur Verfügung gestellt. • DB-Interface (Jet): Diese Komponente fungiert als Brücke zwischen der Anwendung und der Datenbank, in der die Speicherung und Verwaltung der Kurs - und Umsatzdaten sowie die Definition der technischen Indikatoren vorgenommen wird. • TInTo: Mit dieser Komponente wird die Hauptkomponente der Anwendung bezeichnet, welche alle übrigen Komponente steuert. • Chart Manager : In dieser Komponente findet die Übernahme der Chart - Einstellungen in die Berechnung der Kurs - und Umsatzdaten statt. 12 Das Dateiformat CSV (Comma Separated Value) ist eine Textdatei zur Speicherung oder zum Austausch einfach strukturierter Daten 30 • ChartDirector Visualisierung: Diese Komponente setzt die Anbindung zum ChartDirector um. • Benutzerschnittstelle: Diese Komponente besteht aus Access - Formularen, über die der Benutzer die Anwendung bedienen kann. Auf die weitere Beschreibung der Softwarearchitekur wird an dieser Stelle verzichtet, da diese in der Diplomarbeit von Christian Hübel ausführlich dargelegt wird. 3.2.2 Datenbankschema Das Datenbankschema des TInTo - System besteht im Wesentlichen aus drei festgelegten Tabellen: TWertpapier : {ID:AutoWert, Symbol:Text, Typ:Zahl, Name:Text, ISIN:Text, WKN:Text } In Tabelle TWertpapier werden Informationen zu den Wertpapieren gehalten. Jedes Wertpapier ist durch seine WKN 13 bzw. ISIN 14 eindeutig identifizierbar. Zusätzlich bekommt jedes Wertpapier eine fortlaufende Nummer (ID), anhand der die Beziehung zwischen dem Wertpapier und seinen Kursund Umsatztdaten hergestellt wird. TKurs: { Id:Zahl, n:Zahl, Date:Datum/Uhrzeit, Open:Zahl, High:Zahl, Low:Zahl, Close:Zahl, Vol:Zahl, v1:Zahl, v2:Zahl, v3:Zahl } In der Tabelle TKurs werden die Kurs - und Umsatzdaten eines Wertpapiers für einen Handelstag abgespeichert. Die Werte in der Spalte ID verweisen auf das in der Tabelle TWertpapier gespeicherte Wertpapier. Die Spalte Date gibt das Datum des Handelstages an, während in der Spalte n die Anzahl der bis zu diesem Datum stattgefundenen Handelstage festgehalten werden. Die Spalten v1, v2 und v3 werden für die rekursive Berechnung des MACD - Indikators benötigt. Das hierfür erarbeitete Verfahren kann in der Diplomarbeit von Christian Hübel [19] nachgelesen werden. Die Tabelle TView beinhaltet alle für die Berechnung und Anzeige eines Indikators notwendigen Informationen. Die Spalte Priority gibt die Anzeige 13 Im deutschen Wertpapierhandel wurden Wertpapiere bis zum Jahre 2003 über die sechsstellige Wertpapierkennummer (WKN) identifiziert. 14 ISIN (International Securities Identification Number) wird weltweit zur Identifikation eines Wertpapiers verwendet. 31 TView : {Priority:Zahl, Name:Text, Caption:Text, SQL:Memo, IName1:Text, IName2:Text, IName3:Text, ICol1:Zahl, ICol2:Zahl, ICol3:Zahl, IPar1:Zahl, IPar2:Zahl, IPar3:Zahl, Notes:Text} Priorität des Indikators im Auswahlmenu des TInTo - Hauptformulars. In der Spalte SQL wird die SQL - Definition des Indikators gespeichert. Jeder Indikator bekommt einen kurzen Namen (Spalte Name) und einen vollständigen Namen (Spalte Caption). Da ein Indikator unter Umständen aus maximal drei Kurven bestehen kann, werden die notwendigen Informationen für diese Kurven in den Spalten IName1, IName2, IName3, ICol1, ICol2, ICol3, IPar1, IPar2, IPar3 angelegt, wobei unter IColX die Farb - Informationen und unter IParX für Darstellungsparameter gespeichert werden. Die Beziehung zwischen diesen Datenbank - Objekten zeigt das folgende Entity - Relation - Diagram. Abbildung 6: Die Beziehungen zwischen den Datenbank - Objekten 32 4 Webbasierte Anwendung Eine webbasierte Anwendung ist eine Software, welche auf einem Webserver ausgeführt wird und vom Benutzer nur über einen Internet - Browser15 bedient werden kann. Der Benutzer gibt eine Anfrage (URL16 ) in den Internet Browser ein. Dazu startet der Browser eine HTTP17 - Anfrage (engl. Request) an den Webserver, der ihm als die HTTP - AnHTML (Hypertext Markup Language) und CSS (Cascading Style Sheet) sind Web - Entwicklungsprachen. Während HTML für das Beschreiben der Struktur der Dokumenten World Wide Web zuständig ist, bündelt CSS die gestalterischen Elemente der Web - Dokumente in Stilvorlagen. Durch den Einsatz von CSS wird für Übersichtlichkeit und bessere Wartung der Web - Dokumente gesorgt.twort (engl. Response) als HTML - und / oder CSS - Dateien überträgt. Die Abblidung 7 stellt die Struktur einer klassischen webbasierten Anwendung dar, wobei die Interaktion zwischen dem Server und dem Client veranschaulicht wird. Abbildung 7: Klassische webbasierte Anwendung. Im Folgenden werden für die Realisierung der webbasierten Schnittstelle für TInTo relevante Technologien im einzelnen beschrieben. 15 Unter einem Internet - Browser versteht man ein Compunter - Programm, das im Internet Textdateien interpretiert und darstellt. 16 Das URL-Format macht eine eindeutige Bezeichnung aller Dokumente im Internet möglich, es beschreibt die Adresse eines Dokuments oder Objekts, das von einem WWWBrowser gelesen werden kann. 17 HTTP ist ein allgemeines, statusloses, objektorientiertes Protokoll zur Datenübertragung im Rahmen des World Wide Web (WWW). 33 4.1 Die .NET - Technologie Mit der .NET - Technologie veröffentlichte Microsoft im Jahr 2002 eine neue, strategische Plattform für die Entwicklung von Windows basierten Anwendungen. Die Grundlage der .NET - Technologie ist das Internet, was unter anderem auch die Entwicklung von verteilten Anwendungen ermöglicht. Viele Konzepte, welche zum Teil bereits in der Java - Welt zur Anwendung kommen, finden sich auch in der .Net - Technologie wieder. Um mit der .NET Plattform arbeiten zu können muss das .NET - Frameworkt installiert werden. Das .NET - Framework wird im Abschnitt 4.1.1 in seiner Gesamtheit beschrieben wird. Ein wesentlicher Bestandteil des .Net - Frameworks ist die ADO.Net genannte Komponente für den einheitlichen Zugriff auf (relationale) Datenquellen. Im Abschnitt 4.1.2 wird die ADO.Net - Komponente näher betrachtet. Im letzten Abschnitt 4.1.3 wird mit dem .NET - Framework eingeführte Programmiersprache C# vorgestellt. Das ganze Kapitel 4.1 beruht auf den zwei Hilfsquellen [17] und [18]. 4.1.1 Das .NET - Framework Das .NET - Framework ist der technische Kern der .NET - Technologie. Für den Softwareentwickler stellt sich das .Net - Framework als eine Programmierplattform zum Erstellen, Bereitstellen und Ausführen von webbasierten Awendungen (Active Server Pages), Windows - Anwendungen (Konsole, WinForms) und XML - WebServices dar. Betrachtet man die Architektur des .NET - Frameworks (siehe Abbildung 8), so läßt sich dieses in einzelne, zum Teil aufeinander aufbauende Schichten unterteilen. Die beiden Kernkomponenten sind • Common Language Runtime • Framework Class Library Das Konzept einer virtuellen Maschine und einem darauf ausführbaren MaschinenCode (Sprache) ist bereits aus der Java - Welt bekannt. Der sogenannten Java Byte - Code wird auf der Java Virtual Maschine (JVM) zur Ausführung gebracht. Dieser Zwischencode wird zuvor aus dem in der Java - Syntax formulierten Programmcode durch einen Compiler erzeugt. Das Äquivalent zur JVM in der .Net - Welt ist die Common Language Runtime (CLR), anstelle des Java Byte - Code werden die Programme in die sogenannte Common Intermediate Language (CIL) überführt. Die Aufgaben der CLR - 34 Laufzeitumgebung umfassen die Schwerpunkte Sprachintegration, Automatische Speicherbereinigung (Garbage Collection), Prozeß - und Threadverwaltung, Durchsetzung von Sicherheitsrichtlinien bei der Code - Ausführung und Quellcode - Versionisierung. Ein wesentlicher Unterschied zur Java - Welt liegt in der Unterstützung unterschiedlicher Programmiersprachen zur Formulierung von .Net - Programmen. Diese Flexibilität wird durch ein einheitliches Typ - System (Common Type System CTS) und spezifische, an die jeweilige Programmiersprache angepasst Compiler erreicht, welche die in der ausgewählten Programmiersprache formulierten .Net - Programme in die CIL überführen. Die Sprachspezifikation der CIL, welche die Compiler implementieren müssen, ist in der Common Language Specification (CLS) definiert. Seit der ersten Veröffentlichung des .Net - Frameworks sind neben den von Microsoft mitgelieferten, CLS - komformen .Net - Sprache VB.Net, C#, J# und C++.Net vielzählige Projekte zur Integration weiterer Programmiersprachen in die .Net- Umgebung entstanden. .NET FRAMEWORK VB C++ ... C# JScript J# Common Language Infrastructure Technologien ASP.NET WEB SERVICES WinForm ... .NET Klassenbibliothek ADO.NET XML RegExp ... Basisklassen Datenmodelle MultiThread IO ... Common Language Runtime Abbildung 8: Komponenten des .NET - Frameworks. Die zweite Kernkomponente des .NET - Frameworks besteht aus einer umfangreichen Klassenbibliothek, der sogenannten Framework Class Library (FCL). Diese beinhaltet Klassen, Schnittstellen und Werttypen. Durch eine konsequente Unterstützung der CLS - kompatiblen Typen innerhalb der FCL, 35 kann diese von allen CLS - komformen Sprachen verwendet werden. Die Typen implementieren Funktionalitäten wie Darstellung von Basisdatentypen und -ausnahmen, Kapseln von Datenstrukturen, E/A - Operationen, Aufrufen von .NET Framework - Sicherheitsüberprüfungen, Datenzugriff und weitere. Die einzelnen Bestandteile der FCL sind entsprechend ihren Funktionen in unterschiedliche Namensräume unterteilt. Die Benennungskonvention folgt einer Punktsyntax, welche zum Aufbau einer hierarchischen Struktur verwendet wird. Der erste Teil eines solchen Bezeichnung bis zum letzten Punkt stellt den Namen des Namespace, die Bezeichnung hinter dem letzten Punkt den Namen des Typs dar. Teile der FCL kapseln die vom Microsoft Windows Betriebssystem bereitgestellten Programmierschnittstellen (Windows Application Programming Interface). Ein Beispiel hierfür sind die im Namespace System.Windows.Forms vorliegenden grafischen Steuerelemente. Zur Zeichnung der grafischen Elemente, wie bspw. eines Fensters, werden die internen Windows-Schnittstellen verwenden. Aufbauend auf CLR und FCL existieren innerhalb des .Net-Frameworks zur Unterstützung verschiedener Softwarearchitekturen bzw. Umgebungen verschiedene Technologien. Die Entwicklung von webbasierten Anwendungen wird beispielsweise durch Klassen unterstützt, welche auch unter dem Namen ASP.Net subsummiert werden. Weitere Technologien betreffen die Entwicklung von Webservices, Konsolenanwendung (ohne GUI) und sogenannten WinForms-Anwendung. Für die Entwicklung von .Net-Anwendungen eignet sich als integrierte Entwicklungsumgebung (engl. integrated developmente environment IDE) vorzugsweise das ebenfalls von Microsoft erhältliche, jedoch kostenpflichtige, Visual-Studio.Net. Als kostenfrei Alternative sei an dieser Stelle auf SharpDevelop18 hingewiesen. 4.1.2 Zugriff auf Datenquellen mit ADO.NET Mit der Einführung der .NET-Plattform wurde zugleich eine neue und komfortablere Weise der Datenbeschaffung und Datenaufbereitung zur Verfügung gestellt. ADO.NET stellt Klassen und Schnittstellen zur Verfügung, welche 18 http://www.icsharpcode.net/OpenSource/SD/ 36 einen einheitlichen und performanten Zugriff auf vielfältige Datenquellen, insbesondere relationale Datenbanksysteme (RDBS) und XML-Daten, gewährleisten sollen. Die Vererbung des Namens der Vorgängertechnologie, Active-Data-Objects, suggeriert ein Ähnlichkeit beider Technologien, welche sich bei der näherer Betrachtung jedoch nicht bestätigt. ADO.Net ist ein von Grund auf neuer, objektorientierter Ansatz für den Zugriff auf Datenquellen. In diesem Abschnitt wird die ADO.Net Technologie und das damit umgesetzte Konzept des einheitlichen Datenquellenzugriffs beschrieben. Die Grundlage für die Beschreibung einzelner Schnittstellen und Klassen bildet dabei das .NetFramework 1.1, da sich hinsichtlich der Prinzipien und Funktionsweisen in der Version 2.0 keine wesentlichen Änderungen ergeben haben. Innerhalb des .Net-Frameworks bezeichnet ADO.Net (Active Data Objects.Net) die Komponente für den einheitlichen Zugriff auf unterschiedliche Datenquellen, insbesondere jedoch relationale Datenbankmangementsysteme und XML-Daten. Der Verbindungsaufbau zu einem relationalen DBMS geht einher mit der Belegung von Resourcen. Neben der Nutzung vorhandener Netzwekkapazitäten müssen sowohl Client-seitig als auch Server-seitig Informationen zur Verwaltung die Verbindungen vorgehalten werden. Gemeinsam mit weiteren sessiongebundenen Funktionen wie bspw. dem Caching von SQL-Anfragen und deren Ergebnissen belegt jede Verbindung Speicherplatz, so daß die Anzahl der vom Server gleichzeitig handhabbaren Verbindungen begrenzt ist. Ein weiterer, limitierender Faktor sind ggf. einschränkende Lizenzbestimmungen des Herstellers eines DBMS, die dem Nutzer nur eine bestimmte Anzahl gleichzeitiger Verbindungen erlauben. Sofern der Anwendungskontext es erlaubt, ist eine Schonung der Resourcen bspw. durch unmittelbare Freigabe der Datenbankverbindung nach erfolgter Nutzung oder durch die gemeinsame Nutzung einer bestehenden Verbindung (ConnectionPooling) ein sinnvolles Ziel, das es bei der Entwicklung von Datenbankanwendungen zu berücksichtigen gilt. Als Konsequenz der genannten Anforderungen ist es vorteilhaft, die Datenbeschaffung und Datenhaltung von einander zu trennen. Dies führt zu einer zweigeteilten Klassenarchitektur, wie man sie in der ADO.NET - Komponente wiederfindet (Abbildung 9) [18]: • DataSet - Klassen • .NET - Datenprovider - Klassen. Die Datenbeschaffung wird von einem .NET - Datenprovider übernommen. 37 Abbildung 9: Überblick über das Zusammenspiel zwischen den ADO.NET Klassen, den Datenquellen und einer .NET - Anwendung. Die dicken Pfeile imlizieren den Datenstrom. Die dünen Pfeil zeigen wie die Kommunikation zwischen den einzelnen ADO.NET - Klassen abläuft und wie die der Datenfluß von den ADO.NET-Komponenten geregelt ist. 38 Zu den Hauptkomponenten des .NET - Datenproviders zählen: • Connection - Komponente, welche die Verbindung zur Datenbank aufbaut und die Transaktionsverwaltung übernimmt • Command - Komponente verwendet die Connection - Komponente, um die SQL - Anweisungen oder gespeicherte Prozeduren auszuführen. • DataReader - Komponente wird von Command - Komponente erzeugt und mit Ergebnissen der Abfrage befüllt. Bei DataReader - Komponente handelt es sich um einen vorwärts gerichteten und schreibgeschützten Datensatzleser. • DataAdapter - Komponente kommuniziert mit DataSet, wobei dieses mit Daten gefüllt wird und dadrin vorgenommene Daten - Änderungen mit der Datenquelle abgegliechen werden. Diese Hauptkomponente des ADO.NET - Providers impementieren eine einheitliche Schnittstelle, mit welcher der Zugriff und die Nutzung beliebiger (relationaler) Datenquellen abstrahiert wird. Ob kommerzieller Hersteller eines DBS oder Open-Source Projekte (siehe MySQL), durch die Schnittstellendefinitionen wird jeder Interessent in die Lage versetzt, einen eigene, an das jeweiligen Systeme angepassten Datenprovider entsprechend den Schnittstellendefinitionen zu entwickeln. Programmiert der Softwareentwickler innerhalb seines Quellcodes konsequent gegen die Schnittstellen, so kann das verwendete DBS theoretisch mit sehr geringem Auffand durch die Nutzung eines anderen Datenproviders ausgetauscht werden. Seit der Veröffentichung des .Net-Frameworks sind für eine vielzahl (relationaler) DBMS Datenprovider entwickelt worden, welche den Schnittstellendefinitionen von Microsoft entsprechen. Die folgende Auflistung stellt lediglich einen Ausschnitt der verfügbaren Datenprovider dar: • OleDb-Datenprovider (Microsoft) • ODBC-Datenprovider (Microsoft) • Sql-Datenprovider (SQL-Server, Microsoft) • Oracle-Datenprovider (Microsoft) • Oracle-Datenprovider (ODP.Net, Oracle) Die verbindungslose Datenhaltung kann über die mächtige DataSet - Klasse erfolgen. Die DataSet - Klasse kann als eine Art In-Memory-Datenbank 39 betrachtet werden. Innerhalb einer DataSet - Instanz können mehrere Instanzen der DataTable - Klasse abgelegt werden. Die DataTable Instanzen können bspw. eine Tabelle innerhalb des DBMS repräsentieren. Bei einer geöffneten Datenbankverbindung kann die DataSet - Klasse Datenänderungen direkt an die Datenbank weiterleiten. Neben diesen „online“- Funktionalitäten kann die DataSet - Klasse die Daten jedoch auch ohne eine Verbindung zur Datenbank sozusagen offline verwalten. Die Zeilen eines DataTable - Objektes können mittels der DataRow - Klasse, die Spalten mittels der DataColumn Klasse angesprochen werden. Sobald eine DataSet-Instanz mehrere Tabellen enthält, können zwischen diesen auch Relationen zur Wahrung der Datenintegrität definieren werden. Des weiteren besteht die Möglichkeit, über XML - Schema Definitionen XML - Daten in ein DataSet - Objekt einzulesen. Auf die XML - Funktionalitäten soll hier jedoch nicht weiter eingegangen werden. 4.1.3 Programmiersprache C# C# wurde von Anders Hejlsberg19 entwickelt und von Microsoft im Rahmen der .NET-Technologie im August 2001 erstmal veröffentlicht. Die in dieser Diplomarbeit eingesetzte Version C# 2.0 wurde von Microsoft im Jahr 2005 als Bestandteil des .NET-Framework 2.0 und des Visual Studio .NET 2005 veröffentlicht [13]. C# ist eine objektorientierte Programmiersprache, die in ihrer Sprachdefinition als Weiterentwicklung der Programmiersprache C++ dargestellt wird. Die Benennung der Sprache ist auch nicht zufällig gewählt. Das #-Zeichen (engl. Cis) kommt aus der Musik - Welt und repräsentiert die Erhöhung des Notenwertes C um einen Halbton. Trotz der Zugehörigkeit zur C - Familie, existieren offensichtliche Parallelen zur Java Programmiersprache. Bei der Entwicklung von C# wurden zwei wesentliche Anforderungen gestellt. Zum einen die Vorteile der Programmiersprachen Java und C++ in einer Sprache zu vereinen. Zum anderen sollte ein einfacher Umstieg von diesen Sprachen auf C# ermöglicht werden. Zu den Gemeinsamkeiten zwischen C# und Java zählen unter anderem die Technik zur automatischen Speicherverwaltung innerhalb des Programms (Garbage Collection), Unterstützung von Threads20 , Verzicht auf aus C/C++ 19 Anders Hejlsberg entwickelte unter anderem die Programmiersprache Turbo Pascal, später Delphi entwickelt hat. 20 Threads sind eigenständige Aktivitäten in einem Prozeß, die unabhängig von anderen Prozeßteilen abgewickelt werden [5]. 40 bekannte Zeiger sowie Mehrfachvererbung durch Schnittstellen. Zu den Neuerungen in C# zählen Sprachelemente wie • Eigenschaften (engl. Properties) sind Member21 , die einen flexiblen Mechanismus zum Lesen, Schreiben oder Berechnen von Werten privater Felder zur Verfügung stellen. • Mit dem Delegate - Schlüsselwort wird ein Referenztyp deklariert, mit dem eine benannte oder eine anonyme Methode gekapselt werden kann. • Indexer ermöglichen das Indizieren von Instanzen einer Klasse oder Struktur auf dieselbe Weise wie Arrays. Weiterhin sind neue Datentypen hinzugekommen wie struct - Typen22 , foreach - Schleife, Dezimaltyp, Aufzählungstypen (Enum) und weitere. Mehr zur den Gemeinsamkeiten und den Unterschieden zwischen C# und Java sind auf der Microsoft Homepage zu finden [4]. Mit C# als Programmiersprache des .NET - Frameworks können webbasierte Anwendungen, Desktop - und Konsolen - Anwendungen sowie Webservices implementiert werden. Da es in dieser Arbeit um die Entwicklung einer webbasierten Anwendung in .NET geht, wird der weitere Fokus auf die Entwicklung der webbasierten Anwendung mit C# und den .NET - Framework gelegt. ASP.NET trennt die Programmlogik von der Darstellung, wodurch die Wartbarkeit des Programmcodes verbessert wird. Die Darstellung wird in einer Datei mit der Erweiterung *.aspx implementiert, die zugehörige Programmlogik in einer sog. CodeBehind - Klasse in einer separaten Datei editiert. Die Erweiterung der CodeBehind - Datei hängt von der eingesetzten Sprache ab. Für C# wird die Datei - Endung *.cs genommen, für die VB.NET - Klassen ist die Endung *.vb. Abbildung 10 zeigt den Programmcode für ein einfaches .NET - Web Formular. Abbildung 10.a) stellt die Eingabe - Felder und die Schaltfläche dar, welche auf der Benutzeroberfläche zu sehen sind. In Abbildung 10.b) ist der Quellcode der MyForm.aspx - Seite dargestellt. Diese beinhaltet nicht 21 In der objektorientierten Programmierung ist ein Member eine Funktion oder Variable der Klasse. 22 Bei einem struct - Typ handelt es sich um einen Werttyp, der in der Regel verwendet wird, um kleine Gruppen von zusammengehörigen Variablen zukapseln, z. B. die Koordinaten eines Rechtsecks. 41 nur HTML - Elemente, sondern auch die ASP.NET Webserver - Steuerelemente. Dies sind ASP.NET - Objekte, die beim Anfordern der ASPX Seite serverseitig ausgeführt werden und Markup zur Anzeige im Internet - Browser ausgeben. Das Hinzufügen vom runat=“server“ - Attribut in der Deklaration des Steuerelements ist notwendig, damit das Steuerelement serverseitig verarbeitet wird. ASP.NET stellt eine Vielzahl an Steuerelementen zur Verfügung, welche von der WebControl Klasse abgeleitet werden. In diesem Beispiel werden die Steuerelemente Page, Label -, TextBox und Button eingesetzt. Dem .NET - Entwickler wird somit ermöglicht, auch eigene Steuerlemente (sog. benutzerdefinierte Steuerelemente) zu implementieren, mit individuellen Aussehen und Verhalten. Die benutzerdefinierte Steuerelemente werden ebenfalls von der WebControl Klasse abgeleitet. Die zur ASPX Seite zugehörige CodeBehind - Klasse ist in Abbildung 10.c) zu. Die Referenzierung auf diese Klasse geschieht im Page - Steuerelement in den Attributen „CodeFile“ und „Inherits“. Die MyForm - Klasse wird von der Page - Klasse abgeleitet, welche als Namenscontainer für alle Serversteuerelemente auf einer Seite fungiert. Mehr zu webbasierten ASP.NET - Anwendungen ist auf der Microsoft Homepage [11] zu lesen. 4.2 Die Ajax - Technologie Ajax ist die Abkürzung von Asyncronous JavaScript23 and XML24 und ist die Kombination aus diesen länger existierenden Technologien. Bei Ajax handelt es sich um ein Konzept der asynchronen Datenübertragung zwischen Client und Server. Dieses Konzept ermöglicht es innerhalb einer HTML - Seite Abfragen an einen Server zu schicken und die Ergebnisse zu empfangen, ohne die HTML - Seite im Browser komplett neu laden zu müssen. Genauer werden nur die einzelnen Fragmente der HTML - Seite aktualisiert. In Abbildung 11 ist die Struktur einer webbasierten Anwendung mit Ajax dargestellt, wobei der Austausch von Seitenfragmenten veranschaulicht wird. Das Kernstück der Ajax - Technologie ist das JavaScript Objekt XmlHttpRequest, welches von jedem modernen Internet Browser unterstützt wird. Im Gegensatz zur HTTP - Rundläufe (engl. Roundripts) werden bei XMLHTTP - Aufrufen zusätzlich XML - Daten ausgetauscht. Die XML - Daten werden clientseitig per Javascript verpackt und über HTTP übertragen. 23 JavaScript ist eine clientseitige Programmiersprache, die in Speicher des Browsers ausgeführt bzw. interpretiert wird. JavaScript wurde 1995 von Sun und Netscape entwickelt. 24 XML (Extended Markup Language) ist die standardisierte Sprache zur Definition von individuellen Auszeichnungssprachen (z.B. HTML) mit denen strukturierte Informationen ausgezeichnet werden. 42 Abbildung 10: Programmcode für ein .NET - Web - Formular. 43 Abbildung 11: Die Struktur der webbasierten Anwendung mit Ajax. Da die Umsetzung der webbasierten TInTo - Anwendung mit der .NET - Technologie realisiert wird, ist die von Microsoft bereitgestellte ASP.NET Ajax Erweiterungen (engl. Extensions) vom besonderen Interesse [1]. Hierbei handelt es sich um ein kostenloses Framework, mit dem asynchrone Interaktionen zwischen dem Client und Server ermöglicht werden. Zu den Server Komponenten der ASP.NET Ajax Erweiterungen gehören: • Script Unterstützung • Webservices • Application Services • Server Steuerelemente Die Script Support - Komponente wird zum einen für die Bereitstellung der ASP.NET Ajax Bibliothek (engl. Library) und zum anderen für das Rendering der Seitenfragmente benötigt. Mit Hilfe der Webservices - Komponente wird der clientseitige Aufruf von Web - Services ermöglicht. Die Application Services - Komponente bestehen aus Built - In Webdiensten, welche wiederum auf in ASP.NET vorhandenen Komponenete wie auf ASP.NET Formular Authentifizierung aufbauen, Benutzer - Rollen und Profile basieren. Die Server Steuerelemente - Komponente wird sowohl clientseitig als auch serverseitig im Programmcode eingebunden. Da die ersten drei Komponenten, im Gegensatz zur Server Controls - Komponente, in dieser Arbeit nicht benötigt werden, wird auf die Beschreibung dieser Komponenten nicht weiter eingegangen. Zu den meist eingesetzten Server Controls gehören: 44 Abbildung 12: Das Zusammenspiel der Ajax Server - Steuerelemente: • ScriptManager : Diese verwaltet die Client - Scripts für ASP.NET AJAX - Seiten durch Registrierung des Frameworks. Dies wird für die Bereitstellung von AJAX - Funktionalität in einer ASP.NET - Seite benötigt. • UpdatePanel : Diese ermöglicht das partielle Aktualisieren von ASP.NET - Seiten. Das zu aktualisierende Seitenfragment wird von dem UpdatePanel - Steuerelement gekapselt. Das UpdatePanel läßt sich in Verbindung mit dem ScriptManager - Steuerelement verwenden. • UpdateProgress: Ermöglicht das Laden von Statusinformationen, die sich auf partielle Aktualisierungen von HTML - Seiten beziehen. Diese sind besonders bei langsamen partiellen Updates hilfreich, damit der Benutzer eine Rückmeldung über den Fortschritt erhält. • Timer : Führt asynchrone oder synchrone Postbacks von ASP.NET Seiten in einem definierten Intervall durch. Damit lassen sich auch Bereiche einer Seite aktualisieren, Servercode ausführen oder die ganze Seite in einem bestimmten Intervall auf den Server laden. In Abbildung 12 wird das Zusammenspiel der Server - Steuerelemente verdeutlicht. Zuerst wird das serverseitiges Steuerelement Scriptmanager definiert, wobei den Kern von ASP.NET Ajax aktiviert wird. Mit dem Scriptmanager werden alle notwendigen Client - Scripts in der Seite eingebunden. Das zu aktualisierende Seiten Fragment wird mit dem UpdatePanel - Steuerelement aufgespannt. Im ContentTemplate wird definiert, was im Steuerelement erscheint, wenn es erstellt wird. Timer verursacht eine automatische Aktualisierung des UpdatePanels. Hierfür wird der Trigger zugeordnet, indem dieser das Event OnTick des Timers repräsentiert. 45 Es gibt mehrere Gründe die Ajax - Technologie bei der Entwicklung der Tinto - Webschnittstelle einzusetzen. Mit Ajax sind webbasierten Anwendungen performanter, da nicht bei jeder Benutzerinteraktion die Seiten neu geladen werden müssen. Des weiteren verwendet Ajax freie Webtechnologien wie XML und Javascript und ist kostenlos verfügbar. Die Ajax - Technologie hat auch einige Nachteile. Da Ajax auf JavaScript basiert und dieses bei manchen Internet - Browsern deaktiviert ist, können Ajax - Funktionen in diesem Fall nicht aufgerufen werden. da die Ajax - Abläufe nicht in der Historie des Internet - Browsers fixiert sind, kann der Benutzer die Funktion des „Zurück“ - Buttons des Internet - Browsers nicht mehr sicher bedienen. Dies könnte zu einem inkonsistenten Zustand zwischen der Anzeige im Browser un der serverseitig verwalteten Sessiondaten führen. 46 5 Entwurf einer webbasierten TInTo - Anwendung Der Gegenstand dieser Diplomarbeit ist, es eine webbasierte Version des bestehenden TInTo - Systems zu realisieren. Dieses Kapitel befaßt sich mit der Konzeptionierung der Umsetzung dieses Ziels. Im ersten Abschnitt 5.1 werden die Anforderungen und die Zielsetzungen an das entstehende System aufgezählt und ein entsprechendes Anforderungsprofil erfasst. Im darauf folgenden Abschnitt 5.2 wird eine Auswahl der für die Realisierung benötigten Werkzeuge bzw. Technologien getroffen und die Umstrukturierung der Softwarearchitektur beschrieben. Daraus resultierende Änderungen und Erweiterungen am bestehenden Datenbankschema werden im letzten Abschnitt 5.3 aufgeführt. 5.1 Anforderungsprofil und Anwendungsfall Bei der Konzeptionierung der Umsetzung der webbasierten Version von TInTo sollte dessen Kernfunktionalität in ersten Version [19] übernommen werden. Diese beinhaltet das Anzeigen von Wertpapier - Kursdaten und von Indikatoren, das Neuanlegen und das Bearbeiten von Indikatoren, die Aufnahme neuer Wertpapiere in die Datenbank, die Abfrage von Wertpapier Kursdaten über den Finanz - Webservice von Yahoo (finance.yahoo.com) und deren Abspreicherung in der Datenbank. Eine weitere Anforderung war einen autorisierten Zugriff auf das System zu gewährleisten. Hierfür soll ein neues Benutzer - Verwaltungsmodul konzepiert und realisiert werden, wobei ein rollenbasierter Zugriff für die System - Benutzung festgelegt werden soll. All diese Anforderungen lassen sich in einem Anwendungsfalldiagramm25 (siehe Abbildung 13) zusammenfassen, dessen Haupt - Anwendungsfällen im Folgenden beschrieben werden. Benutzer Authentifizieren Bevor ein Benutzer das System bedienen kann, soll dessen Authentifizierung staatfinden. Dabei werden ein Benutzername und ein Kennwort dem System übergeben, welches anhand dieser Daten das Zugriffsrecht sowie die Rollen - Zuordung des Benutzers in der Datenbank abfragt. Mit der Abfrage nach dem Zugriffsrecht soll festgestellt werden, ob der Benutzer in der System 25 Ein Anwendungsfalldiagramm (engl. use case diagram) ist eine der dreizehn Diagrammarten der Unified Modeling Language (UML), mit welcher sich eine Menge von Aktivitäten eines Systems aus der Sicht seiner Akteure beschreiben lassen. 47 Abbildung 13: TInTo Anwendungsfall. 48 Datenbank vorhanden und nicht gesperrt ist. Mit der Abfrage nach der Rollen - Zuordnung hingegen soll bestimmt werden, ob es sich um einen Analysten oder einen Administrator handelt. Aktuell sind im TInTo - System nur diese zwei Rollen hinterlegt, jedoch die Hinzunahme weiterer Rollen (z.B. Leser Rolle, der nur die Wertpapier Analysieren kann) möglich. Wertpapier Analysieren Nach einer erfolgreichen Authentifizierung kann der Benutzer die zuvor eingerichteten Wertpapiere analysieren. Dem Benutzer wird eine breite Palette an für die Analyse benötigten Einstellungen zur Verfügung gestellt (z.B. die Festlegung des Zeitraumes, Auswahl der Darstellungsform für die Indikator Kurve). Bei diesem Anwenundgsfall handelt es sich um eine Generalisierung der Unter - Anwendungsfälle Wertpapier Kursdaten Anzeigen und Wertpapiere Verwalten Dieser Anwendungsfall generalisiert die Unter - Anwendungsfälle Wertpapier Entfernen und Wertpapier Bearbeiten, wobei beim letzteren ein weiterer Wertpapier Neuanlegen vorkommt. Beim Neuanlegen eines Wertpapiers kann der Benutzer anhand eines Suchsymbols eine Liste übereinstimmender Symbole von Yahoo - Webservice abrufen. Bei der Speicherung des Wertpapiers in der Datenbank werden gleichzeitig die Kursdaten bis zum aktuellen Datum beim Yahoo - Webservice abgefragt und in der Datenbank gespeichert. Dieses Verhalten wird im Anwendungsfalldiagramm mittels der include - Pfeils dargestellt. Will der Benutzer ein bestimmtes Wertpapier aus der Datenbank entfernen, so werden auch dessen Kursdaten gelöscht. Indikatoren Verwalten Dieser Anwendungsfall ist eine Generalisierung, bei welchem die gleichen Beziehungen zwischen den Unter - Anwendungsfällen Indikator Bearbeiten, Indikator Neuanlegen und Indikator Entfernen gelten, entsprechend dem Anwendungsfall Wertpapier - Verwalten. Ein Analyst kann eigene Indikatoren anlegen, bearbeiten und entfernen. Beim beim Entfernen wird überprüft, ob der zu löschende Indikator von keinem anderen Indikator verwendet wird. Ein Administrator kann „fremde“ Indikatoren verwalten, wobei dem Analysten nur das Leserecht eingeräumt wird. Benutzer Verwalten 49 Dieser Anwendungsfall ist nur für Benutzer mit Administratoren - Rolle zulässig. Der Administrator kann Benutzer anlegen und bearbeiten, wobei die Personen - Daten (Name, Vorname, E-Mail und weitere) erfasst, die Rolle zugeordnet und Zugangsdaten (Benutzername und Kennwort) festgelegt werden. Beim Löschen eines Benutzers wird überpüft, ob seine Indikatoren von anderen verwendet werden. Trifft dies zu, kann sein Zugang nur gesprerrt werden. Andernfalls werden seine Daten sowie seine Indikatoren aus der Datenbank entfernt. 5.2 Neuentwurf der Softwarearchitektur Die erste Version von TInTo ist eine Access - Anwendung, welche lokal auf dem Rechner eines Benutzers ausführbar und nur von diesem Benutzer zu bedienen ist. Ziel ist nun eine webbasierte Version von TInTo zu realisieren, welche parallel mehrere Benutzer bedienen kann. Bei der Konzipierung und dem Entwurf der webbasierten Schnittstelle für TInTo sollte eine Ausschau nach geeigneten Werkzeugen und Technologien gehalten werden, deren Auswahl dem Autor dieser Diplomarbeit überlassen wurde. Für die Realisierung dieser datenbankgestützten und webbasierten Anwendung ist die Microsoft .NET - Technologie gut geeignet. Der Einsatz dieser Technologie ist zum einen wegen der ADO.NET - Komponente vorteilhaft, welche die Datenbeschaffung von der Datenaufbereitung trennt, somit zur Verringerung des Datentransfers im Netz und zu einer Verbesserung der Anwendungs - Performance führt. Zum anderen lassen sich die HTML - Oberfläche und der Programmcode klar trennen, wodurch das Design der Benutzeroberfläche und die eigentliche Programmierung der Logik von einander unabhängig verändert werden können. Die webbasierte Anwendung wurde mit dem .NET - Framework 2.0 umgesetzt, als Entwicklungsumgebung wurde das Visual Studio 2005 und die Programmiersprache C# eingesetzt. Bei der Wahl der Datenbank sollten die Vorteile und die Nachteile der im Kapitel 2.3 vorgestellten Datebanksysteme hervorgehoben und berücksichtigt werden. Die einzusetzende Datenbank soll folgende Anforderungen erfüllen: • Performant für den Mehrbenutzerbetrieb: Eine parallele Nutzung der Anwendung von Mehreren Benutzern sollte zu keinerlei Performance Verlusten führen. Access ist, im Vergleich zu den Datebanksystemen SQL Server und zur Oracle, hat schwächere Cache - Mechanismen, sodass diese Anforderung von diesem nicht gewährleistet werden kann. • Unbeschränkte Kapazität: Im Falle der Intraday - Kursdaten - Analyse, welche von mehreren Benutzern parallel durchgeführt werden kann 50 Abbildung 14: Softwarearchitektur der webbasierten Anwendung für TInTO. 51 und deren Kursdaten auch in der Datenbank gespeichert werden, ist eine unbeschränkte Kapazität bzgl. der verwalteten Datenmengen der Datenbank Voraussetzung. Auch hier kommt Access nicht in Frage, da dessen Datenkapazität bei 2 Gigabyte liegt. • Unterstützung von materialisierten Sichten: Die Intraday - Analyse ist ein wichtiger Bestandteil der Wertpapieranalyse. Die datenbankgestützte Intraday - Analyse beruht auf den Konzept der Änderungspropagierung 26 . Hierbei handelt es sich um die sofortige Aktualisierung der Sichten, sobald eine Änderung in den Basistabellen stattfindet. Da die Indikatorwerte für die Intraday - Analyse möglichst schnell berechnet und angezeigt werden müssen, ist es sinnvoll, diese zu materialisieren. Die Umsetzung der Intraday - Analyse wird in dieser Diplomarbeit nicht behandelt, für eine spätere Weiterentwicklung der webbasierten TInTo - Anwendung vorgesehen ist, sollte diese Anforderung bei der Wahl der Datenbank jedoch erfüllt sein. Im Kapitel 2.3.4 wurde bereits erwähnt, daß Oracle die materialisierten Sichten und verschiedene Strategien für die Änderungspropagierung unterstützt. Aufgrund dieser und des zusätzlichen Aspekt, daß Oracle nahezu keine Kapazitäts - Beschränkung besitzt und Mehrbenutzerbetrieb für den ausgelegt ist, wird Oracle bei der Realisierung der Webschnittstelle für TInTo eingesetzt. Wie schon in vorherigen Abschnitt angedeutet wurde, werden die Kernfunktionalitäten des bestehenden TInTo in dessen webbasierter Version übernommen. Die TInTo - Basisfunktionalitäten sowie die neue Benutzerverwaltung werden jedoch in einem anderen technischen Umfeld realisiert, was eine komplette Neuimplementierung der TInTo - Anwendungen erfordert. Abbildung 14 zeigt die Softwarearchitektur der webbasierten TInTo - Anwendung. Es handelt sich um eine Client - Server - Architektur, wobei sowohl die Anwendung als auch die Datenbank auf einem Server ausgeführt werden. Über einen Client - Browser wird die GUI und auf die Programm - Funktionen zugegriffen. Die Anwendung läßt sich in zwei logische Schichten aufteilen: die Präsenationslogik - und die Programmlogik - Schicht. Das eigentliche Verhalten des TInTo - Systems wird in der Programmlogik - Schicht abgebildet. Diese koordiniert die Kommunikation zwischen den 26 Die Änderungspropagierung wird ausführlich in der Diplomarbeit von Gereon Schlüller beschrieben [23]. 52 einzelnen System - Komponenten des TInTo, dem Yahoo - Webservice und der Oracle Datenbank. Zu den TInTo - System - Komponenten gehören: • Benutzer : diese Komponente deckt die Benutzer - Verwaltung und Authentifizierung ab. Sie regelt die Zuordnung zwischen den System Rollen (Administrator - oder Analyst - Rolle) und den Benutzern. • Wertpapier : diese Komponente deckt die Wertpapier - Verwaltung ab. • Indikator : diese Komponente deckt die Indikator - Verwaltung ab. • Berechnung: in dieser Komponente werden die notwendigen Berechnungen für die Indikator - Werte der ausgewählten Wertpapier vorgenommen. Diese Berechnungen werden an die externe Komponente ChartDirector zur Visualisierung übergeben. • Datenbank : diese Komponente sorgt für einen einheitlichen Zugriff der System - Komponenten auf die Oracle Datenbank. Die Präsentationslogik - Schicht besteht aus zwei Komponenten: • Yahoo • Präsentation Die Yahoo - Komponente wird benötigt um die Kommunikation zwischen den Berechnung - Komponente mit dem Yahoo - Webservice zu gewährleisten. Die vom Yahoo - Webservice angefragten Daten werden als XML - Datei oder CSV - Datei geliefert. Die Daten werden von der Yahoo - Komponente aufbereitet und für die weitere Verwendung an die System - Komponenten übergeben. Die Präsentation - Komponente ist zur Verbesserung der Übersichtlichkeit in Abbildung 14 als eine Komponente dargestellt. Bei näherer Betrachtung läßt sich diese weiter in mehrerer Unter - Komponenten erkennen (siehe Abbildung 15) Die TInTo - GUI stellt mehrere Konsolen zur Verfügung: Wertpapier Analyse, Wertpapier, Indikator und Administration. Jede dieser Konsolen ist als eine Konsolen - Komponente zu verstehen. Die verschiedenen Konsolen werden über die Navigation - Komponente angesteuert. Jede Konsole besteht aus entsprechenden Seiten, welche bei der Konsole - Auswahl über die Navigation geladen werden. Diese Seiten werden durch die Seiten - Komponente verkörpert. Aktionen wie Löschen, Neuanlegen, Speichern, Chart Aktualisieren, Kursdaten laden werden in der Ribbon - Komponente zusammen gefaßt. Bei dieser Komponente handelt es sich um eine Sammlung von Schaltflächen, 53 Abbildung 15: Die Präsentationslogik - Schicht der webbasierten TInTO Anwendung. die konsolenspezifisch geladen werden. Für die Kommunikation zwischen den einzelnen Komponenten sowie der Client - Server - Kommunikation ist die Ajax - Komponente zuständig. Falls ein Ereignis in einer der Konsolen ausgelöst wird, so wird dieses über die Ajax - Komponente an andere, relevante Komponente weitergeleitet. 5.3 Erweiterung des Datenbankschemas Aufgrund der gestellten Anforderungen wie beispielsweise der Benutzerverwaltung ist eine Erweiterung des bestehenden Datenbankschemas notwendig. Bei dem Neuentwurf der Datenbank wurden unter anderem alle Tabellen und Spalten - Namen einheitlich in Englisch umbennant. Jede Tabelle in der Datenbank stellt ein Objekt der Anwendung dar und jeder Datensatz eine Instanz dieses Objektes. Jede Datensatz wird mit fortlaufenden Identifikationsnummer gespeichert. Die Beziehungen zwischen den Objekten in erweiterten Datenbankschema lassen sich in zwei Gruppen klassifizieren: • Wertpapier (Abbildung 16.a) • Benutzer (Abbildung 16.b) In der Beziehungsgruppe Wertpapier steht das Entity Wertpapier im Mittelpunkt. Dem Wertpapier werden anhand seiner Identifikationsnummer Kursdaten zugeordent. Ein Wertpapier kann einem einzigen Typ zugeordent werden. In beiden Fällen handelt es sich um eine 1:N - Beziehung, wobei das Entity mit der N - Kardinalität den Foreign Key des anderen in einer seiner 54 Abbildung 16: Erweitertes Datenbankschema: Beziehungsgruppen. Attribute enthält. In der Beziehungsgruppe Benutzer steht das Entity Benutzer im Mittelpunkt. Der Benutzer ist genau einer Benutzergruppe zugeordnet und hat genaue eine Adresse. Der Benutzer kann jedoch mehrere Indikatoren in der Datenbank speichern. Im Folgenden sind die Spalten und deren Werte - Bereiche der einzelnen Tabellen aufgeführt. Instrument: EodQuote: Type: UserGroup: Address: {instrumentID:integer, typeID:integer, symbol:string, name:string, isin:string, wkn:string} {eodquoteID:integer, instrumentID:integer, date:date, dacount:integer, open:float, high:float, low:float, close:float, volume:integer, volume1:float, volume2:float, volume3:float} {typeID:integer, name:string, description:string } {usergroupID:integer, name:string} {addressID:integer, street:string, zip:string, city:string, country:string, email:string } 55 User : Indicator : {userID:integer, usergroupID:integer, addressID:integer, login:string, password:string, name:string, firstname:string, active:integer, description:float} {indicatorID:integer, userID:integer, name:string, shortname:string, priority:integer, shortname1:string, shortname2:string, shortname3:string, color1:integer, color2:integer, color3:integer, description:string } 56 6 Ausgewählte Aspekte der Programmierung Dieses Kapitel soll einen Einblick in die relevanten Aspekte der Programmierung verschaffen. Das Ziel ist, dem Entwickler für die Weiterentwicklung der webbasierten TInTo - Anwendung das notwendige Wissen zu vermitteln. 6.1 Struktur der webbasierten Anwendung In diesem Kapitel wird ein Überblick über das Projekt - und die Klassen Struktur der webbasierten Anwendung gegeben. Beim Erstellen einer .NET Anwendung in .NET wird zunächst eine leere Projekt - Mappe (auch solution genannt) angelegt. Innerhalb dieser Mappe lassen sich mehrere Projekte und Dateien hinzufügen. Wie im Abschnitt 5.2 erwähnt wurde, ist die Softwarearchitektur der webbasierten TInTO - Anwendung in zwei Schichten aufgeteilt: in eine Präsentationslogik - und eine Programmlogik - Schicht. Diese Schichten sind als zwei eigenständige .NET - Projekte in der TInTo - Anwendung realisiert: • Programmlogik - Schicht: TInTO - Globals - Projekt • Präsentationslogik - Schicht: TInTO - Web Site - Projekt In den folgenden Unterabschnitten werden diese Projekte bzw. Schichten im einzelnen besprochen. 6.1.1 Programmlogik TInTo - Globals ist ein Class Library - Projekt, in welchem die ganze Programmlogik umgesetzt ist. Diese besteht aus mehreren C# - Klassen27 , welche in unterschiedlichen Namensräumen (engl. Namespaces) gruppiert und in Projekt - Unter - Ordnern abgelegt sind, welche mit den Namen des Namensraumes übereinstimmen. Der Namensraum für das ganze TInTo - Globals Projekt lautet Tinto.Globals, welche als Präfix bei den Unter - Namensräumen gesetzt wird (z.B. Tinto.Globals.BusinessObjects). Im Folgenden werden diese Namensräume im einzelnen besprochen. Auf die ausführliche Beschreibung aller C# - Klassen wird an dieser Stelle verzichtet, da die komplette Quellcode - Dokumentation als HTML - Hilfe zur Verfügung gestellt wird. BusinessObjects 27 Alle Klassen - Namen, - Methoden und - Variablen sind in englischer Sprache geschrieben. 57 In diesem Namensraum befinden sich die Klassen, die die Anwendungs - Objekte implementieren. Diese sind Instrument (Wertpapier), Indicator (Indikator), User (Benutzer), UserGroup (Benutzer Gruppe) und Address (Adresse). Für jedes dieser Objekte wurden drei Klassen angelegt: • Objekt_Name.cs (z.B. User.cs): deklariert die Felder und die Eigenschaften des Objekts. • Objekt_NameFactory.cs (z.B. UserFactory.cs): gibt eine neue Instanz des Objekts zurück. • Objekt_NameRepository.cs (z.B. UserRepository.cs): lädt die Objekt Daten aus der Datenbank, speichert die Änderungen des Objektes in der Datenbank oder entfernt das Objekt aus der Datenbank. Diese Struktur ist an die Modellgetriebene Architektur 28 (MDA) (engl. Model Driven Architecture) [22] angelegt. Database Dieser Namensraum enthält Klassen (DBConnection.cs und DBQueryItem.cs), welche für die reibungslose Transaktionsabwicklung zwischen den Anwendungs - Objekten und der Datenbank sorgen. Mittels dieser Klassen wird eine einheitliche Schnittstelle zur Datenbank zur Verfügung gestellt. Generics Die zu diesem Namensraum zugehörige Klasse GenericChartDirector.cs stellt Methoden zur Verfügung, mit deren Hilfe Finanz - Charts dargestellt werden. Dabei werden die Methoden und Klassen des kommerziellen Produkts ChartDirector benutzt. WebControls Ein wesentlicher Aspekt beim Design und der Implementierung der webbasierten TInTo - Anwendung war, eine eventuelle Weiterentwicklung der Anwendung nach Möglichkeit zu vereinfachen. Hierfür wurde der Ansatz der benutzerdefinierten Steuerelemente verwendet, welche sich in der Seite -, Menuund Ribbon Komponente (siehe Abschnitt 5.2) wiederfindt. Die Klassen, die diese Steuerelemente implementieren, sind in diesem Namensraum erfaßt. 28 Die Model Driven Architecture unterstützt die Erstellung eines Modells, das unabhängig von einer konkreten technischen Plattform ist. 58 Configuration Die oben erwähnten Steuerelemente lassen sich in der web.config29 - Datei der Anwendung konfigurieren. Die Klassen, die diese Konfigurationen verarbeiten, sind in Configuration - Namensraum hinterlegt. 6.1.2 Präsentationslogik Das TInTO - Web Site - Projekt umfaßt die gesamte Präsentationslogik der TInTo - Anwendung, welche die Struktur der Benutzeroberfläche mit allen relevanten HTML - und ASPX - Seiten definiert. ASP.NET bietet anwendungsspezifische Ordner und Dateien, mit denen die globale Konfiguration und Strukturierung des Quellcodes vereinfacht werden. Die XML - basierten Konfigurationsdateien web.config und mashine.config bilden das Kernstück jeder ASP.NET - Anwendung, wobei mashine.config nur einmal mit dem .NET - Framework installiert wird und web.config hingegen für jede Anwendung separat angelegt werden kann. Wird in der Anwendung keine web.config Datei angelegt, so wird die Konfiguration von der mashine.config an die Anwendung vererbt. In der TInTO - Web Site ist eine web.config - Datei vorhanden. Es gibt eine Vielzahl an Einstellungen, die in dieser Datei vorgenommen werden können. Es werden an dieser Stelle nur die für diese Arbeit relevanten Konfigurations - Einträge beschrieben. Die web.config - Datei besitzt ein Hauptelement <configuration>, innerhalb dessen weitere Elemente definiert werden können. Eines dieser Elemente ist <connectionStrings>, in der die Verbindungsdaten zur Oracle Datenbank abgelegt sind. Die Konfiguration der Anwendungs - Konsolen ist ebenfalls in der web.config - Datei vorzunehmen (siehe Abbildung 17). Der Entwickler muß im Abschnitt <Tinto> <Globals> <tin_managers> im Element <defaultmanager > die Standard Konsole festlegen, d.h. diejenige Konsole, welche beim Starten der Anwendung zuerst geladen wird. Mit dem <add > - Element werden weitere Konsolen hinzugefügt. In dem <add> - Element sind folgende Attribute anzugeben: • manager : Gibt den Namen der Konsole an. • listurl und editurl : Gibt für jede Konsole die zugehörigen ASPX - Seiten an. • group: Gibt die Rollen an, welche Zugriffsrechte auf die Konsole hat. 29 siehe Beschreibung der Präsentationslogik - Schicht 59 Abbildung 17: Programmcode - Fragment aus web.config - Konfigurationsdatei. 60 Weiterhin ist die Sichtbarkeit der Aktions- - Schaltflächen wie „Neuanlegen“, „Bearbeiten“, „Löschen“, „Chart Aktualisieren“ und „Kursdaten“ Anzeigen für jede Konsole festzulegen. Hierfür ist das Attribut visibled vorgesehen, wobei beim false - Wert ist Schaltfläche für die entsprechende Konsole nicht sichtbar und beim true - Wert sichtbar ist. Bei den Elementen mit dem Präfix <tin* >, handelt es sich um die benutzerdefinierten Steuerelemente, deren Implementierung im Namensraum WebControls (Abschnitt 6.1.1) liegt. Diese Vorgehesweise vereinfacht eine spätere Weiterentwicklung, so daß der nachfolgende Entwickler zusätzliche Konsolen mit neuen Funktionalitäten in wenigen Schritten hinzufügen kann. In der Ordner - Struktur der webbasierten TInTo - Anwendung sind die ASP.NET Web Site Ordner • App_Code • App_Themes vorhanden. Die im „App_Code“ - Ordner enthaltene Klasse YahooWebService.cs enthält die CodeBehind - Klasse der YahoomWebService.asmx - Datei30 und implementiert die Webmethoden für den Zugriff auf den Yahoo Webservice. Da die Datei YahooWebService.cs im App_Code - Ordner abgelegt ist, ist deren Assembly für jede andere ASPX - Seite der webbasierten TInTo - Anwendung zugänglich. Der Ordner „App_Themes“ beinhaltet alle Dateien (CSS - Dateien und Bilder), die das Erscheinungsbild der TInTo - Anwendung definieren. Die CSS - Dateien sind automatisch (d.h. ohne explizite Pfad - Eingabe) für jede ASPX - Seite sichtbar. 6.2 Umsetzung der Indikatoren in Oracle Die Indikatoren werden mit der Migration nach Oracle implementiert. Dieses Kapitel setzt sich mit der Re - Implementierung der Indikatoren auseinander, wobei die Ausführung der Indikatoren in Oracle Datenbank geschieht. Die Handhabung der Indikatoren in der früheren TInTo - Version [19] konnte nicht eins zu eins in die webbasierten Version übernommen werden. Hierfür sind zwei Gründe ausschlaggebend. Zum einen die SQL - Definitionen 30 ASP.NET stellt Unterstützung für Webservice durch die ASMX - Datei bereit. 61 der Indikatoren31 in Access basieren auf den SQL92 - Standard und Access Basic, zum anderen wird vorausgesetzt, daß die Anwendung nur von einem Benutzter zu bedienen ist. Dies impliziert, daß die Manipulationen der in den Tabellen gespeicherten Kursdaten nur für die einen einzigen Benutzer verwaltet werden müssen. In der webbasierten TInTo - Anwendung hingegen wird Oracle als DBS eingesetzt, und mit einer sog. 3rd Generation Language 32 (hier mit C#) angesprochen. Ein weiterer Unterschied ist, daß die Manipulation der Kursdaten parallel für mehrere Benutzer möglich sein soll. In Abschnitt 6.2.1 werden beispielhaft die im Kontext dieser Arbeit relevanten Unterschiede zwischen Access - und Oracle - SQL erörtert und allgemeine Richtlinien für die Indikator - Definitionen in der webbasierten Anwendung vorgegeben. Der Aspekt der parallelen Manipulation von Kursdaten durch mehrere Benutzer wird in Abschnitt 6.2.2 behandelt. 6.2.1 Umformulierung der Indikatoren - Definition Oracle entspricht nicht vollständig dem SQL92 - Standard. Das hat zur Folge, daß die in Access beschriebenen Indikator - Definitionen unter Oracle umformuliert werden müssen. In Tabelle 2 werden einige Unterschiede in der Schreibweise der Oracle - und Access - SQL - Anweisungen beispielhaft verdeutlicht. In fast allen Indikator - Definitionen werden die folgenden Methoden [19] benötigt: • spGetID(): liefert die Identifikationsnummer des ausgewählten Wertpapier. • spGetN(): liefert einen zum aktuell gewählten Anzeigezeitraum passenden Grenzwert zur zeitlichen Einschränkung der Abfrage. • spGetPar(): dient der Benutzer - Abfrage von notwendigen Parametern. Diese Methoden werden während der Berechnung der Indikatoren aufgerufen. Bei der letzten Methode spGetPar() müsste während der Indikator - Berechnung eine Interaktion zwischen dem Benutzer und dem TInTo - System stattfinden, was für die webbasierten TInTo - Anwendung einen zusätzlichen 31 Unter einer Indikator - Definition ist hier eine Formulierung einer Indikator - Formel in SQL gemeint. 32 Programmiersprachen werden zur Klassifikation in Generationen eingeteilt. Maschinencode repräsentiert die 1. Generation, Assembler die 2. Mit 3rd Generation Language (3GL) werden „höhere“ Programmiersprachen wie C#, Java bezeichnet. 62 Access Oracle Umbennenungen SELECT table.column AS colum_renamed FROM table SELECT tbl_eod.dayclose close FROM tbl_eod Fallunterscheidung IIF ( table.column1 > table.column2, table.column1, table.column2 ) CASE WHEN table.column1 > table.column2, THEN table.column1, ELSE table.column2 END Aktualisierungs - Anweisung mit Self - Join UPDATE table INNER JOIN table AS table1 ON table.column2 = table1.column2 SET table.column = table1.column+1 WHERE table.column > 10 UPDATE table OUTER SET OUTER.column = INNER.column+1 WHERE OUTER.column > 10 AND OUTER.column2 IN (SELECT INNER.column2 FROM table INNER) Tabelle 2: Access - vs. Oracle - SQL. Roundtrip zwischen Server und Client bedeutet. Diese ungewollte Unterbrechung der Indikator - Berechnung zu vermeiden, werden statt diesen Methoden die Platzhalter (@id, @count, @period([text],[zahl])) verwendet, welche vor der Berechnung der Indikatoren in der C# Methode GetIndicatorData() mit den entsprechenden Werten belegt werden. Im Folgenden soll diese Vorgehensweise am Momentum - Indikator (siehe Kapitel 3.1.2) veranschaulicht werden. In Tabelle 3 ist die Definition des ADX gegeben. Die Definition wird in der Methode GetIndicatorData() analysiert und der Parameter @id mit der Identifikationsnummer des ausgewählten Wertpapiers und der Parameter @count wird mit einem Rückgabewert der Methode GetMaxcount() belegt. Der Platzhalter @period(’Kurseinheiten’,10) wird gesondert behandelt. Sobald die Auswahl eines Indikators getroffen ist, wird in dessen Definition nach dem Platzhalter @period([text],[Zahl]) gesucht. Ist diese vorhanden, so werden zusätzliche Eingabe - Felder eingeblendet. An dieser Stelle wird die Ajax - Technologie dazu verwendet, um nur das Seitenfragment zu aktualisieren bzw. anzuzeigen, welches dieser Eingabe - Felder beinhaltet. Ein 63 Neuaufbau der gesamten Seite ist somit nicht notwendig (Kapitel 4.2). Auf diese Weise hat der Benutzer die Möglichkeit die Parameter - Werte anzupassen, bevor das TInTo - System mit der Berechnung des Indikators startet (siehe Abbildung 18). 1 2 3 4 5 6 7 8 9 10 11 12 13 SELECT tbl_eod.instrumentID, tbl_eod.daycount, tbl_eod.day, tbl_eod.dayhigh, tbl_eod.daylow, tbl_eod.dayopen, tbl_eod.dayclose, tbl_eod.volume, tbl_eod.dayclose - tbl_eod1.dayclose AS Ind1 FROM tbl_eod INNER JOIN tbl_eod tbl_eod1 ON (tbl_eod.ID=tbl_eod1.ID) WHERE tbl_eod.instrumentID = @id AND tbl_eod.daycount > @count AND tbl_eod1.n = tbl_eod.n - @period(’Kurseinheiten’,10) ORDER BY tbl_eod.instrumentID DESC, tbl_eod.day DESC Tabelle 3: Formulierung der Formel des Momentum - Indikators in SQL. Abbildung 18: Anpassung der Period - Parameter in der Indikator - Definition. Links vor der Auswahl des Momentum - Indikators. Rechts nach der Auswahl. 6.2.2 Ausführung der Indikatoren Bei der Ausführung der Indikatoren werden die Kursdaten für ein ausgewähltes Wertpapier in der Tabelle verändert und gespeichert. Es kann sich bei der Speicherung um eine UPDATE - Anweisung wie beim MACD - Indikator [19] oder um die Speicherung von Zwischenergebnissen wie beim ADX - Indikator (siehe Kapitel 3.1.2) handeln. Da bei der webbasierten TInTo - Anwendung die Indikatoren - Berechnung parallel von mehreren Benutzern gewährleistet werden soll, ist hierfür ein entsprechender Mechanismus einzusetzen. An 64 der Berechnung des ADX - Indikators soll dieses Mechanismus veranschaulicht werden (siehe Tabelle 4). Der ADX - Indikator benutzt in seiner SQL - Definition einen weiteren Indikator, den ADX0 - Indikator, welcher seinerseits den THLR - Indikator verwendet. Zur Erinnerung der ADX - Indikator wird in mehreren Schritten berechnet (siehe Kapitel 3.1.2). Zuerst wird der THRL bestimmt, danach ADX0 und anschließend der ADX berechnet werden. Nachdem die Wahl des ADX - Indikators getroffen wurde, wird seine SQL - Definition aus der tbl_indicator ausgelesen und in der C# Methode GetIndicatorData() analysiert. Dabei wird in der SQL - Definition nach dem Präfix „ind_“ gesucht. Dieses Präfix impliziert, daß die Berechnung die Ergebnisse eines weiteren Indikators verwendet. Der Name des verwendeten „Sub“ - Indikators setzt sich aus dem Präfix „ind_“ und dem in der Tabelle tbl_indicator in der Spalten shortname gespeicherten Indikator - Namen handelt (z.B. ind_THLR) zusammen. Die Substituioon von Indikator - Platzhaltern wird rekursiv fortgesetzt, bis die SQL - Definition dees Ursprungs - Indikators auf die Kursdaten der tbl_eod Tabelle verwendet. Die Ergebnisse der Basis - Indikatoren werden als Sichten mit eindeutigen benutzerspezifischen Namen in der Datenbank gespeichert. Der Sicht - Name setzt sich dabei aus dem Präfix „view_“, gefolgt von Indikator - Namen und der Identifikationsnummer der Benutzer - Sitzung (engl. Session) im Browser (z. B. view_THLR_4osvyzf2c2qeg055bep2wy45 ) zusammen. Nach dem die Benutzer - Sitzung beendet wurde (z. B. der Benutzer meldet sich im System ab), werden alle von diesem Benutzer angelegten Sichten anhand der Indentifikationsnummer der Browser - Sitzung aus der Datenbank gelöscht. Diese Vorgehensweise ermöglicht jedem Benutzer eigene Indikator Berechnungen in der Datenbank vorzunehmen, ohne die Daten der globalen Tabellen zu verändern. 65 1 2 3 4 4 5 6 6 7 8 9 10 11 12 SELECT ind_ADX0.instrumentID, ind_ADX0.daycount, ind_ADX0.dayhigh, ind_ADX0.daylow, ind_ADX0.dayopen, ind_ADX0.dayclose, ind_ADX0.volume, AVG(ADX1.Ind1) Ind1, ind_ADX0.Ind2, ind_ADX0.Ind3 FROM ind_ADX0 INNER JOIN ADX0 ADX1 ON (ind_ADX0.instrumentID = ADX1.instrumentID) WHERE ADX1.daycount <=ind_ADX0.daycount-@period(’Glättung’,14) GROUP BY ind_ADX0.instrumentID, ind_ADX0.daycount, ind_ADX0.dayhigh, ind_ADX0.daylow, ind_ADX0.dayopen, ind_ADX0.dayclose, ind_ADX0.volume, ind_ADX0.Ind2, ind_ADX0.Ind3 1 2 2 3 4 4 5 6 6 7 8 9 10 10 11 12 12 SELECT view_ADX0_4osvyzf2c2.instrumentID, view_ADX0_4osvyzf2c2.daycount, view_ADX0_4osvyzf2c2.dayhigh,view_ADX0_4osvyzf2c2.daylow, view_ADX0_4osvyzf2c2.dayopen, view_ADX0_4osvyzf2c2.dayclose, view_ADX0_4osvyzf2c2.volume, AVG(ADX1.Ind1) AS Ind1, view_ADX0_4osvyzf2c2.Ind2, view_ADX0_4osvyzf2c2.Ind3 FROM view_ADX0_4osvyzf2c2 INNER JOIN view_ADX0_4osvyzf2c2 ADX1 ON (view_ADX0_4osvyzf2c2.instrumentID = ADX1.instrumentID) WHERE ADX1.daycount <=view_ADX0_4osvyzf2c2.daycount - 14 GROUP BY view_ADX0_4osvyzf2c2.instrumentID, view_ADX0_4osvyzf2c2.daycount view_ADX0_4osvyzf2c2.dayhigh, view_ADX0_4osvyzf2c2.daylow, view_ADX0_4osvyzf2c2.dayopen, view_ADX0_4osvyzf2c2.dayclose, view_ADX0_4osvyzf2c2.volume, view_ADX0_4osvyzf2c2.Ind2, view_ADX0_4osvyzf2c2.Ind3 Tabelle 4: SQL - Definition des ADX - Indikators vor und nach der Analyse in der Methode GetIndicatorData(). 66 7 Beispielszenarien In diesem Kapitel wird die Bedienung der webbasierten TInTo - Anwendung anhand von Benutzungsbeispielen beschreiben. Es werden zwei Beispielszenarien vorgestellt, welche die Hauptfunktionalitäten der Anwendung abdecken. Bevor der Benutzer die webbasierte TInTo - Anwendung bedienen kann, muß dieser im System authentifiziert werden (Abbildung 19). Die vom Benutzer angegebenen Authentifizierungsdaten Login - Name und Passwort werden mit den von Anwendungs - Administrator angelegten TInTo - Benutzern in der Datebank - Tabelle „tbl_user “ verglichen. Nach einer erfolgreichen Authentifizierung wird dem Benutzer in Abhängigkeit seiner Gruppe (Administrator oder Analyst) Zugriff auf die für die Gruppe freigegebenen Anwendungs - Konsolen ermöglicht. Abbildung 19: Webbasierte TInTO - Anwendung: Anmeldung im System. Wertpapier Analysieren Die Analyse eines Wertpapiers findet in der Analysis - Konsole statt. Hierfür steht dem Benutzer eine breite Palette an Einstellungen zur Verfügung: • Instrument (Symbol): In diesem Auswahlmenü werden alle in der TInTo - Datenbank gespeicherte Wertpapier - Symbole aufgelistet. • Style: In diesem Auswahlmenü hat der Benutzer die Möglichkeit zwischen den Chart - Darstellungen wie Chandlestick, OHLC, Closing line 67 (Schlußkurs), Typical price (Typischer Kurs), Weighted close (Gewichteter Kurs) oder Median price (Mittlerer Kurs) zu wählen. • Volume: Mit dem Aktivieren des Volume - Checkboxes werden die Umsätze, zusätzlich zum Kursverlauf, als Volumenbalken angezeigt. Dabei ist der grüne Balken als Kaufsignal und der rote als Verkaufssignal zu interpretieren. • Logarithmic Scale: Mit dem Aktivieren dieses Checkboxes wird das Diagramm logarithmisch skaliert. • Price Band : In diesem Auswahlmenü werden alle im ChartDirector vorhandene Preisbänder zur Verfügung gestellt. • ChartDirector Indicator : ChartDirector liefert eine Vielzahl an vorimplementierten Indikatoren. Diese werden im diesem Auswahlmenü aufgelistet. • TInTo Indicator : In diesem Auswahlmenü werden alle in der Datenbank gespeicherte Indikatoren aufgelistet. Am linken Rand stehen dem Benutzer zwei Schaltflächen zur Verfügung: Chart Anzeigen, Kursdaten und Indikator - Werte als Tabelle anzeigen. Beim betätigen der ersten Schaltfläche wird ein Chart - Diagramm angezeigt, welche über den ganzen mittleren Bereich der Seite (Abbildung 20.a ) einnimt. Beim betätigen der zweiten Schaltfläche wird der mittlere Bereich halbiert, wobei im linken Bereich die Kursdaten und Indikator - Werte als Tabelle angezeigt wird und im rechten Bereich das zugehörige Diagramm (Abbildung 20.b ) angezeigt werden. In beiden Fällen werden die aktuell vorgenommenen Einstellungen in die Berechnung der Werte übernommen. Die TInTo - Wertpapier - Analyse setzt das Vorhandensein eines Wertpapiers und eines Indikators in der Datenbank voraus. Die Wertpapiere können unt4er Instruments, in der Settings - Konsole verwaltet werden (Abbildung 21.a ). Um ein neues Wertpapier anzulegen wird wie folgt vorgegangen. Im Bereich Instrument Search wird ein Suchsymbol eingegeben und die Art des Wertpapiers sowie der Handelsmarkt ausgewählt. Nachdem die Werte ausgewählt wurden, wird mit dem Betätigen der rechten grünen Pfeil - Schaltfläche eine Suchabfrage zum Yahoo - Webservice gesendet. Dieser Prozeß kann 2 3 Sekunden dauern, der Status wird dabei mit dem Ajax - UpdateProgress - Steuerelement angezeigt. Der Yahoo - Webservice liefert eine Liste mit übereinstimmenden Wertpapier - Symbole. Von denen kann der Benutzer aus dem Symbol - Kombinationslistenfeld das gewünschte Symbol auswählen. Nach der Selektion des Wertpapier - Symbols werden die Felder Name 68 Abbildung 20: Webbasierte TInTO - Anwendung: Wertpapier Analysieren. 69 und Exchange mit entsprechenden Daten ausgefüllt. Beim Speichern eines Wertpapiers in der Datenbank werden seine End Of Day - Kursdaten für den Zeitraum vom 01.01.2000 bis zum aktuellen Datum beim Yahoo - Webservice abgefragt und ebenfalls in der Datenbank gespeichert. Dem Benutzer wird es auch ermöglicht, das Start - Datum der Kurs - Abfrage beliebig festzulegen. Wählt der Benutzer das Suchsymbol „GE“, den Wertpapier - Typ „Equity“ und den Handelsmarkt „World Market“ aus, so würde eine Ergebnis Liste vom Yahoo - Webservice geliefert, in welcher das Symbol „DAX.TO“ vorkommt. Nach der Auswahl dieses Symbols wird eine erneute Abfrage an den Yahoo - Webservice gesendet. Als Ergebnis der erneuten, verfeinerten Anfrage wird der Name „DRAXIS HEALTH INC“ und die Handelsbörse „(TOR) Toronto Exchange“ des Symbols geliefert. Mit der rechnten Kalender - Schaltfläche des Feldes „Start Date“ kann der Benutzer das Startdatum für die Kursdaten - Abfrage des Wertpapiers auswählen (z. B. 28.11.2005). Auf diese Weise wird verhindert, daß der Benutzer ein ungültiges Datum eingibt. Beim Speichern des Wertpapiers werden dann auch dessen Kursdaten vom 28.11.2005 bis zum aktuellen Datum vom Yahoo - Webservice abgefragt und ebenfalls in der Datenbank abgespeichert. Die Verwaltung der Indikatoren findet unter Indicators - in der Settings Konsole statt (Abbildung 21.b). Alle Anwendungs - Konsolen sind in zwei Bereiche aufgeteilt. Links werden alle in der Datenbank gespeicherten Einträge aufgelistet, rechts die detailierten Informationen zu den jeweiligen Einträgen angezeigt. In der Indicators - Konsole werden auf der linken Seite alle in der Datenbank vorhanden Indikatoren aufgelistet und auf der rechten Seite die Informationen Symbol, Namen, Anzeige - Priorität, SQL - Definition, Sichtbarkeit und Bemerkung angezeigt. Der Momentum - Indikator besteht aus einer einzelnen Kurve. Für Manche, z. B. dem MACD, werden jedoch mehrere Kurven berechnet. Jede dieser Kurven benötigt individuelle Eingaben für Name, Farbe und weitere Darstellungsparameter. Diese sind im Feld Presentation einzutragen (siehe Abbildung 21.b). Benutzer Verwalten Die Verwaltung der TInTo - Benutzer wird in der Administration - Konsole vorgenommen. Diese Konsole ist nur für die Administrator - Rolle zugänglich. Für Benutzer mit Analysten - Rolle wird diese Konsole ausgeblendet. Beim Bearbeiten der Benutzer - Daten können • die Personen - und Zugangs - Daten eingegeben, • der Status verändert werden, d.h. der Zugang aktiviert bzw. deaktiviert 70 Abbildung 21: Webbasierte TInTO - Anwendung: Die Schaltflächen links lösen Aktionen (von oben nach unten) Neuanlegen, Bearbeiten und Löschen aus. a) Neues Wertpapier anlegen. b) Indikator bearbeiten. 71 werden, • die Rollen - Zuordnung zur Benutzergruppe festgelegt werden. Die Abbildung zeigt die Administration des Benutzers „Eva Schneider“, welcher die Rolle „Analyst“ zugeordnet und der Zugang (Status) gesperrt wird. Abbildung 22: Webbasierte TInTO - Anwendung: Benutzer verwalten. 72 8 Bewertung und Ausblick Ziel dieser Diplomarbeit war es, eine webbasierte Version des TInTo - Systems zu realisieren, wobei die Kernfunktionalitäten der ersten TInTo - Version [19] übernommen und zusätzlich eine Benutzerverwaltung im System umgesetzt werden sollte. Bei den ersten TInTo - Versionen ([19] und [23]) handelt es sich um eine Access - Anwendung, welche auf dem lokalen Rechner des Benutzers zu installieren und zu bedienen ist. Die aktuelle Realisierung der webbasierten TInTo - Version ist eine .NET - Anwendung, welche eine Oracle Datenbanksystem verwendet. Mit der webbasierten TInTo - Version ist es nun möglich, die Anwendung von einem beliebigen Ort über das Internet zuzugreifen und zu nutzen. Die Anwendung muss hierzu nur einmal auf einem Webserver installiert und konfiguriert werden. Zu den Kernfunktionalitäten der ersten TInTo - Version gehört unter anderem die Analyse von Wertpapieren auf Basis der EOF - Kursdaten. Mit der zweiten Version ist auch die Realisierung der Intraday - Analyse umgesetzt. Die Intraday - Analyse, aus der Datenbank - Sicht, läßt sich mittels des Konzepts der Änderungspropagierung realisieren. Das Konzept materialisierter Sichten ist zu diesem Zweck von besonderer Bedeutung. Im Allgemeinen unterstützt Access keine materialisierten Sichten. Gereon Schüller erarbeitete daher ein Verfahren, welches die Änderungspropagierung in Access ohne materialisierten Sichten simuliert. Dieses Verfahren wurde nicht in die Oracle Datenbank der webbasierten TInTo - Version übernommen. Zwar unterstützt Oracle das Konzept der materialisierten Sichten, die Reimplementierung der Intraday - Analyse hätte jedoch den Rahmen dieser Arbeit weit überschritten. Tabelle 5 zeigt, wie die Materialisierung einer Sicht für den Momentum Indikator in Oracle durchgeführt werden kann. Zuerst soll für jede Tabelle, die in der Sicht - Definition mit fast - Aktualisierungsmethode vorkommt, eine Log - Tabelle in der Datenbank angelegt werden (Tabelle 5.a). Diese Log Tabelle protokolliert alle Änderungen, die an der Basistabelle vorgenommen wurden. Die Verwendung der fast - Aktualisierungsmethode unterliegt allerdings einigen Einschränkungen [9]. Nachdem die LOG - Tabellen für alle in der zu materialisierenden Sicht vorkommenden Basistabellen angelegt wurden, kann die Sicht materialisiert werden. Verwendet die Sicht einen Join - Operator, so sind alle ROWID der beteiligten Basistabellen anzugeben (Tabelle 5.b). Für folgende Arbeiten wäre die Implementierung der Intraday - Analyse 73 1 2 3 4 5 6 7 8 9 10 CREATE MATERIALIZED VIEW LOG ON „tinto“.“tbl_eod“, TABLESPACE „USERS“ WITH PRIMARY KEY, ROWID, SEQUENCE ( „instrumentid“, „date„ , „count“, „open“, „high„ , „low“, „close“, „volume“, „volume1„ , „volume2“, „volume3“, ) INCLUDING NEW VALUES a) 1 2 3 4 4 4 6 7 8 8 4 8 4 8 8 8 CREATE MATERIALIZED VIEW view_Momentum BUILD IMMEDIATE REFRESH FAST ON DEMAND ENABLE QUERY REQRITE AS SELECT tbl_eod.ROWID eodRowid, tbl_eod1.ROWID eod1Rowid, tbl_eod.instrumentID, tbl_eod.count, tbl_eod.date, tbl_eod.open, tbl_eod.high, tbl_eod.low, tbl_eod.close, tbl_eod.volume, tbl_eod.close - tbl_eod1.close Ind1 FROM tbl_eod, tbl_eod tbl_eod1 WHERE tbl_eod.instrumentID=tbl_eod1.instrumentID AND tbl_eod.instrumentID=2 AND tbl_eod.tradingdaycount > 0 AND tbl_eod1.tradingdaycount = tbl_eod.tradingdaycount - 10 b) Tabelle 5: Materialisierung der SQL - Definition des Momentum - Indikators in Oracle. 74 in der Tinto - Webanwendung unter Verwendung materialisierter Sichten sowie ein Vergleich zur Access -Implementierung sicherlich eine interessate Aufgabe. 75 A Installation und Konfiguration der TInToWebanwendung In diesem Abschnitt wird dem Leser das notwendige Wissen über die Installation und die Konfiguration der webbasierten TInTo - Anwendung vermittelt. Diese Schritte müssen nur auf einen Rechner, dem Webserver, durchgeführt werden. Software und Klassenbibliotheken Zuerst müssen die für das Erstellen und das Ausführen der webbasierten Anwendung benötigten Software und Klassenbibliothekn auf dem Arbeitsrechner installiert werden. Diese sind: 1. Das .NET - Framework 2.0 : Laufzeitumgebung und Klassenbibliothek der .NET - Technologie, welche kostenlos von der Microsoft - Homepage bezogen werden kann[6]. 2. ASP.NET Ajax Estensions: Ein Framework zu Nutzung von Ajax Funktionalitäten in ASP.NET - Anwendungen, die auf ASP.NET basieren [2]. Nach der Installtion wird dieses automatisch in das Visual Studio 2005 integriert. 3. Visual Studio .NET 2005 : Entwicklungsumgebung (IDE) für die .NET - Technologie. Die IDE ist für das Studien - und die Forschungszwecke kostenlos vom MSDN Academic Alliance Software-Center [7] runterzuladen. 4. Oracle Database 10g : Ein relationales Datebanksystem, welches für nicht kommerzielle Zwecke frei verfügbar ist [8]. 5. Oracle SQL Developer : Eine kostenlose grafische Entwicklungsumgebung, welche für die Enwicklung innerhalb der Oracle - Datenbank eingesezt wird [10]. Die Notwendigkeit dieser Installationen läßt sich in zwei Arten unterscheiden. Handelt es sich um einen Arbeitsrechner, auf welchen eine Weiterentwicklung der webbasierten Anwendung betrieben wird. In diesem Fall sind alle aufgezählten Installationen notwendig. Handelt es sich um einen Rechner, auf welchem die Anwendung nur ausgeführt und für Öffentlichkeit bereitgestellt wird (d.h. dieser Rechner fungiert als ein Webserver), dann müsssen in den Punkten 1, 2 und 4 genannten Installationen durchgeführt werden. 76 CD - Inhalt Es wurde eine CD bereitgestellt, welche folgende Dateien bzw. Ordner enthält: • TInTo - Ordner : In diesem Ordner befinden sich alle für die Weiterentwicklung notwendigen Quellcode - Dateien. • TInToDocumentation.htm: Diese Datei beinhaltet eine vollständige Dokumentation des TInTo - Programm - Quellcodes. • TInToDistribution - Ordner : In diesem Ordner befinden sich alle notwendige Ordner bzw. Dateien, welche für das Publizieren der Anwendung auf einem Webserver notwendig sind. • Oracle Export - Datei (tinto.dump): ist eine Sicherung aller TInTo Datenbankobjekte. Anhand dieser Datei kann die TInTo - Datenbank in einen andere Oracle - Dateinbank - Server importiert werden. Im Folgenden wird die Konfiguration des TInTo - Anwendung und das Einrichten der Oracle Datenbank beschrieben. Konfiguration der webbasierten TInTo - Anwendung Um die webbasierten TInTo - Anwendung auf einem Arbeitsrechner für die Weiterentwicklung einzurichten wird folgendermaßen vorgeganen: 1. Den Inhalt des TInTo - Ordners auf den Zielrchner kopieren. (z. B. „C:\Projekt\Tinto“) 2. Virtuelles Web - Verzeichnis einrichten: Start → Systemsteuerung → Verwaltung → Internet-Informationsdienste (IIS) → in Standardwebsite mit rechten Maustaste auf Neu → Virtuelles Verzeichnis → Alias „Tinto“ → Verzeichnis eingegeben (hier „C:\TinTo\Web“) → Alle Zugriffsberechtigungen aktivieren → Fertig stellen. 3. Mit der rechten Maustaste auf die Eigenschaften der Tinto - Webseite aufrufen: • im Register „"Virtuelles Verzeichnis’ → Skriptzugriff aktivieren. 77 • im Register „Dokumente“ → „Standarddokument aktivieren“ → Hinzufügen → „index.aspx“ → in der Liste ganz oben einordnen. → OK 4. Die Anwendung in Visual Studio .NET 2005 einrichten • Datei → Neu → Projekt → Andere Projekttypen → Leere Solution. Einen Namen (z.b. „TInTo“) und den Speicherort (hier „C:\Projekt“) • Mit der rechten Maustaste auf die Solution klicken → Hinzufügen → Eine existierende Webseite → TInTo - Webseite auswählen • Mit der rechten Maustaste auf die Solution klicken → Hinzufügen → Ein existierendes Projekt → globals.csproj auswählen („C:\Projekt\Tinto \Globals \“) • Zuerst das Globals - Projekt kompilieren und anschließend die ganze Tinto - Solution kompilieren. In den Projekt - Ordnern wird auf das Ajax - Assebmly verwiesen, dieser Pfad muß gegebenenfalls aktualisiert werden. Konfiguration der TInTo - Datenbank in Oracle Eine vorhandene Installation dees Oracle Datebanksystem wird an dieser Stelle vorausgesetzt. Zunächst muß ein Benutzer „tinto“ mit dem Kennwort „tinto“ angelegt werden (siehe hierzu die Oracle Online Dokumentation [9]). Der Export und Import einer Oracle - Datenbank kann über die Kommandozeile des Betriebssystems erfolgen, wobei die Oracle - Befehel „exp“(steht für Export) und „imp“ (steht für Import) benutzt werden. Die Export - Datei „tinto.dump“ wird mit dem „imp“ - Befehl importiert. [Import-Befehl] [Username] / [Kennwort] @ [Oracle - Instanz] [File Eingabe] imp tinto/tinto@orcl file = tinto.dump Für das Exportieren der Datenbank - Objekte aus Oracle wird analog vorgegangen. exp tinto/tinto@orcl file = tinto.dump full 78 Literatur [1] Asp.net ajax. Microsoft Corporation. [2] Asp.net ajax 1.0. Microsoft Corporation. [3] Chartdirector - software. Advanced Software Engineering. [4] Die programmiersprache c# für java-entwickler. Microsoft Corporation. [5] It - lexicon. DATACOM Buchverlag GmbH 2004-2007. [6] Microsoft .net framework 2.0 redistributable. Microsoft Corporation. [7] Msdn academic alliance software-center. Powered by e-academy. [8] Oracle database 10g release 2 enterprice edition. Oracle Corporation. [9] Oracle database data warehousing guide 10g release 2 (10.2). Oracle Online Documentation. [10] Oracle sql developer. Oracle Corporation. [11] Webanwendungen mit asp.net. Microsoft Corporation. [12] http://www.boerse-online.de/, 2007. Börse-Online.DE, Börsenlexikon. [13] Microsoft homepage. http://www.microsoft.com/germany, 2007. [14] Microsoft office access. http://office.microsoft.com/de-de/access/, 2007. Microsoft Corporation. [15] Microsoft sql server. http://www.microsoft.com/germany/sql/default.mspx, 2007. Microsoft Corporation. [16] Oracle corporation. http://www.oracle.com, 2007. [17] Wikimedia foundation inc. http://de.wikipedia.org/, 2007. [18] F. Eller, editor. Visual C# 2005. Addison-Wesley, 2006. [19] C. Hübel. TInTo - Ein datenbankgestütztes Werkzeug zur regelbasierten Wertpapieranalyse. Diplomarbeit, Rheinische Friedrich-WilhelmsUniversität Bonn, Institut für Informatik III, Dezember 2006. [20] T. Müller and H. Nietzer, editors. Das große Buch der Technischen Indikatoren. Tm Boersenverlag, 2004. 79 [21] J. J. Murphy, editor. Technische Analyse der Finanzmärkte. Finanzbuch Verlag GmbH, 2004. [22] J. Nilsson. Applying Domain-Driven Design and Patterns. Addison Wesley, 2006. [23] G. Schüller. Änderungspropagierung zur regelbasierten Analyse von Finanz-Datenströmen in TInTo. Diplomarbeit, Rheinische FriedrichWilhelms-Universität Bonn, Institut für Informatik III, September 2007. [24] A. und A.Eickler, editor. Datenbanksysteme. Oldenbourg Wissenschaftsverlag GmbH, 2004. 80