Investieren und Traden mit Python lernen – Das Testen einer ersten Handelsstrategie – Backtest Python

Investieren und Traden mit Python lernen – Das Testen einer ersten Handelsstrategie – Backtest Python

Analysetechniken

BITTE BEACHTEN SIE – DER API VON YAHOO FINANCE WURDE DAUERHAFT GESCHLOSSEN – ALS KOSTENFREIE ALTERNATIVE KÖNNEN SIE ALPHAVANTAGE ALS DATENQUELLE VERWENDEN – DIE DOKUMENTATION FINDEN SIE AUF DEREN SEITE

Unter Annahme der Grundsätze der technischen Analyse ändert sich das Verhalten von Marktteilnehmern nicht innerhalb kürzester Zeit. Daher können wir aus dem Verhalten in der Vergangenheit auf das in der Zukunft schließen. Genau diese Idee liegt den sogenannten Backtests zugrunde.

In Backtests überprüft man, wie eine bestimmte Handelsstrategie in der Vergangenheit abgeschnitten hätte. Ein Backtest ist keine Garantie dafür, dass sich ein Markt in Zukunft weiter genauso entwickelt, wie er es in der Vergangenheit getan hat. Er erlaubt einem lediglich zu verstehen, ob ein Ansatz erfolgreich sein kann und man in Folge mit Aktien Geld machen können. Wenn dies nicht der Fall ist, sollte man die Idee am besten nicht weiterverfolgen, da sie tendenziell nicht gewinnbringend sein wird.

Um den Prozess eines Backtests einmal beispielhaft zu präsentieren, wird im nachfolgenden Artikel der Moving-Average Crossover als Signal in Python erstellt. Zudem soll eine Klasse Portfolio ergänzend die Ergebnisse visualisieren.

Backtest einer Handelsstrategie in Python lernen – der Moving Average Crossover (Golden Cross)

Der Moving-Average-Crossover ist wahrscheinlich eine der bekanntesten Trading-/ Investitionsansätze der technischen-Analyse. Dabei wird versucht, die Verluste zu beschränken und die Gewinne weit laufen zu lassen und so einen positiven Erwartungswert zu erzeugen. Mehr zur Intuition und der Funktionsweise des Signals können Sie in unserem Artikel zu Gleitenden Durchschnitten erfahren.

Ab hier wird angenommen, dass Sie sich mit der Idee des Signals vertraut gemacht haben, sodass wir uns nur noch auf den Code konzentrieren können. 

Beziehen der Kursdaten für einen Backtest – Python data access

Zunächst benötigen wir Kursdaten für die nachfolgende Datenanalyse bzw. Backtest. Diese beziehen wir wie in diesem Artikel beschrieben. Wir legen allerdings dieses Mal in unserem neuen Projekt eine entsprechende neue Klasse an, die aber im Prinzip den selben Inhalt hat, sodass man diese Features theoretisch auch vererben könnte. Wer sich für dieses Konzept interessiert, kann hier mehr dazu nachlesen. Dafür importieren wir zum Beginn des Programms wie üblich alle notwendigen Pakete:

from pandas_datareader import data as pdr

import fix_yahoo_finance # must pip install first

import numpy as np

import pandas as pd

import datetime

from conda.common import signals

from matplotlib import pyplot as plt

Daraufhin beginnen wir die Klasse zu erstellen, die uns dazu dienen soll die Daten zu beziehen und entsprechende Prozessschritte zu durchlaufen, die Ihnen die Evaluation Ihrer Strategie erlauben. Die Klasse, die dazu erstellt werden, soll ist die Klasse Quantitative Strategy. Diese bezieht im ersten Schritt die Kursdaten mithilfe des Pandas-Datareader. Die dafür notwendigen Parameter werden in der __init__ Methode übergeben und in Folge an das Objekt übergeben.

class QuantitativeStrategy():
    def __init__(self,stock_ticker,start_date,schnell,langsam):
        self.aktie = pdr.get_data_yahoo(stock_ticker,start_date).copy()
        self.schneller_ma = schnell
        self.langsamer_ma = langsam

Nachdem all diese notwendigen Informationen dem Objekt zugeordnet wurden, liegt der nächste Schritt in der Definition der Handelsstrategie zu definieren und auf der Anwendung der Kursdaten auf die gewählten Aktien.

Erstellen der Indikatoren und der Handelssignale mit Python

Dafür erstellen wir eine Methode, welche Sie später mit dem erstellten Objekt verwenden können. Als Ergebnis liefert die Methode einen Dataframe, der alle notwendigen Informationen zum Signal der Strategie, sowie den jeweiligen Returns der Periode enthält, um die Entwicklung eines Kontos zu simulieren.

        #Wenn heute das Signal entsteht, darf erst morgen eine Position daraufhin eingegangen werden.
        #Wenn dies nicht beachtet wird, wird jede Strategie automatisch zum Powerhouse, da die bekannte
        #Zukunft in die Entscheidungen mit einfließt
        #Dazu shiften wir die Signalspalte um eine Periode in die Zukunft - sodass das Signal am Folgetag

        #für die Handelsentscheidung herangezogen wird
        signals["signal"] = signals["signal"].shift(1)
        return signals

Dabei muss man beachten, dass ein Signal immer zum Ende des Tages entsteht und daher erst die Renditen des nächsten in die Berechnung einfließen dürfen. Aus diesem Grund verwenden wir die Shift-Funktion des Dataframes um die Signale um eine Periode zu verschieben. Eine 1 in der Signal-Spalte bedeutet daher, dass die Rendite des betreffenden Tages für den Backtest verwendet werden kann und soll. Die Signale stellen wir in diesem Fall einfach über eine Spalte dar, welche True oder False enthält, also: das Signal ist aktuell aktiv oder das Signal ist inaktiv. Ob der Wert der jeweiligen Zeile True oder False ist, hängt in diesem Fall von den beiden gleitenden Durchschnitten ab, die wir mit dem folgenden Abschnitt erstellen:

schnell = self.aktie["Adj Close"].rolling(window = self.schneller_ma).mean()

langsam = self.aktie["Adj Close"].rolling(window = self.langsamer_ma).mean()

signals["signal"] = (signals["schnell"] > signals["langsam"])*1 #Ergibt True und False

zum Schluss wird signals als Ergebnis ausgegeben. Das Objekt signals ist ein Pandas DataFrame, welcher die täglichen Renditen, die Signallage, sowie die Kursdaten der Aktie enthält.

Berechnung der Kontoentwicklung der Handelsstrategie im Backtest mit Python lernen

Mit Hilfe des erstellten DataFrames, können nun alle Auswertungen erstellt werden, die man von einem Backtest erwarten kann. Dazu zählen sowohl die Kontoentwicklung als auch die möglichen Auswirkungen von verschieden hohen Hebeln auf die Handelsstrategie. Um diese Daten greifbar zu machen, werden wir Liniencharts und Histogramme verwenden.

Dazu wird eine neue Klasse angelegt. Diese bekommt die zuvor erstellten Daten übertragen, sodass sie auf diese zugreifen kann.

class PortfolioBacktest():
    def __init__(self,signal_matrix):
        self.signal_matrix = signal_matrix

Somit entsteht ein Portfolio-Objekt, das die Daten der Aktie trägt. Mit diesen Daten soll nun mit Backtest-Methoden gearbeitet werden: 

    def equity_development(self,initial_account_size = 10000,leverage = 1):
        df = self.signal_matrix
        df.dropna(inplace = True)
        df["return"] = df["Adj Close"].pct_change()
        df["strategy_returns"] = df["signal"]*df["return"]*leverage+1
        df["capital_growth"] = df["strategy_returns"].cumprod()
        df["stock_performance"] = (df["return"]+1).cumprod()
        df["stock_performance"] = df["stock_performance"]*initial_account_size
        df["equity"] = df["capital_growth"]*initial_account_size
        #fig, axes = plt.subplots(nrows=2, ncols=2)
        fig = plt.figure()
        ax1 = fig.add_subplot(221)
        ax2 = fig.add_subplot(222)
        ax3 = fig.add_subplot(212)
        df[["equity","stock_performance"]].plot(ax = ax3)
        (df["return"]).plot(ax = ax1,kind = "hist",title = "Histogram of Stock Returns")
        filter_null_returns = (df["strategy_returns"] != 0)
        (df["strategy_returns"][filter_null_returns]-1).plot(ax = ax2,kind = "hist", title = "Histogram of Strategy Returns")
        return(df)

 Dieser Code-Block wirkt zunächst überwältigend. Brechen wir ihn einmal herunter, um Klarheit zu schaffen. 

    def equity_development(self,initial_account_size = 10000,leverage = 1):

Definiert die Methode equity_development. Diese Methode soll unabhängig von dem verwendeten Signal immer dieselben Ergebnisse produzieren. Dies ist möglich, da in dem DataFrame verschiedene Daten hinterlegt sind und diese -ganz gleich welches Signal erstellt wird- immer gleich heißen werden. So wird es immer eine Spalte “Adj Close” geben und immer eine Spalte “signal”. Somit kann an Hand dieser nun die Grafik produziert werden. Zu Beginn werden einige Schritte zur Bereinigung der Daten durchgeführt. Soll entschieden werden, ob eine Handelsstrategie mit echten Geld umgesetzt wird, muss dies noch etwas sauberer ausgestaltet werden. Für einen ersten Versuch ist das hier gezeigte Vorgehen vollkommen aus.

        fig = plt.figure()
        ax1 = fig.add_subplot(221)
        ax2 = fig.add_subplot(222)
        ax3 = fig.add_subplot(212)

 

Definiert die Abschnitte der Grafik, auch “Subplots” genannt. Diese Abschnitte erlauben das Anordnen der Grafiken wie in diesem Beispiel: 2 Grafiken oben und eine große Grafik unten. Um die Grafiken in die erstellten Platzhalter zu “schreiben,” soll die in Pandas enthaltene Plot-Methode verwendet werden, wobei über die ax1,ax2,ax3 Variable die jeweilige Position zugeordnet wird.

        df[["equity","stock_performance"]].plot(ax = ax3)
        (df["return"]).plot(ax = ax1,kind = "hist",title = "Histogram of Stock Returns")
        filter_null_returns = (df["strategy_returns"] != 0)
        (df["strategy_returns"][filter_null_returns]-1).plot(ax = ax2,kind = "hist", title = "Histogram of Strategy Returns")
        return(df)

Das Ergebnis kann sich sehen lassen:

Strategy = QuantitativeStrategy("BAS.DE","2010-01-01",20,80)
Strategy = Strategy.moving_average_cross()
Portfolio = PortfolioBacktest(Strategy)
Results = Portfolio.equity_development()

Im weiteren Verlauf könnten nun noch weitere Statistiken erstellt werden, die die Handelsstrategien näher beschreiben, wie z.B. das Sharpe-Ratio, die Standardabweichung, der Max-Drawdown und viele weitere, die notwendig sind um eine wirkliche Aussage über die Güte einer Strategie zu treffen.

Wie bereits angesprochen, erlaubt unser Backtest auch die Entwicklung zu hebeln. Der Hebel ist dabei ein fester Wert, der die Renditen faktorisiert. Dies entspricht also nicht dem klassischen Hebel in Form eines Kaufs mit Margin, sondern vielmehr der Verhaltensweise eines Faktor Zertifikats, da der Hebel täglich neu auf die voreingestellt Zahl angepasst wird und die entstandene Rendite multipliziert.
Um einen Kauf auf Margin darzustellen, müssen wirkliche alle Käufe und Verkäufe zu bestimmten Kursen erstellt und verarbeitet werden. Dies ist wesentlich komplizierter als das gewählte Beispiel. Das hier gezeigte Szenario lässt sich mit: „Ich bin investiert“ oder „Ich bin nicht investiert“ beschreiben , bei dem Transaktionskosten keine Berücksichtigung finden.

Betrachten wir nun einmal das Ergebnis unserer Hebelmöglichkeiten:

Strategy = QuantitativeStrategy("BAS.DE","2010-01-01",20,80)
Strategy = Strategy.moving_average_cross()
Portfolio = PortfolioBacktest(Strategy)
Results = Portfolio.equity_development(leverage = 3)

Nun schlägt auch unsere Strategie den Markt. Da sie es schafft, die Renditen zu transformieren und somit auch Verlustphasen soweit beschränken kann, dass das Konto nicht auf Null fällt und der Hebel langfristig zum Vermögensaufbau beitragen kann. 

Das ist das Ende der Reihe Python lernen für Investieren und Traden.
Die verwendete Codes finden sich auch auf meinem GitHub Repository und sind frei zum Download verfügbar: https://github.com/JulianStorz/Python_Backtest

Bei Fragen hinterlassen Sie uns gerne einen Kommentar oder schreiben Sie uns an info@insidetrading.de oder abonnieren Sie unseren Newsletter.

by Jan 19, 2018 Keine Kommentare
Investieren und Traden mit Python lernen – Beziehen von Kursdaten für Technische Analyse

Investieren und Traden mit Python lernen – Beziehen von Kursdaten für Technische Analyse

Analysetechniken

BITTE BEACHTEN SIE – DER API VON YAHOO FINANCE WURDE DAUERHAFT GESCHLOSSEN – ALS KOSTENFREIE ALTERNATIVE KÖNNEN SIE ALPHAVANTAGE ALS DATENQUELLE VERWENDEN – DIE DOKUMENTATION FINDEN SIE AUF DEREN SEITE

Für jede Analyse braucht es Daten, die eine Datenanalyse möglich machen. Ein deutsches Sprichwort sagt, „Woher nehmen, wenn nicht stehlen?“. Genau diese Frage stellt sich vielen, wenn es zum Thema Kapitalmarktdaten kommt. Doch ich verspreche Ihnen, es gibt Mittel und Wege, ohne dass Sie alles von Hand abtippen müssen.
API heißt das Zauberwort.

In diesem Beitrag soll es darum gehen, wie Sie an die Daten für Ihre Analysen kommen. Außerdem wird kurz die Handhabung von Pandas besprochen, des wohl wichtigsten Tools für den Umgang mit Daten in Python.

Installieren notwendiger Libraries für diesen Beitrag

Sofern noch nicht geschehen, sollten Sie an dieser Stelle die Librarys Pandas, fix_yahoo_finance und Pandas_Datareader installiert haben. Zudem möchte ich noch eine Alternative aufzeigen, welche besonders für fundamental-versierte Leser interessant sein könnte. Der Quandl API. Hierfür sollte zusätzlich noch die Library Quandl installiert werden.
Wie üblich öffnen Sie hierfür bitte die Kommandozeile (Windowstaste + R und CMD eintippen). Dort führen Sie bitte die folgenden Befehle, aus um die Pakete für Python herunterzuladen und zu installieren.

pip install pandas
pip install pandas_datareader
pip install fix_yahoo_finance
pip install quandl

WICHTIG: Zusätzlich zu pandas_datareader muss auch fix_yahoo_finance mit installiert werden. Dies ist seit einer Veränderung des Yahoo Finance APIs notwendig geworden.

WICHTIG: Damit Sie pip einfach so verwenden können, sollten Sie Python Ihren Systempfaden hinzufügen:

  1. Öffnen Sie dazu die System Übersicht (Drücken Sie dazu Win+Pause)
  2. Wählen Sie dort die Erweiterten Einstellungen
  3. Klicken Sie auf Umgebungsvariablen
  4. Klicken Sie dort auf PATH in der Systemvariablen Sektion
  5. Klicken Sie Bearbeiten
  6. Fügen Sie am Ende der Liste ein Semicolon (;) ein und fügen Sie dahinter den Pfad ein, in dem Sie Python installiert haben, sowie den Pfad des Scripts Ordners. In meinem Fall sieht das so aus:
    C:\Users\Programs\Python\Python36-32;C:\Users\Programs\Python\Python36-32\Scripts:

Nachdem dies geschehen ist, können Sie auf die Libraries zugreifen, indem Sie diese zum Beginn Ihres Programms importieren.

import pandas as pd
from pandas_datareader import data as pdr
import fix_yahoo_finance
import quandl

Bitte beachten Sie, dass die Libraries zumeist mit einem Kürzel importiert werden, welches mit as deklariert ist. Dies ist eine Konvention bei einigen der Pakete und sollte beibehalten werden, um den Code mit anderen besser vergleichbar zu machen und Einheitlichkeit zu gewährleisten. Dies verbessert den Austausch in der Community und trägt zur Stärkung der Programmiersprache bei.

