De MQL5 Wizard maakt het mogelijk om kant-en-klare Expert Advisors (EAs) te creëren, gebaseerd op de standaardbibliotheek die samen met de clientterminal wordt geleverd (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 het creëren van je eigen handelsignalenklasse. De structuur van deze klasse en een voorbeeld zijn te vinden in het artikel MQL5 Wizard: Hoe een module van handelsignalen te creëren.
Het algemene 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 genaamd "Strategieën van de beste traders" (in het Russisch), waarin veel handelsstrategieën worden behandeld. We zullen ons richten op omkeer 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 daar de nodige functies toe te voegen (bijvoorbeeld bevestiging door oscillators).
Hier zullen we de signalen bekijken, gebaseerd op het "Bullish Harami/Bearish Harami" omkeer candlestick patroon, bevestigd door de Market Facilitation Index (MFI) 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. Bullish Harami en Bearish Harami Omkeer Candlestick Patronen
1.1. Bullish Harami
Het Bullish Harami omkeerpatroon vormt zich in een neerwaartse trend wanneer een grote candlestick wordt gevolgd door een kleinere candlestick waarvan het lichaam zich binnen het verticale bereik van het grotere lichaam bevindt. Dit patroon geeft aan dat de dalende trend (downtrend) kan omkeren, het signaleert dat het een goed moment is om een long positie in te nemen. De tweede candlestick opent met een gap naar boven.
Hoe kleiner de tweede (witte) candlestick, hoe waarschijnlijker de omkering.

Fig. 1. Bullish Harami candlestick patroon
De herkenning van het "Bullish Harami" patroon is geïmplementeerd in de CheckPatternBullishHarami() methode van de CCandlePattern klasse:
//+------------------------------------------------------------------+ //| Controleert de vorming van het "Bullish Harami" candlestick patroon | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternBullishHarami() { //--- Bullish Harami if((Close(1)>Open(1)) && // de laatste voltooide bar is bullish (witte dag) ((Open(2)-Close(2)>AvgBody(1)) && // de vorige candle is bearish, zijn lichaam is groter dan gemiddeld (lange zwarte) ((Close(1)<Open(2)) && // sluitingsprijs van de bullish candle is lager dan openingsprijs van de bearish candle (Open(1)>Close(2))) && // openingsprijs van de bullish candle is hoger dan sluitingsprijs van de bearish candle (MidPoint(2)<CloseAvg(2))) // downtrend return(true); //--- return(false); }
De CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_HARAMI) methode van de CCandlePattern klasse wordt gebruikt om de vorming van het "Bullish Harami" candlestick patroon te controleren.
1.2. Bearish Harami
Het Bearish Harami omkeerpatroon vormt zich in een opwaartse trend wanneer een grote candlestick wordt gevolgd door een kleinere candlestick waarvan het lichaam zich binnen het verticale bereik van het grotere lichaam bevindt. Dit patroon geeft aan dat de stijgende trend (uptrend) kan omkeren, het signaleert dat het een goed moment is om een short positie in te nemen. De tweede candlestick opent met een gap naar beneden.
Hoe kleiner de tweede (zwarte) candlestick, hoe waarschijnlijker de omkering.

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

