Chartanalyse mit Python Teil 1: Einführung

Diese Artikelserie wird die Entwicklung einer Chartanalysesoftware in Python Schritt für Schritt begleiten.
Diese soll Candlestick-Charts verschiedener Zeitebenen darstellen und Indikatoren dazu plotten können.

Die Chartanalyse ist der erste Schritt einer Serie, in der ich nach und nach ein komplettes Marktanalyse-Framework mit Charttool und Strategie-Backtest entwickle.
Das Ganze soll ein Standalone-Projekt werden, anstatt dafür auf die Handelsplattform eines Brokers zurückzugreifen. Dafür gibt es mehrere Gründe, vor allem die Flexibilität einer solchen Lösung. Sie ist an alle erdenklichen Fälle und Sonderwünsche anpassbar. Darüber hinaus natürlich der Lerneffekt, der eine komplette Neuentwicklung einer solchen Analyseplattform mit sich bringt.

Viele Trader nutzen zum Backtesting ihrer Handelsstrategien  die vom Broker bereitgestellte Software und damit auch dessen Datenversorgung. Am populärsten für Backtests dürfte hier der Metatrader 4 mit seiner eingebauten Programmiersprache MQL4 sein. Wenn die zu testende Strategie später auch auf derselben Plattform gehandelt werden soll ist das natürlich auch vernünftig.

MQL4  ist eine „ausgewachsene“ Programmiersprache. (Im Fachjargon nennt man diese Eigenschaft turing-vollständig, was soviel heißt wie „jedes Problem, das überhaupt mit einem Computer lösbar ist, ist auch mit dieser Sprache lösbar.“)  Allerdings „lebt“ MQL4 nur innerhalb des Metatraders. Insbesondere die Möglichkeiten zur grafischen Darstellung sind immer auf die schon etwas angestaubte MT4-Plattform beschränkt.

Eine allgemeine Plattform für Backtests und Analysen

Möchte man allgemeinere Aufgaben lösen, etwa die Korrelation zwischen verschiedenen Finanzinstrumenten darstellen oder auch unterschiedliche Zeitebenen in einer Analyse zusammenführen, dann kommt man mit MQL4 schnell an die Grenzen – der Code wird kompliziert zu handhaben. Außerdem lassen sich natürlich nur die Instrumente betrachten, für die der Broker auch eine Kursversorgung anbietet. Insbesondere bei Aktien kleinerer Unternehmen dürfte das in den meisten Fällen schwierig werden.

Auf der anderen Seite gibt es kommerzielle Softwarepakete, die auch Tradern ohne Programmierkenntnisse erlauben, Strategien zu entwickeln und automatisch anhand historischer Daten zu testen, wie zum Beispiel das Programm Wealth Lab. Diese sind aber meist sehr teuer und auch hier stößt man natürlich irgendwann wieder auf Einschränkungen, falls man Sachen ausprobieren möchte, die von den Entwicklern nicht vorgesehen waren. Auch weiß man nie genau, was hinter den Kulissen eigentlich abläuft.

Backtests auf Basis solcher Systeme hinterließen bei mir immer eine Restunsicherheit, weil ich nicht im Einzelnen nachvollziehen konnte, wie die angezeigten statistischen Ergebnisse einer getesteten Tradingstrategie denn nun eigentlich im Einzelnen zustande gekommen sind.

Daher also die Eigenentwicklung.  Als Sprache habe ich mich für Python entschieden, und zwar aus folgenden Gründen:

  • Python ist leicht zu lernen, strukturiert und gut lesbar, die Sprache ist im Netz hervorragend dokumentiert
  • Für die Datenanalyse und grafische Darstellung gibt es ausgesprochen leistungsfähige Bibliotheken: matplotlib, numpy, pandas, etc.
  • Die Software ist frei verfügbar für Windows und Linux, Programme lassen sich ohne Probleme plattformübergreifend nutzen

Speziell in der Grafikbibliothek matplotlib gibt es sogar schon einige Module die sich um Finanzdaten drehen. So kennt die Library Candlestickplots und enthält Funktionen, die EOD-Daten einer Aktie automatisch bei Yahoo herrunterladen.

Entwicklung mit Anaconda/Spyder

