Der MQL5 Wizard ermöglicht es, maßgeschneiderte Expert Advisors (EAs) zu erstellen, die auf den Klassen der Standardbibliothek basieren, die zusammen mit dem Client-Terminal geliefert werden (siehe Erstellung von maßgeschneiderten Expert Advisors im MQL5 Wizard für Details). Damit kannst du deine Handelsideen schnell überprüfen – alles, was du tun musst, ist, deine eigene Handelsignal-Klasse zu erstellen. Die Struktur dieser Klasse und ein Beispiel findest du im Artikel MQL5 Wizard: So erstellst du ein Modul für Handelssignale.
Die grundlegende Idee ist wie folgt: Die Klasse für Handelssignale wird von CExpertSignal abgeleitet. Anschließend musst du die virtuellen Methoden LongCondition() und ShortCondition() mit deinen eigenen Methoden überschreiben.
Es gibt ein Buch "Strategien der besten Trader" (in Russisch), in dem viele Handelsstrategien behandelt werden. Wir konzentrieren uns auf Umkehrkerzenmuster, die durch Stochastik, CCI, MFI und RSI Oszillatoren bestätigt werden.
Es ist am besten, eine separate Klasse abzuleiten, die von CExpertSignal abgeleitet ist, um die Bildung von Kerzenmustern zu überprüfen. Um die Handelssignale, die durch die Kerzenmuster erzeugt werden, zu bestätigen, reicht es aus, eine Klasse abzuleiten, die von CCandlePattern abgeleitet ist, und die erforderlichen Funktionen (z. B. Bestätigung durch Oszillatoren) dort hinzuzufügen.
Hier betrachten wir die Signale, die auf dem Umkehrmuster "Bullish Harami/Bearish Harami" basieren, das durch den RSI-Indikator bestätigt wird. Das Modul der Handelssignale basiert auf der CCandlePattern-Klasse, ein einfaches Beispiel für die Verwendung zur Erstellung von Handelssignalen mit Kerzenmustern.
1. Umkehrkerzenmuster: "Bullish Harami" und "Bearish Harami"
1.1. Bullish Harami
Das Bullish Harami Umkehrmuster bildet sich in einem Abwärtstrend, wenn eine große Kerze von einer kleineren Kerze gefolgt wird, deren Körper innerhalb des vertikalen Bereichs des größeren Körpers liegt. Dieses Muster zeigt an, dass der fallende Trend (Abwärtstrend) möglicherweise umkehrt und signalisiert, dass es ein guter Zeitpunkt ist, eine Long-Position einzugehen. Die zweite Kerze öffnet mit einer Lücke nach oben.
Je kleiner die zweite (weiße) Kerze, desto wahrscheinlicher ist die Umkehr.

Abb. 1. Bullish Harami Kerzenmuster
Die Erkennung des "Bullish Harami"-Musters erfolgt in der Methode CheckPatternBullishHarami() der CCandlePattern-Klasse:
//+------------------------------------------------------------------+ //| Überprüft die Bildung des "Bullish Harami" Kerzenmusters | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternBullishHarami() { //--- Bullish Harami if((Close(1)>Open(1)) && // die letzte abgeschlossene Kerze ist bullish (weißer Tag) ((Open(2)-Close(2)>AvgBody(1)) && // die vorherige Kerze ist bearish, ihr Körper ist größer als der Durchschnitt (lange schwarze) ((Close(1)<Open(2)) && // Schlusskurs der bullishen Kerze liegt unter dem Eröffnungskurs der bearishen Kerze (Open(1)>Close(2))) && // Eröffnungskurs der bullishen Kerze liegt über dem Schlusskurs der bearishen Kerze (MidPoint(2)<CloseAvg(2))) // Abwärtstrend return(true); //--- return(false); }
Die CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_HARAMI)-Methode der CCandlePattern-Klasse wird verwendet, um die Bildung des "Bullish Harami"-Kerzenmusters zu überprüfen.
1.2. Bearish Harami
Das Bearish Harami Umkehrmuster bildet sich in einem Aufwärtstrend, wenn eine große Kerze von einer kleineren Kerze gefolgt wird, deren Körper innerhalb des vertikalen Bereichs des größeren Körpers liegt. Dieses Muster zeigt an, dass der steigende Trend (Aufwärtstrend) möglicherweise umkehrt, und signalisiert, dass es ein guter Zeitpunkt ist, eine Short-Position einzugehen. Die zweite Kerze öffnet mit einer Lücke nach unten.
Je kleiner die zweite (schwarze) Kerze, desto wahrscheinlicher ist die Umkehr.