Lassen Sie sich von den Ausrufezeichen am Anfang der Zeilen nicht irritieren. Diese werden von Pydev in Eclipse lediglich angezeigt, da Sie noch keine Operationen mit den Paketen ausgeführt haben und diese bis jetzt quasi noch nutzlos in Ihrem Code platziert sind. Dies ist kein guter Stil, da es Ressourcen Ihres Computers unnötig in Beschlag nimmt. Diese verschwinden nach und nach sobald der Code, den Sie entwickeln, die einzelnen Importe verwendet.

Beziehen von Kursdaten

Die Pakete sind installiert und in der Entwicklungsumgebung importiert. Lassen Sie uns nun also starten, die ersten Daten zu beziehen. Als erstes möchte ich auf den Import von Kursdaten über Yahoo Finance eingehen und dabei pandas_datareader vorstellen. Pandas Datareader war ursprünglich ein Teil der Pandas Library, wurde jedoch ausgelagert, nachdem der Umfang dies nahegelegt hatte.

Um Kursdaten von Yahoo zu beziehen, brauchen wir den jeweiligen Ticker der Aktie, wie er bei Yahoo hinterlegt ist. Meist sind dies die RICs des Wertpapiers, jedoch nicht immer zwangsläufig.

Auf dem Bild habe ich für Sie die Daimler Aktie auf Yahoo-Finance geöffnet und den Ticker gelb hinterlegt.

Damit Sie die Kursdaten von Yahoofinance beziehen können, müssen Sie also die Daten für DAI.DE abfragen: Dafür benötigen wir die Hilfe von Pandas_Datareader:

from pandas_datareader import data as pdr
import fix_yahoo_finance

pdr.get_data_yahoo("DAI.DE","2015-01-01")

Der erste Abschnitt des Codes gibt an, für welchen Ticker wir Kursdaten abfragen und der zweite Teil gibt an, ab welchem Datum die Zeitreihe beginnen soll. In dem von mir gewählten Beispiel fragen wir die Kursdaten der Daimler AG ab dem 01 Januar 2015 ab.

Diese werden uns auch nach kurzer Ladezeit in der Konsole ausgegeben.

Anders als von Ihnen vielleicht erwartet, erhalten wir nicht nur eine sondern gleich sechs Spalten ausgegeben.

Um dies genauer zu analysieren, speichern wir den Datensatz als Variable ab (diese Variable wird ein Dataframe werden) und schauen uns an, wofür die einzelnen Spalten stehen.

Daimler = pdr.get_data_yahoo("DAI.DE","2015-01-01")

Anders als in Ihrer letzten Abfrage werden nun keine Werte mehr angezeigt, da diese in der Variable Daimler gespeichert sind und nun weiter von uns bearbeitet werden können. Zu Beginn interessiert es Sie sicherlich, was es mit den 6 Spalten auf sich hat. Lassen wir uns also die Spaltennamen ausgeben, um den Hintergrund zu beleuchten.

Daimler.columns
Out[9]: 
Index(['Open', 'High', 'Low', 'Close', 'Adj Close', 'Volume'], dtype='object')

Schauen wir zudem noch den Anfang und das Ende des Datensatzes an:

Daimler.head()
Out[10]: 

                 Open       High        Low      Close  Adj Close   Volume
Date                                                                      
2015-01-02  69.599998  70.000000  68.160004  68.750000  60.556007  2778600
2015-01-05  68.260002  68.849998  65.980003  66.169998  58.283508  4527144
2015-01-06  66.400002  68.040001  65.570000  66.610001  58.671062  4331135
2015-01-07  67.250000  68.150002  66.760002  67.129997  59.129089  3394084
2015-01-08  68.220001  70.160004  67.809998  70.070000  61.718681  5009933
Daimler.tail()
Out[12]: 

                 Open       High        Low      Close  Adj Close   Volume
Date                                                                      
2017-10-24  68.570000  69.769997  68.459999  69.400002  69.400002  3395679
2017-10-25  69.339996  69.870003  68.839996  69.250000  69.250000  2898836
2017-10-26  69.230003  70.150002  69.019997  69.949997  69.949997  3893181
2017-10-27  70.139999  71.699997  70.099998  71.110001  71.110001  5655575
2017-10-30  71.139999  71.580002  71.070000  71.290001  71.290001  2414098

Nun wird klar, wofür die einzelnen Spalten stehen. Sie haben durch Ihre Abfrage nicht nur die Schlusskurse, sondern alle Kursdaten zur Daimler-Aktie -also die Tageseröffnungs, -Hochs, -Tiefs, die um Splits und Dividenden adjustierten Kurse sowie das Volumen des Tages erhalten. 

 

Ich würde sagen, damit haben Sie sich eine Grundlage geschaffen, mit der Sie anfangen können zu arbeiten.
Um einzelne Spalten des Datensatzes zu isolieren, können diese über ihren Spaltennamen mit folgender Syntax ausgewählt, in neuen Variablen gespeichert und verarbeitet werden.

Der folgende Code speichert die Schlusskurse des Datensatzes in die Daimler Variable, sodass im weiteren Verlauf nur noch auf diese zugegriffen wird, sofern Sie die Daten aus der Variable abfragen.

Daimler = Daimler["Close"]

Daimler["Close"].head()
Out[40]: 

Date
2015-01-02    68.750000
2015-01-05    66.169998
2015-01-06    66.610001
2015-01-07    67.129997
2015-01-08    70.070000
Name: Close, dtype: float64

 

 

Alternative Datenquellen – Quandl

Neben Yahoo-Fiannce, stehen weitere Datenquellen zur Verfügung, welche je nach Datenbedarf mehr oder weniger nützlich sind.

Wer Makro-Analysen erstellen möchte und danach sein Portfolio steuert, für den sind vor allem Wachstumsraten von Ländern und Sektoren relevant. Solche Datensätze sind durch Yahoo-Finance nicht in ausreichendem Format verfügbar. Hierfür empfehle ich Ihnen Quandl zu nutzen.

Quandl ist eine Datenbank, welche den Zugriff über APIs erlaubt. Sowohl R als auch Python werden unterstützt.

Anmeldung bei Quandl und Nutzung des APIs

Um den Quandl API nutzen zu können, ist eine Anmeldung nicht notwendig, jedoch sind die Zugriffe ohne eine Anmeldung massiv eingeschränkt. Daher empfiehlt es sich einen kostenlosen Account zu erstellen, der mehr API Zugriffe pro Tag erlaubt.

Wer die Daten in großem Umfang oder auch professionell verwenden möchte, findet bezahlte Datenbanken und Angebote die in großem Umfang Abfragen zulassen.

 

Nach der Anmeldung können Sie sich mit dem API Zugriff identifizieren und auf die Daten in entsprechendem Umfang zugreifen.

 

Das folgende Beispiel zeigt den Prozess wie der persönliche API Key in Python eingegeben wird und wie Sie auf eine makroökonomische Datenbank zugreifen können. Als erstes muss der API Key aus dem Nutzerprofil kopiert werden.

import quandl
quandl.ApiConfig.api_key = "IHR_API_KEY"

Diesen geben Sie in Folge mit diesem Code in Eclipse ein und führen diesen aus. Daraufhin ist ihr API Zugriff mit dem KEY legitimiert und Sie haben mehr Zugriffe. Als nächstes benötigen wir eine Datenbank, die Macro-Daten enthält. Für das Beispiel nutze ich die European Commission Annual Macro-Economic Database auf Quandl. Diese ist kostenfrei, sodass das Beispiel von jedem nachvollzogen werden kann.

Um die Verwendung des API darzulegen, beziehe ich die kurzfristigen nominalen Zinssätze in Deutschland als Zeitreihe. Dafür muss in Python der Quandl Code in Methode aus der Quandl library übergeben werden. Der Code findet sich auf der jeweiligen Quandl Seite oben rechts. Ich habe diesen im Bild gelb markiert.

nom_short_term_interest_ger = quandl.get("AMECO/DEU_1_1_0_0_ISN")

Nach dem Ausführen des entsprechenden Befehls im Code werden die Daten von Quandl bezogen und in der entsprechenden Variable abgespeichert.

Dies können Sie entsprechend wieder überprüfen, indem Sie sich die Daten aus der Variable ausgeben lassen.

nom_short_term_interest_ger.head()
Out[48]: 

            Value
Date             
1960-12-31   5.10
1961-12-31   3.59
1962-12-31   3.42
1963-12-31   3.98
1964-12-31   4.09

nom_short_term_interest_ger.tail()
Out[49]: 

               Value
Date                
2012-12-31  0.570000
2013-12-31  0.220000
2014-12-31  0.210000
2015-12-31 -0.019750
2016-12-31 -0.264167

nom_short_term_interest_ger.describe()
Out[51]: 

           Value
count  57.000000
mean    4.803089
std     2.904286
min    -0.264167
25%     3.300000
50%     4.290000
75%     5.970000
max    12.350000

Nachdem Sie nun verschiedene Datenquellen kennengelernt und einen kurzen ersten Eindruck zur Handhabung der Daten bekommen haben, beginnen wir in den nächsten Schritten mit der Analyse und der Darstellung von diesen Daten in Grafiken. 

Die verwendete Codes finden sich auch auf meinem GitHub Repository und sind frei zum Download verfügbar: https://github.com/JulianStorz/Python_Backtest

by Jan 18, 2018 Keine Kommentare
Bitcoin Shorten

Bitcoin Shorten

Analgeinstrumente Investieren

Bitcoin shorten – vom fallenden btc-Kurs profitieren

Der Bitcoin-Hype scheint kein Ende zu kennen und jeder spricht darüber: Taxifahrer, Friseure und Putzmänner. Jeder scheint ein Experte für Kryptowährungen zu sein. Aktuell haben sogar Sido, Kool Savas & Frauenarzt ein Lied zum Thema Veröffentlicht.

Es gibt keine Grenzen für Kursziele und durch die neuen Technologien ist der Traum vom schnellen Geld nun scheinbar in greifbare Nähe gerückt und zum Teil bereits Realität geworden.
Doch wie nachhaltig ist der Trend? Viele Finanzmarktexperten und Fondsmanager sehen die Entwicklung eher skeptisch. Nun bereiten sich zudem viele Hedgefonds auch darauf vor Bitcoin strukturiert zu shorten  – Bloomberg.

Was bedeutet Bitcoins shorten?

Bitcoins zu shorten bedeutet auf fallende Bitcoin Kurse zu setzen. Sie gewinnen also, wenn Bitcoins an Wert verlieren. Bitcoins shortet man, indem man sich zum Beispiel Bitcoins leiht, verkauft und sie zu einem späteren Zeitpunkt zurückgibt. Ist der Kurs des Coins in der Zwischenzeit gefallen, haben Sie einen Gewinn gemacht, andernfalls einen Verlust. Da dies nicht immer so einfach möglich ist, gibt es Finanzprodukte, die diesen Prozess abbilden und es so für den Anleger sehr einfach machen.

Wie können Sie Bitcoins shorten – CFDs oder Futures

Bitcoins lassen sich auf zwei verschiedene Arten und Weisen einfach shorten. Zum einen besteht die Möglichkeit dies über CFDs und zum anderen über einen Future zu machen. Die genauen Hintergründe zu den beiden Möglichkeiten haben wir unten für Sie aufgeschlüsselt. Hier finden Sie eine kurze Zusammenfassung:

  • Bitcoins können Sie bis zu einem Volumen von 10 Bitcoins sehr gut über CFDs shorten. Bei größeren Volumen eignen sich Futures besser, da es keine Volumenbeschränkung pro Trade gibt
  • Bitcoin-Futures werden an regulierten Märkten gehandelt
  • CFDs haben eine negative Balance Protektion und schützen den Anleger vor Nachzahlungen
  • Wenn Sie sich für einen CFD-Broker entscheiden, überprüfen Sie dessen Angebot und gleichen Sie es mit Ihrer Erwartungshaltung ab. Ein Beispiel für eine solche Checkliste finden Sie unten

Lassen Sie uns aber ein wenig mehr ins Detail gehen.

Der Bitcoin-Kursverlauf lässt nichts Gutes ahnen– Bitcoin verkaufen?

Bitcoins haben in der jungen Vergangenheit zu einer Kurs-Rally geführt, die in der Vergangenheit ihres gleichen sucht. Selten waren Kursanstiege so dramatisch und nicht einmal die Mississippi-Blase, kann den Siegeszug des Bitcoins noch übertrumpfen.

Die Historie scheint einen gerade darauf aufmerksam machen zu wollen, dass diese Entwicklung nicht gesund sein kann, denn auch damals hieß es: „so etwas hat es noch nie gegeben, jetzt wird alles anders“.

Daher stellt sich vielen nun die Frage: „Halte ich meine Bitcoin oder verkaufe ich Bitcoin über eine btc exchange und profitiere vom aktuell sehr guten btc to eur Wechselkurs?“
Diese Frage ist höchst individuell zu beantworten. Sicherlich hat Bitcoin noch einiges an Euphorie-Potenzial aber je nach persönlicher finanzieller Situation kann sich ein Ausstieg bereits jetzt nachhaltig für die Familienkasse bemerkbar machen.
Was, wenn Sie zum aktuellen Zeitpunkt keine Bitcoins haben, welche Chancen bieten sich Ihnen dann beim aktuellen btc-Kurs?

Bitcoin shorten – von fallenden btc Kursen profitieren

Anstelle Bitcoins einfach nur zu kaufen und von steigenden Kursen zu profitieren, gibt es auch bei Kryptowährungen die Möglichkeit, auf fallende Bitcoin-Euro-Kursen zu setzen.
Das Konzept ist beim Kryptowhährungshandel dasselbe wie beim Aktienhandel. Ob Bitcoins, Litecoins, Etherium, IOTA oder Aktien: es lassen sich immer beide Seiten des Trends nutzen.

Bei Bitcoins sowie Währungen im Allgemeinen, gibt es dafür viele Wege.Die beiden einfachsten werden in den folgenden zwei Abschnitten diskutiert:

Bitcoin CFD – mit einem CFD auf fallende btc-Kurse setzen

CFDs sind Contract for Difference.Diese haben beim normalen Währungshandel für Privatkunden bereits den Löwenanteil des Marktes für sich beanspruchen können. Diese Produkte sind sehr einfach strukturiert und auch die Wertentwicklung der Position ist einfach nachvollziehbar: anders als zum Beispiel bei Optionen.

CFDs eignen sich durch den Hebel bereits bei kleineren Kontogrößen, um Shortpositionen auf Bitcoin einzunehmen. Wenn Sie Bitcoin shorten, verkaufen Sie vereinfacht gesagt jemandem Bitcoins, die Sie noch nicht besitzen. Dadurch entsteht eine Verpflichtung, diese zu einem späteren Zeitpunkt zu liefern. Fällt nun der Bitcoin-Kurs im Laufe der Zeit, so können Sie ihre Verpflichtungen zu einem günstigeren btc-Kurs ausgleichen. Die Differenz ist Ihr Gewinn.
Geschäfte, die diesen Prozess abbilden, können Sie bei verschiedenen Brokern sehr einfach handeln. Die Auswahl des richtigen Krypto-CFD-Brokers sollten Sie dabei z.B. an den folgenden Kriterien festmachen:

  • Welchen Hebel bietet mir der Broker für Paare wie btc to eur oder eth to eur
  • Wie viele Kryptowährungen sind beim Broker vertreten? Hat er Bitcoin, Litecoin, Etherium, IOTA und die anderen großen alle als CFD im Angebot?
  • Wie hoch sind die Overnight-Gebühren?
  • Welche Meinungen haben die anderen Kunden?
  • Kenne ich Kunden des Brokers?
  • Welche Weiterbildungsmöglichkeiten hat der Broker im Angebot?
  • Gibt es themenspezifische Webinare?

Wie gehen Sie nun aber mit der Situation um, wenn Sie recht viele Bitcoins besitzen oder aber ein großes Budget haben und viel Geld bewegen wollen?

Bitcoin Future – Gewinne durch Bitcoin-Kursverlusten erzielen

Futures könnten in diesem Zusammenhang genau die richtige Lösung für Sie sein. Die CBOE sowie CME hat für den Bitcoin einen eigenen Future aufgelegt. Die Terminkontrakte erlauben es den Händlern sowohl Long- als auch Short-Positionen auf Bitcoin einzunehmen. Somit gibt es eine neue Alternative in Bitcoins auf einen fallenden btc to eur Kurs zu setzen.

