De MQL5 Wizard is een krachtige tool die je helpt om kant-en-klare Expert Advisors te maken op basis van de Standaard bibliotheek klassen die bij de client terminal worden geleverd. Dit stelt je in staat om je handelsideeën snel te testen. Het enige wat je hoeft te doen is je eigen handelsignalenklasse te creëren. De structuur van deze klasse en een voorbeeld zijn te vinden in het artikel MQL5 Wizard: Hoe Maak je een Module van Handelsignalen.
Het idee is als volgt: de klasse van handelsignalen is afgeleid van CExpertSignal. Vervolgens moet je de LongCondition() en ShortCondition() virtuele methoden 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 oscillators.
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 nodige functies toe te voegen (bijvoorbeeld bevestiging door oscillators).
Hier zullen we de signalen bekijken die zijn gebaseerd op het "Dark Cloud Cover/Piercing Line" omkerende candlestick patroon, bevestigd door de RSI indicator. De module van handelsignalen is gebaseerd op de CCandlePattern klasse, het is een eenvoudig voorbeeld van het gebruik voor het creëren van handelsignalen met candlestick patronen.
1. "Dark Cloud Cover" en "Piercing Line" omkerende candlestick patronen
1.1. Dark Cloud Cover
Dit is een bearish candlestick omkering die zich aan het einde van een opwaartse trend voordoet. Een lange witte candlestick wordt op de eerste dag gevormd en een gap omhoog wordt op de tweede dag gecreëerd. Echter, de tweede dag sluit onder het midden van de eerste dag.

Figuur 1. Dark Cloud Cover candlestick patroon
De herkenning van het "Dark Cloud Cover" patroon is geïmplementeerd in de CheckPatternDarkCloudCover() methode van de CCandlePattern klasse:
//+------------------------------------------------------------------+ //| Controleert de vorming van "Dark Cloud Cover" candlestick patroon | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternDarkCloudCover() { //--- Dark Cloud Cover if((Close(2)-Open(2)>AvgBody(1)) && // (lange witte) (Close(1)<Close(2)) && // (Close(1)>Open(2)) && // (sluit binnen vorige body) (MidOpenClose(2)>CloseAvg(1)) && // (opwaartse trend) (Open(1)>High(2))) // (open op nieuwe high) return(true); //--- return(false); }
De CheckCandlestickPattern(CANDLE_PATTERN_DARK_CLOUD_COVER) methode van de CCandlePattern klasse wordt gebruikt om de vorming van het "Dark Cloud Cover" candlestick patroon te controleren.
1.2. Piercing Line
De gap naar beneden op de tweede dag versterkt de neerwaartse trend. Echter, de sluiting van de tweede dag is boven het midden van de body van de eerste dag. Dit suggereert aan de beren dat er een bodem kan ontstaan. Deze prijsactie is niet zo gemakkelijk te zien met staafdiagrammen als met candlestick diagrammen. Hoe dieper de sluiting van de tweede dag in de body van de eerste dag, hoe waarschijnlijker het omkeersignaal zal slagen.

Figuur 2. Piercing Line candlestick patroon
De herkenning van het "Piercing Line" patroon is geïmplementeerd in de CheckPatternPiercingLine() methode van de CCandlePattern klasse:
//+------------------------------------------------------------------+ //| Controleert de vorming van "Piercing Line" candlestick patroon | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternPiercingLine() { //--- Piercing Line if((Close(1)-Open(1)>AvgBody(1)) && // (lange witte) (Open(2)-Close(2)>AvgBody(1)) && // (lange zwarte) (Close(1)>Close(2)) && // (Close(1)<Open(2)) && // (sluit binnen vorige body) (MidOpenClose(2)<CloseAvg(2)) && // (neerwaartse trend) (Open(1)<Low(2))) // (open lager dan vorige Low) return(true); //--- return(false); }
De CheckCandlestickPattern(CANDLE_PATTERN_PIERCING_LINE) methode van de CCandlePattern klasse wordt gebruikt om de vorming van het "Piercing Line" candlestick patroon te controleren.
2. Handelsignalen, bevestigd door RSI indicator
De handelsignalen om een lange of korte positie te openen moeten bevestigd worden door de RSI indicator. De waarde van de RSI moet lager/hoger zijn dan kritieke niveaus (40 voor lange posities en 60 voor korte posities).
Het sluiten van geopende posities hangt af van de waarden van de RSI. Dit kan op twee manieren gebeuren:
- Als de RSI het tegenovergestelde kritieke niveau heeft bereikt (70 voor lange posities en 30 voor korte posities)
- Als het omkeersignaal niet wordt bevestigd (wanneer de RSI de volgende niveaus bereikt: 30 voor lange posities en 70 voor korte posities)

