MQL5 Wizard: Handelsignalen op Basis van Dark Cloud Cover/Piercing Line + CCI

Mike 2011.02.25 02:37 76 0 0

De MQL5 Wizard maakt het mogelijk om kant-en-klare Expert Advisors te creëren op basis van de Standaard bibliotheek die samen met de clientterminal wordt geleverd. Hiermee kun je snel je handelsideeën testen; je hoeft alleen maar je eigen klasse voor handelsignalen 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 genaamd "Strategieën van de Beste Traders" (in het Russisch), waarin veel handelsstrategieën worden besproken. Wij zullen ons richten op omkeer 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 daar de noodzakelijke functies (bijvoorbeeld bevestiging door oscillatoren) toe te voegen.

Hier gaan we de signalen bekijken die gebaseerd zijn op het omkeer candlestickpatroon "Dark Cloud Cover/Piercing Line", bevestigd door de CCI indicator. De module van handelsignalen is gebaseerd op de CCandlePattern klasse, wat een eenvoudig voorbeeld is van het gebruik ervan voor het creëren van handelsignalen met candlestickpatronen.


1. "Dark Cloud Cover" en "Piercing Line" omkeer candlestickpatronen

1.1. Dark Cloud Cover

Dit is een bearish candlestick omkeerpunt dat zich aan het einde van een opwaartse trend voordoet. Op de eerste dag wordt er een lange witte candlestick gevormd en op de tweede dag wordt er een gap omhoog gecreëerd. Echter, de tweede dag sluit onder het midden van de eerste dag.

Fig. 1.

Fig. 1. "Dark Cloud Cover" candlestick patroon

De herkenning van het "Dark Cloud Cover" patroon wordt geïmplementeerd in de CheckPatternDarkCloudCover() methode van de CCandlePattern klasse:

//+------------------------------------------------------------------+
//| Controleert de vorming van het "Dark Cloud Cover" candlestick patroon |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternDarkCloudCover()
  {
//--- Dark Cloud Cover 
   if((Close(2)-Open(2)>AvgBody(1))  && // (lange witte)
      (Close(1)<Close(2))            && // 
      (Close(1)>Open(2))             && // (sluit binnen de vorige body)
      (MidOpenClose(2)>CloseAvg(1))  && // (opwaartse trend)
      (Open(1)>High(2)))                // (open op nieuwe hoogte)
      return(true);
//---
   return(false);
  }

De CheckCandlestickPattern(CANDLE_PATTERN_DARK_CLOUD_COVER) methode van de CCandlePattern klasse wordt gebruikt om de vorming van het "Dark Cloud Cover" candlestick patroon te controleren.


1.2. Piercing Line

De gap naar beneden op de tweede dag verlengt de neerwaartse trend. Echter, de sluiting van de tweede dag is boven het midden van de body van de eerste dag. Dit suggereert aan de beren dat er mogelijk een bodem aan het vormen is. Deze prijsactie is niet zo goed te zien met bar charts als met candlestick charts. Hoe dieper de sluiting van de tweede dag in de body van de eerste dag komt, hoe waarschijnlijker het is dat het omkeersignaal succesvol zal zijn.

Fig. 2.

Fig. 2. "Piercing Line" candlestick patroon

De herkenning van het "Piercing Line" patroon is geïmplementeerd in de CheckPatternPiercingLine() methode van de CCandlePattern klasse:

//+------------------------------------------------------------------+
//| Controleert de vorming van het "Piercing Line" candlestick patroon |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternPiercingLine()
  {
//--- Piercing Line
   if((Close(1)-Open(1)>AvgBody(1)) && // (lange witte)
      (Open(2)-Close(2)>AvgBody(1)) && // (lange zwarte)
      (Close(1)>Close(2))           && //  
      (Close(1)<Open(2))            && // (sluit binnen de vorige body) 
      (MidOpenClose(2)<CloseAvg(2)) && // (neerwaartse trend)
      (Open(1)<Low(2)))                // (open lager dan de vorige Low) 
      return(true);
//---
   return(false);
  }

