Der MQL5 Wizard ermöglicht es dir, maßgeschneiderte Expert Advisors (EAs) zu erstellen, die auf den Standardbibliotheks-Klassen basieren, die mit dem Client-Terminal geliefert werden. Damit kannst du deine Handelsideen schnell überprüfen, indem du einfach deine eigene Handelssignalklasse erstellst. Eine detaillierte Struktur und Beispiele findest du im Artikel MQL5 Wizard: So erstellst du ein Modul für Handelssignale.
Das Grundkonzept ist wie folgt: Die Klasse für Handelssignale wird von CExpertSignal abgeleitet. 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, wobei wir uns auf Umkehrkerzenmuster konzentrieren, die durch Stochastik, CCI, MFI und RSI Oszillatoren bestätigt werden.
Der beste Weg ist, eine separate Klasse, die von CExpertSignal abgeleitet ist, für die Überprüfung von Kerzenmusterbildungen zu erstellen. Um die Handelssignale, die durch Kerzenmuster erzeugt werden, zu bestätigen, reicht es aus, eine Klasse, die von CCandlePattern abgeleitet ist, zu schreiben und die notwendigen Funktionen (zum Beispiel Bestätigungen durch Oszillatoren) hinzuzufügen.
Hier betrachten wir die Signale, die auf dem Umkehrkerzenmuster "Bullish Engulfing/Bearish Engulfing" basieren, das durch den RSI-Indikator bestätigt wird. Das Modul der Handelssignale basiert auf der Klasse CCandlePattern, ein einfaches Beispiel für die Erstellung von Handelssignalen mit Kerzenmustern.
1. "Bullish Engulfing" und "Bearish Engulfing"
1.1. Bullish Engulfing
Das "Bullish Engulfing" Umkehrmuster bildet sich in einem Abwärtstrend, wenn eine kleine schwarze Kerze von einer großen weißen Kerze gefolgt wird, die die Kerze des vorherigen Tages vollständig "verschlingt". Die Schatten (Füße) der kleinen Kerze sind kurz, was es dem Körper der großen Kerze ermöglicht, die gesamte Kerze des vorherigen Tages zu bedecken.

Abbildung 1. Bullish Engulfing Kerzenmuster
Die Erkennung des "Bullish Engulfing" Musters erfolgt durch die Methode CheckPatternBullishEngulfing() der CCandlePattern Klasse:
//+------------------------------------------------------------------+ //| Überprüft die Bildung des "Bullish Engulfing" Kerzenmusters | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternBullishEngulfing() { //--- Bullish Engulfing if((Open(2)>Close(2)) && // vorherige Kerze ist bärisch (Close(1)-Open(1)>AvgBody(1)) && // Körper der bullishen Kerze ist höher als der Durchschnittswert des Körpers (Close(1)>Open(2)) && // Schlusskurs der bullishen Kerze ist höher als der Eröffnungskurs der bärischen Kerze (MidOpenClose(2)<CloseAvg(2)) && // Abwärtstrend (Open(1)<Close(2))) // Eröffnungspreis der bullishen Kerze ist niedriger als der Schlusskurs der bärischen return(true); //--- return(false); }
Die Methode CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_ENGULFING) der CCandlePattern Klasse wird verwendet, um die Bildung des "Bullish Engulfing" Kerzenmusters zu überprüfen.
1.2. Bearish Engulfing
Das "Bearish Engulfing" Umkehrmuster bildet sich in einem Aufwärtstrend, wenn eine kleine weiße Kerze von einer großen schwarzen Kerze gefolgt wird, die die Kerze des vorherigen Tages vollständig "verschlingt". Die Schatten (Füße) der kleinen Kerze sind kurz, was es dem Körper der großen Kerze ermöglicht, die gesamte Kerze des vorherigen Tages zu bedecken.

