MQL5 Wizard: Trading Signal Generatie met Hammer/Hanging Man en Stochastic

Mike 2011.03.21 22:13 33 0 0
Bijlage

Met de MQL5 Wizard kun je kant-en-klare Expert Advisors (EA's) creëren op basis van de Standaard bibliotheek die bij de client terminal wordt geleverd. Dit biedt een snelle manier om je handelsideeën te controleren; alles wat je nodig hebt is je eigen klasse voor handelsignalen. 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 basisidee is als volgt: de klasse voor handelsignalen is afgeleid van CExpertSignal. Vervolgens moet je de virtuele methoden LongCondition() en ShortCondition() overschrijven met je eigen implementaties.

In het boek "Strategieën van de beste traders" (in het Russisch) worden veel handelsstrategieën besproken. Wij richten ons echter op omkeer candlestick patronen, bevestigd door de Stochastic, CCI, MFI en RSI oscillators.

De beste aanpak is het creëren van een aparte klasse, afgeleid van CExpertSignal, voor het controleren van candlestick patronen. Voor de bevestiging van handelsignalen, gegenereerd door deze patronen, volstaat het om een klasse te schrijven, afgeleid van CCandlePattern, en daar de nodige functies aan toe te voegen (bijvoorbeeld bevestiging door oscillators).

Hier zullen we kijken naar de signalen die zijn gebaseerd op het "Hammer/Hanging Man" omkeer candlestick patroon, bevestigd door de Stochastic indicator. De module voor handelsignalen is gebaseerd op de CCandlePattern klasse, wat een eenvoudig voorbeeld is van het gebruik voor het creëren van handelsignalen met candlestick patronen.


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

1.1. Hammer

De "Hammer" is een candlestick met een kleine body en een lange onderste schaduw, die zich vormt na een dalende prijsbeweging. 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 hogere bullish potentieel aan. De body van het "Hammer" patroon wordt vaak gevormd dichtbij het minimum van de vorige candle. Een langere onderste schaduw en een kortere bovenste schaduw leiden tot een hoger potentieel van het omkeer patroon.

Fig. 1.

Fig. 1. "Hammer" candlestick patroon

De herkenning van het "Hammer" patroon is geïmplementeerd in de methoden CheckPatternHammer() van de CCandlePattern klasse:

//+------------------------------------------------------------------+
//| Controleert de vorming van het "Hammer" candlestick patroon    |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternHammer()
  {
//--- Hammer
   if((MidPoint(1)2))                                 && // down trend
      (MathMin(Open(1),Close(1))>(High(1)-(High(1)-Low(1))/3.0)) && // body in upper 1/3
      (Close(1)2)) && (Open(1)2)))                    // body gap
      return(true);
//---
   return(false);
  }

De CheckCandlestickPattern(CANDLE_PATTERN_HAMMER) methode van de 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 lange onderste schaduw, die zich vormt na een stijgende prijsbeweging. 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. Een langere onderste schaduw en een kortere bovenste schaduw leiden tot een hoger potentieel van het omkeer patroon.

Fig. 2.

Fig. 2. "Hanging Man" candlestick patroon

De herkenning van het "Hanging Man" patroon is geïmplementeerd in de methoden CheckPatternHangingMan() 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 de CCandlePattern klasse wordt gebruikt om de vorming van het "Hanging Man" candlestick patroon te controleren.


2. Handelsignalen, bevestigd door Stochastic indicator

De handelsignalen voor het openen van een long- of shortpositie moeten worden bevestigd 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 2 manieren gebeuren:

  1. Als de %D lijn het tegenovergestelde kritieke niveau heeft bereikt (80 voor longpositie en 20 voor shortpositie)
  2. Als het omkeersignaal niet wordt bevestigd (wanneer de %D lijn de volgende niveaus bereikt: 20 voor longpositie en 80 voor shortpositie)

Fig. 3.

Fig. 3. "Hammer" patroon, bevestigd door Stochastic indicator


  • int CH_HM_Stoch::LongCondition() - controleert de voorwaarden voor het openen van een longpositie (geeft 80 terug) en het sluiten van de shortpositie (geeft 40 terug);
  • int CH_HM_Stoch::ShortCondition() - controleert de voorwaarden voor het openen van een shortpositie (geeft 80 terug) en het sluiten van de longpositie (geeft 40 terug).

