Der MQL5 Wizard ermöglicht es dir, fertige Expert Advisors (EAs) zu erstellen, die auf den Klassen der Standardbibliothek basieren, die zusammen mit dem Client-Terminal geliefert werden (siehe Bereitstellung von Expert Advisors im MQL5 Wizard für Details). Du kannst deine Handelsideen schnell überprüfen, indem du deine eigene Handelsignal-Klasse erstellst. Die Struktur dieser Klasse und ein Beispiel findest du im Artikel MQL5 Wizard: So erstellst du ein Modul für Handelsignale.
Die Grundidee ist folgende: Die Handelsignal-Klasse leitet sich von CExpertSignal ab. Danach musst du die virtuellen Methoden LongCondition() und ShortCondition() mit deinen eigenen Methoden überschreiben.
In dem Buch "Strategien der besten Trader" (auf Russisch) werden viele Handelsstrategien behandelt. Wir konzentrieren uns auf Umkehrkerzenmuster, die durch Stochastik, CCI, MFI und RSI Oszillatoren bestätigt werden.
Am besten ist es, eine separate Klasse abzuleiten, die von CExpertSignal abgeleitet ist, um die Bildung von Kerzenmustern zu überprüfen. Um die Handelssignale, die durch Kerzenmuster generiert werden, zu bestätigen, reicht es aus, die Klasse abzuleiten, die von CCandlePattern stammt, und die erforderlichen Funktionen (zum Beispiel Bestätigung durch Oszillatoren) hinzuzufügen.
Hier betrachten wir die Signale, die auf den Umkehrkerzenmustern "Morgenstern/Abendstern" (Morgen Doji Stern/Abend Doji Stern) basieren, die durch den MFI Indikator bestätigt werden. Das Modul der Handelssignale basiert auf der CCandlePattern Klasse, ein einfaches Beispiel für die Verwendung zur Erstellung von Handelssignalen mit Kerzenmustern.
1. "Morgenstern" und "Abendstern" Umkehrkerzenmuster
1.1. Morgenstern
Dieses Muster zeigt die Umkehr eines Abwärtstrends an und besteht aus drei Kerzen (Abb. 1). Nach einer langen schwarzen Kerze folgt eine Kerze (die Farbe ist nicht wichtig) mit einem kleinen Körper, die außerhalb des Körpers der schwarzen Kerze liegt. Der kleine Körper einer Kerze bedeutet, dass die Stärke der Bullen und Bären gleich ist und der Markt bereit ist, den Trend zu ändern.
Die dritte Kerze des Musters ist eine bullische Kerze, deren Körper nicht mit dem Körper der zweiten Kerze überlappt, und der Schlusskurs liegt im Körper der ersten (bärischen) Kerze. Die resultierende Kerze des Modells ist ebenfalls in Abbildung 1 dargestellt.
Wenn die zweite Kerze eine doji-artige Kerze ist, wird das Modell "Morgen Doji Stern" genannt.