De CheckCandlestickPattern(CANDLE_PATTERN_PIERCING_LINE) methode van de CCandlePattern klasse wordt gebruikt om de vorming van het "Piercing Line" candlestick patroon te controleren.


2. Handelsignalen, bevestigd door de CCI indicator

De handelsignalen voor het openen van een lange of korte positie moeten worden bevestigd door de CCI indicator. De waarde van de CCI moet groter/kleiner zijn dan de kritische niveaus (-50 voor lange posities en 50 voor korte posities).

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

  1. als de CCI lijn het tegenovergestelde kritische niveau heeft bereikt (80 voor lange posities en -80 voor korte posities)
  2. als het omkeersignaal niet wordt bevestigd (wanneer de CCI de volgende niveaus bereikt: -80 voor lange posities en 80 voor korte posities)

Fig. 3.

Fig. 3. "Dark Cloud Cover" patroon, bevestigd door CCI indicator


  • int CDC_PL_CCI::LongCondition() - controleert de voorwaarden voor het openen van een lange positie (geeft 80 terug) en het sluiten van de korte positie (geeft 40 terug);
  • int CDC_PL_CCI::ShortCondition() - controleert de voorwaarden voor het openen van een korte positie (geeft 80 terug) en het sluiten van de lange positie (geeft 40 terug).

2.1. Open lange positie/Sluit korte positie

  1. De vorming van het "Piercing Line" 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 korte positie moet worden gesloten als de CCI indicator omhoog is gekruist over het kritische niveau -80 of omlaag is gekruist over het kritische niveau 80.

//+------------------------------------------------------------------+
//| Controleert de voorwaarden voor toegang en uitgang van de markt |
//| 1) Markttoegang (open lange positie, resultaat=80) |
//| 2) Marktafgang (sluit korte positie, resultaat=40) |
//+------------------------------------------------------------------+
int CDC_PL_CCI::LongCondition()
  {
   int result=0;
//--- idx kan worden gebruikt om de werkmodus van de Expert Advisor te bepalen
//--- idx=0 - in dit geval controleert EA handelsvoorwaarden bij elke tick
//--- idx=1 - in dit geval controleert EA handelsvoorwaarden alleen bij nieuws bars
   int idx   =StartIndex();
//--- controle van de voorwaarden om een lange positie te openen
//--- vorming van het Piercing Line patroon en CCI<-50
   if(CheckCandlestickPattern(CANDLE_PATTERN_PIERCING_LINE) && (CCI(1)<-50))
     result=80;
//--- controle van de voorwaarden om de korte positie te sluiten
//--- signaallijn kruising van overgekochte/ondergewaardeerde niveaus (omlaag -80, omlaag -80)
   if(((CCI(1)>-80) && (CCI(2)<-80)) || ((CCI(1)<80) && (CCI(2)>80)))
     result=40;
//--- resultaat retourneren
   return(result);
  }

2.2. Open korte positie/Sluit lange positie

  1. De vorming van het "Dark Cloud Cover" 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 lange positie moet worden gesloten als de CCI indicator omlaag is gekruist over de -80 of 80 niveaus.