Ich werde alle verwendeten Bibliotheken und Funktionen erklären, es sind also im Prinzip keine Python-Vorkenntnisse nötig. Allerdings soll dies kein Programmierkurs werden. Auf die Installation von Python oder allgemeine Programmierkonzepte wie Objekte, Funktionen, Kontrollstrukturen werde ich nicht gesondert eingehen. Hierfür gibt es aber etliche hervorragende Tutorials an anderer Stelle im Netz. Ich nutze zur Entwicklung das freie Datenanalyse-Paket Anaconda, das als Komplettlösung alle benötigten Python-Bibliotheken sowie die interaktive Entwicklungsumgebung „Spyder“ gleich mit installiert und daher ein Rundum-Sorglos-Paket darstellt.

Bliebe zum Schluss noch die Frage zu klären, woher die Datenversorgung kommt. Es bietet sich natürlich an, ein allgemein lesbares Format zu wählen, so dass später verschiedene Datenquellen genutzt werden können.

Am einfachsten geht dies mit CSV-Dateien. Das sind einfache Textdateien, die Datenstehen darin zeilenweise und einzelne Were sind durch ein Komma getrennt: Comma Separated Values.

Damit lassen sich leicht beliebig viele Datenquellen erschließen. Durch Python-Skripte können auch abweichende Datenformate in das benötigte Format überführt werden.

Für EOD-Daten (End Of Day, also Tagescharts) gibt es zahlreiche Quellen, die kostenlos beinahe alle an den Weltbörsen gehandelten Aktien zur Verfügung stellen  Hier werde ich vor allem Yahoo-Finance nutzen.

Tickstory lite als Datenquelle

Kurzfristigere Daten bis hin zu Tickdaten sind schon schwieriger zu beziehen, insbesondere kostenlose Quellen gibt es nicht so viele.

Eine qualitativ hochwertige Datenquelle zumindest für die großen FOREX-Währungspaarefand und die wichtigsten weltweiten Indizes sich aber zum Glück doch auftun: Auf dem Datenserver des Brokers Dukascopy sind diese Daten in hoher Qualität verfügbar und reichen mehrere Jahre zurück.

Um auf die Daten herunterzuladen und im benötigten Format abzuzspeichern nutze ich das kleine Tool Tickstory lite.

Tickstory kümmert sich automatisch um den Download und erlaubt es, die Daten in vielen verschiedenen Formaten zu exportieren. Darunter sind auch die gängigsten Trading-Plattformen enthalten, es lassen sich also auch Datenfiles erzeugen, die mit MT$ oder mit dem Ninja-Trader importierbar sind. Ich werde aber nur den allgemeinen CSV-Export nutzen. Auch hier zeigt das Programm seine Stärken: Der Aufbau der CSV-Datei lässt sich bei Tickstory genau vorgeben, außerdem hat man die Wahl zwischen Tickbasierten Daten und Bars, die auf einer bestimmten Zeiteinheit basieren, etwa Minuten- oder Stundenkerzen.

Multitalent CSV-Format

CSV-Daten lassen sich im Grunde mit jedem beliebigen Programm öffnen und verarbeiten. Auch Excel liest dieses Format anstandslos ein. Ein großer Vorteil, denn auch mit Excel oder dem freien pendant LibreCalc lassen sich schon einige beeindruckende Datenanlysen erstellen, ganz ohne Programmierkenntnisse.

Selbstverständlich unterstützt auch Python CSV-Dateien und stellt Finktionen zur Verfügung, die ein solches Datenfile in eine geeignete tabellenartige Datenstruktur einlesen.

Das Herunterladen und konvertieren der Daten muss allerdings mit Tickstory manuell gemacht werden. Es wird daher schwierig, die Daten jeweils bis zum aktuellsten verfügbaren zeitpunkt vorzuhalen, denn dafür müsste man von jedem Programmdurchlauf erstmal die neuen Datensätze laden. Das ist aber am Anfang für die Entwicklungszeit kein großes problem, denn solange die grundlegenden Funktionen etwickelt werden, reicht es, den Datenbestand täglich oder sogar nur wöchentlich zu aktualisieren. Später wird eine automatische Datenversorgung aber natürlich zum Thema werden.

Ebenso treten Fragen des GUI-Designs zunächst mal in den Hintergrund. Es ist mir wichtig, zuerst mal Funktionalität bereitzustellen. Um das schöne Aussehen kann man sich dann später immer noch kümmern.

Im nächsten Artikel beschreibe ich genauer, wie die Minutenkerzen  von DAX, S&P 500 und EURUSD der letzten 5 Jahre  mit Tickstory heruntergeladen und in eine CSV-Datei konvertiert werden.

 

 

 

 

 

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.