Ein Future ist von der Wertentwicklung her vergleichbar mit einem CFD – mit dem Unterschied, dass Futures nur eine beschränkte Laufzeit haben und somit nicht wie ein Bitcoin-CFD als Position unendlich lang gehalten werden kann. Um trotz allem langfristig durch den Future positioniert sein zu können, lassen sich die Kontrakte rollen. Mehr dazu finden Sie in unserem Artikel zur Rolle von Futures.
Futures liefern zudem aufgrund der Tatsache, dass sie die Spielwiese für institutionelle Investoren sind, ausreichendes Volumen um auch mehr als 10 BTC zu handeln. Dieser Wert stellt bei CFD-Brokern oftmals die Obergrenze dar. Dabei ist allerdings die Mindestposition oftmals gleich dem Bitcoin-Future, welcher mit einem Bitcoin pro Kontrakt normiert ist.

Bitcoin-Futures werden zudem an einem regulierten Markt gehandelt, was zusätzliche Sicherheiten verspricht. Im Gegensatz zu den teils weniger renommierten Bitcoin Exchanges unterliegt der Handel der vollen Transparenz, welche auch bei anderen Finanzprodukten vorliegt. Zudem wird der Future auch über Clearing Häuser gecleart. Dies soll das Settlement garantieren und mehr Klarheit zur Abwicklung geben.
Mehr Informationen zum BTC Future findet sich beispielsweise auf der Seite der CBOE.

Bitcoin CFD oder Bitcoin Future zum Shorten von BTC

Ob ein CFD auf Bitcoin oder aber der BTC Future die richtige Lösung für einen Short-Trade in BTC ist, muss individuell entschieden werden. Möchten Sie echte Bitcoin beziehen bzw. über den Terminmarkt veräußern, und ist es für Sie wichtig, dass Sie Bitcoin an einem regulierten Markt handeln und ein standardisiertes, sicheres Clearing (Erfüllung) Ihres Trades haben. Ist dies der Fall, so ist der Future für Sie wahrscheinlich die beste und aktuell einzige Lösung die diese Ansprüche erfüllt.

Möchten Sie schnell handeln und aktiv am Markt sein, so sind unter Umständen CFDs eine gute Wahl. Diese sind oftmals durch den Broker sehr liquide gehalten und können somit auch IntraDay schnell und einfach gehandelt werden. Großer Nachteil könnte für manche die Beschränkung der Positionsgröße auf 10 btc sein, wobei dies eher die Ausnahme der Regel ist. Neben dieser Einschränkung kommt erschwerend die Tatsache hinzu, dass Sie über Bitcoin nicht die Möglichkeit besitzen, auch wirklich Bitcoin zu beziehen, bzw. liefern zu lassen. Somit haben Sie mit CFDs ein Produkt, welches Ihnen erlaubt an der Wertentwicklung von Bitcoin zu partizipieren, nicht aber Bitcoin zukünftig auch als Zahlungsmittel zu nutzen oder Ihre Bitcoins an eine andere Person zu verkaufen.

Somit liegt die endgültige Entscheidung über den richtigen Handelsweg ist bei Ihnen. Sie können Bitcoin nun auf zwei Wegen shorten, bzw. über einen geregelten Markt verkaufen. Sie haben somit einen erweiterten Überblick über die aktuell verfügbaren Möglichkeiten gewonnen und können besser am Markt agieren. Viel Erfolg.

by Dez 17, 2017 Keine Kommentare
Monte-Carlo-Simulation: Der Backtest für Ihren Backtest

Monte-Carlo-Simulation: Der Backtest für Ihren Backtest

Anlagetechniken

In unserem aktuellen Content werden wir Ihnen die Monte-Carlo-Simulation näherbringen. Denn, unserer Meinung nach, ist die Monte-Carlo-Simulation ein sehr nützliches Werkzeug für das Trading. Denn mit der Monte-Carlo-Simulation können Sie sowohl Ihre Trading-Strategien auf Robustheit und Stabilität überprüfen, als auch wirklich nützliche Forecasts generieren.

Lassen Sie uns aber, fürs Erste, bei der Robustheit und Stabilität von Handelsstrategien bleiben. Denn die Thematik des Forecasts durch die Monte-Carlo-Simulation ist ein etwas deutlich komplexeres Thema. Auf dieses würden wir gerne in einem separaten Artikel eingehen.

 

Was genau ist eine Monte-Carlo-Simulation?

So wie es halt leider im Leben ist, müssen wir uns erstmal mit den Basics auseinandersetzen, bevor wir zu dem spannenden Teil kommen.

Die Monte-Carlo-Simulation ist, zuallererst, eine mathematische Technik der quantitativen Analyse. Sie soll dabei aushelfen, verschiedene Eintrittswahrscheinlichkeiten darzustellen und mit Hilfe dieser die Entscheidungshilfe zu unterstützen.

Was bedeutet somit die Monte-Carlo-Simulation für die Trader?

Mit Hilfe der Monte-Carlo-Simulation kann der Trader die Ergebnisse seiner möglichen Handlungen „vorhersehen“. Sie können mit der Monte-Carlo-Simulation die Extremwerte eines Handelssystems ermitteln und diese simulieren.

 

Wieso ist die Monte-Carlo-Simulation so wichtig für das Trading?

Nehmen wir mal an, Sie haben ein fertiges Handelssystem entwickelt und haben dieses nun einem Backtest unterzogen. Das Ergebnis von diesem Backtest ist positiv. Es scheint als ob Sie es endlich geschafft haben und Sie nun das große Geld an den Börsen verdienen können. Doch ist dem so? Wie signifikant ist denn dieser Backtest alleine?

Ein Backtest hat immer einen positiven Bias. Was heißt das? Das heißt, dass ein Backtest, so gut wie immer, ein besseres Ergebnis abwirft, als es in der Realität auftreten würde. Doch wieso?

Ein Backtest findet immer in einer perfekten Umgebung statt. Das heißt, dass Sie im besten Fall zwar vielleicht den Spread eingestellt haben, aber die Slippage wird außen vorgelassen. Die Trades werden perfekt ausgeführt und perfekt beendet. In solch einem „perfekten“ Trading-Umfeld lässt sich natürlich ganz einfach Geld verdienen. Doch die Realität sieht meistens anders aus.

Das Ergebnis eines Backtests kann sich drastisch verändern, wenn man das Handelssystem auch nochmal in einer Monte-Carlo-Simulation testet.

Unserer Meinung nach ist ein Handelssystem nichts anderes, als eine Wahrscheinlichkeitsverteilung zu unseren Gunsten mit einem positiven Erwartungswert. Wie sich aber die Wahrscheinlichkeiten aufteilen oder anordnen, weiß niemand.

Gehen wir mit diesem Gedanken an einen Backtest ran, so erkennen wir, dass ein Backtest nur EINE mögliche Anordnung der Wahrscheinlichkeiten darstellt. Doch die Wahrscheinlichkeiten ordnen sich jedes Jahr, jeden Monat, jede Stunde, jede Minute aufs Neue an. Genau hier kommt nun die Monte-Carlo-Simulation ins Spiel. Denn mit Hilfe dieser Simulation können Sie erkennen, ob der im Backtest gezeigte maximale Draw-Down auch wirklich der maximale Draw-Down ist. Oder ob bei einer anderen Verteilung der Wahrscheinlichkeiten der Draw-Down auch nochmal deutlich größer ausfallen kann.

Genauso kann es auch passieren, dass in 30 von 50 Simulationen das Handelssystem nicht profitabel abschneidet. Somit würden wir ein Handelssystem dennoch nicht verwenden, auch wenn es im Backtest ein positives Ergebnis geliefert hat.

Mit Hilfe der Monte-Carlo-Simulation können Sie nun die Wahrscheinlichkeiten Ihrer Trades komplett neu einordnen und den positiven Bias glätten. Natürlich alles unter der Prämisse, dass Sie alle vorherigen Schritte wie die Betrachtung einer relevanten Historie, der Errechnung des Standardfehlers etc. beachtet haben.

Bevor wir an die Einzelheiten gehen, möchten wir Ihnen ein Experiment zeigen.
In diesem Experiment haben wir 500 willkürliche Trades eingesetzt. Diese 500 Trades ergeben ein positives Ergebnis mit einem positiven Erwartungswert und einer Trefferquote von über 50%. Nehmen wir an, dass das unser erster Backtest ist.

So sieht das erste „Backtest-Ergebnis“ aus:

(Abbildung 1: Equity Kurve der Strategie mit den ausgedachten Zahlen)

 

(Abbildung 2: Statistische Kennzahlen der Strategie mit den ausgedachten Zahlen)

 

In der Abbildung 1 erkennen Sie nun die Equity-Kurve unserer erfundenen Strategie und in der Abbildung 2 die dazugehörigen statistischen Kennzahlen.

So könnte ein Backtest aussehen den Sie vielleicht auch schon mal für sich selber gemacht haben.

Schauen wir uns nun 3 Monte-Carlo-Simulationen an, die auf derselben ausgedachten Strategie beruhen. Wie stark kann das Ergebnis schwanken? Die statistischen Kennzahlen sehen doch eigentlich ganz gut aus. Schauen wir mal rein.

(Abbildung 3: Erste Monte-Carlo-Simulation)

 

(Abbildung 4: Zweite Monte-Carlo-Simulation)

 

(Abbildung 5: Dritte Monte-Carlo-Simulation)

 

Was können wir nun aus den drei Monte-Carlo-Simulationen ableiten? Schauen wir uns doch diese einzeln an.

Die erste Monte-Carlo-Simulation hat ein deutlich schlechteres Endergebnis als die Ursprungs-Equity-Kurve. Sie verläuft mit sehr vielen Seitwärtsphasen und jede Menge kleinerer Draw-Downs. Diese Equity-Kurve unterscheidet sich sehr stark von der Ursprungs-Kurve. Es ist aber dennoch ein und dieselbe Strategie. Nun sind aber die Wahrscheinlichkeiten anders verteilt.

Die zweite Monte-Carlo-Simulation fällt deutlich besser aus, als die Ursprungs-Kurve. Diese Kurve verläuft mit deutlich weniger Seitwärtsphasen und viel geringeren Draw-Downs.

Die dritte Monte-Carlo-Simulation hat auch ein etwas schlechteres Endergebnis als die Ursprungs-Kurve. Die Draw-Downs und die Seitwärtsphasen sind aber dennoch sehr stark ausgeprägt.

Was können wir nun daraus schlussfolgern? Unserer Meinung nach, ist es ein unglaublicher Vorteil zu erfahren, wie ein und dieselbe Strategie bei einer unterschiedlichen Wahrscheinlichkeitsverteilung ausschauen kann. Das hat, unter anderem, auch einen sehr starken psychologischen Effekt. Zuallererst wird man von Draw-Downs und Seitwärtsphasen mental weniger stark betroffen. Da wir ja durch die Monte-Carlo-Simulation gesehen haben, wie lange und wie stark diese ausfallen können.

Wir erfahren auch, dass das Real-Trading-Ergebnis auch abweichen kann. So dass wir mit unseren Gewinn-Zielen nicht so festgesetzt sind. Würden wir nun nicht 3 sondern 300 Monte-Carlo-Simulationen durchführen, so könnten wir durch die Ermittlung der wichtigsten Durchschnitts-Kennzahlen herausfinden, wie die Performance auf langfristiger Basis aussehen könnte und welches die Best- und welche die Worst-Case-Szenarien sind.

Wir möchten auch nochmal darauf hinweisen, dass eine Monte-Carlo-Simulation nur so lange Signifikanz hat, so lange die Parameter und Umstände gleichbleiben. Die Parameter und Umstände verändern sich aber an der Börse täglich. Somit müssen Sie Ihre Trading-Parameter und die Parameter Ihres Handelssystems stets im Fokus haben. Eine Monte-Carlo-Simulation hat auch nicht nur Vorteile. Solange Sie aber, spätestens mit Hilfe dieses Artikels, das nötige Wissen über die Monte-Carlo-Simulation besitzen, ist es ein sehr nützliches Trading-Werkzeug.

 

Die Monte-Carlo-Simulation als Robustheits-Test

Wir verwenden die Monte-Carlo-Simulation sehr gerne für unseren Robustheits-Test eines Handelssystems.

Wie wir Ihnen schon erklärt haben, hat ein Backtest immer einen positiven Bias. Die Aufgabe ist es nun, dass diese positive Verzerrung deutlich schwächer wird und wir es, mit Hilfe der Monte-Carlo-Simulation, schaffen, dass wir dem Realitätswert so nahe wie möglich kommen.

Wofür verwenden wir persönlich die Monte-Carlo-Simulation? Zum einen, wie auch schon im Titel erwähnt, als Robustheits-Test für unsere Handelssysteme. Zum anderen verwenden wir die Monte-Carlo-Simulation als Forecast Methodik. Auf die Forecast Methodik wollen wir heute aber nicht eingehen, dazu wird es, höchstwahrscheinlich, nochmal einen separaten Content geben, da dieses Thema doch etwas komplexer und mathematischer wird.

Doch wie genau verwenden wir nun die Simulation für unseren Robustheits-Test?

Wir nehmen, auf unser ausgedachtes Beispiel angewandt, 20 Monte-Carlo-Simulations-Testergebnisse und ziehen daraus unseren Mittelwert. Nochmal. Wir führen nun 20 Monte-Carlo-Simulationen durch die auf Grundlage unserer ausgedachten Strategie beruhen und notieren uns die Kennzahlen die wir benötigen. In diesem Beispiel ist es der durchschnittliche Gewinn pro Trade und die durchschnittliche Jahresperformance.

Schauen Sie sich nochmal die Abbildung 2 an. Dort erkennen Sie, dass der durchschnittliche Gewinn, in diesem Fall gleich dem Erwartungswert, 11,02 Euro beträgt. Und die durchschnittliche Jahresperformance liegt bei ca. 2900 Euro.

Wie schauen nun die Werte aus, nachdem wir 20 Monte-Carlo-Simulationen durchgeführt haben? Hier die Ergebnisse:

(Abbildung 6: Durchschnittlicher Gewinn pro Trade nach 20 Monte-Carlo-Simulationen)

 

(Abbildung 7: Durchschnittliche Jahresperformance nach 20-Monte-Carlo-Simulationen)

 

Entschuldigen Sie das hässliche Design, wir sind leider keine Designer und für unsere Verhältnisse ist das schon sehr hübsch.

In den oberen 2 Abbildungen sehen Sie nun die Ergebnisse der 20 Monte-Carlo-Simulationen. Welche nützlichen Informationen können wir nun für unser Trading oder unser Handelssystem entnehmen?

Wir erkennen auf den ersten Blick, dass der durchschnittliche Gewinn pro Trade nach 20 Simulationen kleiner ausfällt als nach dem Backtest. Das ist das, was wir mit dem positiven Bias gemeint haben. Der Backtest hat, sehr oft, eine positive Verzerrung.

Der durchschnittliche Gewinn pro Trade nach 20 Simulationen beträgt nun 9,83 Euro. Wir erkennen aber auch, dass das höchste Ergebnis 18,21 Euro beträgt. Wir erkennen aber auch das niedrigste Ergebnis und das ist 5,50 Euro. Das niedrigste Ergebnis ist fast 50% geringer als das Ergebnis des ursprünglichen Backtests. Diese Information ist sehr viel wert. Denn nun können wir unsere Psyche und unsere Erwartungen auf diese Parameter anpassen.

Dasselbe Prinzip haben wir auch bei der durchschnittlichen Jahresperformance. Auch diese fällt nach 20 Monte-Carlo-Simulationen etwas geringer aus. Auch hier können Sie die Höchst- und Tiefpunkte der 20 Simulationen ablesen.

Wir möchten Sie nochmals darauf hinweisen, dass diese Ergebnisse nur dazu dienen um eine bestimmte Systematik und unsere Herangehensweise mit der Monte-Carlo-Simulation zu verdeutlichen.

Es ist auch immer besser, lieber ein paar Simulationen mehr zu haben als zu wenig. Wir führen für die Tests unserer Handelssysteme mindestens 100 Monte-Carlo-Simulationen durch bei denen wir auch mit den Parametern variieren um zu überprüfen, ob das Handelssystem bei stärkeren oder schwächeren Abweichungen der Grund-Parameter immer noch eine ähnliche Performance abwirft oder ob schon sehr kleine Parameter-Abweichungen das Tradingsystem zum Kollabieren bringen.

Wie viele Simulationen die optimale Testmenge ergeben, ist sehr schwer zu beantworten. Unsere Devise lautet da wohl, lieber ein paar mehr als weniger.

 

Mit welchem Programm können Sie eine Monte-Carlo-Simulation durchführen?

Viele glauben, dass man solche Simulationen nur mit kostspieligen Programmen durchführen kann. Das ist aber definitiv nicht so.

