MQL5 Wizard: Handelsignalen op Basis van Hammer/Hanging Man en CCI voor MetaTrader 5

Mike 2011.03.21 23:10 45 0 0
Bijlage

De MQL5 Wizard biedt de mogelijkheid om kant-en-klare System Trading (Expert Advisors) te creëren op basis van de Standaard bibliotheek klassen die samen met de client terminal worden geleverd (zie Kant-en-klare System Trading maken in MQL5 Wizard voor de details). Het stelt je in staat om snel je handelsideeën te controleren; alles wat je hoeft te doen is je eigen handelsignalen klasse te creëren. De structuur van deze klasse en een voorbeeld vind je in het artikel MQL5 Wizard: Hoe je een Module van Handelsignalen maakt.

Het algemene idee is als volgt: de klasse van handelsignalen is afgeleid van CExpertSignal. Vervolgens is het nodig 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 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 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 oscillators) daar toe te voegen.

Hier zullen we de signalen bekijken, gebaseerd op het "Hammer/Hanging Man" omkerend candlestick patroon, bevestigd door de CCI indicator. De module van handelsignalen is gebaseerd op de CCandlePattern klasse, een eenvoudig voorbeeld van het gebruik ervan voor het creëren van handelsignalen met candlestick patronen.


1. "Hammer" en "Hanging Man" omkerende candlestick patronen

1.1. Hammer

De "Hammer" is een candlestick met een kleine body en een lange lagere wick, gevormd na een daling van de prijs. Het "Hammer" patroon geeft het einde van een bearish trend aan.

De kleur van de candlestick body is niet belangrijk, maar een bullish hammer geeft een hoger bullish potentieel aan. De body van het "Hammer" patroon wordt vaak gevormd nabij het minimum van de vorige candle. De langere lagere wick en kortere bovenste wick leiden tot een hoger potentieel van het omkerende patroon.


Fig. 1. 'Hammer' candlestick 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 het "Hammer" candlestick patroon       |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternHammer()
  {
//--- Hammer
   if((MidPoint(1)<CloseAvg(2))                                 && // down trend
      (MathMin(Open(1),Close(1))>(High(1)-(High(1)-Low(1))/3.0)) && // body in upper 1/3
      (Close(1)<Close(2)) && (Open(1)<Open(2)))                    // body gap
      return(true);
//---
   return(false);
  }

De CheckCandlestickPattern(CANDLE_PATTERN_HAMMER) methode van 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 kleine body en een lange lagere wick, gevormd na een stijging van de prijs. Het "Hanging Man" patroon geeft het einde van een bullish trend aan.

De kleur van de candlestick body is niet belangrijk, maar een bearish candle geeft een hoger bearish potentieel aan. De body van het "Hanging Man" patroon wordt vaak gevormd nabij het maximum van de vorige candle. De langere lagere wick en kortere bovenste wick leiden tot een hoger potentieel van het omkerende patroon.

Fig. 2. 'Hanging Man' candlestick 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 het "Hanging Man" candlestick patroon   |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternHangingMan()
  {
//--- Hanging man
   if((MidPoint(1)>CloseAvg(2))                                && // up trend
      (MathMin(Open(1),Close(1)>(High(1)-(High(1)-Low(1))/3.0)) && // body in upper 1/3
      (Close(1)>Close(2)) && (Open(1)>Open(2)))                  // body gap
      return(true);
//---
   return(false);
  }

De CheckCandlestickPattern(CANDLE_PATTERN_HANGING_MAN) methode van CCandlePattern klasse wordt gebruikt om de vorming van het "Hanging Man" candlestick patroon te controleren.


2. Handelsignalen, bevestigd door CCI indicator

De handelsignalen om een long of short positie te openen moeten worden bevestigd door de CCI indicator. De waarde van CCI moet groter/kleiner zijn dan kritische niveaus (-50 voor long positie en 50 voor short positie).

Het sluiten van een geopende positie hangt af van de waarden van CCI. Dit kan in 2 gevallen worden gedaan:

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

Fig. 3. 'Hammer' patroon, bevestigd door CCI indicator

Fig. 3. Het 'Hammer' patroon, bevestigd door CCI indicator


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

2.1. Open long positie/Sluit short positie

  1. De vorming van het "Hammer" patroon moet worden bevestigd door de CCI indicator: CCI(1)<-50 (de waarde van de CCI van de laatste voltooide bar moet minder zijn dan -50).

  2. De short positie moet worden gesloten als de CCI indicator omhoog is gekruist boven het kritische niveau -80 of omlaag is gekruist onder het kritische niveau 80.

//+------------------------------------------------------------------+
//| Controleert de voorwaarden voor markttoegang en -uitgang        |
//| 1) Markttoegang (open long positie, resultaat=80)               |
//| 2) Marktuitgang (sluit short positie, resultaat=40)             |
//+------------------------------------------------------------------+
int CH_HM_CCI::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 om een long positie te openen
//--- vorming van Hammer patroon en CCI<-50
   if(CheckCandlestickPattern(CANDLE_PATTERN_HAMMER) && (CCI(1)<-50))
     result=80;
//--- controle van de voorwaarden om short positie te sluiten
//--- signaallijn kruising van overbought/oversold niveaus (omlaag -80, omhoog -80)
   if(((CCI(1)>-80) && (CCI(2)<-80)) || ((CCI(1)<80) && (CCI(2)>80)))
     result=40;
//--- retourne resultaat
   return(result);
  }

