MQL5 Wizard: Handelsignalen met 3 Zwarte Kraaien/3 Witte Soldaten + RSI voor MetaTrader 5

Mike 2011.02.18 22:08 31 0 0
Bijlage

De MQL5 Wizard maakt het mogelijk om kant-en-klare Expert Advisors (EA's) te creëren op basis van de Standaardbibliotheek die samen met de clientterminal wordt geleverd. Dit stelt je in staat om snel je handelsideeën te controleren; je hoeft alleen maar je eigen handelsignalenklasse aan te maken. De structuur van deze klasse en een voorbeeld daarvan 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 genaamd "Strategieën van de beste handelaren" (in het Russisch), waarin veel handelsstrategieën worden besproken. Wij richten ons op omkerende candlestickpatronen, bevestigd door 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 candlestickpatronen. Voor de bevestiging van handelsignalen, gegenereerd door candlestickpatronen, is het voldoende om de klasse, afgeleid van CCandlePattern, te schrijven en de nodige kenmerken (bijvoorbeeld bevestiging door oscillatoren) daar toe te voegen.

Hier bespreken we de signalen, gebaseerd op het omkerende candlestickpatroon "3 Zwarte Kraaien/3 Witte Soldaten", bevestigd door de Relative Strength Index (RSI) 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. "3 Zwarte Kraaien" en "3 Witte Soldaten" omkerende candlestickpatronen

1.1. 3 Zwarte Kraaien

Een bearish candlestickpatroon dat wordt gebruikt om de omkering van de huidige uptrend te voorspellen. Dit patroon bestaat uit drie opeenvolgende candlesticks met lange lichamen die lager zijn gesloten dan de vorige dag, waarbij elke sessie opent binnen het lichaam van de vorige candle.

Fig. 1. '3 Zwarte Kraaien' candlestick patroon

Fig. 1. '3 Zwarte Kraaien' candlestick patroon

De herkenning van het "3 Zwarte Kraaien" patroon is geïmplementeerd in de CheckPatternThreeBlackCrows-methode van de CCandlePattern klasse:

//+------------------------------------------------------------------+
//| Controleert de vorming van het "3 Zwarte Kraaien" candlestick patroon |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternThreeBlackCrows()
  {
//--- 3 Zwarte Kraaien 
   if((Open(3)-Close(3)>AvgBody(1)) && // (lange zwarte)
      (Open(2)-Close(2)>AvgBody(1)) &&
      (Open(1)-Close(1)>AvgBody(1)) &&
      (MidPoint(2)<MidPoint(3))     && // (lagere midpoints)
      (MidPoint(1)<MidPoint(2)))       
      return(true);
//---
   return(false);
  }

De CheckCandlestickPattern(CANDLE_PATTERN_THREE_BLACK_CROWS) methode van de CCandlePattern klasse wordt gebruikt om de vorming van het "3 Zwarte Kraaien" candlestick patroon te controleren.


1.2. 3 Witte Soldaten candlestick patroon

Een bullish candlestickpatroon dat wordt gebruikt om de omkering van de huidige downtrend te voorspellen. Dit patroon bestaat uit drie opeenvolgende candlesticks met lange lichamen die hoger zijn gesloten dan de vorige dag, waarbij elke sessie opent binnen het lichaam van de vorige candle.

Het patroon is geldig zolang de candle van dag twee opent in de bovenste helft van het bereik van dag één. Aan het einde van dag twee moet deze dicht bij de hoge sluiten, met een zeer kleine of niet-bestaande bovenste schaduw. Hetzelfde patroon wordt dan herhaald op dag drie.

Fig. 2. '3 Witte Soldaten' candlestick patroon

Fig. 2. '3 Witte Soldaten' candlestick patroon

Hier is de methode voor de herkenning van het "3 Witte Soldaten" patroon:

//+------------------------------------------------------------------+
//| Controleert de vorming van het "3 Witte Soldaten" candlestick patroon |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternThreeWhiteSoldiers()
  {
   //--- 3 Witte Soldaten
   if((Close(3)-Open(3)>AvgBody(1)) && // lange witte
      (Close(2)-Open(2)>AvgBody(1)) &&
      (Close(1)-Open(1)>AvgBody(1)) &&
      (MidPoint(2)>MidPoint(3))     && // hogere midpoints
      (MidPoint(1)>MidPoint(2)))
      return(true);
//---
   return(false);
  }

De CheckCandlestickPattern(CANDLE_PATTERN_THREE_WHITE_SOLDIERS) methode van de CCandlePattern klasse wordt gebruikt om de vorming van het "3 Witte Soldaten" candlestick patroon te controleren.



2. Handelsignalen, bevestigd door RSI-indicator

De handelsignalen om een long- of shortpositie te openen moeten worden bevestigd door de RSI indicator. De waarde van de RSI moet lager/hoger zijn dan kritieke niveaus (40 voor een longpositie en 60 voor een shortpositie).

Het sluiten van een geopende positie hangt af van de waarden van de RSI. Dit kan op 2 manieren gebeuren:

  1. als de RSI het tegenovergestelde kritieke niveau heeft bereikt (70 voor een longpositie en 30 voor een shortpositie)
  2. als het omgekeerde signaal niet wordt bevestigd (wanneer de RSI de volgende niveaus bereikt: 30 voor een longpositie en 70 voor een shortpositie)

Fig. 3. '3 Zwarte Kraaien' patroon, bevestigd door stochastic indicator

Fig. 3. '3 Zwarte Kraaien' patroon, bevestigd door Stochastic indicator


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

2.1. Open longpositie/sluit shortpositie

  1. De vorming van het "3 Witte Soldaten" patroon moet worden bevestigd door de RSI indicator: RSI(1)<40 (de waarde van de RSI van de laatst voltooide bar moet minder dan 40 zijn).

  2. De shortpositie moet worden gesloten als de RSI indicator de kritieke niveaus 70 of 30 naar boven heeft gekruist.

//+------------------------------------------------------------------+
//| Controleert voorwaarden voor toegang tot en exit uit de markt                 |
//| 1) Toegang tot de markt (open longpositie, resultaat=80)                  |
//| 2) Exit uit de markt (sluit shortpositie, resultaat=40)                  |
//+------------------------------------------------------------------+
int CBC_WS_RSI::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 nieuwsbarens
  int idx   =StartIndex();
//--- het controleren van de voorwaarden om longpositie te openen
//--- vorming van 3 Witte Soldaten patroon en RSI<30
  if(CheckCandlestickPattern(CANDLE_PATTERN_THREE_WHITE_SOLDIERS) && (RSI(1)<40))
     result=80;
//--- het controleren van de voorwaarden om shortpositie te sluiten
//--- signaallijn kruising van overbought/oversold niveaus (naar boven 30, naar boven 70)
  if(((RSI(1)>30) && (RSI(2)<30)) || ((RSI(1)>70) && (RSI(2)<70)))
     result=40;
//--- resultaat teruggeven
   return(result);
  }