Wir bevorzugen für den Start, bevor wir wirklich Geld in teure Software investieren, erstmal das Lean-Konzept. Das heißt, dass wir den Weg mit den geringsten Kosten gehen. Meistens ist dieser Weg auch der mit dem geringsten Aufwand.

Wir verwenden für den Anfang immer Excel. Excel hat mittlerweile so gut wie jeder auf seinem Laptop oder Rechner. Zur Not geht auch OpenOffice.

Es muss nicht immer teure Software sein. Mit Excel kann man so gut wie alles programmieren was man für das Trading benötigt.

Probleme tauchen erst auf, wenn die historische Datenmenge größer wird, dann kommt Excel an seine Grenzen. Bis dahin ist es aber ein optimales Werkzeug.

 

Welche Paramater benötige ich um eine Monte-Carlo-Simulation mit Excel durchzuführen?

Jetzt wird der Stoff ein wenig trocken. Das ist zwar für die meisten das Langweiligste, aber unserer Meinung nach ist das das Essenzielle.

Was benötigen wir denn nun, um eine Monte-Carlo-Simulation durchzuführen.

Hier habe ich fürs Erste einen Ausschnitt aus unserer Monte-Carlo-Simulation Excel-Datei:

(Abbildung 8: Ausschnitt aus Excel Monte-Carlo-Simulation)

 

Die in Gelb markierten Felder sind die Daten die Sie benötigen um eine fachlich saubere Monte-Carlo-Simulation durchzuführen.

Gehen wir diese mal Schritt-für-Schritt durch. Am Ende dieses Kapitels werden Sie selbst in der Lage sein können eine Monte-Carlo-Simulation auf Excel oder OpenOffice zu erstellen.

 

Schritt 1: Listen Sie alle Ihre Trades

 Zuallererst müssen Sie all Ihre Trades untereinander in die Excel-Liste importieren. Sei es nun von einem Metatrader 4/5 backtest, Welthlab oder ähnelichen Programmen. Viele Programme haben auch schon eine Monte-Carlo-Simulation inbegriffen, dennoch möchten wir Ihnen hier aufzeigen, wie Sie sich selbst eine Monte-Carlo-Simulation erstellen können. Denn nur so verfügen Sie auch wirklich über Ihre eigenen Daten.

Sind nun alle Trades übertragen, geht es zum zweiten Schritt.

 

Schritt 2: Mittelwert errechnen

Ich denke, dass wir auf den Mittelwert nicht lange eingehen müssen. Diese statistische Kennzahl sollte eigentlich jedem bekannt sein.

Hier ist die Formel die Sie in Excel eintragen müssen:  =MITTELWERT()

 

Schritt 3: Standardabweichung berechnen

 Nun benötigen Sie nur noch die Standardabweichung. Was sagt uns die Standardabweichung denn eigentlich?

Die Standardabweichung sagt nichts anderes aus, als wie unsere Daten verteilt sind. Im Detail sagt diese Zahl aus, wie weit unsere einzelnen Datenmengen im Durchschnitt von unserem Mittelwert entfernt sind.

Mit der Standardabweichung sind wir in der Lage die Streuung von Verteilungen zu messen.

Hier ist die Formel die Sie in Excel eintragen müssen: =STABW.S()

 

Schritt 4: Die Verbindung der Daten zur Monte-Carlo-Simulation

Nun kommen wir zur wirklichen Monte-Carlo-Simulation.

Mit Hilfe dieser Formel, erhalten Sie nun Ihre gewünschte Monte-Carlo-Simulation: =NORM.INV(ZUFALLSZAHL();MITTELWERT;STANDARDABWEICHUNG)

 Haben Sie diese Formel in eine Excel-Zelle eingegeben und diese mit den Werten Mittelwert und Standardabweichung fixiert, so erhalten Sie nun eine Zahl der Monte-Carlo-Simulation. Haben Sie einen Windows-Rechner, so können Sie durch das drücken der F9-Taste immer wieder eine neue Monte-Carlo-Zahl generieren die auf der Grundlage Ihrer Trades basiert. Wenn Sie einen MacBook haben sollten, so können Sie die Monte-Carlo-Zahlen generieren, indem Sie in eine leere Zelle klicken und diese dann mit „Entf.“ bestätigen. Bei jedem Klick von „Entf.“ Erhalten Sie die Monte-Carlo-Zahlen.

Diese Formel können Sie nun x-beliebig nach unten ziehen, so dass Sie eine Equity-Kurve simulieren können.

Diese Zahlen Verbinden Sie dann mit einem „Startkapital“ ,wie in unserem Beispiel 5000 Euro, und erstellen daraufhin ein Liniendiagramm.

Nun können Sie x-beliebig eine Equity-Kurve simulieren und wichtige Parameter für Ihr Handelssystem ableiten.

Sie können die größten Draw-Downs untersuchen, Sie können die Schwankung des Erwartungswertes untersuchen oder Sie können die Schwankung der Trefferquote untersuchen.

Es gibt auch Websiten im Internet die einem die Monte-Carlo-Simulation erleichtern. Wie zum Beispiel diese hier: https://www.suricate-trading.de/equitycurvesimulator/

Es ist definitiv nicht verkehrt, dass Sie auch solche Hilfen verwenden, wenn Sie keine eigene Software oder Excel-Simulation zur Verfügung haben.

Wir können Ihnen aber aus Erfahrung sagen, dass eine eigene Excel-Basierte Simulation deutlich mehr Analyse-Vielfalt bietet, als webbasierte Hilfen.

Nur mit einer eigens programmierten Monte-Carlo-Simulation sind Sie in der Lage die Schwankungen der relevanten Kennzahlen zu bestimmen. Denn eine Trefferquote oder ein Mittelwert ist nie fix. Diese Kennzahlen verändern sich von Trade zu Trade. Solche Schwankungen des Erwartungswertes oder der Trefferquote erhalten Sie nur, wenn Sie sich in Ihre eigene Excel-Basierte Monte-Carlo-Simulation einarbeiten.

Sollten Sie Hilfe oder Anregungen benötigen, stehen wir Ihnen natürlich sehr gerne zur Verfügung und freuen uns über Ihre Fragen oder Ihr Feedback. Schreiben Sie uns einfach unter info@statistic-trading.de

Im nächsten Kapitel der Monte-Carlo-Simulation werden wir unsere Forecast-Methodik erläutern, die uns beim Handel mit Optionen unterstützt und wie auch Sie diesen Forecast per Excel programmieren können und für Ihr eigenes Trading nutzen können.

Sollten sich eventuell genug Interessierte für dieses Thema finden, können wir auch ein Webinar, in Verbindung mit FXFlat Wertpapierhandelsbank, auf die Beine stellen und die ganzen Prozesse live erklären.

Wer also Interesse an solch einem Webinar hätte, der kann gerne das untere Kontakt-Formular verwenden oder Sie schreiben uns, wie schon oben erwähnt, unter info@statistic-trading.de

Sollte Ihnen der Content gefallen haben, können Sie sich auch gerne in unseren Newsletter eintragen. Wir würden uns freuen.

 

Wir wünschen Ihnen eine angenehme und ertragreiche Woche.

Mit freundlichen Grüßen aus Berlin,

Statistic-Trading

 

 

 

 

 

 

by Jun 10, 2017 Keine Kommentare
Statistik trifft Markttechnik: Ist jeder Trend gleich zu traden?

Statistik trifft Markttechnik: Ist jeder Trend gleich zu traden?

Anlagetechniken

Wir haben sehr lange überlegt, ob wir zu diesem Thema einen Artikel veröffentlichen sollten. Denn auf dieser Grundlage, die in diesem Artikel behandelt wird, basieren unsere Tradingsysteme. Dies ist der Grundbaustein unseres Tradings.

Nach langem hin und her, haben wir uns doch für die Veröffentlichung entschieden. Nach dem Motto: „Scheiss drauf, machen wir es einfach“. Wir wollen Ihnen einen Einblick in unsere Sichtweise auf die Märkte geben.

Unser Trading basiert im Grundbaustein auf der Markttechnik. Die Markttechnik, wie auch die Charttechnik, ist eigentlich Auslegungssache. Fragen wir 10 Markttechniker nach einem Aufwärtstrend, bekommen wir zwar von allen die Antwort, dass es sich um einen Aufwärtstrend handelt, aber eingezeichnet bekommen wir ihn auf 10 verschiedene Weisen.

Von dieser Problematik versuchen wir uns, so gut es geht, zu distanzieren. Wir haben versucht, und es für unseren Tradingstil auch geschafft, subjektive Tradingfaktoren zu definieren.

Wir möchten im Vorfeld darauf hinweisen, dass dieser Artikel länger als üblich ist. Da wir in diesem Artikel sowohl auf die Grundlagen der Markttechnik, als auch auf die Grundlagen unserer statistischen Analyse eingehen. Dies erfordert natürlich viel Schreibraum. Sollten Sie das jedoch nicht abschrecken, sondern eher motivieren, dann werden Sie höchstwahrscheinlich eine neue Ansicht zu der Markttechnik erlangen.

 

Die Grundlagen des Markttechnischen Tradings

Zu diesem Thema gibt es im Buchhandel genügend Literatur. Es gibt, wie auch immer im Leben, sowohl gute als auch schlechte Literatur. Sollten Sie die Grundlagen der Markttechnik wirklich verinnerlichen wollen, empfehlen wir Ihnen das Buch von Michael Voigt: „Das große Buch der Markttechnik„ zu kaufen. Dort werden die Grundlagen in einer sehr gut verständlichen Weise erklärt und aufgezeigt.

Die Markttechnik beschäftigt sich mit der Frage: „Wo entsteht Bewegung?“ oder „Wer kauft nach mir?“. Kann die Markttechnik diese Fragen optimal beantworten? Wir sagen „jein“. Die Markttechnik, wenn man Sie verstanden hat, kann einen sehr gute Trendsituationen erkennen lassen. In diesen Trendsituationen versucht dann die Markttechnik eine Gegebenheit ausfindig zu machen, wo „Bewegung“ entstehen kann.

In der Markttechnik wird ein Trend in Bewegungs- und Korrekturphasen unterteilt. Zeigen wir das erstmal an einem aufgezeichneten Beispiel. Im weiteren Verlauf des Artikels arbeiten wir dann natürlich nur mit echten Charts.

In diesem Bild sehen wir nun ein Musterbeispiel eines Aufwärtstrends und eines Abwärtstrends. Beide Trends bestehen aus einer Bewegungsphase und einer Korrekturphase. Im Aufwärtstrend zum Beispiel, ist der grüne Arm die Bewegung und der rote Arm die Korrektur. Im Abwärtstrend ist das, logischerweise, umgekehrt.

Ein wichtiges Kriterium für einen intakten Aufwärtstrend ist, dass das Korrektur-Tief nicht tiefer sein darf, als das Bewegungs-Tief. Und im Abwärtstrend wieder, logischerweise, umgekehrt. Hier nochmal ein Beispiel zur Verdeutlichung.

Solange das Tief der Bewegung nicht gebrochen ist, ist ein Trend intakt. Bis hierhin sollte eigentlich alles klar und verständlich sein. Doch wie traden wir jetzt im Stil der Markttechnik und wo liegen die Problemzonen? Arbeiten wir uns weiter voran.

 

Wie tradet man im Stil der Markttechnik?

Es existieren viele Möglichkeiten wie ein Trader im Stil der Markttechnik traden kann. Im Großen und Ganzen geht es darum, dass man auf der Korrekturphase heraus tradet. Man sucht sich eine, sogenannte, Großwetterlage (GWL) und nutzt diese zur übergeordneten Sicht.

Was ist eine Großwetterlage genau, fragen Sie sich sicher. Eine Großwetterlage ist nichts anderes, als der übergeordnete Trend von der Trendgröße aus der ihr heraus handeln wollt. Ein Beispiel: Ihr wollt Daytrading betreiben und wollt auf einer kleinen Trendgröße handeln. Für solch ein Szenario braucht ihr dann den 1-Minuten-Chart. Wenn ihr eure Trades im 1-Minuten-Chart tätigen wollt, so braucht ihr eine übergeordnete Trendgröße. In diesem Fall den 10-Minuten-Chart. Den 1-Minuten-Chart, also den Chart auf dem Ihr den Trade absetzen wollt, nennt man dann die Signallage.

Hier mal ein Überblick über die Großwetterlagen und die Signallagen in der Markttechnik:

 

  • Signallage : 1-Minuten-Chart à GWL: 10-Minuten-Chart
  • Signallage: 10-Minuten-Chart à GWL: 1-Stunden-Chart
  • Signallage: 1-Stunden-Chart à GWL: Tages-Chart
  • Signallage: Tages-Chart à GWL: Wochen-Chart
  • Signallage: Wochen-Chart à GWL: Monats-Chart

 

Das ist die Basis der Markttechnik für alle Signal- und Großwetterlagen. Im Normalfall reicht eine Großwetterlage aus, um einen Trade gut absetzen und managen zu können. Wenn ihr einen Trade im 1-Minuten-Chart absetzt, wie sinnvoll ist es dann, sich den Tageschart anzuschauen? Genau, eher weniger.

Was wollen wir nun genau mit der Markttechnik erreichen? Wir versuchen mit der Markttechnik eine Großwetterlage zu finden, die sich gerade in einer Korrekturphase befindet. Haben wir solch eine Großwetterlage gefunden, versuchen wir in der Signallage eine gute Situation zu finden, in der man einen Trade platzieren kann. Am besten in einen entstehenden Trend. Zeigen wir das an einem Beispiel, so ist das einfacher zu verstehen:

In dieser Abbildung sehen wir eine Großwetterlage und eine Signallage. Die Signallage befindet sich im umkreisten Gebiet der Großwetterlage. Was erkennen wir nun genau? Wir erkennen mehrere wichtige Eigenschaften. Zum einen erkennen wir die Trendverschachtelung. Wir sehen, dass der Korrekturarm der Großwetterlage einen Abwärtstrend in der kleineren Signallage aufzeigt. Sowas nennt man: Trendverschachtelung. Wir versuchen also aus einer Korrekturphase der Großwetterlage, einen entstehenden Trend in der Signallage zu erwischen. Dieser „kleinere“ Trend der Signallage soll uns dann die Bewegung der Großwetterlage als Profit einstreichen.

Wir wiederholen nochmal. Wir versuchen quasi, auf der Großwetterlage (eine große Surfer-Welle) mit Hilfe der Signallage (eine kleinere Surfer-Welle) einen Trade in Trendrichtung der Großwetterlage zu platzieren, auf dem wir dann mitsurfen können. Wir versuchen eine kleine Welle zu erwischen, die uns auf der großen Welle mitschwimmen lässt. Das ist die Quintessenz der Markttechnik. Was für Einstiegsmöglichkeiten und Stop-Variationen es gibt, das müssen Sie entweder im Buch von Michael Voigt oder mit Hilfe eigener Studien herausfinden. Solch eine Thematik würde hier den Rahmen sprengen.

Trendbeispiele am Börsenmarkt

Nun sind wir soweit und kommen zum reellen Börsenmarkt. Schluss mit selbstgezeichneten Charts. Nur noch eine kleine Anmerkung bevor wir starten. Jeder Markttechniker, wie wir schon oben erwähnt haben, hat eine andere Sichtweise auf die Charts. Wäre dem nicht so, würden nicht so viele Diskussionen über Trends geführt werden. Dem ist aber so. Wir können Ihnen lediglich unsere Sichtweise aufzeigen.  Für uns ist diese Sichtweise die beste. Für andere eventuell nicht. Jeder muss seinen Trading-Stil finden um profitabel werden zu können.

Fangen wir nun an mit ein paar Beispielen im Dax-Candlestick-Chart. Zu Beginn werden wir die Candlestick-Ansicht verwenden, da dies die Ansicht ist, die am meisten verwendet wird. In unserem Trading benutzen wir den Heikin-Ashi-Chart. Wir werden im nächsten Kapitel auf die Vorteile des Heikin-Ashi-Charts eingehen.

Wir werden jetzt keine profitablen Trades zeigen. Im Nachhinein ist jeder Profi. Es geht hier erstmal darum, dass Sie die Prinzipien der Trenderkennung nach Markttechnik realisieren und verinnerlichen.

Ein Trend im 15-Minuten-Chart im Dax:

Hier sehen wir die Abbildung des Dax 15-Minuten-Charts. Wir haben für Sie den für jedermann erkennbaren Trend eingezeichnet. Nachdem wir Ihnen den Trend genau eingezeichnet haben, ist natürlich die gesamte Situation gut zu erkennen. Wo würden Sie aber eine eventuelle Problematik in der Interpretation des Trends erkennen? Schauen Sie sich den Chart genau an! Es gibt Bewegungs- und Korrekturphasen die klar und deutlich zu erkennen sind. Es existiert aber eine Phase, die einem Probleme bereiten kann. Es ist die Korrekturphase des ersten Punktes 2 zum Punkt 3. Das lokale Hoch dieser Phase ist erst zu erkennen gewesen, nachdem der Markt durch den Punkt 2 durchgebrochen war.

Dies sind Marktphasen, wo dann die Foren voll mit Diskussionen füllen, wie man diese Korrekturphase genau zu erkennen hat. Man könnte die Trends ja auch etwas „präziser“ hineinzeichnen.

Hier ein anderes Beispiel vom selben Chart:

Hier sehen wir nun den selben Chart nur mit „präziseren“ Trends. Natürlich sagen jetzt die einen oder anderen, dass sich das um den untergeordneten Trend auf 5-Minuten-Basis oder 1-Minuten-Basis handelt. Das kann generell sogar richtig sein. Wie ist es einem Trader dennoch möglich, dass man sich solche Art von Fragen sparen kann? Dieses Interpretationsproblem von Charts ist allgegenwärtig. Wenn es dieses Problem nicht geben würde, wären alle Diskussionen von Trends überflüssig. Diese existieren aber, ergo, brauchen wir objektivere Faktoren für die Trenderkennung.

Eine mögliche objektive Mustererkennung von Hoch- und Tiefpunkten ist die Art, die von Larry Williams gelehrt wird. Ein Hoch-Punkt wird dadurch gekennzeichnet, indem er von 2 Candles „umzingelt“ wird, die tiefere Hochs haben, als die Hoch-Punkt-Kerze. Dasselbe Prinzip bei einem Tief. Das ist in Textform nicht so leicht zu verstehen. Zeigen wir Ihnen ein Beispiel, denn an einem Chart erklärt es sich besser.

Bleiben wir bei unserem Beispielchart:

Wir haben nun die Trendlinien entfernt und Ihnen die Hoch- und Tiefpunktbeschriftung übriggelassen. Wie man erkennen kann, haben wir Ihnen die Hoch- und Tiefpunkte eingekreist. Hier können Sie nun die objektive Ansicht von den Hochs und Tiefs feststellen. Es ist natürlich kein Wundermittel. Sie können damit nicht jedes Hoch und jedes Tief optimal während der Trendentstehung erkennen. Sie haben aber wiederum auch keine willkürlichen Einzeichnungen mehr.

Schauen Sie sich verschiedenste Charts an. Üben Sie diese Ansichtsweise. Sie werden erkenne, dass es sich hier nicht um ein Wundermittel handelt, aber es kann Ihr Trading deutlich vereinfachen und Ihnen aus dem Interpretationsproblem heraushelfen.

Nochmals eine kleine Zusammenfassung für die Ansicht von Hoch- und Tiefpunkten:

  • Ein Hochpunkt wird von 2 Candles „umzingelt“, deren Hochs tiefer sind, als das Hoch der Mittelkerze (Hochpunkt)
  • Ein Tiefpunkt wird von 2 Candles „umzingelt“, deren Tiefs höher sind, als das Tief der Mittelkerze (Tiefpunkt)

 

Wenn Sie das verinnerlicht haben, kommen wir nun zu einer weiteren Hilfestellung, die das Interpretationsproblem löst. Der Heikin-Ashi-Chart.

 

Der Heikin-Ashi-Chart: eine ganz neue Ansicht für einen Chart

Schauen wir uns zuallererst denselben Chart wie oben an, nur im Heikin-Ashi-Stil:

Ein viel Chart-Bild was viel sauberer und deutlicher zu erkennen ist. Wieso ist das so? Wieso sieht ein Heikin-Ashi-Chart so viel „glatter“ aus, als es die Candlestick-Ansicht tut? Die Hoch- und Tiefpunkte von Heikin-Ashi-Kerzen sind identisch mit denen vom Candlestick-Chart. Die Körper der Kerzen sind aber anders. Um es in einfache Worte zu packen. Der Körper der Heikin-Ashi-Kerze wird aufgrund der durchschnittlichen Bewegung der vorherigen Kerze berechnet. Die Körper der Kerzen sind somit mit Hilfe von Durchschnittswerten geglättet.

Wenn Sie mehr Details zum Heikin-Ashi-Chart benötigen, dann können Sie sich die nötigen Informationen unter diesem Link einholen: http://www.tradesignalonline.com/lexicon/default.aspx?id=147

Wir erkennen nun Korrektur- und Bewegungsphasen viel deutlicher. Was im Candlestick-Chart ein „wischi waschi“ aus grünen und roten Kerzen war, das ist im Heikin-Ashi-Chart viel deutlicher zu erkennen. Kleine Ausreißer-Bewegungen fallen in einem Heikin-Ashi-Chart nicht so schwer ins Gewicht. Dies eröffnet einem neue Möglichkeiten, zum Beispiel für die Art der Stop-Setzung.

Hier nochmal ein Vergleich von der unsauberen Bewegung im Candlestick-Chart und der geglätteten Bewegung im Heikin-Ashi-Chart:

Der Unterschied ist wohl klar und deutlich zu sehen. Im weiteren Verlauf der Analysen und Erklärungen verwenden wir nur noch den Heikin-Ashi-Chart.

 

Wie Statistic-Trading die Trends nach Markttechnik sieht

In diesem Abschnitt werden wir Ihnen nur ganz schnell erläutern, wie unsere Ansicht der Märkte stattfindet. Dies ist wichtig um im späteren Verlauf zu verstehen, wie wir unsere Tradinganalysen durchführen.

Ein blanko Heikin-Ashi-Chart vom Dax 1-Stunde:

 

Hier erstmal ein blanko Chart. Wie analysieren wir nun unsere Trends? Einfach ausgedrückt: Wir versuchen alles als Trend zu sehen, was auch mit dem bloßen Auge und ohne Interpretation zu erkennen ist. In dieser Hinsicht hilft der Heikin-Ashi-Chart ungemein. Wie man hoffentlich am oberen Chart erkennen kann.

Hier nun derselbe Chart nur mit unseren Trends eingezeichnet:

 

Wir haben objektive Regeln erschaffen, ab wann ein Trend ein Trend ist und ab wann ein Trend kein Trend ist. Sie benötigen ein festes objektives Regelwerk für die Bewegungs- und die Korrekturphasen.

Schauen Sie sich einfach den Blanko-Chart und den Chart mit dem eingezeichneten Trend an. Überprüft ob ihr die Trends genau so gesehen hättet. Sie können ja ab dem jetzigen Zeitpunkt auch überprüfen ob Ihnen der Heikin-Ashi-Chart genauso eine große Hilfe ist, wie bei uns damals. Die Heikin-Ashi-Ansicht erleichtert einem das Chart-Screening enorm.

Ist das jetzt eine Korrektur oder nur eine Anomalie? Wurde der Trend gebrochen? Ist das ein Punkt 3 oder nicht? Solche Fragen dürfen Sie, nachdem Sie Ihr Regelwerk aufgestellt haben, nicht mehr haben. Ihr Regelwerk muss alles beantworten können.

Wie Sie erkennen können, haben wir eine eventuell spezifischere Trendansicht als die generellen Markttechniker. Das liegt unter anderem daran, dass uns das auf diese Weise gelehrt wurde, als auch, dass wir nach einer Methode gesucht haben in der man auch die Markttechnik backtesten kann.

Wir erkennen ganz genau im Nachhinein, ob wir einen vorhandenen Trend hatten oder nicht und wann dieser gebrochen ist. Wir können Ihnen hier natürlich nicht alle „Geheimnisse“ unseres Tradings offen legen, denn diese entstanden nach jahrelangen Studien und Experimenten.

Wir möchten Ihnen aber eine Systematik in der Markttechnik mitgeben, mit der Sie dann Ihre eigene Handelsstrategie im Stile der Markttechnik entwerfen könnt.

Kommen wir nun zum wichtigsten Teil dieses Artikels. Wenn Sie bis hierhergekommen sind, dann haben Sie sich nun diesen Abschnitt verdient.

 

Wie lange ist der Lebenszyklus bei einem Trend nach Markttechnik?

Die Markttechnik lehrt einen, dass man immer aus der Korrektur heraus traden soll um so einen idealen Einstieg in einen Trend zu finden. Haben Sie sich aber schon mal die Frage gestellt: Wie lange läuft so ein Trend überhaupt? Nein? Wir uns schon! In diesem Abschnitt finden Sie die Aufklärung dazu.

Wie Sie bereits wissen, erwartet die Markttechnik, dass wir aus der Korrektur heraus traden. Nur ist das Problem jetzt, dass nicht jede Korrektur die gleichen Chancen bietet. Ein Trend läuft ja nicht ewig. Irgendwann wird er gebrochen. So stellt sich die Frage nun: Wie finden wir heraus welche Korrektur mehr Vorteil bietet? Wir haben diese Arbeit schon getan und teilen die Ergebnisse nun mit Ihnen.

Wir haben Trends ausgezählt um herausfinden zu können, welche Einstiegssituation einen höheren Edge (Vorteil) aufweisen, als andere Einstiege. Bevor wir die Statistiken veröffentlichen, möchten wir Ihnen noch einmal schnell erklären, auf welche Weise wir die Trends ausgezählt haben, damit Sie die Ergebnisse besser nachvollziehen können.

Der Trend fängt mit einer „Phase 0“ an. Das ist die Situation in der wir noch keine Einstiegssituation besitzen. Wir erhalten nur die Information vom Markt, dass wir jetzt eine Marktsituation haben, in der es interessant ist in Long- oder Short-Richtung zu investieren.

Hier eine Beispielzeichnung:

Nach der „Phase 0“ folgt die „Phase 1“. In dieser Phase finden wir dann die erste Korrektur und die erste Bewegung nach der „Phase 0“.

Hier eine Beispielzeichnung:

Diese Phasen gehen, logischerweise, so lange weiter, bis sich ein Trendbruch erkennen lässt. Ein Trendbruch findet immer dann statt, wenn das letzte Tief gebrochen worden ist.

Hier ein Beispiel dazu:

Nach einem erfolgten Trendbruch sind die Phasen resettet. Nach einem Trendbruch ist nun abzuwarten, in welche Richtung der Markt erneut einen Trend aufweist. Nach einem Trendbruch wissen wir einfach nicht, in welche Richtung sich der Markt entwickeln kann.

In unseren Auswertungen haben wir, so wie schon erwähnt, die Trends und deren Phasen ausgezählt. Im Beispiel finden Sie die Trends vom S&P 500 10-Minuten-Chart.

Hier die Daten:

 

Was erkennen Sie nun genau? Fangen wir mal Schritt für Schritt an. Sie erkennen, dass wir insgesamt 800 Trends ausgezählt haben. 400 Long und 400 Short Trends. Sie erkennen auch zum Beispiel, dass es insgesamt 2 Long-Trends gegeben hat, die höher waren als „Phase 6“. Genauso erkennen Sie, dass es nur 1 Short-Trend gegeben hat der höher war als „Phase 6“.

Was aber genau ist die Quintessenz aus dieser Analyse? Die Wahrscheinlichkeit, dass ein Trend nach der „Phase 0“ eine weitere „Phase 1“ macht, ist bei Long-Trades 67,5% und bei Short-Trends 59,5% !

Die Wahrscheinlichkeit, dass nach einer „Phase 1“ noch eine „Phase 2“ oder höhere Phase kommt ist bei Long-Trends 27,5% und bei Short-Trends 28,8%.

Jetzt mal anders formuliert. Die Wahrscheinlichkeit, dass nach einer „Phase 1“ NICHT eine „Phase 2“ oder höher kommt ist bei Long-Trends 72,5% und bei Short-Trends 71,2% !

Wussten Sie das? Nein? Ab jetzt schon. Was können Sie also für Ihr eigenes Trading mitnehmen?

Sie kennen nun eine Trendphase in der es vorteilhafter ist zu investieren, als in anderen. Sagen wir mal wie es ist. Es hat nur einen statistischen Vorteil, wenn Sie in der „Phase 1“ investieren. Alle anderen Trendphasen bieten keinen statistischen Vorteil!

Man erhält ähnliche Daten auch in anderen Märkten. Hier sehen Sie die gleiche Analysemethode auf andere Märkte und Zeiteinheiten.

Hier die Daten aus dem S&P500 Stunden-Chart:

 

Hier die Daten aus dem Dax Stunden-Chart:

 

Wir haben auch noch verschiedenste US-Aktien-Werte analysiert und die Daten ähneln sich auch da.

Es ist definitiv zu erkennen, dass sich in der „Phase 1“ eines Trends ein statistischer Vorteil verbirgt. Lassen Sie Ihrer Inspiration freien Lauf wie Sie diesen Nutzen wollen.

Falls Sie uns nicht glauben, führen Sie Ihre eigenen statistischen Tests durch und schauen Sie auf was für statistische Werte Sie kommen.

 

Ist ein Trend auf Stunde signifikanter als ein Trend auf 10-Minuten?

Diese Aussage finden Sie in ganz vielen Büchern über die Markttechnik. Auch viele „Börsenprofis“ predigen diese Aussage. Was will uns aber diese Aussage genau sagen?

Die Markttechnik, so wie man sie in der Literatur gelehrt bekommt, geht davon aus, dass einen Stunden-Trend stabiler und weniger leicht gebrochen werden kann, als ein Trend auf einer kleineren Trendgröße wie zum Beispiel 10-Minutern oder 1-Minute. Aber stimmt diese Aussage überhaupt? Schauen Sie sich dafür nochmal die vorherigen Statistiken an!

Wie Sie hoffentlich erkennen können, stimmt diese Aussage nicht.

Unsere statistischen Auswertungen haben ergeben, dass ein Trend auf einer höheren Zeiteinheit nicht stabiler und weniger gefährdet für einen Trendbruch ist, als ein Trend auf 10-Minuten oder auf 1-Minute.Auch die Trends die wir auf die US-Aktien-Werte durchgeführt haben, haben diese Daten bestätigt. Dort wurden Trends auf Wochen- und Tagesbasis analysiert.

Tagestrends brechen somit statistisch genauso häufig, wie Trends auf 1-Minute!

 

Fazit

Sie haben nun eine Menge neuer Informationen erhalten. Ob Sie diese Daten für Ihr Trading verwenden wollen oder diese doch lieber ignorieren, liegt ganz bei Ihnen.

Fassen wir nochmal kurz zusammen. Sie haben von uns eine Markttechnische Trendphase erhalten, die einen statistischen Vorteil für Ihr Trading aufweist: die „Phase 1“. In allen anderen Trend- und Korrekturphasen ist es statistisch von Nachteil noch auf einen vorhandenen Trend aufzuspringen.

Wie Sie nun die Informationen die Sie von uns erhalten haben für Ihr Trading benutzen wollen, überlassen wir Ihnen.

Sollten Sie Fragen oder Anregungen haben, können Sie uns sehr gerne schreiben.

 

Viel Erfolg im Trading!

Statistic-Trading

by Mrz 03, 2017 Keine Kommentare
Denkfehler: Basiert mein Backtest auf der richtigen Logik?

Denkfehler: Basiert mein Backtest auf der richtigen Logik?

Anlagetechniken

Das „Backtest-Problem“

Jeder, der sich länger und intensiver mit dem Thema „Trading“ beschäftigt hat, hat schon mal einen Backtest durchgeführt. Oder? Zumindest hat jeder schon, mindestens einmal, eine Backtestauswertung gesehen.

So, in etwa, kann eine Backtest-Auswertung aussehen:

Es sind alle relevanten Daten zu erkennen. Maximaler Drawdown, durchschnittlicher Gewinn, durchschnittlicher Verlust usw.

Es scheint so auszusehen, als ob ein Backtest eine gute Sache ist. Ist er auch! Wenn man das Signal oder die Handelsstrategie, die dahintersteckt, auch richtig überprüft hat.

Wenn Sie sich für das Thema „Handelsstrategie entwickeln“ interessieren, können wir Ihnen gerne unseren Artikel zu diesem Thema ans Herz legen: Wie entwickle ich eine erfolgreiche, statistische Trading-Strategie? 

Es verbirgt sich nämlich, in den meisten Fällen, ein großer Denkfehler hinter solchen Backtests. Wir reden jetzt nicht davon, dass dieser Backtest falsch ist und dass die Zahlen, die angegeben worden sind, nicht stimmen.

