Home Systeemhandel Bericht

MQL5 Wizard: Creëer Handelsignalen met Bullish en Bearish Harami + Stochastic voor MetaTrader 5

Bijlage
310.zip (6.59 KB, Downloaden 2 keer)

Met de MQL5 Wizard kun je kant-en-klare Expert Advisors maken, gebaseerd op de Standaardbibliotheek klassen die samen met de client terminal worden geleverd (zie Kant-en-klare Expert Advisors maken in MQL5 Wizard voor meer details). Het stelt je in staat om je handelsideeën snel te controleren, je hoeft alleen maar je eigen handelsignaal klasse te creëren. De structuur van deze klasse en een voorbeeld zijn te vinden in het artikel MQL5 Wizard: Hoe maak je een module voor handelsignalen.

Het basisidee 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.

In het boek "Strategieën van de beste traders" (in het Russisch) worden veel handelsstrategieën besproken. Wij richten 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 nodige functies (bijvoorbeeld, bevestiging door oscillatoren) daar toe te voegen.

Hier zullen we de signalen bespreken, gebaseerd op het "Bullish Harami/Bearish Harami" omkeer candlestick patroon, bevestigd door de Stochastic indicator. De module van handelsignalen is gebaseerd op de CCandlePattern klasse, dit is een simpel voorbeeld van het gebruik ervan 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 omkeer patroon vormt zich in een neerwaartse trend wanneer een grote candlestick gevolgd wordt 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 mogelijk aan het omkeren is; het signaleert dat het een goed moment is om een long positie in te nemen. De tweede candlestick opent met een gat omhoog.

Hoe kleiner de tweede (witte) candlestick, hoe waarschijnlijker de omkering.

Fig. 1. Bullish Harami candlestick patroon

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 "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)))         // dalende trend
      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 omkeer patroon vormt zich in een opwaartse trend wanneer een grote candlestick gevolgd wordt 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 mogelijk aan het omkeren is; het signaleert dat het een goed moment is om een short positie in te nemen. De tweede candlestick opent met een gat naar beneden.

Hoe kleiner de tweede (zwarte) candlestick, hoe waarschijnlijker de omkering.

Fig. 2. Bearish Harami candlestick patroon

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 "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)))         // opwaartse trend
      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 de Stochastic indicator

De handelsignalen om een long of short positie te openen moeten bevestigd worden door de Stochastic oscillator. De %D lijn moet hoger/lager zijn dan het bijbehorende kritieke niveau (30 of 70).

Het sluiten van een geopende positie hangt af van de waarden van de %D indicator. Dit kan op twee manieren gedaan worden:

  1. als de %D lijn het tegenovergestelde kritieke niveau heeft bereikt (80 voor long positie en 20 voor short positie)
  2. als het omgekeerde signaal niet wordt bevestigd (wanneer de %D lijn de volgende niveaus bereikt: 20 voor long positie en 80 voor short positie)

Fig. 3. Bearish Harami candlestick patroon, bevestigd door Stochastic indicator

Fig. 3. Bearish Harami candlestick patroon, bevestigd door Stochastic indicator

Het controleren van handelsvoorwaarden voor binnenkomst en uittreden wordt geïmplementeerd in twee methoden:

  • int CBH_BH_Stoch::LongCondition() - controleert de voorwaarden om een long positie te openen (geeft 80 terug) en sluit de short positie (geeft 40 terug);
  • int CBH_BH_Stoch::ShortCondition() - controleert de voorwaarden om een short positie te openen (geeft 80 terug) en sluit de long positie (geeft 40 terug).

2.1. Open long positie/Sluit short positie

  1. De vorming van het "Bullish Harami" patroon moet bevestigd worden door de Stochastic indicator: StochSignal(1)<30 (de waarde van de signaallijn van de Stochastic indicator van de laatste voltooide bar moet minder zijn dan 30).

  2. De short positie moet gesloten worden als de signaallijn van de Stochastic indicator omhoog de 20 of 80 niveaus heeft gekruist.

//+------------------------------------------------------------------+
//| Controleert voorwaarden voor binnenkomst en uittreden uit de markt                 |
//| 1) Markttoegang (open long positie, resultaat=80)                  |
//| 2) Marktuitgang (sluit short positie, resultaat=40)           |
//+------------------------------------------------------------------+
int CBH_BH_Stoch::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 voor het openen van een long positie
//--- vorming van Bullish Harami patroon en signaallijn<30
  if (CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_HARAMI) && (StochSignal(1)<30))
     result=80;