Abb. 1. "Morgenstern" und "Morgen Doji Stern" Kerzenmuster
Die Identifizierung des "Morgenstern"-Musters erfolgt in den Methoden CheckPatternMorningStar() und CheckPatternMorningDoji() der CCandlePattern Klasse:
//+------------------------------------------------------------------+ //| Überprüfe die Bildung des "Morgenstern"-Musters | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternMorningStar() { //--- Morgenstern if((Open(3)-Close(3)>AvgBody(1)) && // bärische Kerze, deren Körper größer ist als der Durchschnittskörper (MathAbs(Close(2)-Open(2)<AvgBody(1)*0.5) && // zweite Kerze hat kleinen Körper (weniger als die Hälfte des Durchschnittskörpers) (Close(2)<Close(3)) && // Schlusskurs der zweiten Kerze ist niedriger als der Schlusskurs der ersten (Open(2)<Open(3)) && // Eröffnung der zweiten Kerze ist niedriger als die der ersten (Close(1)>MidOpenClose(3))) // Schlusskurs der letzten abgeschlossenen Kerze ist höher als die Mitte der ersten return(true); //--- return(false); } //+------------------------------------------------------------------+ //| Überprüfe die Bildung des "Morgen Doji Stern"-Musters | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternMorningDoji() { //--- Morgen Doji Stern if((Open(3)-Close(3)>AvgBody(1)) && // bärische Kerze mit Körper größer als der Durchschnittskörper (AvgBody(2)<AvgBody(1)*0.1) && // die zweite Kerze hat einen sehr kleinen Körper (doji) (Close(2)<Close(3)) && // Schlusskurs der zweiten Kerze ist niedriger als der Schlusskurs der ersten (Open(2)<Open(3)) && // Eröffnung der zweiten Kerze ist niedriger als die der ersten (Open(1)>Close(2)) && // Aufwärtslücke bei der letzten abgeschlossenen Kerze (Close(1)>Close(2))) // Schlusskurs der letzten abgeschlossenen Kerze ist höher als der Schlusskurs der zweiten return(true); //--- return(false); }
Die Methoden CheckCandlestickPattern(CANDLE_PATTERN_MORNING_STAR) und CheckCandlestickPattern(CANDLE_PATTERN_MORNING_DOJI) der CCandlePattern Klasse werden verwendet, um die Bildung der "Morgenstern" und "Morgen Doji Stern" Kerzenmuster zu überprüfen.
1.2. Abendstern
Dieses Muster zeigt die Umkehr eines Aufwärtstrends an und besteht ebenfalls aus drei Kerzen (Abb. 2). Nach einer langen weißen Kerze folgt eine Kerze (die Farbe ist nicht wichtig) mit einem kleinen Körper, die außerhalb des Körpers der weißen Kerze liegt. Der kleine Körper einer Kerze bedeutet, dass die Stärken von Bullen und Bären gleich sind und der Markt bereit ist, den Trend zu ändern.
Die dritte Kerze des Musters ist eine bärische Kerze, deren Körper nicht mit dem Körper der zweiten Kerze überlappt, und der Schlusskurs liegt im Körper der ersten (bullischen) Kerze. Die resultierende Kerze des Modells ist ebenfalls in Abbildung 2 dargestellt.
Wenn die zweite Kerze eine doji-artige Kerze ist, wird das Modell "Abend Doji Stern" genannt.