Es handelt sich eher um einen Test-Fehler in der Logik des Traders! Sie wollen ja eine statistische Auswertung nach wissenschaftlichen Methoden vornehmen und somit beweisen, dass Ihr Backtest tatsächlich seine Richtigkeit besitzt. Sie wollen wissen, ob Ihr Handelssignal für den positiven Backtest gesorgt hat oder ob der positive Backtest gar nicht mit dem Handelssignal korreliert.

Ohne die richtige wissenschaftliche Logik hat ein Backtest, auch wenn er Gewinnbringend ist, sehr wenig Aussagekraft!

Die Logik hinter einem Backtest verstehen!

Was ist wohl der größte Irrglaube bei einem durchgeführten Backtest? Oder überlegen Sie mal, was einer sein könnte.

Es ist der Irrglaube, dass man glaubt die richtige Schlussfolgerung aus seinem Backtest zu ziehen, obwohl diese falsch sind. Diese falsche Schlussfolgerung kann fatale Folgen für eine Tradingstrategie haben und Sie damit eine menge Geld kosten. Verdeutlichen wir das am besten an einem Beispiel.

Sie haben sich hingesetzt und sich Gedanken über ein Handelssystem gemacht. Soweit so gut. Sie sind auf die Idee gekommen und wollen nun Ihre Handelsidee mit einem Backtest bestätigen. Voilá, Sie haben einen positiven Backtest erhalten und gehen nun davon aus, dass Ihre Handelsidee oder Ihr Handelssignal eine Aussagekraft für die Zukunft besitzt. Und hier greifen wir ein. Dies ist ein Trugschluss. Sie haben zwar durch diesen Backtest ein positives Resultat erhalten, Sie haben aber noch lange nicht bewiesen, dass dieses positive Resultat auch durch Ihr Handelssignal zustande gekommen ist.

Hier nochmal der Vorgang als logische Reihenfolge dargestellt:

  1. Prämisse: Wenn mein Handelssignal eintritt, steigt/sinkt der Markt in meine gewünschte Richtung und führt zu einem positiven Backtest.
  2. Prämisse: Wir erhalten einen positiven Backtest.
  3. FALSCHE SCHLUSSFOLGERUNG: Unser Handelssignal hat eine Aussagekraft und sorgt für den positiven Backtest.

Verdeutlichen wir die falsche Schlussfolgerung an einem anderen Beispiel:

  1. Prämisse: Wenn es ein Kugelschreiber ist, dann kann man damit auch schreiben.
  2. Prämisse: Man kann damit schreiben.
  3. FALSCHE SCHLUSSFOLGERUNG: Es ist ein Kugelschreiber.

Nur weil man damit schreiben kann, muss es nicht automatisch ein Kugelschreiber sein. Es kann sich auch um einen Bleistift, einen Tintenfüller etc. handeln.

Richtig ist aber auch wiederum, wenn ich damit nicht schreiben kann, dann ist es auch definitiv kein Kugelschreiber. Rückwirkend funktioniert diese Logik.

Genauso ergeht es der Logik im oberen Backtest-Beispiel. Sie haben zwar einen positiven Backtest erhalten, dies heißt aber noch lange nicht, dass auch tatsächlich Ihr Handelssignal oder Ihre Tradingstrategie für den positiven Backtest verantwortlich ist. Es können zig andere Gründe sein.

Diese „zig anderen Gründe“ müssen wir ausschließen können, um uns so sicher wie nur möglich mit unserem Handelssystem zu sein.

Jetzt kommen wir zum spannenden Teil. Wie überprüfen Sie denn jetzt die richtige Schlussfolgerung.

Der H0-Hypothesentest

Wir wollen jetzt nicht versuchen unsere Prämissen zu beweisen, sondern wir wollen diese widerlegen.

Als Anmerkung, wir werden versuchen es nicht zu trocken zu erklären, da Statistik für die meisten Trader eher ein langweiliges, als ein spannendes Thema ist. Wir versuchen Ihnen ein kompaktes und brauchbares Modell an die Hand zu geben, mit denen Sie dann, hoffentlich, in Zukunft Ihr Schlussfolgerungen richtig analysieren können.

Die H0-These ist immer die These, die wir versuchen zu widerlegen. Die H1-These ist dann logischerweise die These, die wir versuchen zu bestätigen.

Die H1-These wird auch als Alternativhypothese bezeichnet und stellt die Gegenwahrscheinlichkeit zur H0-These dar.

Stellen wir nun unsere H0- und H1-Hypothese auf:

  • H0-These: Wenn mein Handelssignal eintritt, dann steigt/sinkt der Markt in die nicht gewünschte Richtung um den Betrag X
  • H1-These: Wenn mein Handelssignal eintritt, dann steigt/sinkt der Markt in die gewünschte Richtung um den Betrag X

Nun stellen wir unsere richtige logische Schlussfolgerung auf:

  1. Prämisse: Wenn H0-Richtig, dann entwickelt sich der Markt um Betrag X nicht in die gewünschte Richtung
  2. Prämisse: Der Markt entwickelt sich nicht, in die nicht gewünschte Richtung um den Betrag X ( Also in die gewünschte Richtung)
  3. RICHTIGE SCHLUSSFOLGERUNG: Wir können die H0-These verwerfen und können sagen, dass das Handelssignal tatsächlich eine Aussagekraft besitzt und der Markt sich höchstwahrscheinlich aufgrund des Handelssignals sich in die gewünschte Richtung entwickelt.

Es ist natürlich klar, dass die Realität deutlich komplexer ist, als dass man sie in 2 Thesen packen könnte. Es ist dennoch wichtig, sich dieser richtigen Systematik bewusst zu sein und nicht jedem Backtest zu glauben.

Wir prüfen, bevor wir eine Handelsstrategie entwickeln, immer mit Hilfe einer Teststatistik und dem H0-Hypothesentest, ob es sich lohnt mehr Energie in eine Handelsstrategie hinein zu investieren.

Diese Fehler können bei einem H0-Hypothesentest eintreten 

Sie müssen natürlich auch wissen, dass Sie auch mit einem H0-Hypothesentest nie die 100%-ige Sicherheit haben, dass der positive Backtest tatsächlich auch an Ihrem Handelssignal liegt.

Solch ein mögliches Szenario wird durch ein Signifikanzniveau gekennzeichnet. Im Normalfall beträgt solch ein Signifikanzniveau 5%. Das heißt, dass in 5% der Fälle ein Fehler im Hypothesentest vorliegen kann.

Es existieren zwei Arten von Fehlern die eintreten können. Der Fehler 1. Art und der Fehler 2. Art.

Ein Fehler 1. Art liegt vor, wenn Sie bei einem H0-Hypothesentest die H0-Hypothese zu Unrecht verworfen haben.

Ein Fehler 2. Art liegt vor, wenn Sie bei einem H0-Hypothesentest die H0-Hypothese zu Unrecht beibehalten haben,

Diese Fehler können Sie mit Hilfe eines „p-Value-Test“ minimieren. Komplett ausschließen können Sie diese aber nie.

Fazit:

Wir hoffen, dass wir Ihnen mit diesem Artikel zeigen konnten, wo sich einer der größten Denkfehler im Bereich Backtesting verbirgt.

Es ist von unglaublicher Wichtigkeit, dass Sie Ihren Backtest mit der richtigen Logik überprüfen. Natürlich ist der H0-Hypothesentest kein Wundermittel für Strategien mit einer unglaublichen Performance. Solch ein Wundermittel existiert leider auch nicht.

Was der H0-Hypothesentest aber definitiv kann, ist Sie vor Strategien zu schützen, die Ihnen Geld kosten würden, bis Sie bemerken würden, dass die Handelsstrategie irgendwie nicht so funktioniert wie geplant.

Seien Sie ehrlich zu sich selbst und prüfen Sie Ihre eigene Handelsstrategie mit dem H0-Hypothesentest. Sie werden staunen!

 

Mit freundlichen Grüßen und eine erfolgreiche Trading-Woche,

Statistic-Trading

 

by Jan 24, 2017 1 Kommentar
MQL5 programmieren lernen – EAs schreiben einfach erklärt

MQL5 programmieren lernen – EAs schreiben einfach erklärt

all

MQL5 programmieren lernen – EAs schreiben einfach erklärt

Hey Insider,
das hier ist einmal wieder ein Selbstexperiment. In unserer Reihe „Metatrader Secrets“ geht es vor allem um die kleinen „Gadgets“, welche in der Software versteckt sind. Da wir im Bereich des Aktienhandels auch automatisierte Tools verwenden, die uns einen Überblick über die Marktlage verschaffen, wollten wir dies auch verstärkt in kleineren Zeiteinheiten in die Währungsmärkte implementieren. Die Programmiersprache R, die wir normalerweise auch für unsere Online-Applikationen verwenden, kann nur umständlich in die MT5 Umgebung eingebunden werden. Einer von uns, sollte daher innerhalb einer Woche, MQL5 erlernen. Welche Quellen wir verwendet haben, um uns Informationen zu der Sprache zu beschaffen, was unsere ersten Testprogramme waren und wie man Expert-Advisors ohne Programmierkenntnisse erstellen kann, wollen wir euch mit dieser Serie näher bringen.

Die ersten Schritte mit MQL5 – Öffnen des MQL5 Editors – EA Generator

Der erste Tag.

Zu Beginn ist es wichtig, sich einen Überblick über die allgemeine Syntax der Sprache zu verschaffen. Man muss aber auch entscheiden, was man eigentlich mithilfe des EAs erreichen möchte.

Wenn der EA nur einfache, „klassische“ Einstiege handeln soll, so ist es durchaus möglich, ganz ohne eigene Programmierarbeit ans Ziel zu gelangen. Auch wir haben diesen Ansatz versucht und uns dem EA-Generator des Metatrader 5 bedient. In diesem kann man ganz ohne zu Programmieren einfach via Drag and Drop Indikatoren und Signale auswählen, das Risikomanagement sowie die Stop Loss und Take Profit Werte eingeben um sich den Code automatisch erstellen zu lassen. Um dieses doch recht unbekannte Feature zu nutzen, ist lediglich der MT5-Editor zu starten. Dies kann im Metatrader 5 durch das Klicken auf das folgende Symbol geschehen:

Metatrader Editor öffnen - MQL5

Daraufhin öffnet sich die Oberfläche des Editors. Um nun zum EA-Generator zu gelangen, der den gewünschten EA automatisch erstellt, ist lediglich bei Daten->Neu->Expert Advisor (generieren)->Weiter zu klicken. Daraufhin wird man Schritt für Schritt durch den Ablauf geleitet. Der Generator bietet einem vorgefertigte Ein- und Ausstiegssignale, sowie prozentuale Risikoeinstellungen und Trailling-Stop Optionen. Mithilfe der vorinstallierten Auswahlmöglichkeiten lassen sich bereits einige Hundert EAs erstellen. Weitere lassen sich über den MQL5 Shop erwerben.

Metatrader 5 - EA einfach erstellen

Zu jedem der von Vornherein verfügbaren Signale ist eine ausführliche Dokumentation vorhanden. Diese lässt sich über das Fragezeichen bei der Auswahl der Indikatoren öffnen. Zur Auswahl der Indikatoren gelangt man durch einen Klick auf den „Hinzufügen“ Button.

Indikatoren Metatrader 5 - MQL5 hinzufügen

Als nächsten Schritt kann man Trailing-Stop Optionen zu dem Expert-Advisor hinzufügen. Dabei lassen sich verschiedene Trailling-Stop Methoden heranziehen – von festen Abständen bis hin zu einem Trailing-Stop hinter einer SMA ist alles möglich. Um den Expert-Advisor abzuschließen, werden am Ende des Generators noch die Risikoparameter abgefragt. Im Speziellen sind dies die Positionsgrößenschritte und das prozentuale Risiko. Sobald man nun auf „Fertigstellen“ klickt, wird der EA einsatzbereit ausgegeben und dieser kann direkt getestet werden. Dazu kann man beispielsweise den Strategietester des Metatrader 5 nutzen, (diesen öffnet man mithilfe der Tastenkombination STRG+R in Metatrader) welcher den erstellten EA auf vergangenen Kursverläufen testet. Dies kann sowohl visuell als auch nicht visuell erfolgen. Beim visuellen Test kann man dem Experten direkt bei der Arbeit zuschauen und sieht so auch, ob die ursprünglich gewollte Signallogik auch wirklich umgesetzt wird oder ob das Programm kleinere Fehler aufweist. Mehr zum Thema „Testen einer Strategie“ werden wir in einem Video betrachten. Tragt euch am besten in unseren Newsletter ein, um unsere besten Veröffentlichungen nicht mehr zu verpassen, sowie monatlich marktrelevante Informationen zu erhalten.

