Ziel des Projekts

Ein automatisierter Handelsalgorithmus, welcher durch eine hohe Handelsfrequenz die Volatilität von Forex Kursen ausnutzt um einen Profit zu erzielen. Dabei ist es egal ob die Kurse steigen oder fallen.

Anforderungen

Die Anforderung an den Handelsalgorithmus ist, dass er den Markt schlagen sollte. Das bedeutet die investierte Summe erfährt ein größeres Wachstum durch die Käufe und Verkäufe, die der Algorithmus tätigt, als eine durch ein simples Einkaufen in den Markt.

Anschaulich bedeutet dies Folgendes:
Sollte der gehandelte Markt eine Bewegung von 10 Punkten innerhalb eines Tages vollbringen, so wäre die gewonnene Summe = 10 (Punkte) x (Hebel) x (Investment). Ein typischer Hebel hat einen Faktor von 100. Bei einem Investment von 1€ wäre der Gewinn somit 1000€. Da sich Forex Märkte jedoch nur in Nachkommastellen ändern muss noch eine Anpassung des Faktors vorgenommen werden. Abhängig vom gehandelten Währungspaares liegen diese Schwankungen im Bereich von 0.1 bis 0.0000001. In diesem Beispiel soll der Kurs zwischen Dollar und Euro betrachtet werden. Hierbei liegt der Faktor bei 0.00001. Dies führt nun zu einem fiktiven Gewinn von 0.01€ bei einem Investment von 1€ und 10 Punkten Gewinn. Ernüchternd, ich weiß.

Der Wert von 10 Punkten plus wird jedoch nicht linear erreicht, sondern durch viele Korrekturen, also Kursschwankungen.

kurschswankungen
Die starke Volatilität kann gewinnbringend genutzt werden.

Durch gezieltetes Kaufen und Verkaufen an Wendepunkten, kann nun ein Gesamtgewinn von mehr als 10 Punkten erzielt werden.

Diese Stellen zu finden ist jedoch kein leichtes Unterfangen. Zunächst ist es wichtig zu verstehen, dass der Markt stets zufälligen Schwankungen untersteht. Es ist also nicht möglich einen genauen Wendepunkt zu bestimmen, da Millionen Trader gleichzeitig handeln und deren Handeln womöglich andere Absichten hat als das Eigene. Zudem kann der Markt in beide Richtungen gehandelt werden, also Long (Gewinn wenn der Kurs steigt) und Short (Gewinn wenn der Kurs fällt).

Wie ist es dann möglich den Markt zu schlagen?

Kurz gesagt: sehr schwierig.
Dennoch gibt es einige Anhaltspunkte, mit denen die Richtung des Kurses antizipiert werden kann. Diese Analysen erhöhen jedoch lediglich die Wahrscheinlichkeit, dass der Kurs in die vorgegebene Richtung einschlägt. Solange dies aber einen positiven Erwartungswert ergibt, ist der Algorithmus profitabel

Ein kleines Beispiel:
Die Analyse des Kurses hat ergeben, dass der Markt steigen sollte. (Genaue Prozentzahlen lassen sich natürlich nicht bestimmen)
Von 10 Investments nach dieser Analyse waren 7 erfolgreich. Solange der Gewinn dieser Investments den Verlust der 3 Verlorenen ausgleicht, ist der Algorithmus profitabel. Auf die Ein - und Ausstiegspunkte möchte ich hier nicht weiter eingehen.

Der aktuelle Kurs lässt sich auf unzählige Arten auswerten. Hierfür lassen sich bereits vorhandene Indikatoren nutzen, welche das verwendete Trading Programm liefert, oder eigene Parameter erstellen. Die vorgegebenen Indikatoren bilden Durchschnitte, betrachten die Volatilität des Marktes, sowie die Kaufkraft (um nur ein Paar zu nennen). Bei vielen dieser Indikatoren werden die vergangen Kurswerte zur Analyse genutzt. Dies ist jedoch nur bedingt hilfreich, da ein fallender Kurs weiterfallen kann, oder eben nicht, unabhängig davon wie weit er bereits gefallen ist. Dies liegt an der zufälligen Natur des Kurses.
Wenn man mit einem Würfel 10 mal eine 6 würfelt ist die Wahrscheinlichkeit eine weitere 6 zu würfeln dennoch 1/6. Jedoch ist die Wahrscheinlichkeit für das Auftreten des Ereignisses 10 mal eine 6 zu würfeln nur 0.00000165381% , also ziemlich gering. Dieser Zusammenhang kann auch in Verbindung mit den vorgegebenen Marktinidkatoren von Nutzen sein. Allerdings bedeutet auch eine sehr geringe Wahrscheinlichkeit, keine absolute Sicherheit. Wirtschaftskrisen sind das beste Gegenbeispiel. Diese Absicherung muss also im Algorithmus implementiert werden.