//--- controle van voorwaarden voor het sluiten van short positie
//--- signaallijn crossover van overbought/oversold niveaus (omlaag 20, omhoog 80)
   if((((StochSignal(1)>20) && (StochSignal(2)<20)) ||
       ((StochSignal(1)>80) && (StochSignal(2)<80))))
     result=40;
//--- resultaat teruggeven
   return(result);
  }

2.2. Open short positie/Sluit long positie

  1. De vorming van het "Bearish Harami" patroon moet bevestigd worden door de Stochastic indicator: StochSignal(1)>70 (de waarde van de signaallijn van de Stochastic indicator van de laatste voltooide bar moet groter zijn dan 70).

  2. De long positie moet gesloten worden als de signaallijn van de Stochastic indicator omlaag de 80 of 20 niveaus heeft gekruist.

//+------------------------------------------------------------------+
//| Controleert voorwaarden voor binnenkomst en uittreden uit de markt                 |
//| 1) Markttoegang (open short positie, resultaat=80)                 |
//| 2) Marktuitgang (sluit long positie, resultaat=40)           |
//+------------------------------------------------------------------+
int CBH_BH_Stoch::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 voor het openen van een short positie
//--- vorming van Bearish Harami patroon en signaallijn>70
  if (CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_HARAMI) && (StochSignal(1)>70))
     result=80;
//--- controle van voorwaarden voor het sluiten van long positie
//--- signaallijn crossover van overbought/oversold niveaus (omlaag 80, omhoog 20)
   if((((StochSignal(1)<80) && (StochSignal(2)>80)) ||
       ((StochSignal(1)<20) && (StochSignal(2)>20))))
     result=40;
//--- resultaat teruggeven
   return(result);
  }


2.3. Een Expert Advisor maken met MQL5 Wizard

De CBH_BH_Stoch klasse is niet opgenomen in de klassen van de Standaardbibliotheek. Om deze te gebruiken, is het nodig om het acbh_bh_stoch.mqh bestand te downloaden (zie bijlagen) en op te slaan in de client_terminal_data older\MQL5\Include\Expert\Signal\MySignals. Hetzelfde moet gedaan worden met het candlepatterns.mqh bestand. Je kunt het gebruiken in MQL5 Wizard na het herstarten van de MetaEditor.

Om een Expert Advisor te creëren, start je MQL5 Wizard:

Fig. 4. Een Expert Advisor maken met 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

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

Fig. 6. Signaal eigenschappen van de Expert Advisor

In ons geval gebruiken we slechts één module van handelsignalen.

Toevoegen van de "Signalen gebaseerd op Bullish Harami/Bearish Harami bevestigd door Stochastic" module van handelsignalen:

Fig. 7. Signaal eigenschappen van de Expert Advisor

Fig. 7. Signaal eigenschappen van de Expert Advisor

Module van handelsignalen toegevoegd:

Fig. 8. Signaal eigenschappen van de Expert Advisor

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

Fig. 9. Trailing eigenschappen van de Expert Advisor

Wat betreft de money management eigenschappen, gebruiken we "Handelen met vaste handelsvolume":

Fig. 10. Money management eigenschappen van de Expert Advisor

Fig. 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_ABH_BH_Stoch.mq5, dit zal worden opgeslagen in terminal_data_folder\MQL5\Experts\.

De standaard invoerparameters van de gegenereerde Expert Advisor:

//--- invoer voor hoofdsignaal
input int            Signal_ThresholdOpen   =10;     // Drempelwaarde signaal om te openen [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 vervangen worden door:

//--- invoer voor hoofdsignaal
input int            Signal_ThresholdOpen   =40     // Drempelwaarde signaal om te openen [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 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 handelsignalen klasse hebben we 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 de "stemmen"-gemiddelde. In ons geval hebben we: hoofdmodule + 1 module van handelsignalen, dus we moeten deze factor in aanmerking nemen 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.

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. Geschiedenis backtesting resultaten

Laten we de backtesting van de Expert Advisor op historische gegevens (EURUSD H1, testperiode: 2010.01.01-2011.03.04, PeriodK=47, PeriodD=9, PeriodSlow=13, MA_period=5) 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 is niet gebruikt (Trailing niet gebruikt).

Fig. 11. Testresultaten van de Expert Advisor, gebaseerd op Bullish/Bearish Harami + Stochastic

Fig. 11. Testresultaten van de Expert Advisor, gebaseerd op Bullish/Bearish Harami + Stochastic


De beste set invoerparameters kan gevonden worden met behulp van de Strategietester van de MetaTrader 5 client terminal.

De code van de Expert Advisor, gecreëerd door MQL5 Wizard is bijgevoegd in expert_abh_bh_stoch.mq5.


Gerelateerde berichten

Reactie (0)