De MQL5 Wizard stelt je in staat om kant-en-klare Expert Advisors (EA's) te creëren op basis van de Standaard bibliotheek klassen die geleverd worden met de client terminal (zie Kant-en-klare Expert Advisors maken in MQL5 Wizard voor meer details). Hiermee kun je snel je handelsideeën controleren; alles wat je nodig hebt is je eigen handelsignalenklasse aan te maken. De structuur van deze klasse en een voorbeeld vind je in het artikel MQL5 Wizard: Hoe maak je een module voor handelsignalen.
Het algemene idee is als volgt: de klasse van handelsignalen is afgeleid van CExpertSignal. Vervolgens is het noodzakelijk 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. Wij zullen ons richten op omkerende candlestick patronen, bevestigd door Stochastic, CCI, MFI en RSI oscillatoren.
De beste manier is om een aparte klasse te maken, 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 nodige functies (bijvoorbeeld bevestiging door oscillatoren) daar toe te voegen.
Hier gaan we de signalen bespreken die zijn gebaseerd op het "Hammer/Hanging Man" omkerende candlestick patroon, bevestigd door de CCI indicator. De module van handelsignalen is gebaseerd op de CCandlePattern klasse; het is een eenvoudig voorbeeld van hoe je handelsignalen kunt creëren met candlestick patronen.
1. "Hammer" en "Hanging Man" omkerende candlestick patronen
1.1. Hammer
De "Hammer" is een candlestick met een klein lichaam en een lange onderste schaduw, die zich vormt na een dalende prijsbeweging. Het "Hammer" patroon geeft het einde van een bearish trend aan.
De kleur van een candlestick lichaam is niet belangrijk, maar een bullish hammer geeft een hoger bullish potentieel aan. Het lichaam van het "Hammer" patroon wordt vaak gevormd nabij het minimum van de vorige candle. De langere onderste schaduw en kortere bovenste schaduw leiden tot een hoger potentieel van het omkerende patroon.

Fig. 1. Hammer candlestick patroon
De herkenning van het "Hammer" patroon is geïmplementeerd in de CheckPatternHammer() methode van de CCandlePattern klasse:
//+------------------------------------------------------------------+ //| Controleert de vorming van "Hammer" candlestick patroon | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternHammer() { //--- Hammer if((MidPoint(1)<CloseAvg(2)) && // neerwaartse trend (MathMin(Open(1),Close(1))>(High(1)-(High(1)-Low(1))/3.0)) && // lichaam in bovenste 1/3 (Close(1)<Close(2)) && (Open(1)<Open(2))) // lichaam gap return(true); //--- return(false); }
De CheckCandlestickPattern(CANDLE_PATTERN_HAMMER) methode van de CCandlePattern klasse wordt gebruikt om de vorming van het "Hammer" candlestick patroon te controleren.
1.2. Hanging Man
De "Hanging Man" is een candlestick met een klein lichaam en een lange onderste schaduw, gevormd na een stijgende prijsbeweging. Het "Hanging Man" patroon geeft het einde van een bullish trend aan.
De kleur van een candlestick lichaam is niet belangrijk, maar een bearish candle geeft een hoger bearish potentieel aan. Het lichaam van het "Hanging Man" patroon wordt vaak gevormd nabij het maximum van de vorige candle. De langere onderste schaduw en kortere bovenste schaduw leiden tot een hoger potentieel van het omkerende patroon.

Fig. 2. Hanging Man candlestick patroon
De herkenning van het "Hanging Man" patroon is geïmplementeerd in de CheckPatternHangingMan() methode van de CCandlePattern klasse:
//+------------------------------------------------------------------+ //| Controleert de vorming van "Hanging Man" candlestick patroon | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternHangingMan() { //--- Hanging man if((MidPoint(1)>CloseAvg(2)) && // opwaartse trend (MathMin(Open(1),Close(1)>(High(1)-(High(1)-Low(1))/3.0)) && // lichaam in bovenste 1/3 (Close(1)>Close(2)) && (Open(1)>Open(2)))) // lichaam gap return(true); //--- return(false); }
De CheckCandlestickPattern(CANDLE_PATTERN_HANGING_MAN) methode van de CCandlePattern klasse wordt gebruikt om de vorming van het "Hanging Man" candlestick patroon te controleren.
2. Handelsignalen, bevestigd door de RSI indicator
De handelsignalen voor het openen van lange of korte posities moeten bevestigd worden door de RSI indicator. De waarde van de RSI moet lager/hoger zijn dan kritieke niveaus (40 voor lange positie en 60 voor korte positie).
Het sluiten van geopende posities hangt af van de waarden van de RSI. Dit kan op 2 manieren gebeuren:
- als de RSI het tegenovergestelde kritieke niveau heeft bereikt (70 voor lange positie en 30 voor korte positie)
- als het omgekeerde signaal niet wordt bevestigd (wanneer de RSI de volgende niveaus bereikt: 30 voor lange positie en 70 voor korte positie)

Fig. 3. Harami patroon, bevestigd door RSI indicator
- int CH_HM_RSI::LongCondition() - controleert de voorwaarden voor het openen van een lange positie (geeft 80 terug) en sluiting van de korte positie (geeft 40 terug);
- int CH_HM_RSI::ShortCondition() - controleert de voorwaarden voor het openen van een korte positie (geeft 80 terug) en sluiting van de lange positie (geeft 40 terug).
2.1. Open lange positie/sluit korte positie
De vorming van het "Hammer" patroon moet bevestigd worden door de RSI indicator: RSI(1)<40 (de waarde van de RSI van de laatste voltooide bar moet minder zijn dan 40).
De korte positie moet worden gesloten als de RSI indicator omhoog de kritieke niveaus 70 of 30 heeft gekruist.
//+------------------------------------------------------------------+ //| Controleert voorwaarden voor entree en exit uit de markt | //| 1) Markt entree (open lange positie, resultaat=80) | //| 2) Markt exit (sluit korte positie, resultaat=40) | //+------------------------------------------------------------------+ int CH_HM_RSI::LongCondition() { int result=0; //--- idx kan gebruikt worden 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 lange positie te openen //--- vorming van Hammer patroon en RSI<30 if(CheckCandlestickPattern(CANDLE_PATTERN_HAMMER) && (RSI(1)<40)) result=80; //--- controle van voorwaarden om korte positie te sluiten //--- signaallijn crossover van overgekocht/oververkocht niveaus (opwaarts 30, opwaarts 70) if(((RSI(1)>30) && (RSI(2)<30)) || ((RSI(1)>70) && (RSI(2)<70))) result=40; //--- resultaat teruggeven return(result); }
2.2. Open korte positie/sluit lange positie
De vorming van het "Hanging Man" patroon moet bevestigd worden door de RSI indicator: RSI(1)>60 (de waarde van de RSI indicator van de laatste voltooide bar moet groter zijn dan 60).
De lange positie moet worden gesloten als de RSI indicator omlaag de kritieke niveaus 70 of 30 heeft gekruist.
//+------------------------------------------------------------------+ //| Controleert voorwaarden voor entree en exit uit de markt | //| 1) Markt entree (open korte positie, resultaat=80) | //| 2) Markt exit (sluit lange positie, resultaat=40) | //+------------------------------------------------------------------+ int CH_HM_RSI::ShortCondition() { int result=0; //--- idx kan gebruikt worden 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 korte positie te openen //--- vorming van Hanging Man patroon en RSI>60 if(CheckCandlestickPattern(CANDLE_PATTERN_HANGING_MAN) && (RSI(1)>60)) result=80; //--- controle van voorwaarden om lange positie te sluiten //--- signaallijn crossover van overgekocht/oververkocht niveaus (omlaag 70, omlaag 30) if(((RSI(1)<70) && (RSI(2)>70)) || ((RSI(1)<30) && (RSI(2)>30))) result=40; //--- resultaat teruggeven return(result); }
2.3. Een Expert Advisor maken met behulp van MQL5 Wizard
De CH_HM_RSI klasse is niet opgenomen in de Standaard Bibliotheek klassen. Om deze te gebruiken, is het noodzakelijk om het ach_hm_rsi.mqh bestand te downloaden (zie bijlagen) en dit op te slaan in de client_terminal_dataolder\MQL5\Include\Expert\Signal\MySignals. Hetzelfde moet gedaan worden met het candlepatterns.mqh bestand. Je kunt dit gebruiken in de 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 een Expert Advisor met behulp van MQL5 Wizard
Laten we de naam van de Expert Advisor opgeven:

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

Fig. 6. Signaal eigenschappen van de Expert Advisor
In ons geval gebruiken we slechts één module van handelsignalen.
De module "Signalen gebaseerd op Hammer/Hanging Man bevestigd door RSI" van handelsignalen toevoegen:

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

Fig. 8. Signaal eigenschappen van de Expert Advisor
Je kunt verschillende trailing eigenschappen selecteren, maar wij gaan "Trailing Stop niet gebruikt" gebruiken:

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

Fig. 10. Geldbeheer eigenschappen van de Expert Advisor
Door op de "Finish" knop te drukken, krijgen we de code van de gegenereerde Expert Advisor, die te vinden is in Expert_AH_HM_RSI.mq5, opgeslagen in terminal_data_folder\MQL5\Experts\.
De standaard invoerparameters van de gegenereerde Expert Advisor:
//--- invoeren 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:
//--- invoeren 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 gespecificeerd:
- Open positie: 80;
- Sluit positie: 40.
De Expert Advisor, gegenereerd door MQL5 Wizard, opent en sluit posities op basis van de "stemmen" van de modules van handelsignalen. De stem van de hoofdmodule (als container, het bestaat uit alle toegevoegde modules) wordt ook gebruikt, maar de LongCondition() en ShortCondition() methoden geven altijd 0 terug.
De stemresultaten van de hoofdmodule worden ook gebruikt bij het "stemmen" gemiddeld nemen. In ons geval hebben we: hoofdmodule + 1 module van handelsignalen, dus we moeten deze factor in overweging nemen bij het instellen van de drempelwaarden. Vanwege dit feit moeten de ThresholdOpen en ThresholdClose ingesteld worden 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 gebeuren wanneer de sluitvoorwaarden waar zijn.
2.4. Geschiedenis backtesting resultaten
Laten we de backtesting van de Expert Advisor op historische data bekijken (EURUSD H1, testperiode: 2010.01.01-2011.03.03, PeriodRSI=33, MA_period=2).
Bij het creëren van de Expert Advisor hebben we het vaste volume gebruikt (Vast Lot Handelen, 0.1), de Trailing Stop algoritme is niet gebruikt (Trailing niet gebruikt).

Fig. 11. Testresultaten van de Expert Advisor, gebaseerd op Hammer/Hanging Man + RSI
De beste set invoerparameters kan worden gevonden met behulp van de Strategietester van de MetaTrader 5 client terminal.
De code van de Expert Advisor, gemaakt door MQL5 Wizard, is bijgevoegd in expert_ah_hm_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
- MQL5 Wizard: Handelsignalen Geïnspireerd door Morning/Evening Stars en RSI voor MetaTrader 5
- Efficiënt Trendvolgend Handelsysteem met Exp_X2MA_JFatl voor MetaTrader 5
- Close Cross MA: Efficiënt Orders Sluiten met MetaTrader 4