Abb. 2. Bearish Harami Kerzenmuster
Die Erkennung des "Bearish Harami"-Musters erfolgt in der Methode CheckPatternBearishHarami() der CCandlePattern-Klasse:
//+------------------------------------------------------------------+ //| Überprüft die Bildung des "Bearish Harami" Kerzenmusters | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternBearishHarami() { //--- Bearish Harami if((Close(1)<Open(1)) && // letzte abgeschlossene Kerze ist bearish (schwarzer Tag) ((Close(2)-Open(2)>AvgBody(1)) && // die vorherige Kerze ist bullish, ihr Körper ist größer als der Durchschnitt (lange weiße) ((Close(1)>Open(2)) && // Schlusskurs der bearishen Kerze liegt über dem Eröffnungskurs der bullishen Kerze (Open(1)<Close(2))) && // Eröffnungskurs der bearishen Kerze liegt unter dem Schlusskurs der bullishen Kerze (MidPoint(2)>CloseAvg(2))) // Aufwärtstrend return(true); //--- return(false); }
Die CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_HARAMI)-Methode der CCandlePattern-Klasse wird verwendet, um die Bildung des "Bearish Harami"-Kerzenmusters zu überprüfen.
2. Handelssignale, bestätigt durch den RSI-Indikator
Die Handelssignale zum Öffnen einer Long- oder Short-Position müssen durch den RSI-Indikator bestätigt werden. Der Wert des RSI muss unter/über den kritischen Levels (40 für Long-Position und 60 für Short-Position) liegen.
Der Schluss einer geöffneten Position hängt von den Werten des RSI ab. Dies kann in 2 Fällen erfolgen:
- Wenn der RSI das gegenüberliegende kritische Level erreicht hat (70 für Long-Position und 30 für Short-Position).
- Wenn das Umkehrsignal nicht bestätigt wird (wenn der RSI die folgenden Levels erreicht: 30 für Long-Position und 70 für Short-Position).

Abb. 3. Bullish Harami Muster, bestätigt durch den RSI-Indikator
- int CBH_BH_RSI::LongCondition() - überprüft die Bedingungen zum Öffnen einer Long-Position (gibt 80 zurück) und das Schließen der Short-Position (gibt 40 zurück);
- int CBH_BH_RSI::ShortCondition() - überprüft die Bedingungen zum Öffnen einer Short-Position (gibt 80 zurück) und das Schließen der Long-Position (gibt 40 zurück).
2.1. Long-Position öffnen/Short-Position schließen
Die Bildung des "Bullish Harami"-Musters muss durch den RSI-Indikator bestätigt werden: RSI(1)<40 (der Wert des RSI der letzten abgeschlossenen Kerze muss weniger als 40 sein).
Die Short-Position muss geschlossen werden, wenn der RSI-Indikator die kritischen Levels 70 oder 30 nach oben überschreitet.
//+------------------------------------------------------------------+ //| Überprüft die Bedingungen für den Markteintritt und -ausstieg | //| 1) Markteintritt (Long-Position eröffnen, Ergebnis=80) | //| 2) Marktausgang (Short-Position schließen, Ergebnis=40) | //+------------------------------------------------------------------+ int CBH_BH_RSI::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 die Handelsbedingungen bei jedem Tick //--- idx=1 - in diesem Fall überprüft der EA die Handelsbedingungen nur bei News-Bars int idx =StartIndex(); //--- Überprüfung der Bedingungen zum Öffnen einer Long-Position //--- Bildung des Bullish Harami-Musters und RSI<30 if(CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_HARAMI) && (RSI(1)<40)) result=80; //--- Überprüfung der Bedingungen zum Schließen der Short-Position //--- Signal-Linien-Crossover der überkauften/verkauften Levels (nach oben 30, nach oben 70) if(((RSI(1)>30) && (RSI(2)<30)) || ((RSI(1)>70) && (RSI(2)<70))) result=40; //--- Ergebnis zurückgeben return(result); }
2.2. Short-Position öffnen/Long-Position schließen
Die Bildung des "Bearish Harami"-Musters muss durch den RSI-Indikator bestätigt werden: RSI(1)>60 (der Wert des RSI der letzten abgeschlossenen Kerze muss größer als 60 sein).
Die Long-Position muss geschlossen werden, wenn der RSI-Indikator die kritischen Levels 70 oder 30 nach unten überschreitet.
//+------------------------------------------------------------------+ //| Überprüft die Bedingungen für den Markteintritt und -ausstieg | //| 1) Markteintritt (Short-Position eröffnen, Ergebnis=80) | //| 2) Marktausgang (Long-Position schließen, Ergebnis=40) | //+------------------------------------------------------------------+ int CBH_BH_RSI::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 die Handelsbedingungen bei jedem Tick //--- idx=1 - in diesem Fall überprüft der EA die Handelsbedingungen nur bei News-Bars int idx =StartIndex(); //--- Überprüfung der Bedingungen zum Öffnen einer Short-Position //--- Bildung des Bearish Harami-Musters und RSI>60 if(CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_HARAMI) && (RSI(1)>60)) result=80; //--- Überprüfung der Bedingungen zum Schließen der Long-Position //--- Signal-Linien-Crossover der überkauften/verkauften Levels (nach unten 70, nach unten 30) if(((RSI(1)<70) && (RSI(2)>70)) || ((RSI(1)<30) && (RSI(2)>30))) result=40; //--- Ergebnis zurückgeben return(result); }
2.3. Erstellung eines Expert Advisors mit dem MQL5 Wizard
Die CBH_BH_RSI-Klasse ist nicht in den Standardbibliotheksklassen enthalten. Um sie zu verwenden, ist es notwendig, die Datei acml_rsi.mqh herunterzuladen (siehe Anhänge) und sie im client_terminal_data\Ordner\MQL5\Include\Expert\Signal\MySignals zu speichern. Dasselbe sollte mit der Datei acandlepatterns.mqh gemacht werden. Du kannst sie im MQL5 Wizard nach dem Neustart des MetaEditors verwenden.
Um einen Expert Advisor zu erstellen, starte den MQL5 Wizard:

Abb. 4. Erstellung eines Expert Advisors mit dem MQL5 Wizard
Lass uns den Namen des Expert Advisors angeben:

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

Abb. 6. Signal-Eigenschaften des Expert Advisors
In unserem Fall verwenden wir nur ein Modul für Handelssignale.
Hinzufügen des "Signale basierend auf Bullish Harami/Bearish Harami, bestätigt durch RSI"-Moduls der Handelssignale:

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 verwenden "Trailing Stop nicht verwendet":

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

Abb. 10. Geldmanagement-Eigenschaften des Expert Advisors
Durch Drücken der Schaltfläche "Fertig" erhalten wir den Code des generierten Expert Advisors, der in Expert_ABH_BH_RSI.mq5 gespeichert wird, in terminal_data_folder\MQL5\Experts\.
Die Standard-Eingabeparameter des generierten Expert Advisors:
//--- Eingaben für das Hauptsignal input int Signal_ThresholdOpen =10; // Signal-Schwellenwert zum Öffnen [0...100] input int Signal_ThresholdClose =10; // Signal-Schwellenwert zum Schließen [0...100] input double Signal_PriceLevel =0.0; // Preisniveau zur Ausführung eines Geschäfts 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; // Signal-Schwellenwert zum Öffnen [0...100] input int Signal_ThresholdClose =20 // Signal-Schwellenwert zum Schließen [0...100] input double Signal_PriceLevel =0.0 // Preisniveau zur Ausführung eines Geschäfts input double Signal_StopLevel =0.0 // Stop-Loss-Niveau (in Punkten) input double Signal_TakeLevel =0.0 // Take-Profit-Niveau (in Punkten)
Die Signal_ThresholdOpen/Signal_ThresholdClose Eingabeparameter ermöglichen es, Schwellenwerte für das Öffnen und Schließen von Positionen anzugeben.
Im Code der LongCondition() und ShortCondition()-Methoden der Handelssignalklasse haben wir die festen Werte der Schwellenwerte angegeben:
- Position öffnen: 80;
- Position schließen: 40.
Der von MQL5 Wizard generierte Expert Advisor öffnet und schließt Positionen mit den "Stimmen" der Handelssignalmodule. Die Stimme des Hauptmoduls (als Container, das alle hinzugefügten Module enthält) wird ebenfalls verwendet, aber seine LongCondition() und ShortCondition() Methoden geben immer 0 zurück.
Die Stimmresultate des Hauptmoduls werden auch in der "Stimmen"-Durchschnittsbildung verwendet. In unserem Fall haben wir: Hauptmodul + 1 Modul für Handelssignale, daher müssen wir diesen Fakt bei der Festlegung der Schwellenwerte berücksichtigen. Aufgrund dieser Tatsache müssen die ThresholdOpen und ThresholdClose auf 40=(0+80)/2 und 20=(0+40)/2 festgelegt werden.