Fig. 3. Bullish Harami patroon, bevestigd door MFI indicator
- int CBH_BH_MFI::LongCondition() - controleert de voorwaarden voor het openen van een long positie (teruggeven 80) en het sluiten van de short positie (teruggeven 40);
- int CBH_BH_MFI::ShortCondition() - controleert de voorwaarden voor het openen van een short positie (teruggeven 80) en het sluiten van de long positie (teruggeven 40).
2.1. Open long positie/Sluit short positie
De vorming van het "Bullish Harami" 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 short positie moet worden gesloten als de MFI indicator omhoog is gekruist over de kritieke niveaus (70 of 30).
//+------------------------------------------------------------------+ //| Controleert de voorwaarden voor toegang en uitgang van de markt | //| 1) Toegang tot de markt (open long positie, resultaat=80) | //| 2) Uitgang van de markt (sluit short positie, resultaat=40) | //+------------------------------------------------------------------+ int CBH_BH_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 handelsvoorwaarde alleen bij nieuws bars int idx =StartIndex(); //--- controle van de voorwaarden om een long positie te openen //--- vorming van Bullish Harami patroon en MFI<40 if(CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_HARAMI) && (MFI(1)<40)) result=80; //--- controle van de voorwaarden om short positie te sluiten //--- signaal lijn crossover van overgekocht/ondergekocht niveaus (omhoog 30, omhoog 70) if(((MFI(1)>30) && (MFI(2)<30)) || ((MFI(1)>70) && (MFI(2)<70))) result=40; //--- resultaat teruggeven return(result); }
2.2. Open short positie/Sluit long positie
De vorming van het "Bearish Harami" 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 long positie moet worden gesloten als de MFI indicator omhoog is gekruist over de kritieke niveaus (70 of 30).
//+------------------------------------------------------------------+ //| Controleert de voorwaarden voor toegang en uitgang van de markt | //| 1) Toegang tot de markt (open short positie, resultaat=80) | //| 2) Uitgang van de markt (sluit long positie, resultaat=40) | //+------------------------------------------------------------------+ int CBH_BH_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 handelsvoorwaarde alleen bij nieuws bars int idx =StartIndex(); //--- controle van de voorwaarden voor het openen van short positie //--- vorming van Bearish Harami patroon en MFI>60 if(CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_HARAMI) && (MFI(1)>60)) result=80; //--- controle van de voorwaarden voor het sluiten van long positie //--- signaal lijn crossover van overgekocht/ondergekocht niveaus (omhoog 70, omlaag 30) if(((MFI(1)>70) && (MFI(2)<70)) || ((MFI(1)<30) && (MFI(2)>30))) result=40; //--- resultaat teruggeven return(result); }
2.3. Een Expert Advisor maken met MQL5 Wizard
De CBH_BH_MFI klasse is niet opgenomen in de klassen van de standaardbibliotheek. Om deze te gebruiken, is het nodig om het abh_bh_mfi.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 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 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 gebruikt worden.

Fig. 6. Signal eigenschappen van de Expert Advisor
In ons geval gebruiken we slechts één module van handelsignalen.
Voeg de "Signals op Basis van Bullish Harami /Bearish Harami bevestigd door MFI" module van handelsignalen toe:

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

Fig. 8. Signal 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 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, die zich bevindt in Expert_ABH_BH_MFI.mq5, het wordt opgeslagen in terminal_data_folder\MQL5\Experts\.
De standaard invoerparameters van de gegenereerde Expert Advisor:
//--- invoerparameters voor hoofdsignaal input int Signal_ThresholdOpen =10; // Drempelwaarde signaal om open te gaan [0...100] input int Signal_ThresholdClose =10; // Drempelwaarde signaal 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:
//--- invoerparameters voor hoofdsignaal input int Signal_ThresholdOpen =40; // Drempelwaarde signaal om open te gaan [0...100] input int Signal_ThresholdClose =20 // Drempelwaarde signaal 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 laten toe om drempelniveaus voor open 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 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 geven altijd 0 terug.
De stemresultaten van de hoofdmodule worden ook gebruikt in "stemmen" gemiddelden. 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 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 gebeuren wanneer de sluitvoorwaarden waar zijn.
2.4. Geschiedenis backtesting resultaten
Laten we de backtesting van de Expert Advisor op historische gegevens (EURUSD H1, testperiode: 2010.01.01-2011.03.16, PeriodMFI=37, MA_period=11) bekijken.
Bij het creëren van de Expert Advisor hebben we het vaste volume gebruikt (Handelen met Vaste Lot, 0.1), de Trailing Stop-algoritme wordt niet gebruikt (Trailing niet gebruikt).

Fig. 11. Testresultaten van de Expert Advisor, gebaseerd op Bullish Harami /Bearish Harami + MFI
De beste set invoerparameters kan worden gevonden met behulp van de Strategietester van de MetaTrader 5 clientterminal.
De code van de Expert Advisor, gemaakt door MQL5 Wizard is bijgevoegd in expert_abh_bh_mfi.mq5.
Gerelateerde berichten
- MQL5 Wizard: Creëer Handelsstrategieën met Bullish en Bearish Engulfing Candlestick Patronen en Stochastic
- 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
- Efficiënt Handelen met de Ang_Zad_C Indicator voor MetaTrader 5