Wie man den SL und TP als Faktor einer Range berechnet (und einen EA entsprechend programmiert)
Hier und heute geht es um Range-bezogene Strategien wie zum Beispiel einer Open-Range-Breakout-Strategie oder einer gleitenden Handelsspanne à la Donchian Channel bzw. Turtle Traders. Bei solchen Systemen bietet es sich oftmals an, auf fixe Stop-Loss- und Take-Profit-Abstände in Pips zu verzichten und stattdessen das Kursrisiko und die Kurschance als Vielfaches der gemessenen Range zu definieren.
Wenn z.B. der Kurs aus einer EURUSD-Range zwischen 1,1325 und 1,1355 ausbricht, ist die gemessene Handelsspanne 0,0030 USD pro EUR, was 30 Pips oder, bei 5-stelliger Quotierung, 130 Punkten entspricht. Ein Expert Advisor (EA) für MetaTrader (MT4/MT5), der nun mit 1-facher Range den SL-Abstand setzt, würde bei einem Short den Stop-Loss (SL) 30 Pips über, bei einem Long 30 Pips unter dem jeweiligen Einstandskurs setzen.
Analoge Vorgehensweise beim Take-Profit (TP): wählen wir beispielsweise das 3-fache der Handelsspanne als Kurschance, würde der EA den TP beim Buy 3 x 30 Pips = 90 Pips über dem Einstiegskurs platzieren. Bei einer Sell-Position wäre der TP 0,00900 USD pro EUR unterhalb der Dealeröffnung durchzuführen.
Ich zeige Ihnen im Rest dieses Artikels anhand unseres EA’s mFX-HochTiefAusbruch, der quasi ein Donchian-System, also Ausbrüche aus einer gleitend gemessenen Range im MT4 automatisiert, wie Sie den MQL4-Code eines EA’s von fixen Pips auf Range-Faktoren umprogrammieren können.
Los geht’s!
EA mit Range-Faktoren für SL und TP ausstatten
Wir gehen wie immer Schritt für Schritt vor, damit Sie alles leicht nachvollziehen können. Alle Code-Veränderungen und -Ergänzungen markiere ich mit Fettschrift.
Wichtiger Hinweis: die folgende Vorgehensweise ist eine von vielen Möglichkeiten. Jeder Programmierer hat seine eigene Art und Weise, die Programmiersprache MQL4 so zu verwenden, dass der Expert Advisor am Ende das tut, was er soll.
Schritt 1: EA-Datei unter neuem Namen abspeichern
Wir öffnen die existierende MQ4-Datei mFX-HochTiefAusbruch_v1.50 im MetaEditor. Im Menü Datei wählen wir Speichern Als… und speichern die Datei unter dem neuen Namen mFX-HochTiefAusbruch_v1.60 ab. Damit stellen wir sicher, dass wir jederzeit auf die gut und zuverlässig funktionierende Version v1.50 zurückgreifen können - eine Vorsichtsmaßnahme also.
Schritt 2: Versionsnummer und Erstellungsdatum ändern
Nun ändere ich die Versionsnummer und das Datum, wann ich zuletzt daran gearbeitet habe. Das dient meiner eigenen Dokumentation und unterstützt sozusagen mein Erinnerungsvermögen.
#property version "1.60" //16.11.2018
Das Datum hinter den zwei Schrägstrichen hat dabei keinerlei funktionale Bedeutung für den EA. Denn die beiden zwei Schrägstriche markieren alles folgende in dieser Zeile als Programmierer-Kommentar, welches im Kompilierprozess nicht in Programmcode umgewandelt wird.
Schritt 3: Auswahlliste erstellen
Wir erstellen nun eine Auswahlliste, um zwischen dem bisherigen Pip-basierten und dem neuen Range-Faktor-gestützten Dealmanagement hin und her wechseln zu können. Ich füge folgenden Code direkt vor die Eingabevariablen für TP, SL und Trailing Stop (TS) ein:
enum BASIS_DEALMANAGEMENT
{
PIPS,
RANGE
};
enum definiert immer die darauffolgende Auswahlliste (Enumeration), deren Bestandteile innerhalb der geschwungenen Klammern aufgeführt werden. Diese Auswahlliste können wir nun als Variablenart verwenden, indem wir die Eingabevariable Pips_oder_Range damit definieren und mit dem Standardwert RANGE versehen:
extern BASIS_DEALMANAGEMENT Pips_oder_Range = RANGE;
Beide Code-Bestandteil habe ich vor die TP-/SL-/TS-Eingabevariablen platziert, siehe folgender Screenshot.
Die existierenden Eingabevariablen für TP, SL und TS können wir nun in der EA-Programmierung so verwenden, dass Sie Pips ausdrücken, wenn unter Pips_oder_Range “PIPS” ausgewählt ist. Wenn hingegen “RANGE” ausgewählt ist, wie nun standardmäßig der Fall, werden die Eingaben als Range-Vielfaches ausgelegt.
Schritt 4: Voreinstellungen für Eingabevariablen ändern
Da wir als Standardeinstellung “RANGE” verwenden, ist es ratsam, auch gleich die Standardwerte für TP, SL und TS auf sinnvolle Werte anzupassen. Während beim TP z.B. 55 Pips durchaus Sinn macht, wäre das 55-fache der Range als TP-Abstand hingegen viel zu hoch gegriffen. Daher ändern wir die Voreinstellungen folgendermaßen:
extern double TP = 3;
extern double SL = 1;
extern bool TrailingStopp = false;
extern double TrailingStopp_AktivProfit = 0.1,
TrailingStopp_Abstand = 1,
TrailingStopp_Schritt = 0.01;
Wenn der Nutzer des EA’s mFX-HochTiefAusbruch diese Standards fürs Trading übernimmt, würde der EA folgendermaßen agieren:
TP-Abstand ist das 3-fache der Range, im obigen Beispiel also 3 x 0,0030 USD pro EUR, also 0,0090 Kursgewinn als Ziel.
SL-Abstand ist das 1-fache der Range, im obigen Beispiel wären das 0,0030 Kursrisiko.
Trailing-Stopp ist durch “false” ausgeschaltet. Wenn es aber durch Auswahl von “true” aktiviert würde, wäre es aktiv (TrailingStopp_AktivProfit) ab einem Positionsgewinn von 0,1 x die Range von 0,0030, also ab 0,0003 oder 3 Pips Deal-Gewinn. Der eigentliche Nachzieh-Abstand TrailingStopp ist mit 1 eingestellt, was 0,0030, also die einfache Range, ergibt. Jeder SL-Nachzug muss einen SL-Schritt von mindestens 0,01 der Range ausmachen (TrailingStopp_Schritt), was 0,01 x 0,0030 USD pro EUR, also 0,00003 Kursdifferenz bedeutet.
Schritt 5: Handelsspanne in einer Variable speichern
Jetzt kommen wir dazu, die Handelsspanne zu messen und weiter zu verarbeiten. Im Haupt-Code, der vom EA bei jedem empfangenen Kurstick durchlaufen wird, haben wir schon das gleitende Range-Hoch sowie -Tief ermittelt:
Aus dem Handelsspannen-Hoch RangeUp und dem Range-Tief RangeLo können wir nun die Handelsspannen-Größe errechnen. Dazu fügen
double Range = RangeUp - RangeLo ;
Diese neue Variable Range können wir im nächsten Schritt mit den Dealmanagement-Faktoren multiplizieren.
Schritt 6: Range und Multiplikator zum Dealmanagement verwenden
Wie wir nun die Range-abhängigen SL-, TP- und Trailing-Stop-Abstände berechnen, zeige ich Ihnen am Beispiel des Stop-Losses. Bislang berechnen wir den SL-Kurs, den der EA bei Übermittlung eines Buy-Deals verwendet, durch folgende Code-Zeile:
double SLset = NormalizeDouble ( Ask - ( SL * UsePoint ) , Digits ) ;
Die an dieser Stelle belegen wir die neu eingeführte Variable SLset, die dann in der OrderSend- oder OrderModify-Funktion verwendet werden kann, mit dem SL-Kurs. Dabei hält die Variable UsePoint bei 4- und 5-stelliger Quotierung den Wert 0,0001. Die Funktion NormalizeDouble rundet den Wert auf die Anzahl der Nachkommastellen des Chartsymbols Digits. Im Endeffekt rechnen wir also Ask-Preis minus der Pip-Anzahl, die wir in der Eingabe-Variable SL eingestellt haben.
Nun fügen wir unter diese Zeile den Code hinzu, der den Range-Bezug herstellt:
if ( Pips_oder_Range == RANGE )
SLset = NormalizeDouble ( Ask - ( SL * Range ) , Digits ) ;
Wenn also die Eingabe-Variable Pips_oder_Range durch den Nutzer des EA’s mFX-HochTiefAusbruch mit dem Auswahl-Wert RANGE belegt wurde, wird fast die exakt gleiche Berechnung durchgeführt. Der einzige Unterschied ist, dass die Eingabe-Variable SL nicht mehr mit UsePoint (bei EURUSD also 0,0001), sondern mit der Größe der Handelsspanne Range multipliziert wird.
Die beiden Code-Zeilen des EA’s sehen nun im MetaEditor folgendermaßen aus:
SLset wird also zunächst mit dem Pip-abhängigen SL belegt. Nur wenn RANGE als Dealmanagement-Methode ausgewählt ist, wird die Variable SLset noch entsprechend verändert. Das ist praktisch und robust.
Schritt 7: Wiederholen Sie die Variablenberechnung analog für den Sell-SL sowie für TP und Trailing Stop auf beiden Seiten.
Nun sind Sie an der Reihe, die eben gelernte Lektion sofort und direkt anzuwenden. Zunächst für den SL der Sell-Seite, danach für TP und Trailing Stop für Long und Short. Wie ergeht es Ihnen bei diesem Versuch? Schreiben Sie Ihre Antworten unten in die Kommentare.
Ich hoffe, dass Ihnen dieser Blog-Artikel bei Ihren eigenen Programmier-Bemühungen weiterhilft.
Neue EA Version v1.60 ab sofort verfügbar
Diese neue Dealmanagement-Methode ist ab sofort in der neuen EA-Version v1.60 des mFX-HochTiefAusbruch eingebaut. Alle Informationen zu diesem MT4-EA, der Ausbrüche aus gleitend gemessenen Handelspannen automatisch handelt, inklusive Kaufpreis, Lizenzbedingungen und Sofort-Download finden Sie hier unter folgendem Link: https://www.mindfulfx.de/hochtiefausbruch/
Alles Gute für Ihr Trading wünscht
Cristof Ensslin von mindful FX, Ihr EA Programmierer