Implementierung

Die Implementierung des Algorithmus erfolgte mittels der Programmiersprache MQL4, welche auf C basiert. Durch zusätzliche Bibliotheken ist es einfach aktuelle Kurse und Indikatoren zu nutzen. Mein Algorithmus durchlief mehrere Iterationen bevor ich mich auf einen endgültige Handelsstrategie festgelegt habe.

Aktives vs. automatisiertes Handeln

Zu Beginn habe ich einige Funktionen programmiert, um das manuelle Handeln zu beschleunigen, wie z. Bsp. Shortcuts und zusätzliche grafische Elemente, die sich per Tastendruck ein- und ausblenden lassen. Meine generelle Vorgehensweise war hierbei eine profitable Methodik per Hand zu ertesten und diese anschließend zu automatisieren.

Dabei fiel mir vor allem die Subjektivität vieler Entscheidungen auf, welche nun objektiv durch einen Algorithmus gehandhabt werden mussten. Generell bin ich zu der Erkenntnis gekommen, dass ein halbautomatisiertes Trading in den meisten Fällen profitabler ist als ein komplett automatisierter Algorithmus. Dies war jedoch nicht mein Ziel. Das Ziel war ein Algorithmus welcher auf einem Server läuft und nebenher für mich arbeitet :) .

Da der Code der aktuellsten Version 6352 Zeilen lang ist, verzichte ich hier auf einen detaillierte Analyse. Den kompletten Code können Sie in meinem GitHub Repo finden. Eine komplette Auflistung der Funkionalität finden Sie am Ende dieser Seite.

Testen von Algorithmen

Das Testen der Algorithmen ist der wichtigste Punkt in der Entwicklung. Ich habe während der gesamten Entwicklung ein Demo Konto verwendet. So konnte ich nicht nur backtesten, sondern auch mehrere Live Tests laufen lassen.

Backtesting Backtesting bezeichnet das Testen eines Algorithmus mit alten Kursdaten. Hierbei gilt es Einiges zu beachten:
Die Kursdaten müssen möglichst genau die historischen Daten abbilden. Um dies zu erreichen werden sogenanten Tick Daten verwendet. Hierbei handelt es sich um Tabellen, mit einer Zeitangabe und 4 Werten (High, Low, Open, Close). Für jeden Tick, den ein Kurs macht (Kursänderung) wird eine neue Zeile geschrieben. Diese Daten sind kostenlos über Anbieter wie Dukascopy verfügbar. Das von mir verwendete Programm Meta Trader hat eine integrierte Backtesting Lösung. Diese erlaubt es eigene Algorithmen zu testen, und einzelne Parameter anzupassen, sodass der Code nicht geändert werden muss. Diese Optimierung führt im besten Fall zu einem profitablen Algorithmus.

Millionen im ersten Jahr
Ein erster Durchlauf mit Hilfe des integrierten Backtesters lieferte ein sehr erfreuliches Ergebnis. Eine genauere Analyse der Daten zeigte jedoch, dass das Backtesting auf diese Art eine Menge Fehler mit sich bringt.

Auf folgende Probleme bin ich während des Backtestings gestoßen:

  • Es sind keine Tick Daten verfübar, somit wird der Kurs nur jede Minute geupdatet und Sprünge dazwischen als Gewinn verbucht.
  • Die verfügbaren Daten haben einen Zeitraum von lediglich 3 Monaten.