2.2. Open shortpositie/sluit longpositie

  1. De vorming van het "3 Zwarte Kraaien" patroon moet worden bevestigd door de RSI indicator: RSI(1)>60 (de waarde van de RSI indicator van de laatst voltooide bar moet groter zijn dan 60).

  2. De longpositie moet worden gesloten als de RSI indicator de kritieke niveaus 70 of 30 naar beneden heeft gekruist.

//+------------------------------------------------------------------+
//| Controleert voorwaarden voor toegang tot en exit uit de markt                 |
//| 1) Toegang tot de markt (open shortpositie, resultaat=80)                 |
//| 2) Exit uit de markt (sluit longpositie, resultaat=40)                  |
//+------------------------------------------------------------------+
int CBC_WS_RSI::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 nieuwsbarens
  int idx   =StartIndex();
//--- het controleren van de voorwaarden om shortpositie te openen
//--- vorming van 3 Zwarte Kraaien patroon en RSI>60
  if(CheckCandlestickPattern(CANDLE_PATTERN_THREE_BLACK_CROWS) && (RSI(1)>60))
     result=80;
//--- het controleren van de voorwaarden om longpositie te sluiten
//--- signaallijn kruising van overbought/oversold niveaus (naar beneden 70, naar beneden 30)
   if(((RSI(1)<70) && (RSI(2)>70)) || ((RSI(1)<30) && (RSI(2)>30)))
     result=40;
//--- resultaat teruggeven
   return(result);
  }


2.3. Een Expert Advisor maken met behulp van MQL5 Wizard

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

Om een Expert Advisor aan te maken, start je de MQL5 Wizard:

Fig. 4. Expert Advisor maken met MQL5 Wizard

Fig. 4. 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 3 Zwarte Kraaien/3 Witte Soldaten" 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-eigenschap selecteren, maar wij gebruiken "Trailing Stop niet gebruikt":

Fig. 9. Money management eigenschappen van de Expert Advisor

Fig. 9. Money management eigenschappen van de Expert Advisor

Wat betreft de geldbeheer 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, die is opgeslagen in Expert_ABC_WS_RSI.mq5, in de terminal_data_folder\MQL5\Experts\.

De standaard invoerparameters van de gegenereerde Expert Advisor:

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

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

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

De Expert Advisor, gegenereerd door MQL5 Wizard, opent en sluit posities op basis van de "stemmen" van de modules van handelsignalen. De stem van de hoofdmodule (als container, het 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" gemiddeld. In ons geval hebben we: hoofdmodule + 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 Expert Advisor op historische gegevens (EURUSD H1, testperiode: 2010.01.01-2011.02.02, PeriodRSI=37, MA_period=51) bekijken.

Bij het creëren van de Expert Advisor hebben we de 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 3 Zwarte Kraaien/3 Witte Soldaten + RSI

Fig. 11. Testresultaten van de Expert Advisor, gebaseerd op 3 Zwarte Kraaien/3 Witte Soldaten + RSI


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_abc_ws_rsi.mq5.


Lijst
Reactie 0