2.1. Open longpositie / Sluit shortpositie

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

  2. De shortpositie moet worden gesloten als de signaallijn van de Stochastic indicator omhoog is gekruist over de 20 of 80 niveaus.

//+------------------------------------------------------------------+
//| Controleert de voorwaarden voor toegang en uitgang uit de markt                 |
//| 1) Toegang tot de markt (open longpositie, resultaat=80)                  |
//| 2) Uitgang uit de markt (sluit shortpositie, resultaat=40)          |
//+------------------------------------------------------------------+
int CH_HM_Stoch::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 longpositie te openen
//--- vorming van Hammer patroon en signaallijn<30
  if (CheckCandlestickPattern(CANDLE_PATTERN_HAMMER) && (StochSignal(1)<30))
     result=80;
//--- controle van de voorwaarden om shortpositie te sluiten
//--- signaallijn crossover van overgekocht/ondergekocht 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 shortpositie / Sluit longpositie

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

  2. De longpositie moet worden gesloten als de signaallijn van de Stochastic indicator omlaag is gekruist over de 80 of 20 niveaus.

//+------------------------------------------------------------------+
//| Controleert de voorwaarden voor toegang en uitgang uit de markt                 |
//| 1) Toegang tot de markt (open shortpositie, resultaat=80)                 |
//| 2) Uitgang uit de markt (sluit longpositie, resultaat=40)                   |
//+------------------------------------------------------------------+
int CH_HM_Stoch::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 shortpositie te openen
//--- vorming van Hanging Man patroon en signaallijn>70
  if (CheckCandlestickPattern(CANDLE_PATTERN_HANGING_MAN) && (StochSignal(1)>>70))
     result=80;
//--- controle van de voorwaarden om longpositie te sluiten
//--- signaallijn crossover van overgekocht/ondergekocht 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. Creëren van een Expert Advisor met MQL5 Wizard

De CH_HM_Stoch klasse is niet opgenomen in de Standaard Bibliotheek klassen. Om het te gebruiken, moet je het bestand ach_hm_stoch.mqh downloaden (zie bijlagen) en opslaan in de client_terminal_data\folder\MQL5\Include\Expert\Signal\MySignals. Hetzelfde moet worden gedaan met het candlepatterns.mqh bestand. Je kunt het in MQL5 Wizard gebruiken na het herstarten van de MetaEditor.

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

Fig. 4. Creëren van Expert Advisor met MQL5 Wizard

Fig. 4. Creëren van Expert Advisor 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 we gaan gebruiken.

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 Hammer/Hanging Man 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 wij 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, zullen we "Handelen met een vast handelsvolume" gebruiken:

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, die zich bevindt in Expert_AH_HM_Stoch.mq5, en deze wordt opgeslagen in terminal_data_folder\MQL5\Experts\.

De standaard invoerparameters van de gegenereerde Expert Advisor:

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

//--- inputs voor hoofd signaal
input int            Signal_ThresholdOpen   =40;     // Drempelwaarde voor openen [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 de drempelniveaus voor het openen en sluiten van posities in.

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, 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, die 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 bij het "stemmen" gemiddelde. In ons geval hebben we: hoofdmodule + 1 module van handelsignalen, dus moeten we deze factor in overweging nemen bij het instellen van de drempelwaarden. Vanwege dit feit 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. Geschiedenis backtesting resultaten

Laten we de backtesting van de Expert Advisor op historische gegevens bekijken (EURUSD H1, testperiode: 2010.01.01-2011.03.04, PeriodK=47, PeriodD=9, PeriodSlow=13, MA_period=5).

Bij het creëren van de Expert Advisor hebben we het vaste volume gebruikt (Handelen met Vaste Lot, 0.1), Trailing Stop algoritme wordt niet gebruikt (Trailing niet gebruikt).


Fig. 11. Testresultaten van de Expert Advisor, gebaseerd op Hammer/Hanging Man + Stochastic

Fig. 11. Testresultaten van de Expert Advisor, gebaseerd op Hammer/Hanging Man + Stochastic


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

De code van de Expert Advisor, gemaakt door MQL5 Wizard, is bijgevoegd in expert_ah_hm_stoch.mq5.

Lijst
Reactie 0