2.2. Open short positie/Sluit long positie

  1. De vorming van het "Hanging Man" patroon moet worden bevestigd door de CCI indicator: CCI(1)>50 (de waarde van de CCI indicator van de laatste voltooide bar moet groter zijn dan 50).

  2. De long positie moet worden gesloten als de CCI indicator omlaag is gekruist onder de -80 of 80 niveaus.

//+------------------------------------------------------------------+
//| Controleert de voorwaarden voor markttoegang en -uitgang        |
//| 1) Markttoegang (open short positie, resultaat=80)              |
//| 2) Marktuitgang (sluit long positie, resultaat=40)              |
//+------------------------------------------------------------------+
int CH_HM_CCI::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 om een short positie te openen
//--- vorming van Hanging Man patroon en CCI>50
   if(CheckCandlestickPattern(CANDLE_PATTERN_HANGING_MAN) && (CCI(1)>50))
     result=80;
//--- controle van de voorwaarden om long positie te sluiten
//--- signaallijn kruising van overbought/oversold niveaus (omlaag -80, omhoog 80)
   if(((CCI(1)<80) && (CCI(2)>80)) || ((CCI(1)<-80) && (CCI(2)>-80)))
     result=40;
//--- retourne resultaat
   return(result);
  }


2.3. Het creëren van een Expert Advisor met behulp van MQL5 Wizard

De CH_HM_CCI klasse is niet opgenomen in de Standaard Bibliotheek klassen. Om het te gebruiken, moet je het ach_hm_cci.mqh bestand downloaden (zie bijlagen) en opslaan in de client_terminal_data\folder\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 System Trading te creëren, start je de MQL5 Wizard:

Fig. 4. Het creëren van een System Trading met MQL5 Wizard

Fig. 4. Het creëren van een System Trading met MQL5 Wizard

Laten we de naam van de System Trading opgeven:

Fig. 5. Algemene eigenschappen van de System Trading

Fig. 5. Algemene eigenschappen van de System Trading

Daarna moeten we de modules van handelsignalen selecteren die we gaan gebruiken.

Fig. 6. Signaal eigenschappen van de System Trading

Fig. 6. Signaal eigenschappen van de System Trading

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

We voegen de module "Signalen gebaseerd op Hammer/Hanging Man bevestigd door CCI" toe:

Fig. 7. Signaal eigenschappen van de System Trading

Fig. 7. Signaal eigenschappen van de System Trading

Module van handelsignalen toegevoegd:

Fig. 8. Signaal eigenschappen van de System Trading

Fig. 8. Signaal eigenschappen van de System Trading

Je kunt elke trailing eigenschappen selecteren, maar we zullen "Trailing Stop niet gebruikt" gebruiken:

Fig. 9. Trailing eigenschappen van de System Trading

Fig. 9. Trailing eigenschappen van de System Trading

Wat betreft de geldbeheer eigenschappen, we zullen "Handelen met een vast handelsvolume" gebruiken:

Fig. 10. Geldbeheer eigenschappen van de System Trading

Fig. 10. Geldbeheer eigenschappen van de System Trading

Door op de "Voltooi" knop te drukken, krijgen we de code van de gegenereerde System Trading, gelegen in Expert_AH_HM_CCI.mq5, het zal worden opgeslagen in terminal_data_folder\MQL5\Experts\.

De standaard invoerparameters van de gegenereerde System Trading:

//--- invoerparameters voor het hoofd signaal
input int            Signal_ThresholdOpen   =10;     // Drempelwaarde om te openen [0...100]
input int            Signal_ThresholdClose  =10     // 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:

//--- invoerparameters voor het hoofd signaal
input int            Signal_ThresholdOpen   =40;     // Drempelwaarde om te openen [0...100]
input int            Signal_ThresholdClose  =20     // 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 handelsignalen klasse hebben we de vaste waarden van de drempel gespecificeerd:

  • Open positie: 80;
  • Sluit positie: 40.

De System Trading, gegenereerd door MQL5 Wizard opent en sluit posities met behulp van de "stemmen" van de modules van handelsignalen. De stem van de hoofmodule (als container, bestaande uit alle toegevoegde modules) wordt ook gebruikt, maar zijn LongCondition() en ShortCondition() methoden geven altijd 0 terug.

De stemresultaten van de hoofmodule worden ook gebruikt in de "stemmen" gemiddelde. In ons geval hebben we: hoofmodule + 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 worden ingesteld 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 gebeuren wanneer de sluitvoorwaarden waar zijn.


2.4. Geschiedenis backtesting resultaten

Laten we de backtesting van de System Trading op historische gegevens (EURUSD H1, testperiode: 2010.01.01-2011.03.16, PeriodCCI=25, MA_period=5) bekijken.

Bij het creëren van de System Trading hebben we het vaste volume gebruikt (Vast Lot Handelen, 0.1), de Trailing Stop algoritme wordt niet gebruikt (Trailing niet gebruikt).

Fig. 11. Testresultaten van de System Trading, gebaseerd op Hammer/Hanging Man + CCI

Fig. 11. Testresultaten van de System Trading, gebaseerd op Hammer/Hanging Man + CCI


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

De code van de System Trading, gemaakt door MQL5 Wizard is bijgevoegd in expert_ah_hm_cci.mq5.


Lijst
Reactie 0