De MQL5 Wizard stelt je in staat om kant-en-klare Systemen te maken op basis van de Standaard bibliotheek klassen die samen met de client terminal worden geleverd (zie Kant-en-klare Systemen maken in MQL5 Wizard voor details). Hiermee kun je je handelsideeën snel testen; alles wat je nodig hebt, is het creëren van je eigen handelsignalenklasse. De structuur van deze klasse en een voorbeeld zijn te vinden in het artikel MQL5 Wizard: Hoe maak je een Module van Handelsignalen.
Het basisidee is als volgt: de handelsignalenklasse is afgeleid van CExpertSignal. Vervolgens is het nodig om de LongCondition() en ShortCondition() virtuele methoden te overschrijven met je eigen methoden.
Er is een boek "Strategieën van de beste traders" (in het Russisch), waarin veel handelsstrategieën worden besproken. In dit artikel focussen we ons op omkeer candlestick patronen, bevestigd door de Stochastic, CCI, MFI en RSI oscillatoren.
De beste manier is om een aparte klasse te creëren, afgeleid van CExpertSignal voor het controleren van de vorming van candlestick patronen. Voor de bevestiging van handelsignalen, gegenereerd door candlestick patronen, is het voldoende om de klasse, afgeleid van CCandlePattern, te schrijven en de benodigde functies (bijvoorbeeld bevestiging door oscillatoren) daar toe te voegen.
Hier bekijken we de signalen, gebaseerd op de "Morning Star/Evening Star" (Morning Doji Star/Evening Doji Star) omkeer candlestick patronen, bevestigd door de RSI indicator. De module van handelsignalen is gebaseerd op de CCandlePattern klasse, dit is een eenvoudig voorbeeld van het gebruik voor het creëren van handelsignalen met candlestick patronen.
1. "Morning Star" en "Evening Star" omkeer candlestick patronen
1.1. Morning Star
Dit patroon geeft de omkering van een downtrend aan en bestaat uit drie candles (Fig. 1). Na een lange zwarte candle volgt er een candle (de kleur is niet belangrijk) met een klein lichaam, dat buiten het lichaam van de zwarte candle ligt. Het kleine lichaam van een candle betekent dat de krachten van de bulls en bears gelijk zijn, en de markt klaar is om de trend te veranderen.
De derde candle van het patroon is een bullish candle, waarvan het lichaam niet overlapt met het lichaam van de tweede candle, en de sluitprijs ligt binnen het lichaam van de eerste (bearish) candle. De resulterende candle van het model is ook weergegeven in Figuur 1.
Als de tweede candle een doji-achtige candle is, wordt het model "Morning Doji Star" genoemd.

Fig. 1. "Morning Star" en "Morning Doji Star" candlestick patronen
De identificatie van het "Morning Star" patroon wordt uitgevoerd in de CheckPatternMorningStar() en CheckPatternMorningDoji() methoden van de CCandlePattern klasse:
//+------------------------------------------------------------------+ //| Controleert de vorming van het "Morning Star" patroon | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternMorningStar() { //--- Morning Star if((Open(3)-Close(3)>AvgBody(1)) && // bearish candle, zijn lichaam groter dan het gemiddelde candle lichaam (MathAbs(Close(2)-Open(2)<AvgBody(1)*0.5) && // de tweede candle heeft een klein lichaam (lager dan de helft van het gemiddelde lichaam) (Close(2)<Close(3)) && // sluit van de tweede candle is lager dan sluit van de eerste (Open(2)<Open(3)) && // open van de tweede candle is lager dan open van de eerste (Close(1)>MidOpenClose(3))) // sluit van de laatste voltooide candle is hoger dan het midden van de eerste return(true); //--- return(false); } //+------------------------------------------------------------------+ //| Controleert de vorming van het "Morning Doji Star" patroon | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternMorningDoji() { //--- Morning Doji Star if((Open(3)-Close(3)>AvgBody(1)) && // bearish candle met lichaam groter dan het gemiddelde candle lichaam (AvgBody(2)<AvgBody(1)*0.1) && // de tweede candle heeft een zeer klein lichaam (doji) (Close(2)<Close(3)) && // sluit van de tweede candle is lager dan sluit van de eerste (Open(2)<Open(3)) && // open van de tweede candle is lager dan open van de eerste (Open(1)>Close(2)) && // omhoog gap bij de laatste voltooide candle (Close(1)>Close(2))) // sluit van de laatste voltooide candle is hoger dan sluit van de tweede return(true); //--- return(false); }
De CheckCandlestickPattern(CANDLE_PATTERN_MORNING_STAR) en CheckCandlestickPattern(CANDLE_PATTERN_MORNING_DOJI) methoden van de CCandlePattern klasse worden gebruikt om de vorming van "Morning Star" en "Morning Doji Star" candlestick patronen te controleren.
1.2. Evening Star
Dit patroon geeft de omkering van de uptrend aan en bestaat uit drie candles (Fig. 2). Na een lange witte candle volgt er een candle (de kleur is niet belangrijk) met een klein lichaam, dat buiten het lichaam van de witte candle ligt. Het kleine lichaam van een candle betekent dat de krachten van de bulls en bears gelijk zijn, en de markt klaar is om de trend te veranderen.
De derde candle van het patroon is een bearish candle, waarvan het lichaam niet overlapt met het lichaam van de tweede candle, en de sluitprijs ligt binnen het lichaam van de eerste (bullish) candle. De resulterende candle van het model is ook weergegeven in Figuur 2.
Als de tweede candle een doji-achtige candle is, wordt het model "Evening Doji Star" genoemd.

