MQL5 Wizard: Handelsignalen op Basis van Hammer/Hanging Man + MFI voor MetaTrader 5

Mike 2011.03.21 23:10 42 0 0
Bijlage

Met de MQL5 Wizard kun je kant-en-klare Expert Advisors (EA) maken op basis van de Standaard bibliotheek klassen die samen met de client terminal worden geleverd (zie Kant-en-klare Expert Advisors maken in MQL5 Wizard voor meer details). Het maakt het mogelijk om je handelsideeën snel te controleren; alles wat je hoeft te doen is je eigen handelsignalenklasse te creëren. De structuur van deze klasse en een voorbeeld kun je 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 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), waarin veel handelsstrategieën worden besproken. Wij zullen ons richten op omkeercandlestickpatronen, 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 candlestickpatronen. Voor de bevestiging van handelsignalen die worden gegenereerd door candlestickpatronen, is het voldoende om de klasse, afgeleid van CCandlePattern, te schrijven en daar de nodige functies aan toe te voegen (bijvoorbeeld bevestiging door oscillators).

Hier zullen we de signalen bekijken, gebaseerd op het "Hammer/Hanging Man" omkeercandlestickpatroon, bevestigd door de MFI indicator. De module van handelsignalen is gebaseerd op de CCandlePattern klasse; dit is een eenvoudig voorbeeld van het gebruik ervan voor het creëren van handelsignalen met candlestickpatronen.


1. "Hammer" en "Hanging Man" omkeercandlestickpatronen

1.1. Hammer

De "Hammer" is een candlestick met een kleine body en een lange onderste schaduw, gevormd 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 hoger bullish potentieel aan. De body van het "Hammer" patroon wordt vaak vlakbij het minimum van de vorige candle gevormd. De langere onderste schaduw en kortere bovenste schaduw zorgen voor een hoger potentieel van het omkeerc patroon.

Fig. 1. Het 'Hammer' candlestick patroon

Fig. 1. Het '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)2))                                  && // dalende trend
      (MathMin(Open(1),Close(1))>(High(1)-(High(1)-Low(1)/3.0)) && // body in bovenste 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 een lange onderste schaduw, gevormd 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 vlakbij het maximum van de vorige candle gevormd. De langere onderste schaduw en kortere bovenste schaduw zorgen voor een hoger potentieel van het omkeerc patroon.

Fig. 2. Het 'Hanging Man' candlestick patroon

Fig. 2. Het '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))                                && // stijgende trend
      (MathMin(Open(1),Close(1)>(High(1)-(High(1)-Low(1)/3.0)) && // body in bovenste 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 MFI indicator

De handelsignalen om een long of short positie te openen moeten bevestigd worden door de MFI indicator. De waarde van de MFI indicator moet lager zijn dan 40 (voor longposities) of hoger dan 60 (voor shortposities).

Het sluiten van een geopende positie hangt af van de waarden van de MFI indicator. Dit kan op 2 manieren gedaan worden:

  1. als de MFI het tegenovergestelde kritische niveau heeft bereikt (70 voor longposities en 30 voor shortposities)
  2. als het omkeer signaal niet is bevestigd (wanneer de MFI indicator de volgende niveaus bereikt: 30 voor longposities en 70 voor shortposities)

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

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

  • int CH_HM_MFI::LongCondition() - controleert de voorwaarden om een long positie te openen (geeft 80 terug) en sluit de short positie (geeft 40 terug);
  • int CH_HM_MFI::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 "Hammer" patroon moet bevestigd worden door de MFI indicator: MFI(1)<40 (de waarde van de MFI indicator van de laatste voltooide bar moet minder zijn dan 40).

  2. De short positie moet gesloten worden als de MFI indicator de kritische niveaus (70 of 30) naar boven heeft gekruist.

//+------------------------------------------------------------------+
//| Controleert de voorwaarden voor toegang en uitgang van de markt      |
//| 1) Markttoegang (open long positie, resultaat=80)                  |
//| 2) Marktexit (sluit short positie, resultaat=40)                   |
//+------------------------------------------------------------------+
int CH_HM_MFI::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 de voorwaarden om een long positie te openen
//--- vorming van Hammer patroon en MFI<40
  if(CheckCandlestickPattern(CANDLE_PATTERN_HAMMER) && (MFI(1)<40))
     result=80;
//--- controle van de voorwaarden om short positie te sluiten
//--- signaallijn kruising van overbought/oversold 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 short positie/Sluit long positie

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

  2. De long positie moet gesloten worden als de MFI indicator de kritische niveaus (70 of 30) naar boven heeft gekruist.

//+------------------------------------------------------------------+
//| Controleert de voorwaarden voor toegang en uitgang van de markt      |
//| 1) Markttoegang (open short positie, resultaat=80)                |
//| 2) Marktexit (sluit long positie, resultaat=40)                   |
//+------------------------------------------------------------------+
int CH_HM_MFI::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 de voorwaarden om een short positie te openen
//--- vorming van Hanging Man patroon en MFI>60
  if(CheckCandlestickPattern(CANDLE_PATTERN_HANGING_MAN) && (MFI(1)>(60))
     result=80;
//--- controle van de voorwaarden om long positie te sluiten
//--- signaallijn kruising van overbought/oversold 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 MQL5 Wizard

De CH_HM_MFI klasse is niet opgenomen in de Standaard Bibliotheek klassen; om deze te gebruiken, is het nodig om het ah_hm_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 een herstart van de MetaEditor.

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

Fig. 4. Een Expert Advisor maken met behulp van MQL5 Wizard

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

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.

Voeg de module van handelsignalen toe: Signalen op basis van Hammer/Hanging Man bevestigd door MFI:

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 verschillende 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, zullen we "Handelen met vaste handelsvolume" gebruiken:

Fig. 10. Money management eigenschappen van de Expert Advisor

Fig. 10. Money management eigenschappen van de Expert Advisor

Door op de "Voltooien" knop te drukken, krijgen we de code van de gegenereerde Expert Advisor, die te vinden is in Expert_AH_HM_MFI.mq5, opgeslagen in terminal_data_folder\MQL5\Experts.

De standaard invoerparameters van de gegenereerde Expert Advisor:

//--- invoeren voor hoofdsignaal
input int            Signal_ThresholdOpen   =10;     // Signaaldrempelwaarde om te openen [0...100]
input int            Signal_ThresholdClose  =10     // Signaaldrempelwaarde 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:

//--- invoeren voor hoofdsignaal
input int            Signal_ThresholdOpen   =40;     // Signaaldrempelwaarde om te openen [0...100]
input int            Signal_ThresholdClose  =20     // Signaaldrempelwaarde 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 in staat om drempelniveaus voor het openen en sluiten van posities te specificeren.

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, die uit alle toegevoegde modules bestaat) wordt ook gebruikt, maar zijn 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 we moeten dit feit 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 gebeuren 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.16, PeriodMFI=47, MA_period=5).

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

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

Fig. 11. Testresultaten van de Expert Advisor, gebaseerd op Hammer/Hanging Man + 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 MQL5 Wizard, is als bijlage toegevoegd in expert_ah_hm_mfi.mq5.

Lijst
Reactie 0