Um allerdings selbstständig programmieren zu können, ist es notwendig sich einen ersten Eindruck von der Syntax der Sprache zu machen und sich ein Handbuch zu organisieren, in dem die wichtigsten Befehle dokumentiert sind. Das Handbuch war schnell gefunden und wird in deutscher und englischer Sprache von der Firma Metaquotes zur Verfügung gestelllt: MetaTrader 5 Handbuch (https://www.mql5.com/files/pdf/mql5_german.pdf). Dieses stolze 4369 Seiten umfassende Nachschlagewerk enthält alle wichtigen Befehle der Programmiersprache und liefert dazu noch Beispiele und Dokumentationen. Ein solches Grundlagenwerkes stellte sicher, dass wir die richtigen Befehle sowie deren Verwendung parat hatten und nachvollziehen konnten. Weiterhin hielten wir es für sinnvoll, uns noch einen sehr gut dokumentierten Code zu suchen. In Verbindung mit dem Nachschlagewerk konnten wir so nachvollziehen, wie die Programmiersprache funktioniert und machten uns mit der Syntax der If-Statements und Schleifen vertraut. Wir nutzen hierfür Außerdem interessierten wir uns noch für die Funktionsweise der Orderaufgabe im Detail (hier geht es zur Dokumentation: Ein Paar Testläufen eines EAs aus dem Internet reichten aus, um uns mit dem EA-Strategie Tester vertraut zu machen. Für heute hatten wir uns den Feierabend mehr als verdient.

MQL5 Syntax – Parallelen zu C & C++

Der zweite und dritte Tag.

Nachdem der erste Tag viel Neues mit sich brachte, war klar, dass das tiefere Eindringen in die Syntax der Sprache essentiell ist. Da MQL5 an die Programmiersprache C++ angelehnt ist und diese eine wesentlich bessere Dokumentation als MQL5 hat, setzen wir uns ein oder zwei Tage mit dieser Sprache und ihren Eigenarten auseinander. Auf der Plattform von Sololearn gibt es einen kostenfreien Kurs zu C++. (Dieser kann hier abgerufen werden: http://www.sololearn.com/Play/CPlusPlus ). Der Kurs ist sowohl als App als auch als Online-Version verfügbar und synchronisiert sich automatisch, sodass der aktuelle Fortschritt immer und überall abrufbar ist. Die in Browser Version hat man aus Erfahrung schneller bearbeitet und ist während der Bearbeitung aufmerksamer als bei der Nutzung der App für unterwegs, aber es geht ja auch nur um ein Gefühl für die Sprache. Wie schreibt man Methoden und wendet diese an? Wie werden Variablen deklariert? Wie funktioniert ein if-Statement? Wie wende ich eine Funktion auf ein Objekt an? Wie lade ich Klassen aus der Standardbibliothek?

All diese Fragen sind typisch und mehr als nur berechtigt. Das Problem ist, dass es zu MQL5 dazu eben keine so intuitiven Antworten und Lernmöglichkeiten gibt.

UPDATE: Vor kurzem sind wir auf den folgenden MQL5 Kurs gestoßen. Da Programmieren am anfang etwas ernüchternd sein kann, sind wir uns sicher, dass es euch hilft, in einen aktiven Kurs eingebunden zu sein, der auch E-Mail Support anbietet, was in manchen Debugging-Fragen sicherlich hilfreich sein wird.

MQL5 Tutorial Golden Goose Kurs

Unser erster EA – MQL5 Trailing Stop

Tag vier und fünf

Es war nun an der Zeit, das Gelernte anzuwenden und den ersten eigenen kleinen EA zu schreiben. Doch was für ein Projekt ist als Einstieg adäquat? Da uns zu dieser Zeit das Thema Positionsmanagement sehr interessierte, entschieden wir uns für das Programmieren eines Trailling Stop EAs. Natürlich ist eine Trailing Stop Funktion bereits im Metatrader 5 vorinstalliert und lässt sich über einen Rechtsklick auf die offene Position einstellen:

Trailing Stop Metatrader 5 - MT5

Uns reichten jedoch die Standardeinstellungen nicht aus. Wir wollten auch Indikatoren als Trailling Stop verwenden können und Backtests durchführen, um herauszufinden welcher Stop im gewählten Zeitraum der Optimale war. Also starteten wir das „einfache Projekt“.

Ziemlich schnell wurde klar, dass das Aufgeben und Modifizieren von Orders und Positionen weitaus komplizierter ist als erwartet. Der normale Weg durch die Metratrader Ordermaske, wie er auch in der Sprache MQL5 gegangen werden kann / muss, ist sehr fehleranfällig, kompliziert und unübersichtlich. Daher schauten wir uns um und wurden in den Standard Bibliotheken von MQL5 fündig.

#include <Trade\Trade.mqh>
#include <Trade\PositionInfo.mqh>
#include <Trade\SymbolInfo.mqh>

Diese Libraries enthalten Funktionen und Methoden, die die Programmierung und die Projektentwicklung enorm vereinfachen. Statt nun alles aufwändig von Hand zu schreiben und zu befüllen, bieten sie einfache und intuitive Zugriffe auf Positionen, Orders und Trade-Parameter.

Nähere Infos zu diesen Libraries fanden wir hier (geordnet nach Erwähnung im Artikel):

https://www.mql5.com/de/articles/138

https://www.mql5.com/de/docs/standardlibrary/tradeclasses/ctrade

https://www.mql5.com/en/docs/standardlibrary/tradeclasses/cpositioninfo

https://www.mql5.com/en/docs/standardlibrary/tradeclasses/csymbolinfo

https://www.mql5.com/en/docs/constants/tradingconstants/positionproperties

Bevor wir nun im Detail in den Code starteten, schauten wir uns den Aufbau und den Ablauf eines solchen Programmes an.

Zu Beginn im Kopf des EAs werden Informationen über die Rechte und die Lizenz des EAs gemacht. Gleichfalls wird angegeben, wer den EA programmiert hat. Neben diesen Informationen wird der Output hinzugefügt, der später beim Start des EAs im Metatrader 5 im Description Teil zu lesen ist.

Direkt im Anschluss werden die Klassen aus der Standardbibliothek geladen, die die Funktionen und Methoden enthalten, die wir zur Entwicklung von einfachen und eleganten Code brauchen

Im Anschluss werden die Variablen und Inputs deklariert, die zum Betreiben des Programms benötigt werden. Inputs sind Variablen, die der Nutzer des EAs beim Starten im MT5 einstellen kann. Alle Variablen, die hier erstellt werden, sind für den kompletten Code, also das ganze Programm verfügbar. Alle folgenden Funktionen können darauf Zugreifen und mit ihnen arbeiten. In einem extra Video werden wir sehen, wie man durch die Inputs, einen EA optimieren kann. Auf diese Art und Weise lassen sich Informationen über das Handelssystem sammeln und man kann durch stabile, optimierte Parameter die Performance des Handelssystems steigern.

Nachdem alle Variablen bekannt gemacht wurden, folgte die Funktion OnInit(). In dieser, werden alle Indikatoren und Einstellungen geladen, die beim Start des EAs benötigt werden. So werden hier zum Beispiel Arrays, also Daten Matrizen, zu Zeitreihen modifiziert. Dies ist für die spätere Signalerzeugung notwendig. Bei einem Cross Over eines Moving Averages ­– also dem Schnitt von gleitenden Durchschnitten– muss der schnelle Durchschnitt in der letzten Periode zum Beispiel unterhalb des langsamen MAs liegen und in der aktuellen Periode entsprechend oberhalb. Damit diese Zugriffe möglich sind, bedarf es der Zeitreihenform der Indikatoren. Außerdem werden die , also die Variablen, die die Daten der Indikatoren übernehmen, in dieser Funktion initiiert und befüllt.

OnInit() - Funktionen im Metatrader Editor - MQL5

Nachdem die wichtigsten Einstellungen in der Startfunktion OnInit() erfolgten, muss nun festgelegt werden, was beim Entfernen der EA vom Chart (entspricht dem Abschalten) passiert. Um diese Schritte festzulegen, verwendet man die OnDenit() Funktion. In dieser Funktion werden erzeugte Arrays und Zeitreihen zur Löschung freigegeben, sowie Indikatoren entfernt und Einstellungen zurückgesetzt. Dies ist notwendig, um den vom EA belegten Speicher wieder sauber freizugeben und die Chart sowie das Handling des MT5 wieder in den Ursprungszustand zurück zu bewegen.

OnDenit() - Funktionen im Metatrader Editor - MQL5

Der Rahmen für das Programm war erstellt. Wir beschäftigten uns nun mit den beiden Funktionen, welche für die Signal-Generierung sowie den Umgang mit offenen Positionen interessant werden. Die beiden Funktionen sind OnTick() und OnTrade(). OnTick() wird immer ausgeführt, sobald sich eine Veränderung im Symbol, welches der EA ausliest, ereignet. Die OnTrade()- Funktion ähnelt der OnTick() Funktion. Dieser Teil des Codes wird nur ausgelesen, sofern eine Position im Symbol offen ist.

OnTick() - Funktionen im Metatrader Editor - MQL5OnTrade() - Funktionen im Metatrader Editor - MQL5

Da der Standardaufbau eines EAs nun bekannt ist, wollen wir die einzelnen Funktionen befüllen und der Maschine „Leben“ einhauchen.

Unser Ziel ist es, einen Trailling Stop EA zu entwickeln, der nach dem Eröffnen einer Position automatisch einen Stop setzt und diesen in Folge kontinuierlich nachzieht. Das Nachziehen soll dabei mit einem konstanten Abstand sowie immer beim Erreichen eines neuen Hochs geschehen. Wir brauchen also:

  • Einen Test, ob eine Position eröffnet wurde und was ihre Parameter sind
  • Einen Weg, den aktuellen Stop anhand des momentanen Marktkurses zu errechnen
  • Eine Möglichkeit zur Bestimmung der Nachkommstellen, die der Markt auf den EA anwenden wird, um den eingestellten Stop entsprechend anzuwenden
  • Eine Überprüfung, ob der neue Stop höher bzw. niedriger ist als der aktuelle (abhängig davon ob es sich um eine Long oder Short Position handelt

Zunächst werden dafür alle Variablen und Klassen hinzugefügt und erstellt:

#include <Trade\Trade.mqh>                                         //include the library for execution of trades
#include <Trade\PositionInfo.mqh>                                  //include the library for obtaining information on positions
#include <Trade\SymbolInfo.mqh>

input double StopDist;

double NewStop;
double CurStop;

CTrade m_Trade;
CPositionInfo myposition;

Wofür genau double, int, sowie Klammer- und Punktsetzung etc. stehen, soll nicht Teil dieses Artikel sein und kann im entsprechenden C++ Tutorial (als alternative ein schönes Buch) schnell erlernt und nachgeschlagen werden.

Im Code Ausschnittieht man, dass zwei double Variablen global deklariert werden: NewStop, CurStop. NewStop wird den aktuellen rechnerischen Stop enthalten und CurStop wird den aktuellen Stop der offenen Position zwischenspeichern. Wir benötigen beide Variablen, um später vergleichen zu können, welcher Stop das geringere Risiko in sich trägt und entsprechend den von uns gewünschten Stop als Stop für die Position zu wählen. Die Variablen m_Trade und myposition sind Objekte, welche mithilfe der Standardbibliotheken erzeugt wurden. Das Objekt m_Trade spricht den aktuellen Trade an, der im Symbol geöffnet ist. myposition enthält Informationen über die aktuelle Position, wie beispielsweise den aktuellen Stop Loss, Take Profit, das Volumen etc.

Da wir für einen Trailing Stop, keine speziellen Einstellungen vornehmen müssen und aktuell auch keine Indikatoren gewollt sind, können die Funktionen OnInit() sowie OnDenit() ungefüllt gelassen werden. Für unsere Zwecke werden die Funktionen OnTrade() sowie OnTick() besonders interessant. Im Falle eines Trade Szenarios, sowie bei jedem im Symbol entstehenden Tick, wollen wir prüfen, ob unser Trade noch unseren Vorstellungen entspricht und/oder ob wir etwas anpassen müssen. In der Funktion OnTrade() werden wir den initialen Stop der Position festlegen. Diesen benötigen wir, um später unseren Stop trailen zu können, sofern er vorteilhaft im Verhältnis zum aktuellen Stop ist.

Betrachten wir zunächst einmal die Eingaben, welche wir in der OnTrade() Funktion tätigen. Hier soll der initiale Stop gesetzt werden, welchen wir als Referenzwert für unseren Trailling Stop benötigen.

//+------------------------------------------------------------------+
void OnTrade()
  {
   double PriceB=SymbolInfoDouble(_Symbol,SYMBOL_BID);
   double PriceS=SymbolInfoDouble(_Symbol,SYMBOL_ASK);
   double Inital_Safe_Stop = StopDist*3;
   
   double TP=0;

   int Commas=SymbolInfoInteger(_Symbol,SYMBOL_DIGITS);
   double Factor=1/MathPow(10,Commas-1);

   double SL_B=PriceB-(Inital_Safe_Stop*Factor);
   double SL_S=PriceS+(Inital_Safe_Stop*Factor);


   if(PositionSelect(_Symbol))
     {
      if(myposition.PositionType()==POSITION_TYPE_BUY)
        {
         if(myposition.StopLoss()==0)
           {
            m_Trade.PositionModify(_Symbol,SL_B,TP);
           }
        }

      // Same now For Sell Positions        
      if(myposition.PositionType()==POSITION_TYPE_SELL)
        {
         if(myposition.StopLoss()==0)
           {
            m_Trade.PositionModify(_Symbol,SL_S,TP);
           }
        }
     }

  }
//+------------------------------------------------------------------+

Der Code ist in diesem Fall nicht auf maximale Effizienz sondern auf Verständlichkeit optimiert. Grundsätzlich sollte zunächst darauf geachtet werden, die Programme zum Laufen zu bekommen und sich dann mit Optimierung und performanter Programmierung zu beschäftigen. Dank leistungsfähiger Hardware kann uns heutzutage auch die ein oder andere unschöne Darstellung verziehen werden. Gehen wir den Code einmal Schritt für Schritt durch. Zunächst wird die OnTrade() Funktion geöffnet. Dann wird der aktuelle Bid und Ask Preis des Marktes in einer Variablen gespeichert. Für diese Abfrage nutzen wir die SymbolInfoDouble() Funktion. In der Funktion selbst nutzen wir _Symbol, um den Markt auszuwählen, auf dem der EA aktuell aktiv ist. Danach geben wir an, welche Information wir vom ausgewählten Symbol abfragen wollen. In unserem Fall eben den Bid und den Ask Preis. Die Funktion gibt, wie der Name es bereits sagt, die Informationen als Double, also als Fließkommazahl aus.

Automatische Code Ergänzung Metaeditor Metatrader 5 - MQL5

Um die Programmierung zu vereinfachen und zu beschleunigen gibt der Metatrader Editor immer an, welche Informationen der Funktion zu übergeben sind, damit sie problemlos funktioniert. Sollte man wider Erwarten damit nicht weiterkommen, so ist das Googlen der gefragten Funktion meistens zielführend.

Nach der Abfrage der aktuellen Preise des Marktes wollen wir eine Variable für den Initialstop, welcher für nur einen Tick, also bis zur nächsten Kursstellung im Basiswert, im Markt ist und dann sofort durch den Ricchtigen Stop ersetzt wird erstellen. Dies ist nicht zwangsläufig notwendig aber ist ein zusätzlicher Schritt, in dem wir mit Rechenoperationen in Berührung kommen. Dazu multiplizieren wir den Trailling Stop Abstand mit 3 und speichern diese Pip Anzahl ebenfalls als Variable des Typ Double ab. Damit der Stop Loss für jeden Basiswert funktional ist, beziehen wir die Anzahl der Stellen ein, den ein Basiswert hat, denn dies ist nicht für alle Basiswerte gleich. So haben die Yen Paare weniger Stellen als zum Beispiel der EUR/USD. Damit dies keine Probleme bereitet, passen wir unsere Stop Inputs an. Dies passiert durch die folgende kurze mathematische Formel unter Zuhilfenahme der MathPow() Funktion, welche das Potenzieren in MQL5 erlaubt.

Um den initialen Stop Loss für eine Kauf- und eine Verkaufsposition zu bestimmen, ziehen wir im Falle der Kaufposition den initialen angepassten Stop vom Bid-Preis ab, bzw. addieren ihn im Fall einer Verkaufsposition auf den Ask Preis. Darauf folgt lediglich die Abfrage, ob eine Position im aktiven Markt offen Position eine Kauf oder Verkaufsposition ist. Außerdem wird abgefragt, ob der Stop der Position noch nicht gesetzt ist. Wenn dies der Fall sein sollte, erfolgt eine Anpassung der Order und der initiale Stop Loss wird eingestellt.

Dabei sind folgende Funktionen besonders hervorzuheben:

if(myposition.PositionType()==POSITION_TYPE_BUY)

Myposition ist ein Objekt, welches durch die Standardklasse SymbolInfo.mqh  und CPositionInfo erstellt wurde. Dadurch lassen sich Informationen über offene Positionen leicht durch Methoden wie PositionType() abfragen oder vergleichen.

if(myposition.StopLoss()==0)

Im nächsten Schritt wurde mit dem selben Objekt aber nun mit der methodischen Abfrage StopLoss() der aktuelle Stop Loss Wert der Position ausgelesen und logisch getestet.

m_Trade.PositionModify(_Symbol,SL_S,TP);

Zu guter Letzt wird durch das mit Hilfe von CTrade erstellte Objekt und der Methode PositionModify() die offene Position verändert und der Initial Stop greift.

der Stop aber noch nicht dynamisch, sondern statisch auf dem dreifachen Level des Stops, welchen wir als Trailing Stop haben wollen. Das Dreifache ist hier nur Beispielhaft gewählt. Es soll erkennbar seinist, dass der Stop versetzt wird. Auch wenn man dies nur so lange braucht, bis im Markt der nächste Preis festgestellt wurde, ist es ein kleines Erfolgserlebnis diesen Schritt im Chart zu sehen. Es bedeutet, dass der Stop funktioniert.

Damit der Stop sich kontinuierlich anpasst, sofern der Markt in unsere Richtung läuft und somit Gewinne abgesichert werden, bzw. das Risiko reduziert wird, brauchen wir eine Abfrage, welche Tick für Tick prüft, ob der Stop angepasst werden muss und dies bei Bedarf umsetzt. Hier kommt unsere OnTick() Funktion ins Spiel.

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   double PriceB=SymbolInfoDouble(_Symbol,SYMBOL_BID);
   double PriceS=SymbolInfoDouble(_Symbol,SYMBOL_ASK);

   double TP=0;

   int Commas=SymbolInfoInteger(_Symbol,SYMBOL_DIGITS);
   double Factor=1/MathPow(10,Commas-1);

   double SL_B=PriceB-(StopDist*Factor);
   double SL_S=PriceS+(StopDist*Factor);

   if(PositionSelect(_Symbol))
     {
      if(myposition.PositionType()==POSITION_TYPE_BUY)
        {
         if(myposition.StopLoss()<SL_B)
           {
            m_Trade.PositionModify(_Symbol,SL_B,TP);
           }
        }
      // Same now For Sell Positions        
      if(myposition.PositionType()==POSITION_TYPE_SELL)
        {
         if(myposition.StopLoss()>SL_S)
           {
            m_Trade.PositionModify(_Symbol,SL_S,TP);
           }
        }
     }
  }
//+------------------------------------------------------------------+

Auf den ersten Blick lässt sich sehr schnell erkennen, warum wir erwähnten, dass man dieses Programm durchaus auch hätte effizienter schreiben können. Doch um den Lerneffekt zu vergrößern, sollte die Lesbarkeit und Verständlichkeit an vorderster Stelle stehen.

In der folgenden Kaskade von if() Abfragen wird genau wie bei der Setzung des initialen Stops zuerst geprüft, ob eine Order vorliegt und was für eine Position aktuell läuft. Jedoch erfolgt dann ein Vergleich, ob der aktuelle Stop größer oder kleiner als der Trailing Stop ist. Ist der Trailing Stop vorteilhaft für uns, also das Stop Level bei einer Kaufposition größer beziehungsweise bei einer Short Position kleiner als der aktuelle Stop, so wird die Order mit der PositionModify() Methode verändert, der Stop wird also nachgezogen.

Durch die Nutzung von Indikatoren können noch komplexere Trailing Stop EAs erzeugt werden. Wie Indikatoren in einem EA angewandt werden, wird an den letzten beiden Tagen besprochen.

#include <Trade\Trade.mqh>                                         //include the library for execution of trades
#include <Trade\PositionInfo.mqh>                                  //include the library for obtaining information on positions
#include <Expert\ExpertTrailing.mqh>
#include <Trade\SymbolInfo.mqh>

input double StopDist;

double NewStop;
double CurStop;

CTrade m_Trade;
CPositionInfo myposition;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   double PriceB=SymbolInfoDouble(_Symbol,SYMBOL_BID);
   double PriceS=SymbolInfoDouble(_Symbol,SYMBOL_ASK);

   double TP=0;

   int Commas=SymbolInfoInteger(_Symbol,SYMBOL_DIGITS);
   double Factor=1/MathPow(10,Commas-1);

   double SL_B=PriceB-(StopDist*Factor);
   double SL_S=PriceS+(StopDist*Factor);

   if(PositionSelect(_Symbol))
     {
      if(myposition.PositionType()==POSITION_TYPE_BUY)
        {
         if(myposition.StopLoss()<SL_B)
           {
            m_Trade.PositionModify(_Symbol,SL_B,TP);
           }
        }
      // Same now For Sell Positions        
      if(myposition.PositionType()==POSITION_TYPE_SELL)
        {
         if(myposition.StopLoss()>SL_S)
           {
            m_Trade.PositionModify(_Symbol,SL_S,TP);
           }
        }
     }
  }
//+------------------------------------------------------------------+
void OnTrade()
  {
   double PriceB=SymbolInfoDouble(_Symbol,SYMBOL_BID);
   double PriceS=SymbolInfoDouble(_Symbol,SYMBOL_ASK);
   double Inital_Safe_Stop = StopDist*3;
   
   double TP=0;

   int Commas=SymbolInfoInteger(_Symbol,SYMBOL_DIGITS);
   double Factor=1/MathPow(10,Commas-1);

   double SL_B=PriceB-(Inital_Safe_Stop*Factor);
   double SL_S=PriceS+(Inital_Safe_Stop*Factor);


   if(PositionSelect(_Symbol))
     {
      if(myposition.PositionType()==POSITION_TYPE_BUY)
        {
         if(myposition.StopLoss()==0)
           {
            m_Trade.PositionModify(_Symbol,SL_B,TP);
           }
        }

      // Same now For Sell Positions        
      if(myposition.PositionType()==POSITION_TYPE_SELL)
        {
         if(myposition.StopLoss()==0)
           {
            m_Trade.PositionModify(_Symbol,SL_S,TP);
           }
        }
     }

  }
//+------------------------------------------------------------------+

Indikatoren in MQL5 – Trading Signale erstellen

Tag sechs und sieben – Endlich MQL5 Basics beherrschen.

Wir haben gelernt, Positionen zu modifizieren und können Stop Loss und auch Take Profits anpassen (dies funktioniert entsprechend der Stop Loss Anpassung). Es ist an der Zeit Signale zu erzeugen und Trades zu generieren, denn MQL5 ist neben der Anpassung von Positionen und einem damit einhergehenden vereinfachtem Risikomanagement hauptsächlich für das Schreiben von automatisierten Handelssystemen geschrieben worden.

Das folgende Handelssystem ist sehr einfach gebaut. Seine Performance ist auch sicher nicht die beste. Jedoch lässt sich an diesem der Aufbau eines Handelssystems gut erkennen. Die zugrundeliegende Theorie ist der CCI, ein oszillierender Indikator. Wir wollen das Momentum des Marktes handeln und mit dem Trend gehen. Wir gehen im Markt Long sobald der CCI einen Wert von über 100 erreicht und wir shorten sobald der CCI unter -100 fällt. Um unsere Risiken zu limitieren, verlassen wir die Long Position bei CCI Werten unter 95 und die Short Position bei Werten über -95. Damit erzeugen wir eine Asymmetrie, die sich auch in der Performance widerspiegelt. Ein solches Handelssystem sollte im Speziellen in trendstarken Märkten wie dem EUR/USD ab Mitte 2014 bis zur Jahresmitte 2015 gut funktionieren. In einem Backtest ergab sich die folgende Equity-Kurve:

Backtest CCI EA MQL5 EURUSD

Es lässt sich gut erkennen, dass die Gewinne in Schüben kommen und wir viele kleine Verluste erleiden. Dies entspricht den Erwartungen, welche wir mit dem System verknüpft haben. In dem Zeitraum erzielte der EA insgesamt eine Performance von 6.24%, was nicht besonders überragend ist, aber immerhin macht er Profite.

Es zeigt sich jedoch auch sehr deutlich, dass wir durch den Oszillator immer nur sehr kurz im Markt investiert sind. Die Folge sind hohe Transaktionskosten, sowie nur kurze Bewegungen, die eingefangen werden. Ein solches Problem hätte man bei einem Trendfolge-System nicht. Jedoch sind dabei auch die Risiken beim Eröffnen der Position größer. Das Risikomanagement sowie die Stop Setzung muss komplexer werden, als es bei diesem System der Fall ist.

Hier nun der Quellcode des EAs:

//+------------------------------------------------------------------+
//|                                                   Inside_CCI.mq5 |
//|                        Copyright 2016, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"

input int CCI_MA;
input int CCI_Upper;
input int CCI_Lower;
input int CCI_Upper_Exit;
input int CCI_Lower_Exit;
input int TrendFilter;

#include <Trade\Trade.mqh>                       
#include <Trade\PositionInfo.mqh>                        
#include <Expert\ExpertTrailing.mqh>
#include <Trade\SymbolInfo.mqh>

int CCI_Handle;
int MA_Handle;

double CCI_Val[];
double MA_Val[];

CTrade my_trade;
CPositionInfo my_position;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   CCI_Handle=iCCI(_Symbol,0,CCI_MA,PRICE_CLOSE);
   MA_Handle = iMA(_Symbol,0,TrendFilter,0,MODE_SMA,PRICE_CLOSE);
   ArraySetAsSeries(CCI_Val,true);
   ArraySetAsSeries(MA_Val,true);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   ArrayFree(CCI_Val);
   ArrayFree(MA_Val);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---

   CopyBuffer(CCI_Handle,0,0,3,CCI_Val);
   CopyBuffer(MA_Handle,0,0,3,MA_Val);
   double CurrentPrice=SymbolInfoDouble(_Symbol,SYMBOL_BID);

   if(!PositionSelect(_Symbol))
     {
      if(CurrentPrice>MA_Val[1])
        {
         if(CCI_Val[1]>CCI_Upper)
           {
            if(CCI_Val[2]<CCI_Upper)
              {
               my_trade.Buy(0.1,_Symbol);
              }
           }
        }
      if(CurrentPrice<MA_Val[1])
        {
         if(CCI_Val[2]>CCI_Lower)
           {
            if(CCI_Val[1]<CCI_Lower)
              {
               my_trade.Sell(0.1,_Symbol);
              }
           }
        }
     }
   CopyBuffer(CCI_Handle,0,0,3,CCI_Val);

   if(PositionSelect(_Symbol))
     {
      if(my_position.PositionType()==POSITION_TYPE_BUY)
        {
         if(CCI_Val[1]<CCI_Upper_Exit)
           {
            my_trade.Sell(0.1,_Symbol);
           }
        }

      if(my_position.PositionType()==POSITION_TYPE_SELL)
        {
         if(CCI_Val[1]>CCI_Lower_Exit)
           {
            my_trade.Buy(0.1,_Symbol);
           }
        }
     }

  }