Diese Probleme lassen sich durch Daten von o.g. Website lösen, doch damit nicht genug. Gaps (große Kurssprünge) werden falsch interpretiert, und erneut zum Vorteil des Nutzers angezeigt (auch wenn ein Totalverlust vorliegen würde). Durch extreme Anpassungen im Quellcode des Algorithmus konnte ich brauchbare Ergebnisse erzeugen. Aber bereits eine Abweichung von wenigen Prozent kann den Unterschied zwischen einem profitablen Algorithmus und dem Totalverlust ausmachen. Kurz gesagt, die integrierte Lösung ist unbrauchbar. Eine detaillierte Fehleranalyse würde diesen Rahmen sprengen.

Fehler in Backtesting
Anhand der grünen Linie (aktuelles Kapital) is deutlich zu erkennen, dass im Falle eines Gaps der Gewinn stets zunimmt. Dies ist in Realität definitv nicht der Fall.

Live Testing
Eine weitere Möglichkeit ist das Live Testing. Der Algorithmus wird hierbei auf den aktuellen Kurs angewendet. Dies wird in der Regel nach einem erfolgreichen Backtest durchgeführt. Hierbei ist eine Test Dauer von bis zu 3 Monaten nicht ungewöhnlich.

Für meine Zwecke habe ich mich auf eine Testdauer von 2 Wochen beschränkt, da der Algorithmus noch in der Entwicklung steckte. In diesen zwei Wochen konnten meist nur geringe Gewinne bei hohem Risiko oder gar Verluste eingefahren werden. Zudem muss während dieser Zeit entweder ein PC oder Server dauerhaft angeschaltet sein. Ohne eine zuverlässige Backtesting Lösung ist es schwierig die Parameter richtig anzupassen, um einen gewinnbringenden Algorithmus zu programmieren. Zudem dauert die Entwicklung sehr lange. Aus diesem Grund habe ich mich entschieden die Arbeit an diesem Projekt einzustellen.

Fazit

Da ich eine Affinität zur Entwicklung von Algorithmen habe, hat mir diese Projekt riesigen Spaß bereitet. Gerne hätte ich dieses Projekt zu einem positiven Abschluss gebracht, dies ist jedoch aus zeitlichen Gründen nicht möglich.

Um die Arbeit wiederaufzunehmen müsste ich zunächst eine Eigene Backtesting Lösung programmieren, denn 99% genau reicht im Daytrading leider nicht . Durch Konversationen mit erfolgreichen Tradern konnte ich erfahren, dass diese allesamt diesen Umweg nehmen mussten. Die Grundlage für einen profitablen Algorithmus habe ich jedoch mit diesem Projekt gelegt.
Ist es also möglich den Markt zu schlagen?
Meiner Meinung nach ist es allein eine Frage der Zeit.

Übersicht der Funktionen

Grafische Funktionen
  • Trendlinien anzeigen
  • Durchschnitts Stoploss anzeigen
  • Offene Gaps anzeigen
  • Prozentualen Gewinn anzeigen
  • Durchschnitts Kaufpreis anzeigen
  • Hilfe anzeigen
  • Stunden/4-Stunden/Tages/Wochen/Monats Hoch/Tief anzeigen
  • Gehandelte Lots anzeigen
  • Widerstand und Unterstützungen anzeigen
Audio Funktionen
  • Eintritt/Austritt aus Innenstab
  • Richtung des Austritts
  • Stoploss ausgelöst
  • Takeprofit ausgelöst
  • Kauf/Verkauf Order geöffnet
Handelsfunktionen
  • Stoploss setzen
  • Takeprofit setzen
  • Kauf/Verkauf Order eröffnen
  • Buystop/Sellstop Order eröffnen
  • One Cancels the Other Order Management
  • Order löschen
  • Gezielt Gaps traden
  • Handel nur zu festgelegten Zeiten
  • Order Management
  • Umkehrkerzen handeln
  • Lot Management (Investment Management)
  • Kerzen in Folge handeln
  • Aussenstab Handeln
  • Aussenstab Stoploss Algorithmus
  • Benutzerdefinierter Trailing Stop
  • Trend handeln
  • Trend Richtung bestimmen
  • Alle Orders schließen oder ändern