De MQL5 Wizard maakt het mogelijk om kant-en-klare Expert Advisors te creëren op basis van de standaard bibliotheek die wordt geleverd met de client terminal (zie Kant-en-klare Expert Advisors maken in MQL5 Wizard voor meer details). Dit stelt je in staat om snel je handelsideeën te testen, je hoeft alleen maar je eigen handelsignaleklasse te maken. De structuur van deze klasse en een voorbeeld zijn te vinden in het artikel MQL5 Wizard: Hoe maak je een module voor handelsignalen.
Het algemene idee is als volgt: de klasse voor 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), waar veel handelsstrategieën worden besproken. Wij zullen ons richten op omkeer 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 bevestiging van handelsignalen, gegenereerd door candlestick patronen, is het voldoende om de klasse te schrijven, afgeleid van CCandlePattern en daar de nodige functies (bijvoorbeeld bevestiging door oscillatoren) aan toe te voegen.
Hier zullen we de signalen bespreken, gebaseerd op het "Bullish Engulfing/Bearish Engulfing" omkeer candlestick patroon, bevestigd door de Market Facilitation Index (MFI) indicator. De module voor handelsignalen is gebaseerd op de CCandlePattern klasse, het is een eenvoudig voorbeeld van het gebruik ervan voor het creëren van handelsignalen met candlestick patronen.
1. "Bullish Engulfing" en "Bearish Engulfing" omkeer candlestick patronen
1.1. Bullish Engulfing
Het "Bullish Engulfing" omkeer patroon vormt zich in een downtrend wanneer een kleine zwarte candlestick wordt gevolgd door een grote witte candlestick die volledig de candlestick van de vorige dag overschaduwt. De schaduwen (staarten) van de kleine candlestick zijn kort, waardoor het lichaam van de grote candlestick de gehele candlestick van de vorige dag kan bedekken.

Fig. 1. Bullish Engulfing candlestick patroon
De herkenning van het "Bullish Engulfing" patroon is geïmplementeerd in de CheckPatternBullishEngulfing() methode van de CCandlePattern klasse:
//+------------------------------------------------------------------+ //| Controleert de vorming van het "Bullish Engulfing" candlestick patroon | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternBullishEngulfing() { //--- Bullish Engulfing if((Open(2)>Close(2)) && // vorige candle is bearish (Close(1)-Open(1)>AvgBody(1)) & // lichaam van de bullish candle is hoger dan de gemiddelde waarde van het lichaam (Close(1)>Open(2)) && // sluitprijs van de bullish candle is hoger dan de openingsprijs van de bearish candle (MidOpenClose(2)<CloseAvg(2)) && // downtrend (Open(1)<Close(2))) // openingsprijs van de bullish candle is lager dan sluitprijs van de bearish return(true); //--- return(false); }
De CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_ENGULFING) methode van de CCandlePattern klasse wordt gebruikt om de vorming van het "Bullish Engulfing" candlestick patroon te controleren.
1.2. Bearish Engulfing
Het "Bearish Engulfing" omkeer patroon ontstaat in een uptrend wanneer een kleine witte candlestick wordt gevolgd door een grote zwarte candlestick die volledig de candlestick van de vorige dag overschaduwt. De schaduwen (staarten) van de kleine candlestick zijn kort, waardoor het lichaam van de grote candlestick de gehele candlestick van de vorige dag kan bedekken.

Fig. 2. Bearish Engulfing candlestick patroon
De herkenning van het "Bearish Engulfing" patroon is geïmplementeerd in de CheckPatternBearishEngulfing() methode van de CCandlePattern klasse:
//+------------------------------------------------------------------+ //| Controleert de vorming van het "Bearish Engulfing" candlestick patroon | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternBearishEngulfing() { //--- Bearish Engulfing if((Open(2)<Close(2)) && // vorige candle is bullish (Open(1)-Close(1)>AvgBody(1)) && // lichaam van de candle is hoger dan de gemiddelde waarde van het lichaam (Close(1)<Open(2)) && // sluitprijs van de bearish candle is lager dan de openingsprijs van de bullish candle (MidOpenClose(2)>CloseAvg(2)) && // uptrend (Open(1)>Close(2))) // openingsprijs van de bearish candle is hoger dan sluitprijs van de bullish candle return(true); //--- return(false); }
De CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_ENGULFING) methode van de CCandlePattern klasse wordt gebruikt om de vorming van het "Bearish Engulfing" candlestick patroon te controleren.
2. Handelsignalen, bevestigd door de MFI indicator
De handelsignalen om een lange of korte positie te openen moeten worden bevestigd door de MFI indicator. De waarde van de MFI indicator moet lager zijn dan 40 (voor lange posities) of hoger dan 60 (voor korte posities).
Het sluiten van geopende posities hangt af van de waarden van de MFI indicator. Dit kan in twee gevallen worden gedaan:
- Als de MFI het tegenovergestelde kritieke niveau heeft bereikt (70 voor lange posities en 30 voor korte posities)
- Als het omgekeerde signaal niet is bevestigd (wanneer de MFI indicator de volgende niveaus bereikt: 30 voor lange posities en 70 voor korte posities)