Abbildung 2. Bearish Engulfing Kerzenmuster
Die Erkennung des "Bearish Engulfing" Musters erfolgt durch die Methode CheckPatternBearishEngulfing() der CCandlePattern Klasse:
//+------------------------------------------------------------------+ //| Überprüft die Bildung des "Bearish Engulfing" Kerzenmusters | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternBearishEngulfing() { //--- Bearish Engulfing if((Open(2)<Close(2)) && // vorherige Kerze ist bullish (Open(1)-Close(1)>AvgBody(1)) && // Körper der Kerze ist höher als der Durchschnittswert des Körpers (Close(1)<Open(2)) && // Schlusskurs der bärischen Kerze ist niedriger als der Eröffnungskurs der bullishen Kerze (MidOpenClose(2)>CloseAvg(2)) && // Aufwärtstrend (Open(1)>Close(2))) // Eröffnungspreis der bärischen Kerze ist höher als der Schlusskurs der bullishen Kerze return(true); //--- return(false); }
Die Methode CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_ENGULFING) der CCandlePattern Klasse wird verwendet, um die Bildung des "Bearish Engulfing" 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 Niveaus liegen (40 für Long-Position und 60 für Short-Position).
Der Schluss einer eröffneten Position hängt von den Werten des RSI ab. Dies kann in zwei Fällen erfolgen:
- Wenn der RSI das gegenüberliegende kritische Niveau (70 für Long-Position und 30 für Short-Position) erreicht hat.
- Wenn das Umkehrsignal nicht bestätigt wird (wenn der RSI folgende Niveaus erreicht: 30 für Long-Position und 70 für Short-Position).

Abbildung 3. Bullish Engulfing Muster, bestätigt durch RSI Indikator
- int CBE_BE_RSI::LongCondition() - überprüft die Bedingungen für die Eröffnung einer Long-Position (gibt 80 zurück) und das Schließen einer Short-Position (gibt 40 zurück);
- int CBE_BE_RSI::ShortCondition() - überprüft die Bedingungen für die Eröffnung einer Short-Position (gibt 80 zurück) und das Schließen einer Long-Position (gibt 40 zurück).
2.1. Long-Position eröffnen/Short-Position schließen
Die Bildung des "Bullish Engulfing" Musters muss durch den RSI-Indikator bestätigt werden: RSI(1)<40 (der Wert des RSI der letzten abgeschlossenen Kerze muss unter 40 liegen).
Die Short-Position muss geschlossen werden, wenn der RSI-Indikator die kritischen Niveaus 70 oder 30 nach oben überschreitet.
//+------------------------------------------------------------------+ //| Überprüft die Bedingungen für den Markteintritt und -austritt | //| 1) Markteintritt (Long-Position eröffnen, Ergebnis=80) | //| 2) Marktaustritt (Short-Position schließen, Ergebnis=40) | //+------------------------------------------------------------------+ int CBE_BE_RSI::LongCondition() { int result=0; //--- idx kann verwendet werden, um den Arbeitsmodus des Expert Advisors zu bestimmen //--- idx=0 - in diesem Fall überprüft EA die Handelsbedingungen bei jedem Tick //--- idx=1 - in diesem Fall überprüft EA die Handelsbedingungen nur bei Nachrichtenbalken int idx =StartIndex(); //--- Überprüfung der Bedingungen für die Eröffnung einer Long-Position //--- Bildung des Bullish Engulfing Musters und RSI<30 if(CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_ENGULFING) && (RSI(1)<40)) result=80; //--- Überprüfung der Bedingungen für das Schließen der Short-Position //--- Signal-Linienüberkreuzung der überkauften/überverkauften Niveaus (nach oben 30, nach oben 70) if(((RSI(1)>30) && (RSI(2)<30)) || ((RSI(1)>70) && (RSI(2)<70))) result=40; //--- Rückgabe des Ergebnisses return(result); }
2.2. Short-Position eröffnen/Long-Position schließen
Die Bildung des "Bearish Engulfing" Musters muss durch den RSI-Indikator bestätigt werden: RSI(1)>60 (der Wert des RSI-Indikators der letzten abgeschlossenen Kerze muss über 60 liegen).
Die Long-Position muss geschlossen werden, wenn der RSI-Indikator die kritischen Niveaus 70 oder 30 nach unten überschreitet.
//+------------------------------------------------------------------+ //| Überprüft die Bedingungen für den Markteintritt und -austritt | //| 1) Markteintritt (Short-Position eröffnen, Ergebnis=80) | //| 2) Marktaustritt (Long-Position schließen, Ergebnis=40) | //+------------------------------------------------------------------+ int CBE_BE_RSI::ShortCondition() { int result=0; //--- idx kann verwendet werden, um den Arbeitsmodus des Expert Advisors zu bestimmen //--- idx=0 - in diesem Fall überprüft EA die Handelsbedingungen bei jedem Tick //--- idx=1 - in diesem Fall überprüft EA die Handelsbedingungen nur bei Nachrichtenbalken int idx =StartIndex(); //--- Überprüfung der Bedingungen für die Eröffnung einer Short-Position //--- Bildung des Bearish Engulfing Musters und RSI>60 if(CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_ENGULFING) && (RSI(1)>60)) result=80; //--- Überprüfung der Bedingungen für das Schließen der Long-Position //--- Signal-Linienüberkreuzung der überkauften/überverkauften Niveaus (nach unten 70, nach unten 30) if(((RSI(1)<70) && (RSI(2)>70)) || ((RSI(1)<30) && (RSI(2)>30))) result=40; //--- Rückgabe des Ergebnisses return(result); }
2.3. Expert Advisor mit MQL5 Wizard erstellen
Die CBE_BE_RSI Klasse ist nicht in den Standardbibliotheksklassen enthalten. Um sie zu verwenden, musst du die Datei acml_rsi.mqh herunterladen (siehe Anhänge) und im client_terminal_data\folder\MQL5\Include\Expert\Signal\MySignals speichern. Dasselbe sollte mit der Datei acandlepatterns.mqh gemacht werden. Du kannst sie im MQL5 Wizard nach dem Neustart des MetaEditor verwenden.
Um einen Expert Advisor zu erstellen, starte den MQL5 Wizard:

Abbildung 4. Expert Advisor mit MQL5 Wizard erstellen
Geben wir den Namen des Expert Advisors an:

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

Abbildung 6. Signal Eigenschaften des Expert Advisors
In unserem Fall verwenden wir nur ein Modul von Handelssignalen.
Hinzufügen des "Signals basierend auf Bullish Engulfing/Bearish Engulfing, bestätigt durch RSI" Moduls von Handelssignalen:

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

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

Abbildung 9. Geldmanagement Eigenschaften des Expert Advisors
Bezüglich der Geldmanagement-Eigenschaften verwenden wir "Handel mit fester Handelsgröße":

Abbildung 10. Geldmanagement Eigenschaften des Expert Advisors
Durch Drücken der Schaltfläche "Fertig" erhalten wir den Code des generierten Expert Advisors, der in Expert_ABE_BE_RSI.mq5 gespeichert wird, im terminal_data_folder\MQL5\Experts\.
Die Standard-Eingabeparameter des generierten Expert Advisors:
//--- Eingaben für 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 zum Ausführen 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 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 zum Ausführen 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 Eingabeparameter Signal_ThresholdOpen/Signal_ThresholdClose erlauben es, die Schwellenwerte für das Öffnen und Schließen von Positionen zu spezifizieren.
Im Code der Methoden LongCondition() und ShortCondition() der Handelssignalklasse haben wir die festen Werte für die Schwellenwerte angegeben:
- Position öffnen: 80;
- Position schließen: 40.
Der vom MQL5 Wizard generierte Expert Advisor öffnet und schließt Positionen mithilfe der "Stimmen" aus den Modulen der Handelssignale. Die Stimme des Hauptmoduls (als Container, das aus allen hinzugefügten Modulen besteht) wird ebenfalls verwendet, aber die Methoden LongCondition() und ShortCondition() geben immer 0 zurück.
Die Ergebnisse der Stimmen des Hauptmoduls werden auch für die "Stimmen"-Durchschnittsbildung verwendet. In unserem Fall haben wir: Hauptmodul + 1 Modul von Handelssignalen, daher müssen wir diesen Fakt bei der Festlegung der Schwellenwerte berücksichtigen. Aufgrund dieses Faktors müssen die Schwellenwerte für die Eröffnung und Schließung auf 40=(0+80)/2 und 20=(0+40)/2 festgelegt werden.
Die Werte der Eingabeparameter Signal_StopLevel und Signal_TakeLevel sind auf 0 gesetzt, was bedeutet, dass das Schließen der Positionen nur erfolgt, wenn die Schließbedingungen erfüllt sind.
2.4. Historische Backtesting-Ergebnisse
Betrachten wir das Backtesting des Expert Advisors auf historischen Daten (EURUSD H1, Testzeitraum: 2010.01.01-2011.03.04, PeriodRSI=11, MA_period=5).
Bei der Erstellung des Expert Advisors verwendeten wir das feste Volumen (Handel mit festem Lot, 0.1). Der Trailing-Stop-Algorithmus wird nicht verwendet (Trailing nicht verwendet).

Abbildung 11. Testergebnisse des Expert Advisors, basierend auf Bullish Engulfing/Bearish Engulfing + RSI
Die besten Eingabeparameter können mit dem Strategietester des MetaTrader 5 Client-Terminals gefunden werden.
Der Code des Expert Advisors, erstellt mit dem MQL5 Wizard, ist im expert_abe_be_rsi.mq5 angehängt.
Kommentar 0