Abb. 2. "Abendstern" und "Abend Doji Stern" Kerzenmuster
Hier sind die Methoden zur Identifizierung der "Abendstern" und "Abend Doji Stern" Muster:
//+------------------------------------------------------------------+ //| Überprüfe die Bildung des "Abendstern"-Musters | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternEveningStar() { //--- Abendstern if((Close(3)-Open(3)>AvgBody(1)) && // bullische Kerze mit Körper höher als der Durchschnittskörper (MathAbs(Close(2)-Open(2)<AvgBody(1)*0.5) && // zweite Kerze hat einen kleinen Körper (weniger als die Hälfte des Durchschnitts) (Close(2)>Close(3)) && // Schlusskurs der zweiten Kerze ist höher als der Schlusskurs der ersten (Open(2)>Open(3)) && // Eröffnung der zweiten Kerze ist höher als die der ersten (Close(1)<MidOpenClose(3))) // Schlusskurs der letzten abgeschlossenen Kerze ist niedriger als die Mitte der ersten return(true); //--- return(false); } //+------------------------------------------------------------------+ //| Überprüfe die Bildung des "Abend Doji Stern"-Musters | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternEveningDoji() { //--- Abend Doji Stern if((Close(3)-Open(3)>AvgBody(1)) && // bullische Kerze mit Körper höher als der Durchschnitt (AvgBody(2)<AvgBody(1)*0.1) && // die zweite Kerze hat einen sehr kleinen Körper (doji) (Close(2)>Close(3)) && // Schlusskurs der zweiten Kerze ist höher als der Schlusskurs der ersten (Open(2)>Open(3)) && // Eröffnung der zweiten Kerze ist höher als die der ersten (Open(1)<Close(2)) && // Abwärtslücke bei der letzten abgeschlossenen Kerze (Close(1)<Close(2))) // Schlusskurs der letzten abgeschlossenen Kerze ist niedriger als der Schlusskurs der zweiten return(true); //--- return(false); }
Die Methoden CheckCandlestickPattern(CANDLE_PATTERN_EVENING_STAR) und CheckCandlestickPattern(CANDLE_PATTERN_EVENING_DOJI) der CCandlePattern Klasse werden verwendet, um die Bildung der "Abendstern" und "Abend Doji Stern" Kerzenmuster zu überprüfen.
2. Handelssignale, bestätigt durch den MFI Indikator
Die Handelssignale zum Öffnen einer Long- oder Short-Position müssen durch den MFI Indikator bestätigt werden. Der Wert des MFI Indikators muss unter 40 (für Long-Positionen) oder über 60 (für Short-Positionen) liegen.
Der Schluss einer geöffneten Position hängt von den Werten des MFI Indikators ab. Dies kann in zwei Fällen erfolgen:
- Wenn der MFI den gegenüberliegenden kritischen Wert erreicht hat (70 für Long-Position und 30 für Short-Position)
- Wenn das Umkehrsignal nicht bestätigt ist (wenn der MFI Indikator die folgenden Werte erreicht: 30 für Long-Position und 70 für Short-Position)