Fig. 2. "Evening Star" en "Evening Doji Star" candlestick patronen
Hier zijn de methoden voor de identificatie van "Evening Star" en "Evening Doji Star" patronen:
//+------------------------------------------------------------------+ //| Controleert de vorming van het "Evening Star" patroon | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternEveningStar() { //--- Evening Star if((Close(3)-Open(3)>AvgBody(1)) && // bullish candle met lichaam hoger dan gemiddeld lichaam (MathAbs(Close(2)-Open(2)<AvgBody(1)*0.5) && // de tweede candle heeft een klein lichaam (minder dan de helft van het gemiddelde) (Close(2)>Close(3)) && // sluit van de tweede candle is hoger dan sluit van de eerste (Open(2)>Open(3)) && // open van de tweede candle is hoger dan open van de eerste (Close(1)<MidOpenClose(3))) // sluit van de laatste voltooide candle is lager dan het midden van de eerste return(true); //--- return(false); } //+------------------------------------------------------------------+ //| Controleert de vorming van het "Evening Doji Star" patroon | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternEveningDoji() { //--- Evening Doji Star if((Close(3)-Open(3)>AvgBody(1)) && // bullish candle met lichaam hoger dan gemiddeld (AvgBody(2)<AvgBody(1)*0.1) && // de tweede candle heeft een zeer klein lichaam (doji) (Close(2)>Close(3)) && // sluit van de tweede candle is hoger dan sluit van de eerste (Open(2)>Open(3)) && // open van de tweede candle is hoger dan open van de eerste (Open(1)<Close(2)) && // down gap bij de laatste voltooide candle (Close(1)<Close(2))) // sluit van de laatste voltooide candle is lager dan sluit van de tweede return(true); //--- return(false); }
De CheckCandlestickPattern(CANDLE_PATTERN_EVENING_STAR) en CheckCandlestickPattern(CANDLE_PATTERN_EVENING_DOJI) methoden van de CCandlePattern klasse worden gebruikt om de vorming van "Evening Star" en "Evening Doji Star" candlestick patronen te controleren.
2. Handelsignalen, bevestigd door de RSI indicator
De handelsignalen om een long- of shortpositie te openen moeten worden bevestigd door de RSI indicator. De waarde van de RSI moet lager/hoger zijn dan kritische niveaus (40 voor longpositie en 60 voor shortpositie).
Het sluiten van een geopende positie hangt af van de waarden van de RSI. Dit kan op 2 manieren gebeuren:
- als de RSI het tegenovergestelde kritische niveau heeft bereikt (70 voor longpositie en 30 voor shortpositie)
- als het omgekeerde signaal niet bevestigd is (wanneer de RSI de volgende niveaus bereikt: 30 voor longpositie en 70 voor shortpositie)