//+------------------------------------------------------------------+

Dabei ist besonders wichtig:

CTrade my_trade;

Aus dem CTrade Standardpaket. Durch diese Deklaration lässt sich auf Trades zugreifen. Man kann also Positionen einfach eröffnen und skalieren.

my_trade.Sell(0.1,_Symbol);

my_trade.Buy(0.1,_Symbol);

Des Weiteren ist der Abgleich der offenen Position ein wichtiger Schritt. Es wird geprüft, ob die offene Position eine Buy oder Sell Position ist.

my_position.PositionType()==POSITION_TYPE_SELL

my_position.PositionType()==POSITION_TYPE_BUY

Das Array, welches die Indikatoren-Daten speichert, muss durch ArraySetSeries zu einer Zeitreihe modifiziert werden, welche dann mit der CopyBuffer Funktion befüllt wird. Danach kann in den folgenden Schritten auf die Werte der Zeitreihe entsprechend einer Array Abfrage mit [x] zugegriffen werden. So lassen sich über If Abfragen Signale generieren. Hier nochmals ein Beispiel aus dem CCI Code:

if(CurrentPrice<MA_Val[1])
        {
         if(CCI_Val[2]>CCI_Lower)
           {
            if(CCI_Val[1]<CCI_Lower)
              {
               my_trade.Sell(0.1,_Symbol);
              }
           }
        }

Dabei stellten CCI_Lower und Upper die Werte dar, ab denen wir Positionen eröffnen wollten. Hier wird zudem geprüft, ob der Wert gerade erst erreicht wird, ähnlich einem Cross Over, sodass ein Signal, im Falle eines Stop Outs nicht sofort wieder eine Position eröffnet. Das würde den Stop Out, also das Schließen der Position bei einem Gegensignal überflüssig machen.

Hier noch die Performance des EAs über die letzten 21 Jahre im USDJPY:

Backtest CCI EA MQL5 USDJPY

Wir hoffen, dass mit diesem Beispiel einiges zum Thema „Automatisiertes Handeln“ geklärt werden konnte. Wir werden noch ein Video zum Thema „System Tests und Optimierung“ erstellen. Um dieses nicht zu verpassen, meldet euch in unserem Newsletter an. Viele Grüße

 

by Aug 26, 2016 Keine Kommentare
Dein EA auf dem Prüfstand – die größten Fehler und Schwachstellen eines Expert Advisors.

Dein EA auf dem Prüfstand – die größten Fehler und Schwachstellen eines Expert Advisors.

all

Dein EA auf dem Prüfstand – die größten Fehler und Schwachstellen eines Expert Advisors.

InsideTrading hat heute für euch Andrey Bulezyuk von in-trading.eu im Interview. Er ist der Autor des Buches „Algorithmisches Trading: MetaTrader4 | MQL4“.
Mehr zum Programmieren mit MQL5 findet ihr bei uns.
Algorithmisches Trading Inside Trading

Im Forex- und CFD-Handel sind nicht immer alle Versuche mit Erfolg gekrönt und daher greifen immer mehr Trader auf ein voll- oder halbautomatisiertes  Handelssystem zurück. Da es in den Weiten des Internets eine Vielzahl von Expert Advisors (EAs) gibt und viele von denen auch kostenfrei sind, bekommen wir immer wieder Fragen zu diesem Thema, welche wir jetzt einfach einmal an Andrey weitergegeben haben:

Inside: Hallo Andrey, kurz etwas zu deiner Person, wie bist du auf das Thema der EA-Programmierung aufmerksam geworden und in welchen Märkten bist du zu Hause?

Andrey: Hallo Inside, vielen Dank für die Einladung zu diesem Interview. Als ich anfing mich mit dem Forex-Markt auseinanderzusetzten, besaß ich bereits relativ gute Kenntnisse verschiedener Programmiersprachen. Aus diesem Grund betrachtete ich bereits als Anfänger das Trading aus einem anderen Winkel als typische Trading-Einsteiger. Die Anwendung des Programmierwissens auf den Forex-Markt ist unausweichlich für jeden, der programmieren kann.

Ich habe im Forex-Markt angefangen und fühle mich im “ Dschungel ” der Währungen und der Rohstoffe sicher. Gleichzeitig muss ich erwähnen, dass die Bewegungen des Forex-Marktes schwieriger zu interpretieren sind als es bei Aktien der Fall ist. Ein Bekannter von mir, CEO einer “Machine Learning” Firma in den USA, untersuchte mit verschiedenen Methoden den Forex- und Aktienmarkt. Seine Ergebnisse zeigen, dass der Forex-Markt Intraday beinahe komplett zufällig agiert. Automatisierte Systeme im Aktienmarkt sollten also tendenziell besser wirtschaften (ceteris paribus).

Inside: Welches sind deiner Meinung nach oftmals die größten Schwachstellen eines EA, die man in Form eines kostenfreien Download finden kann?

Andrey: Grundsätzlich sollte man nicht naiv sein und sich klar machen, dass man sich sogar bei bezahlten automatisierten Systemen (EA) nicht sicher sein kann, dass dieses System Geld generieren wird. Deswegen sollte man bei kostenloser Software erst recht vorsichtig sein.

Zu den Schwachstellen von kostenlosen EAs gehören die Abwesenheit des Supports bei Problemen und die mangelnde Individualisierung der Strategie/des EAs. Eine Anleitung zur Anwendung sowie der direkte Draht zu dem Entwickler fehlen meistens ebenfalls. Wenn man es mit dem automatisierten Handel ernst meint, sollte man sich einen kompetenten MQL4-Entwickler suchen und eine individuelle Software erstellen lassen.

Inside: Bevor unsere Leser einen teuren EA kaufen, worauf sollten diese achten? Kann man erkennen, ob die Statistiken auf der Webseite ein optimierter Backtest sind oder wirklich aus einem Live-Konto stammen?

Andrey: Je mehr ein EA kostet, desto mehr Ergebnisse sollte man von dem Anbieter verlangen. Vor allem bei Anbietern, welche einen 4-stelligen Betrag für ein System verlangen, sollte man Berichte einfordern.

Backtests und Live-Berichte sind gut, können aber gefälscht oder vom Käufer falsch interpretiert werden. Bei In-Trading bekommen die Leser/Auftragsgeber beispielsweise zuerst eine kostenlose Demoversion. Das ist die idealste und sicherste Lösung für den Kunden. Man riskiert keinen Cent und kann persönlich auf dem eigenen Rechner Live-Tests und Backtests durchführen, ohne Angst zu haben, dass der Anbieter diese auf seiner Seite verfälscht hat. Erst nachdem man sich als Anwender und Trader von der Software überzeugt hat, sollte man Geld überweisen.

Inside: Ein Leser hat einen EA gekauft. Was nun? Einschalten und vergessen?

Andrey: Nun, das ist der Punkt, an dem viele Trader scheitern. Genau so stellt man sich den automatisierten Handel vor: „Einschalten und vergessen“. Doch ein automatisiertes Handelssystem braucht regelmäßige Kontrolle der Software an sich und der darin integrierten Strategie. Man muss die von dem System getätigten Transaktionen genauso erfassen und analysieren, wie man es als manueller Trader auch gemacht hat.

Inside: Muss man den eigenen Rechner 24/5 eingeschaltet lassen?

Andrey: Nein. Zuerst muss man sich als Anwender festlegen, auf welchem Gerät der EA laufen soll. Es kann beispielsweise ein gemieteter VPS-Server oder ein eigener Mini-Server sein. Einen vollwertigen PC oder Laptop sollte man nicht für diesen – technisch gesehen – relativ anspruchslosen Prozess benutzen.

VPS-Server eignen sich als die einfachste Lösung für die meisten Trader. Man zahlt monatlich einen Betrag und muss sich nicht mehr um die technische Seite kümmern. Entscheidet man sich für einen gemieteten VPS-Server, so muss man die Internetgeschwindigkeit des Anbieters ins Visier nehmen und darauf achten, dass der “Ping” bis zu den Servern des Brokers möglichst klein ist. Dies ist vor allem bei solchen EAs wichtig, welche mit kleinsten Bewegungen arbeiten (z.B: Scalping-EA, Breakout-EA, News-EA, usw.).

Tipp: Ich persönlich habe einen Raspberry Pi 3 zu einem 24/7/365 Server umgewandelt. Diese Variante ist effizienter, aber auch komplizierter. Ein Raspberry Pi 3 ist ein Mini-Rechner, der nicht größer als eine Handfläche ist, kaum Strom verbraucht und Linux als Betriebssystem hat. Einen solchen R-Pi3 kann man für weniger als 100 Euro erwerben, am Modem oder hinter dem Bildschirm platzieren und muss sich weder Sorgen um den Platzbedarf, die Geräusche oder die Stromkosten machen. Langfristig gesehen ist ein R-Pi3 viel rentabler als ein gemieteter VPS-Server.

Welche Erfahrungen habt ihr mit bisher mit Expert Advisors (EAs) gesammelt?

by Jun 14, 2016 2 Kommentare