//+------------------------------------------------------------------+
//| Controleert de voorwaarden voor toegang en uitgang van de markt |
//| 1) Markttoegang (open korte positie, resultaat=80) |
//| 2) Marktafgang (sluit lange positie, resultaat=40) |
//+------------------------------------------------------------------+
int CDC_PL_CCI::ShortCondition()
  {
   int result=0;
//--- idx kan worden gebruikt om de werkmodus van de Expert Advisor te bepalen
//--- idx=0 - in dit geval controleert EA handelsvoorwaarden bij elke tick
//--- idx=1 - in dit geval controleert EA handelsvoorwaarden alleen bij nieuws bars
   int idx   =StartIndex();
//--- controle van de voorwaarden om een korte positie te openen
//--- vorming van het Dark Cloud Cover patroon en CCI>50
   if(CheckCandlestickPattern(CANDLE_PATTERN_DARK_CLOUD_COVER) && (CCI(1)>50))
     result=80;
//--- controle van de voorwaarden om de lange positie te sluiten
//--- signaallijn kruising van overgekochte/ondergewaardeerde niveaus (omlaag -80, omhoog 80)
   if(((CCI(1)<80) && (CCI(2)>80)) || ((CCI(1)<-80) && (CCI(2)>-80)))
     result=40;
//--- resultaat retourneren
   return(result);
  }


2.3. Een Expert Advisor maken met behulp van MQL5 Wizard

De CDC_PL_CCI klasse is niet opgenomen in de Standaard Bibliotheek klassen. Om deze te gebruiken, is het noodzakelijk om het acdc_pl_cci.mqh bestand te downloaden (zie bijlagen) en dit 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 gebruiken in MQL5 Wizard na het herstarten van de MetaEditor.

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

Fig. 4. Creating Expert Advisor using MQL5 Wizard

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

Laten we de naam van de Expert Advisor specificeren:

Fig. 5. General properties of the Expert Advisor

Fig. 5. Algemene eigenschappen van de Expert Advisor

Daarna moeten we de modules van handelsignalen selecteren die worden gebruikt.

Fig. 6. Signal properties of the Expert Advisor

Fig. 6. Signaleigenschappen van de Expert Advisor

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

De module van handelsignalen gebaseerd op "Dark Cloud Cover/Piercing Line bevestigd door CCI":

Fig. 7. Signal properties of the Expert Advisor

Fig. 7. Signaleigenschappen van de Expert Advisor

Module van handelsignalen toegevoegd:

Fig. 8. Signal properties of the Expert Advisor

Fig. 8. Signaleigenschappen van de Expert Advisor

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

Fig. 9. Trailing properties of the Expert Advisor

Fig. 9. Trailing eigenschappen van de Expert Advisor

Wat betreft de geldbeheer eigenschappen, we zullen "Handelen met een vaste handelsomvang" gebruiken:

Fig. 10. Money management properties of the Expert Advisor

Fig. 10. Geldbeheer eigenschappen van de Expert Advisor

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

De standaard invoerparameters van de gegenereerde Expert Advisor:

//--- invoerparameters voor het hoofd signaal
input int            Signal_ThresholdOpen   =10;     // Drempelwaarde voor het openen van signalen [0...100]
input int            Signal_ThresholdClose  =10;     // Drempelwaarde voor het sluiten van signalen [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 voor het openen van signalen [0...100]
input int            Signal_ThresholdClose  =20;     // Drempelwaarde voor het sluiten van signalen [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 van de drempel gespecificeerd:

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

De Expert Advisor, gegenereerd door de MQL5 Wizard, opent en sluit posities op basis van de "stemmen" van de modules van handelsignalen. De stem van de hoofmodule (als container, deze bestaat 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 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 data bekijken (EURUSD H1, testperiode: 2010.01.01-2011.03.16, PeriodCCI=15, MA_period=19).

Bij het creëren van de Expert Advisor hebben we de vaste volume (Vast Lot Handelen, 0.1) gebruikt. De Trailing Stop-algoritme is niet gebruikt (Trailing niet gebruikt).

Fig. 11. Testing results of the Expert Advisor, based on Dark Cloud Cover/Piercing Line + CCI

Fig. 11. Testresultaten van de Expert Advisor, gebaseerd op Dark Cloud Cover/Piercing Line + CCI


De beste set invoerparameters kan worden gevonden met behulp van de Strategy Tester van de MetaTrader 5 clientterminal.

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


Lijst
Reactie 0