Fig. 3. "Morning Star" patroon, bevestigd door RSI indicator
- int CMS_ES_RSI::LongCondition() - controleert de voorwaarden om een longpositie te openen (geeft 80 terug) en sluit van de shortpositie (geeft 40 terug);
- int CMS_ES_RSI::ShortCondition() - controleert de voorwaarden om een shortpositie te openen (geeft 80 terug) en sluit van de longpositie (geeft 40 terug).
2.1. Open longpositie/Sluit shortpositie
De vorming van het "Morning Star" patroon moet worden bevestigd door de RSI indicator: RSI(1)<40 (de waarde van de RSI van de laatste voltooide bar moet minder zijn dan 40).
De shortpositie moet worden gesloten als de RSI indicator de kritische niveaus 70 of 30 naar boven heeft gekruist.
//+------------------------------------------------------------------+ //| Controleert voorwaarden voor toegang en uitgang uit de markt | //| 1) Markttoegang (open longpositie, resultaat=80) | //| 2) Marktuitgang (sluit shortpositie, resultaat=40) | //+------------------------------------------------------------------+ int CMS_ES_RSI::LongCondition() { int result=0; //--- idx kan worden gebruikt om de werkmodus van de Expert Advisor te bepalen //--- idx=0 - in dit geval controleert de EA handelsvoorwaarden bij elke tick //--- idx=1 - in dit geval controleert de EA handelsvoorwaarden alleen bij nieuws bars int idx =StartIndex(); //--- controle van voorwaarden om een longpositie te openen //--- vorming van Morning Star patroon en RSI<30 if(CheckCandlestickPattern(CANDLE_PATTERN_MORNING_STAR) && (RSI(1)<40)) result=80; //--- controle van voorwaarden om de shortpositie te sluiten //--- signaallijn crossover van overgekochte/ondergekochte niveaus (omhoog 30, omhoog 70) if(((RSI(1)>30) && (RSI(2)<30)) || ((RSI(1)>70) && (RSI(2)<70))) result=40; //--- resultaat retourneren return(result); }
2.2. Open shortpositie/Sluit longpositie
De vorming van het "Evening Star" patroon moet worden bevestigd door de RSI indicator: RSI(1)>60 (de waarde van de RSI indicator van de laatste voltooide bar moet groter zijn dan 60).
De longpositie moet worden gesloten als de RSI indicator de kritische niveaus 70 of 30 naar beneden heeft gekruist.
//+------------------------------------------------------------------+ //| Controleert voorwaarden voor toegang en uitgang uit de markt | //| 1) Markttoegang (open shortpositie, resultaat=80) | //| 2) Marktuitgang (sluit longpositie, resultaat=40) | //+------------------------------------------------------------------+ int CMS_ES_RSI::ShortCondition() { int result=0; //--- idx kan worden gebruikt om de werkmodus van de Expert Advisor te bepalen //--- idx=0 - in dit geval controleert de EA handelsvoorwaarden bij elke tick //--- idx=1 - in dit geval controleert de EA handelsvoorwaarden alleen bij nieuws bars int idx =StartIndex(); //--- controle van voorwaarden om een shortpositie te openen //--- vorming van Evening Star patroon en RSI>60 if(CheckCandlestickPattern(CANDLE_PATTERN_EVENING_STAR) && (RSI(1)>60)) result=80; //--- controle van voorwaarden om de longpositie te sluiten //--- signaallijn crossover van overgekochte/ondergekochte niveaus (omlaag 70, omlaag 30) if(((RSI(1)<70) && (RSI(2)>70)) || ((RSI(1)<30) && (RSI(2)>30))) result=40; //--- resultaat retourneren return(result); }
2.3. Het maken van een Expert Advisor met behulp van MQL5 Wizard
De CMS_ES_RSI klasse is niet opgenomen in de Standaard Bibliotheek klassen. Om deze te gebruiken, is het nodig om het acms_es_rsi.mqh bestand te downloaden (zie bijlagen) en dit op te slaan in de client_terminal_data_folder\MQL5\Include\Expert\Signal\MySignals. Hetzelfde moet gebeuren met het candlepatterns.mqh bestand. Je kunt het gebruiken in MQL5 Wizard na het opnieuw opstarten van de MetaEditor.
Om een Expert Advisor te creëren, start je de MQL5 Wizard:

Fig. 4. Het maken van Expert Advisor met behulp van MQL5 Wizard
Laten we de naam van de Expert Advisor specificeren:

Fig. 5. Algemene eigenschappen van de Expert Advisor
Daarna moeten we de modules van handelsignalen selecteren die worden gebruikt.

Fig. 6. Signaal eigenschappen van de Expert Advisor
In ons geval gebruiken we slechts één module van handelsignalen.
Toevoegen van de "Signalen gebaseerd op Morning/Evening Stars bevestigd door RSI" module van handelsignalen:

Fig. 7. Signaal eigenschappen van de Expert Advisor
Module van handelsignalen toegevoegd:

Fig. 8. Signaal eigenschappen van de Expert Advisor
Je kunt elke trailing eigenschappen selecteren, maar we zullen "Trailing Stop niet gebruikt" gebruiken:

Fig. 9. Trailing eigenschappen van de Expert Advisor
Wat betreft de geldbeheer eigenschappen, zullen we "Handelen met vaste handelsvolume" gebruiken:

Fig. 10. Geldbeheer eigenschappen van de Expert Advisor
Door op de knop "Voltooien" te drukken, krijgen we de code van de gegenereerde Expert Advisor, gelegen in Expert_AMS_ES_RSI.mq5. Dit zal worden opgeslagen in de terminal_data_folder\MQL5\Experts\.
De standaard invoerparameters van de gegenereerde Expert Advisor:
//--- invoer voor hoofd signaal input int Signal_ThresholdOpen =10; // Signaal drempelwaarde om te openen [0...100] input int Signal_ThresholdClose =10 // Signaal drempelwaarde om te sluiten [0...100] input double Signal_PriceLevel =0.0 // Prijsniveau om een deal uit te voeren input double Signal_StopLevel =50.0 // Stop Loss niveau (in punten) input double Signal_TakeLevel =50.0 // Take Profit niveau (in punten)
moet worden vervangen door:
//--- invoer voor hoofd signaal input int Signal_ThresholdOpen =40; // Signaal drempelwaarde om te openen [0...100] input int Signal_ThresholdClose =20 // Signaal drempelwaarde om te sluiten [0...100] input double Signal_PriceLevel =0.0 // Prijsniveau om een deal uit te voeren input double Signal_StopLevel =0.0 // Stop Loss niveau (in punten) input double Signal_TakeLevel =0.0 // Take Profit niveau (in punten)
De Signal_ThresholdOpen/Signal_ThresholdClose invoerparameters stellen je in staat om drempelniveaus voor het openen en sluiten van posities op te geven.
In de code van de LongCondition() en ShortCondition() methoden van de handelsignalenklasse hebben we de vaste waarden van de drempel aangegeven:
- Open positie: 80;
- Sluit positie: 40.
De Expert Advisor, gegenereerd door MQL5 Wizard, opent en sluit posities met behulp van de "stemmen" van de modules van handelsignalen. De stem van de hoofdmodule (als container, deze bestaat uit alle toegevoegde modules) wordt ook gebruikt, maar zijn LongCondition() en ShortCondition() methoden geven altijd 0 terug.
De stemresultaten van de hoofdmodule worden ook gebruikt bij het "stemmen" gemiddelde. In ons geval hebben we: hoofdmodule + 1 module van handelsignalen, dus we moeten rekening houden met dit feit bij het instellen van de drempelwaarden. Vanwege dit feit moeten de ThresholdOpen en ThresholdClose worden ingesteld als 40=(0+80)/2 en 20=(0+40)/2.
De waarden van de Signal_StopLevel en Signal_TakeLevel invoerparameters zijn ingesteld op 0, wat betekent dat het sluiten van de posities alleen zal worden gedaan wanneer de sluitvoorwaarden waar zijn.
2.4. Geschiedenis backtesting resultaten
Laten we de backtesting van de Expert Advisor op historische gegevens bekijken (EURUSD H1, testperiode: 2010.01.01-2011.03.04, PeriodK=47, PeriodD=9, PeriodSlow=13, MA_period=5).
Bij het creëren van de Expert Advisor hebben we het vaste volume gebruikt (Handelen met Vaste Lot, 0.1), de Trailing Stop algoritme is niet gebruikt (Trailing niet gebruikt).

Fig. 11. Testresultaten van de Expert Advisor, gebaseerd op Morning/Evening Stars + RSI
De beste set invoerparameters kan worden gevonden met behulp van de Strategy Tester van de MetaTrader 5 client terminal.
Het bestuderen van parameters wordt sterk vereenvoudigd met de 3D-visualisatiemodus van Strategy Tester, toegevoegd vanaf build 419 (Fig. 12):

Fig. 12. Balans als functie van PeriodRSI en MA_period invoerparameters
De code van de Expert Advisor, gemaakt door MQL5 Wizard, is bijgevoegd in expert_ms_es_rsi.mq5.
Gerelateerde berichten
- MQL5 Wizard: Creëer Handelsstrategieën met Bullish en Bearish Engulfing Candlestick Patronen en Stochastic
- MQL5 Wizard: Handelsignalen Geïnspireerd Door Morning/Evening Stars + MFI voor MetaTrader 5
- Efficiënt Trendvolgend Handelsysteem met Exp_X2MA_JFatl voor MetaTrader 5
- Close Cross MA: Efficiënt Orders Sluiten met MetaTrader 4
- Efficiënt Handelen met het ColorSchaffJCCXTrendCycle Systeem voor MetaTrader 5