Abbildung 3. Das "Morgenstern"-Muster, bestätigt durch den MFI Indikator
- int CMS_ES_MFI::LongCondition() - überprüft die Bedingungen zum Öffnen einer Long-Position (gibt 80 zurück) und zum Schließen einer Short-Position (gibt 40 zurück);
- int CMS_ES_MFI::ShortCondition() - überprüft die Bedingungen zum Öffnen einer Short-Position (gibt 80 zurück) und zum Schließen einer Long-Position (gibt 40 zurück).
2.1. Long-Position öffnen/Short-Position schließen
Die Bildung des "Morgenstern"-Musters muss durch den MFI Indikator bestätigt werden: MFi(1)<40 (der Wert des MFI Indikators der letzten abgeschlossenen Kerze muss weniger als 40 sein).
Die Short-Position muss geschlossen werden, wenn der MFI Indikator die kritischen Werte (70 oder 30) überschreitet.
//+------------------------------------------------------------------+ //| Überprüft die Bedingungen für den Markteintritt und -austritt | //| 1) Markteintritt (Long-Position öffnen, Ergebnis=80) | //| 2) Marktaustritt (Short-Position schließen, Ergebnis=40) | //+------------------------------------------------------------------+ int CMS_ES_MFI::LongCondition() { int result=0; //--- idx kann verwendet werden, um den Arbeitsmodus des Expert Advisors zu bestimmen //--- idx=0 - in diesem Fall überprüft der EA Handelsbedingungen bei jedem Tick //--- idx=1 - in diesem Fall überprüft der EA Handelsbedingungen nur bei Nachrichtenbalken int idx =StartIndex(); //--- Überprüfung der Bedingungen zum Öffnen einer Long-Position //--- Bildung des Morgenstern-Musters und MFI<40 if(CheckCandlestickPattern(CANDLE_PATTERN_MORNING_STAR) && (MFI(1)<40)) result=80; //--- Überprüfung der Bedingungen zum Schließen der Short-Position //--- Signal-Linienkreuzung überkauft/überverkauft (aufwärts 30, aufwärts 70) if(((MFI(1)>30) && (MFI(2)<30)) || ((MFI(1)>70) && (MFI(2)<70))) result=40; //--- Ergebnis zurückgeben return(result); }
2.2. Short-Position öffnen/Long-Position schließen
Die Bildung des "Abendstern"-Musters muss durch den MFI Indikator bestätigt werden: MFI(1)>60 (der Wert des MFI Indikators der letzten abgeschlossenen Kerze muss größer als 60 sein).
Die Long-Position muss geschlossen werden, wenn der MFI Indikator die kritischen Werte (70 oder 30) überschreitet.
//+------------------------------------------------------------------+ //| Überprüft die Bedingungen für den Markteintritt und -austritt | //| 1) Markteintritt (Short-Position öffnen, Ergebnis=80) | //| 2) Marktaustritt (Long-Position schließen, Ergebnis=40) | //+------------------------------------------------------------------+ int CMS_ES_MFI::ShortCondition() { int result=0; //--- idx kann verwendet werden, um den Arbeitsmodus des Expert Advisors zu bestimmen //--- idx=0 - in diesem Fall überprüft der EA Handelsbedingungen bei jedem Tick //--- idx=1 - in diesem Fall überprüft der EA Handelsbedingungen nur bei Nachrichtenbalken int idx =StartIndex(); //--- Überprüfung der Bedingungen zum Öffnen einer Short-Position //--- Bildung des Abendstern-Musters und MFI>60 if(CheckCandlestickPattern(CANDLE_PATTERN_EVENING_STAR) && (MFI(1)>60)) result=80; //--- Überprüfung der Bedingungen zum Schließen der Long-Position //--- Signal-Linienkreuzung überkauft/überverkauft (aufwärts 70, abwärts 30) if(((MFI(1)>70) && (MFI(2)<70)) || ((MFI(1)<30) && (MFI(2)>30))) result=40; //--- Ergebnis zurückgeben return(result); }
2.3. Erstellung des Expert Advisors mit MQL5 Wizard
Die CMS_ES_MFI Klasse ist nicht in den Klassen der Standardbibliothek enthalten. Um sie zu verwenden, musst du die Datei ams_es_mfi.mqh herunterladen (siehe Anhänge) und sie im Client_Terminal_Datenverzeichnis\MQL5\Include\Expert\Signal\MySignals speichern. Dasselbe sollte für die Datei acandlepatterns.mqh gemacht werden. Du kannst sie im MQL5 Wizard nach einem Neustart des MetaEditors verwenden.
Um einen Expert Advisor zu erstellen, starte den MQL5 Wizard:

Abb. 4. Erstellung des Expert Advisors mit MQL5 Wizard
Lass uns den Namen des Expert Advisors festlegen:

Abb. 5. Allgemeine Eigenschaften des Expert Advisors
Danach müssen wir die verwendeten Module der Handelssignale auswählen.

Abb. 6. Signal-Eigenschaften des Expert Advisors
In unserem Fall verwenden wir nur ein Modul der Handelssignale.
Hinzufügen des Moduls "Signale basierend auf Morgenstern/Abendstern bestätigt durch MFI":

Abb. 7. Signal-Eigenschaften des Expert Advisors
Modul der Handelssignale hinzugefügt:

Abb. 8. Signal-Eigenschaften des Expert Advisors
Du kannst beliebige Trailing-Eigenschaften auswählen, aber wir werden "Trailing Stop nicht verwendet" nutzen:

Abb. 9. Trailing-Eigenschaften des Expert Advisors
Was die Geldmanagement-Eigenschaften betrifft, werden wir "Handel mit festem Handelsvolumen" verwenden:

Abb. 10. Geldmanagement-Eigenschaften des Expert Advisors
Durch Drücken der Schaltfläche "Fertigstellen" erhalten wir den Code des generierten Expert Advisors, der in Expert_AMS_ES_MFI.mq5 gespeichert wird, im terminal_data_folder\MQL5\Experts\.
Die Standard-Eingabeparameter des generierten Expert Advisors:
//--- Eingaben für das Hauptsignal input int Signal_ThresholdOpen =10; // Signalthresholdwert zum Öffnen [0...100] input int Signal_ThresholdClose =10 // Signalthresholdwert zum Schließen [0...100] input double Signal_PriceLevel =0.0 // Preisniveau zur Ausführung eines Handels input double Signal_StopLevel =50.0 // Stop-Loss-Niveau (in Punkten) input double Signal_TakeLevel =50.0 // Take-Profit-Niveau (in Punkten)
muss ersetzt werden durch:
//--- Eingaben für das Hauptsignal input int Signal_ThresholdOpen =40; // Signalthresholdwert zum Öffnen [0...100] input int Signal_ThresholdClose =20 // Signalthresholdwert zum Schließen [0...100] input double Signal_PriceLevel =0.0 // Preisniveau zur Ausführung eines Handels input double Signal_StopLevel =0.0 // Stop-Loss-Niveau (in Punkten) input double Signal_TakeLevel =0.0 // Take-Profit-Niveau (in Punkten)
Die Parameter Signal_ThresholdOpen/Signal_ThresholdClose ermöglichen es, Schwellenwerte für das Öffnen und Schließen von Positionen festzulegen.
Im Code der LongCondition() und ShortCondition() Methoden der Handelssignalklasse haben wir feste Werte für die Schwellenwerte festgelegt:
- Position öffnen: 80;
- Position schließen: 40.
Der Expert Advisor, der vom MQL5 Wizard generiert wurde, öffnet und schließt Positionen, indem er die "Stimmen" der Module der Handelssignale verwendet. Die Stimme des Hauptmoduls (als Container, das aus allen hinzugefügten Modulen besteht) wird ebenfalls verwendet, aber seine Methoden LongCondition() und ShortCondition() geben immer 0 zurück.
Die Stimmenergebnisse des Hauptmoduls werden auch bei der "Stimmen"-Durchschnittsbildung verwendet. In unserem Fall haben wir: Hauptmodul + 1 Modul der Handelssignale, daher müssen wir diesen Umstand bei der Einstellung der Schwellenwerte berücksichtigen. Aufgrund dieses Umstands müssen die ThresholdOpen und ThresholdClose auf 40=(0+80)/2 und 20=(0+40)/2 gesetzt werden.
Die Werte der Parameter Signal_StopLevel und Signal_TakeLevel sind auf 0 gesetzt, was bedeutet, dass die Schließung der Positionen nur erfolgt, wenn die Schließbedingungen erfüllt sind.
2.4. Ergebnisse der historischen Backtests
Schauen wir uns das Backtesting des Expert Advisors auf historischen Daten (EURUSD H1, Testzeitraum: 2010.01.01-2011.03.16, PeriodMFI=49, MA_period=3) an.
Bei der Erstellung des Expert Advisors haben wir das feste Volumen verwendet (Handel mit festem Lot, 0.1), und der Trailing Stop-Algorithmus wird nicht verwendet (Trailing nicht verwendet).

Abb. 11. Testergebnisse des Expert Advisors, basierend auf Morgen-/Abendsternen + MFI
Die besten Eingabeparameter können mit dem Strategietester des MetaTrader 5 Client-Terminals gefunden werden.
Der Code des Expert Advisors, der vom MQL5 Wizard erstellt wurde, ist in expert_ams_es_mfi.mq5 angehängt.
Verwandte Beiträge
- So integrierst du hochkarätige Wirtschaftsdaten in deinen EA für MetaTrader 4
- Erstelle einen Expert Advisor basierend auf dem Center of Gravity Indikator für MetaTrader 4
- Well Martin: Der vielseitige EA für MetaTrader 5
- Schnick – Unterstützung durch maschinelles Lernen im Trading mit MetaTrader 5
- 3MaCross EA: Der perfekte Trading-Assistent für MetaTrader 4