und werden Sie Mitglied unserer Fangruppe
Veröffentliche einen Link auf das Skript, damit die anderen ihn auch nutzen können
Bewerten Sie es im Terminal MetaTrader 5
![Expert Advisors](https://c.mql5.com/i/code/expert.png)
MQL5 Wizard - Handelssignale der Kerzenformationen Morning/Evening Stars + MFI - Experte für den MetaTrader 5
- Ansichten:
- 1213
- Rating:
- Veröffentlicht:
- 2016.07.06 12:10
- Aktualisiert:
- 2016.11.22 07:34
-
Benötigen Sie einen Roboter oder Indikator, der auf diesem Code basiert? Bestellen Sie ihn im Freelance-Bereich Zum Freelance
Mit dem MQL5 Wizard können Trader nun Expert Advisor Codes automatisch generieren, die auf den Klassen von Handelssignalen, Positions Tracking und Money Management basieren. Neben den Klassen von Handelssignalen aus der Standardbibliothek können Sie Ihre eigenen Handelssysteme erstellen und testen, dafür brauchen Sie lediglich ein Modul für Handelssignale zu schreiben.
Das Buch "The Strategies of the Best Traders in the World" (in Russisch) beschreibt Indikatoren und Handelsstrategien für die technische Analyse unter Verwendung des MetaStock Softwarepaketes. Neben den konventionellen Handelssignalen befasst sich dieses Buch auch mit denen, die auf einer kombinierten Anwendung von Umkehrkerzenformationen mit der Bestätigung durch Stochastic, CCI, MFI und RSI basieren.
Die Verwendung von Umkehrkerzenformationen, zusammen mit Signalen von Oszillatoren, reduziert die Anzahl der falschen Signale und erhöht die Effizienz des Handelssystems.
Hier werden die Ergebnisse einer kombinierten Anwendung der Modelle Morning Star und Evening Star zusammen mit Signalen des MFI Indiaktors betrachtet (gleich für Morning Doji Star und Evening Doji Star).
1. Die Muster "Morning Star" und "Evening Star" und deren Erkennung
1.1. Muster "Morning Star" (Morgenstern)
Das Muster "Morning Star" besteht aus drei Kerzen und tritt bei einem Abwärtstrend auf (Abb. 1). Nach einer langen schwarzen Kerze kommt eine Kerze mit einem kleinen Körper (die Farbe des Körpers ist unbedeutend), der sich mit dem Körper der schwarzen Kerze nicht überschneidet. Der kleine Körper der zweiten Kerze weist auf den Wechsel von einem Abwärtstrend zur Ausgewogenheit zwischen Bullen und Bären hin.
Die dritte Kerze dieses Musters ist eine bullische Kerze, deren Körper sich nicht mit dem Körper der zweiten Kerze kreuzt, und deren Schlusskurs innerhalb des Körpers der ersten (bärischen) Kerze liegt. Auf der Abb. 1 können Sie auch die resultierende Kerze dieses Modells sehen.
Wenn die zweite Kerze des Morgensterns eine Doji Kerze ist, wird dieses Modell als "Morning Doji Star" (Morgenstern Doji) bezeichnet.
Abbildung 1. Kerzenformation "Morning Star" und "Morning Doji Star"
Die Erkennung dieser Modelle ist in den Methoden CheckPatternMorningStar() und CheckPatternMorningDoji der Klasse CCandlePattern umgesetzt:
//+------------------------------------------------------------------+ //| Überprüfung der Kerzenformation "Morning Star" | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternMorningStar() { //--- Morning Star - prüft ob das Modell "Morgenstern" gebildet wird if((Open(3)-Close(3)>AvgBody(1)) && // eine bärische Kerze, ihr Körper ist überdurchschnittlich lang (MathAbs(Close(2)-Open(2))<AvgBody(1)*0.5) && // der Körper der zweiten Kerze ist klein (kleiner als die Hälfte der durchschnittlichen Körpergröße) (Close(2)<Close(3)) && // der Schlusskurs der zweiten Kerze liegt unterhalb des Schlusskurses der ersten Kerze (Open(2)<Open(3)) && // der Eröffnungskurs der zweiten Kerze liegt unterhalb des Eröffnungskurses der ersten Kerze (Close(1)>MidOpenClose(3))) // der Schlusskurs der letzten Kerze liegt oberhalb des Mittelpunkts der ersten (bärischen) Kerze return(true); //--- return(false); } //+------------------------------------------------------------------+ //| Überprüfung der Kerzenformation "Morning Doji Star" | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternMorningDoji() { //--- Morning Doji Star - prüft ob das Modell "Morgenstern Doji" gebildet wird if((Open(3)-Close(3)>AvgBody(1)) && // eine bärische Kerze, ihr Körper ist überdurchschnittlich lang (AvgBody(2)<AvgBody(1)*0.1) && // der Körper der zweiten Kerze Doji (kleiner als ein Zehntel der durchschnittlichen Größe) (Close(2)<Close(3)) && // der Schlusskurs der zweiten Kerze liegt unterhalb des Schlusskurses der ersten Kerze (Open(2)<Open(3)) && // der Eröffnungskurs der zweiten Kerze liegt unterhalb des Eröffnungskurses der ersten Kerze (Open(1)>Close(2)) && // Gap nach oben auf der letzten Kerze (Close(1)>Close(2))) // der Schlusskurs der letzten Kerze liegt oberhalb des Schlusskurses der zweiten Kerze return(true); //--- return(false); }
Um die Formation der Muster "Morning Star" und "Morning Doji Star" zu überprüfen, werden die Methoden CheckCandlestickPattern(CANDLE_PATTERN_MORNING_STAR) und CheckCandlestickPattern(CANDLE_PATTERN_MORNING_DOJI) der CCandlePattern Klasse verwendet.
1.2. Muster "Evening Star" (Abendstern)
Das Muster "Abendstern" besteht auch aus drei Kerzen und wird in einem Aufwärtstrend gebildet (Abb. 2). Nach einer langen weißen Kerze kommt eine Kerze mit einem kleinen Körper (die Farbe ist unbedeutend), der sich mit dem Körper der weißen Kerze nicht überschneidet. Der kleine Körper der zweiten Kerze weist auf den Wechsel von einem Aufwärtstrend zur Ausgewogenheit zwischen Bullen und Bären hin.
Die dritte Kerze dieses Modells ist eine schwarze Kerze, deren Körper sich nicht mit dem Körper der zweiten Kerze kreuzt, und deren Schlusskurs innerhalb des Körpers der ersten (bullischen) Kerze liegt. Auf der Abb. 2 ist die resultierende Kerze dieses Modells zu sehen.
Wenn die zweite Kerze des Abendsterns eine Doji Kerze ist, dann wird dieses Modell als "Evening Doji Star" (Abendstern Doji) bezeichnet.
Abb. 2. Kerzenformation "Evening Star" und "Evening Doji Star"
Methoden zur Erkennung der Modelle "Evening Star" und "Evening Doji Star":
//+------------------------------------------------------------------+ //| Überprüfung der Kerzenformation "Evening Star" | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternEveningStar() { //--- Evening Star - überprüft ob das Modell "Abendstern" gebildet wird if((Close(3)-Open(3)>AvgBody(1)) && // eine bullische Kerze, ihr Körper ist überdurchschnittlich lang (MathAbs(Close(2)-Open(2))<AvgBody(1)*0.5) && // der Körper der zweiten Kerze ist klein (kleiner als die Hälfte der durchschnittlichen Körpergröße der Kerze) (Close(2)>Close(3)) && // der Schlusskurs der zweiten Kerze liegt oberhalb des Schlusskurses der ersten Kerze (Open(2)>Open(3)) && // der Eröffnungskurs der zweiten Kerze liegt oberhalb des Eröffnungskurses der ersten Kerze (Close(1)<MidOpenClose(3))) // der Schlusskurs der letzten Kerze liegt unterhalb des Mittelpunktes der ersten (bullischen) Kerze return(true); //--- return(false); } //+------------------------------------------------------------------+ //| Überprüfung der Kerzenformation "Evening Doji Star" | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternEveningDoji() { //--- Evening Doji Star - überprüft, ob das Muster "Evening Doji Star" gebildet wird if((Close(3)-Open(3)>AvgBody(1)) && // eine bullische Kerze, ihr Körper ist überdurchschnittlich lang (AvgBody(2)<AvgBody(1)*0.1) && // die zweite Kerze ist eine Doji Kerze (ihr Körper ist kleiner als ein Zehntel der durchschnittlichen Länge) (Close(2)>Close(3)) && // der Schlusskurs der zweiten Kerze liegt oberhalb des Schlusskurses der ersten Kerze (Open(2)>Open(3)) && // der Eröffnungskurs der zweiten Kerze liegt oberhalb des Eröffnungskurses der ersten Kerze (Open(1)<Close(2)) && // Gap nach unten auf der letzten Kerze (Close(1)<Close(2))) // der Schlusskurs der letzten Kerze liegt unterhalb des Schlusskurses der zweiten Kerze return(true); //--- return(false); }
Für die Überprüfung der Kerzenformationen "Evening Star" und "Evening Doji Star", werden CheckCandlestickPattern(CANDLE_PATTERN_EVENING_STAR) und CheckCandlestickPattern(CANDLE_PATTERN_EVENING_DOJI) der CCandlePattern Klasse verwendet.
2. Handelssignale in der Kombination mit dem MFI Indikator
Die Einstiegssignale werden gesendet, wenn das Umkehrmuster auf dem Diagramm auftritt und der Wert von MFI unterhalb des Levels 40 für Long- und oberhalb des Levels 60 für Short-Positionen liegt.
Die Ausstiegssignale entstehen, wenn MFI den gegensätzlichen Level (70 für eine Long- und 30 für eine Short-Position) erreicht oder die Umkehr nicht bestätigt, wenn er den Level 30 oder den Level 70 jeweils für Long und Short erreicht.
Abbildung 3. Handelssignale der Kerzenformation "Morning Star" mit der Bestätigung durch den MFI Indikator
Die Bedingungen für Einstieg und Ausstieg werden in den folgenden Methoden überprüft:
- int CMS_ES_MFI::LongCondition() - überprüft die Bedingungen für das Eröffnen einer Long-Position (die Funktion gibt 80 zurück) und Schließen einer Short-Position (die Funktion gibt 40 zurück);
- int CMS_ES_MFI::ShortCondition() - überprüft die Bedingungen für das Eröffnen einer Short-Position (die Funktion gibt 80 zurück) und Schließen einer Long-Position (die Funktion gibt 40 zurück).
2.1. Eröffnen einer Long-Position und Schließen einer Short-Position
-
Das Signal zum Eröffnen einer Long-Position entsteht, wenn das Muster "Morning Star" auftritt und die Bedingung MFI(1)<40 erfüllt ist (der Wert des MFI Indikators auf dem letzten vollständigen Balken ist kleiner als 40).
Das Signal zum Schließen einer Short-Position entsteht, wenn der MFI Indikator den Level 30 (von unten nach oben) oder den Level 70 (von oben nach unten) kreuzt.
//+--------------------------------------------------------------------+ //| Methode zur Überprüfung der Bedingungen für Einstieg und Ausstieg | //| Überprüfung der Bedingungen für | //| 1) Einstieg (Eröffnen einer Long-Position, result=80) | //| 2) Ausstieg (Schließen einer Short-Position, result=40) | //+--------------------------------------------------------------------+ int CES_MS_MFI::LongCondition() { int result=0; //--- idx kann verwendet werden, um den Modus des EAs festzustellen //--- idx=0 - der EA wird die Erfüllung der Bedingungen auf jedem Tick überprüfen //--- idx=1 - der EA wird die Erfüllung der Bedingungen nur auf neuen Balken überprüfen int idx=StartIndex(); //--- Überprüfung der Bedingungen für das Eröffnen einer Long-Position //--- die Formation einer bullischen Kombination Morning Star und die Erfüllung der Bedingung MFI<40 if(CheckCandlestickPattern(CANDLE_PATTERN_MORNING_STAR) && (MFI(1)<40)) result=80; //--- Überprüfung der Bedingungen für das Schließen einer Short-Position if(((MFI(1)>30) && (MFI(2)<30)) || ((MFI(1)>70) && (MFI(2)<70))) result=40; //--- result zurückgeben return(result); }
2.2. Eröffnen einer Short-Position und Schließen einer Long-Position
Das Signal zum Eröffnen einer Short-Position entsteht, wenn sich das Muster "Evening Star" bildet und die Bedingung MFI(1)>60 erfüllt ist (der Wert des MFI Indikators auf dem letzten vollständigen Balken ist größer als 60).
Das Signal zum Schließen einer Long-Position entsteht, wenn der MFI den Level 70 (von unten nach oben) oder den Level 30 (von oben nach unten) kreuzt.
//+--------------------------------------------------------------------+ //| Methode zur Überprüfung der Bedingungen für Einstieg und Ausstieg | //| Überprüfung der Bedingungen für | //| 1) Einstieg (Eröffnen einer Short-Position, result=80) | //| 2) Ausstieg (Schließen einer Long-Position, result=40) | //+--------------------------------------------------------------------+ int CMS_ES_MFI::ShortCondition() { int result=0; //--- idx kann verwendet werden, um den Modus des EAs festzustellen //--- idx=0 - der EA wird die Erfüllung der Bedingungen auf jedem Tick überprüfen //--- idx=1 - der EA wird die Erfüllung der Bedingungen nur auf neuen Balken überprüfen int idx=StartIndex(); //--- Überprüfung der Bedingungen für das Eröffnen einer Short-Position //--- die Formation einer bärischen Kombination Evening Star und die Erfüllung der Bedingung MFI>60 if(CheckCandlestickPattern(CANDLE_PATTERN_EVENING_STAR) && (MFI(1)>60)) result=80; //--- Überprüfung der Bedingungen für das Schließen einer Long-Position if(((MFI(1)>70) && (MFI(2)<70)) || ((MFI(1)<30) && (MFI(2)>30))) result=40; //--- result zurückgeben return(result); }
2.3. Erstellung eines Expert Advisors auf der Basis der Handelssignale des Umkehrmodells "Morning/Evening Stars + MFI" mithilfe von MQL5 Wizard
Die Klasse CMS_ES_MFI gehört nicht zur Standardbibliothek der Klassen von Handelssignalen, deswegen muss die Datei acms_es_mfi.mqh (angefügt) heruntergeladen und in terminal_data_folder\MQL5\Include\Expert\Signal\MySignals gespeichert werden. Die Datei acandlepatterns.mqh muss in dasselbe Verzeichnis kopiert werden, wie die Datei acms_es_mfi.mqh. Nachdem Sie den MetaEditor neu gestartet haben, können Sie die Dateien im MQL5 Wizard benutzen.
Starten Sie den MQL5 Wizard, um einen Handelsroboter nach dieser Strategie zu erstellen:
Abb. 4. Erstellung eines EAs im MQL5 Wizard
Klicken Sie auf "Next" und geben Sie den Namen des EAs ein:
Abb. 5. Allgemeine Parameter des EAs
Danach sind die Parameter der Signale einzugeben:
Abb. 6. Parameter der Signale
In unserem Fall verwenden wir nur ein Modul von Handelssignalen.
Fügen wir das Modul "Signals based on Morning/Evening Stars confirmed by MFI" hinzu:
Abb. 7. Parameter der Signale
Das Modul ist hinzugefügt:
Abb. 8. Parameter der Signale
Danach kann man das Modul des Trailings auswählen, wir werden es allerdings nicht verwenden. "Trailing Stop not used" auswählen:
Abb. 9. Trailing Modul
Des Weiteren ist das Money Management Modul auszuwählen, wir werden den Handel mit einem festen Volumen (Trading with fixed trade volume) verwenden:
Abb. 10. Money Management Modul
Klicken Sie auf "Finish" und Sie erhalten den Code des generierten Expert Advisors - die Datei Expert_AMS_ES_MFI.mq5 wird im Verzeichnis terminal_data_folder\MQL5\Experts\ gespeichert.
Die Eingabeparameter des Expert Advisors (default):
//--- inputs for main signal input int Signal_ThresholdOpen =10; // Signal threshold value to open [0...100] input int Signal_ThresholdClose =10; // Signal threshold value to close [0...100] input double Signal_PriceLevel =0.0; // Price level to execute a deal input double Signal_StopLevel =50.0; // Stop Loss level (in Punkten) input double Signal_TakeLevel =50.0; // Take Profit level (in Punkten)
ersetzen durch:
//--- inputs for main signal input int Signal_ThresholdOpen =40; // Signal threshold value to open [0...100] input int Signal_ThresholdClose =20; // Signal threshold value to close [0...100] input double Signal_PriceLevel =0.0; // Price level to execute a deal input double Signal_StopLevel =0.0; // Stop Loss level (in Punkten) input double Signal_TakeLevel =0.0; // Take Profit level (in Punkten)
Die Parameter Signal_ThresholdOpen und Signal_ThresholdClose lassen Schwellenwerte für das Eröffnen und Schließen von Position setzen.
Im Code der Funktionen LongCondition() und ShortCondition() des Moduls von Handelssignalen haben wir die festen Schwellenwerte angegeben:
- Für das Eröffnen von Positionen: 80;
- Für das Schließen von Positionen: 40.
Der mithilfe von MQL5 Wizard erstellte Expert Advisor entscheidet über das Eröffnen bzw. Schließen einer Position anhand der Ergebnisse der "Abstimmung" unter den Modulen von Handelssignalen, die im Laufe der Erstellung des EAs hinzugefügt wurden. Zwar nimmt das Hauptmodul (das alle hinzugefügten Module enthält) an der "Abstimmung" auch teil, seine Methoden LongCondition() und ShortCondition() geben aber immer 0 zurück.
Da die "Stimmen" bei der Berechnung nach der Anzahl der vorhandenen Modulen (Hauptmodul + ein hinzugefügtes Modul) gemittelt werden, muss man das bei der Angabe der Schwellenwerte berücksichtigen. Aus diesem Grund müssen die Werte von Signal_ThresholdOpen und Signal_ThresholdClose als jeweils 40=(0+80)/2 und 20=(0+40)/2 gesetzt werden.
Die Werte von Signal_StopLevel und Signal_TakeLevel setzen wir auf 0, dies bedeutet, dass die Positionen nur beim Eingehen von Handelssignalen zum Schließen geschlossen werden.
2.4 Testergebnisse anhand historischer Daten
Die Ergebnisse des Expert Advisors bei einem Test unter Verwendung von historischen Daten (EURUSD H1, Testperiode: 2010.01.01-2011.03.16, PeriodMFI=49, MA_period=3).
Dieser Expert Advisor benutzt das Modul für den Handel mit einer festgelegten Lotgröße von 0.1 Lot (Trading Fixed Lot), ein Trailing Stop wurde nicht verwendet (Trailing not used).
Abb. 11. Testergebnisse für den EA, der der Basis des Generators der Handelssignale "Morning/Evening Stars + MFI" erstellt wurde
Das beste Parameterset für das Tradingsystem ist mithilfe von Strategietester des MetaTrader 5 Kundenterminals zu finden.
Der Code des Expert Advisors, der in MQL5 Wizard erstellt wurde, ist in der Dateiexpert_ams_es_mfi.mq5 enthalten.
Übersetzt aus dem Russischen von MetaQuotes Ltd.
Originalpublikation: https://www.mql5.com/ru/code/323
![sToken](https://c.mql5.com/i/code/library.png)
Das Skript enthält eine Klasse für die Lösung mathematischer und logischer Ausdrücke, die als String definiert werden.
![Skript für ChartNavigate](https://c.mql5.com/i/code/script.png)
Ein einfaches Skript, das die Verwendung der Funktion ChartNavigate() demonstriert
![MQL5 Wizard - Handelssignale der Kerzenformationen Morning/Evening Stars + RSI](https://c.mql5.com/i/code/expert.png)
Handelssignale der Kerzenformationen "Morning Star/Evening Star" (Morgenstern/Abendstern) mit der Bestätigung durch den RSI (Relative Strength Index) Indikator.
![MQL5 Wizard - Handelssignale der Kerzenformationen Dark Cloud Cover/Piercing Line + RSI](https://c.mql5.com/i/code/expert.png)
Handelssignale der Kerzenformation "Dark Cloud Cover/Piercing Line" mit der Bestätigung durch den RSI Indikator.