Figuur 3. Dark Cloud Cover patroon, bevestigd door RSI indicator
- int CDC_PL_RSI::LongCondition() - controleert de voorwaarden voor het openen van een lange positie (retourneert 80) en het sluiten van de korte positie (retourneert 40);
- int CDC_PL_RSI::ShortCondition() - controleert de voorwaarden voor het openen van een korte positie (retourneert 80) en het sluiten van de lange positie (retourneert 40).
2.1. Open lange positie/Sluit korte positie
De vorming van het "Piercing Line" 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 gesloten worden als de RSI indicator de kritieke niveaus 70 of 30 naar boven heeft gekruist.
//+------------------------------------------------------------------+ //| Controleert de voorwaarden voor toegang en uitgang van de markt | //| 1) Markttoegang (open lange positie, resultaat=80) | //| 2) Marktafgang (sluit korte positie, resultaat=40) | //+------------------------------------------------------------------+ int CDC_PL_RSI::LongCondition() { int result=0; //--- idx kan gebruikt worden om de werkwijze 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 Piercing Line patroon en RSI<30 if(CheckCandlestickPattern(CANDLE_PATTERN_PIERCING_LINE) && (RSI(1)<40)) result=80; //--- controle van voorwaarden om de korte positie te sluiten //--- signaallijn crossover van overbought/oversold niveaus (omhoog 30, omhoog 70) if(((RSI(1)>30) && (RSI(2)<30)) || ((RSI(1)>70) && (RSI(2)<70))) result=40; //--- retourneer resultaat return(result); }
2.2. Open korte positie/Sluit lange positie
De vorming van het "Dark Cloud Cover" 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 gesloten worden als de RSI indicator de kritieke niveaus 70 of 30 naar beneden heeft gekruist.
//+------------------------------------------------------------------+ //| Controleert de voorwaarden voor toegang en uitgang van de markt | //| 1) Markttoegang (open korte positie, resultaat=80) | //| 2) Marktafgang (sluit lange positie, resultaat=40) | //+------------------------------------------------------------------+ int CDC_PL_RSI::ShortCondition() { int result=0; //--- idx kan gebruikt worden om de werkwijze 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 Dark Cloud Cover patroon en RSI>60 if(CheckCandlestickPattern(CANDLE_PATTERN_DARK_CLOUD_COVER) && (RSI(1)>60)) result=80; //--- controle van voorwaarden om de lange positie te sluiten //--- signaallijn crossover van overbought/oversold niveaus (omlaag 70, omlaag 30) if(((RSI(1)<70) && (RSI(2)>70)) || ((RSI(1)<30) && (RSI(2)>30))) result=40; //--- retourneer resultaat return(result); }
2.3. Het creëren van een Expert Advisor met behulp van de MQL5 Wizard
De CDC_PL_RSI klasse is niet opgenomen in de standaard bibliotheek klassen. Om deze te gebruiken, is het noodzakelijk om het adc_pl_rsi.mqh bestand te downloaden (zie bijlagen) en op te slaan in de client_terminal_data\folder\MQL5\Include\Expert\Signal\MySignals. Hetzelfde moet gedaan worden met het acandlepatterns.mqh bestand. Je kunt het gebruiken in de MQL5 Wizard na het herstarten van de MetaEditor.
Om een Expert Advisor te creëren, start je de MQL5 Wizard:

Figuur 4. Het creëren van een Expert Advisor met de MQL5 Wizard
Laten we de naam van de Expert Advisor specificeren:

Figuur 5. Algemene eigenschappen van de Expert Advisor
Daarna moeten we de modules van handelsignalen selecteren die we gebruiken.

Figuur 6. Signaal eigenschappen van de Expert Advisor
In ons geval gebruiken we maar één module van handelsignalen.
Voeg de "Signalen op basis van Dark Cloud Cover/Piercing Line bevestigd door RSI" module van handelsignalen toe:

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

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

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

Figuur 10. Money management eigenschappen van de Expert Advisor
Door op de knop "Voltooien" te drukken, krijgen we de code van de gegenereerde Expert Advisor, gelegen in Expert_ADC_PL_RSI.mq5, dit wordt opgeslagen in terminal_data_folder\MQL5\Experts\.
De standaard invoerparameters van de gegenereerde Expert Advisor:
//--- invoer voor hoofdsignaal input int Signal_ThresholdOpen =10; // Signaaldrempelwaarde om te openen [0...100] input int Signal_ThresholdClose =10; // Signaaldrempelwaarde 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 hoofdsignaal input int Signal_ThresholdOpen =40; // Signaaldrempelwaarde om te openen [0...100] input int Signal_ThresholdClose =20; // Signaaldrempelwaarde 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 gedefinieerd:
- Open positie: 80;
- Sluit positie: 40.
De Expert Advisor, gegenereerd door de 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 de LongCondition() en ShortCondition() methoden retourneren altijd 0.
De stemresultaten van de hoofdmodule worden ook gebruikt bij het "stemmen" gemiddeld. 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 ingesteld worden op 40=(0+80)/2 en 20=(0+40)/2.