Fig. 3. Bullish Engulfing patroon, bevestigd door MFI indicator
- int CBE_BE_MFI::LongCondition() - controleert de voorwaarden om een lange positie te openen (retourneert 80) en sluit de korte positie (retourneert 40);
- int CBE_BE_MFI::ShortCondition() - controleert de voorwaarden om een korte positie te openen (retourneert 80) en sluit de lange positie (retourneert 40).
2.1. Open lange positie/sluit korte positie
De vorming van het "Bullish Engulfing" patroon moet worden bevestigd door de MFI indicator: MFi(1)<40 (de waarde van de MFI indicator van de laatste voltooide bar moet minder zijn dan 40).
De korte positie moet worden gesloten als de MFI indicator omhoog is gekruist door de kritieke niveaus (70 of 30).
//+------------------------------------------------------------------+ //| Controleert de voorwaarden voor toegang en uitgang van de markt | //| 1) Markttoegang (open lange positie, resultaat=80) | //| 2) Marktuitgang (sluit korte positie, resultaat=40) | //+------------------------------------------------------------------+ int CBE_BE_MFI::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 de voorwaarden voor het openen van een lange positie //--- vorming van het Bullish Engulfing patroon en MFI<40 if(CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_ENGULFING) && (MFI(1)<40)) result=80; //--- controle van de voorwaarden voor het sluiten van de korte positie //--- signaallijn kruising van overgekochte/oververkochte niveaus (omhoog 30, omhoog 70) if(((MFI(1)>30) && (MFI(2)<30)) || ((MFI(1)>70) && (MFI(2)<70))) result=40; //--- retourneer resultaat return(result); }
2.2. Open korte positie/sluit lange positie
De vorming van het "Bearish Engulfing" patroon moet worden bevestigd door de MFI indicator: MFI(1)>60 (de waarde van de MFI indicator van de laatste voltooide bar moet groter zijn dan 60).
De lange positie moet worden gesloten als de MFI indicator omhoog is gekruist door de kritieke niveaus (70 of 30).
//+------------------------------------------------------------------+ //| Controleert de voorwaarden voor toegang en uitgang van de markt | //| 1) Markttoegang (open korte positie, resultaat=80) | //| 2) Marktuitgang (sluit lange positie, resultaat=40) | //+------------------------------------------------------------------+ int CBE_BE_MFI::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 de voorwaarden voor het openen van een korte positie //--- vorming van het Bearish Engulfing patroon en MFI>60 if(CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_ENGULFING) && (MFI(1)>60)) result=80; //--- controle van de voorwaarden voor het sluiten van de lange positie //--- signaallijn kruising van overgekochte/oververkochte niveaus (omhoog 70, omlaag 30) if(((MFI(1)>70) && (MFI(2)<70)) || ((MFI(1)<30) && (MFI(2)>30))) result=40; //--- retourneer resultaat return(result); }
2.3. Een Expert Advisor maken met behulp van de MQL5 Wizard
De CBE_BE_MFI klasse is niet opgenomen in de klassen van de Standaard Bibliotheek. Om het te gebruiken, is het noodzakelijk om het abe_be_mfi.mqh bestand te downloaden (zie bijlagen) en dit op te slaan in de client_terminal_data\folder\MQL5\Include\Expert\Signal\MySignals. Hetzelfde moet worden gedaan met het acandlepatterns.mqh bestand. Je kunt het gebruiken in MQL5 Wizard na het herstarten van de MetaEditor.
Om een Expert Advisor te maken, start je de MQL5 Wizard:

Fig. 4. Een Expert Advisor maken met behulp van de 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.
Het toevoegen van de "Signalen op basis van Bullish Engulfing/Bearish Engulfing bevestigd door MFI" 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 een vast 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_ABE_BE_MFI.mq5, het wordt opgeslagen in terminal_data_folder\MQL5\Experts\.
De standaard invoerparameters van de gegenereerde Expert Advisor:
//--- invoer voor het hoofdsignaal input int Signal_ThresholdOpen =10; // Drempelwaarde voor opening [0...100] input int Signal_ThresholdClose =10 // Drempelwaarde voor 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 het hoofdsignaal input int Signal_ThresholdOpen =40; // Drempelwaarde voor opening [0...100] input int Signal_ThresholdClose =20 // Drempelwaarde voor 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 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 handelsignalen klasse hebben we de vaste waarden van de drempel gespecificeerd:
- Open positie: 80;
- Sluit positie: 40.
De Expert Advisor, die door de MQL5 Wizard is gegenereerd, opent en sluit posities met behulp van de "stemmen" van de modules van handelsignalen. De stem van de hoofdmodule (als container, die 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 gemiddeld nemen van stemmen. In ons geval hebben we: hoofdmodule + 1 module van handelsignalen, dus we moeten rekening houden met deze factor bij het instellen van de drempelwaarden. Vanwege deze factor 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 plaatsvinden wanneer de sluitvoorwaarden waar zijn.
2.4. Resultaten van de geschiedenis backtesting
Laten we de backtesting van de Expert Advisor op historische gegevens bekijken (EURUSD H1, testperiode: 2010.01.01-2011.03.16, PeriodMFI=37, MA_period=5).
Bij het creëren van de Expert Advisor hebben we het vaste volume gebruikt (Vast Lot Handelen, 0.1), Trailing Stop algoritme wordt niet gebruikt (Trailing niet gebruikt).

Fig. 11. Testresultaten van de Expert Advisor, gebaseerd op Bullish Engulfing /Bearish Engulfing + MFI
De beste set van invoerparameters kan worden gevonden met behulp van de Strategietester van de MetaTrader 5 client terminal.
De code van de Expert Advisor, gemaakt door de MQL5 Wizard, is bijgevoegd in expert_abe_be_mfi.mq5.
Gerelateerde berichten
- MQL5 Wizard: Handelsignalen Geïnspireerd Door Morning/Evening Stars + MFI voor MetaTrader 5
- MQL5 Wizard: Creëer Handelsstrategieën met Bullish en Bearish Engulfing Candlestick Patronen en Stochastic
- 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