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

Mike 2011.02.25 02:06 17 0 0
Bijlage

Met de MQL5 Wizard kun je kant-en-klare Expert Advisors maken op basis van de Standaard bibliotheek die samen met de client terminal wordt geleverd. Dit maakt het mogelijk om je handelsideeën snel te controleren; je hoeft alleen maar je eigen handelsignalenklasse te creëren. De structuur van deze klasse en een voorbeeld daarvan vind je in het artikel MQL5 Wizard: Hoe een Module van Handelsignalen te Creëren.

Het idee is simpel: de klasse van handelsignalen is afgeleid van CExpertSignal. Vervolgens moet je de LongCondition() en ShortCondition() virtuele methoden overschrijven met je eigen methoden.

In het boek "Strategieën van Beste Traders" (in het Russisch) worden veel handelsstrategieën behandeld. Wij focussen ons hier op omkeer candlestick patronen, bevestigd door de Stochastic, CCI, MFI en RSI oscillatoren.

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

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


1. "Dark Cloud Cover" en "Piercing Line" omkeer candlestick patronen

1.1. Dark Cloud Cover

Dit is een bearish omkeerpatroon dat zich aan het einde van een opwaartse trend voordoet. Op de eerste dag vormt zich een lange witte candlestick en op de tweede dag ontstaat er een gap omhoog. Echter, de tweede dag sluit onder het midden van de eerste dag.

Fig. 1. 'Dark Cloud Cover' candlestick patroon

Fig. 1. 'Dark Cloud Cover' candlestick patroon

De herkenning van het "Dark Cloud Cover" patroon is 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 vorige body)
      (MidOpenClose(2)>CloseAvg(1))  && // (opwaartse trend)
      (Open(1)>High(2)))                // (open op nieuw hoogtepunt)
      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 zet de neerwaartse trend voort. 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 wordt gevormd. Deze prijsactie is niet zo gemakkelijk waar te nemen met staafdiagrammen als met candlestick diagrammen. Hoe dieper de sluiting van de tweede dag in de body van de eerste dag komt, hoe waarschijnlijker het is dat het omkeersignaal zal slagen.

Figuur 2. 'Piercing Line' candlestick patroon

Figuur 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 vorige body) 
      (MidOpenClose(2)<CloseAvg(2)) && // (neerwaartse trend)
      (Open(1)<Low(2)))                // (open lager dan 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 Stochastic indicator

De handelsignalen om een lange of korte positie te openen moeten worden bevestigd door de Stochastic oscillator. De %D lijn moet hoger/lager zijn dan de corresponderende kritieke niveaus (30 of 70).

Het sluiten van een geopende positie hangt af van de waarden van de %D indicator. Dit kan op 2 manieren:

  • als de %D lijn het tegenovergestelde kritieke niveau heeft bereikt (80 voor een lange positie en 20 voor een korte positie)
  • als het omkeersignaal niet wordt bevestigd (wanneer de %D lijn de volgende niveaus bereikt: 20 voor een lange positie en 80 voor een korte positie)

Figuur 3. 'Dark Cloud Cover' patroon, bevestigd door Stochastic indicator

Figuur 3. 'Dark Cloud Cover' patroon, bevestigd door Stochastic indicator


2.1. Open lange positie/Sluit korte positie

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

  2. De korte positie 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 van de markt |
//| 1) Markttoegang (open lange positie, resultaat=80) |
//| 2) Marktuitgang (sluit korte positie, resultaat=40) |
//+------------------------------------------------------------------+
int CDC_PL_Stoch::LongCondition()
  {
   int result=0;
//--- idx kan worden gebruikt om de werkwijze 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 voorwaarden voor het openen van een lange positie
//--- vorming van het Piercing Line patroon en signaallijn<30
  if (CheckCandlestickPattern(CANDLE_PATTERN_PIERCING_LINE) && (StochSignal(1)<30))
     result=80;
//--- controle van voorwaarden voor het sluiten van een korte positie
//--- signaallijn crossover van overbought/oversold niveaus (omlaag 20, omhoog 80)
   if((((StochSignal(1)>20) && (StochSignal(2)<20)) ||
       ((StochSignal(1)>80) && (StochSignal(2)<80))))
     result=40;
//--- return resultaat
   return(result);
  }

2.2. Open korte positie/Sluit lange positie

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

  2. De lange positie moet worden gesloten als de signaallijn van de Stochastic indicator naar beneden is gekruist over de 80 of 20 niveaus.

//+------------------------------------------------------------------+
//| Controleert de voorwaarden voor toegang en uitgang van de markt |
//| 1) Markttoegang (open korte positie, resultaat=80) |
//| 2) Marktuitgang (sluit lange positie, resultaat=40) |
//+------------------------------------------------------------------+
int CDC_PL_Stoch::ShortCondition()
  {
   int result=0;
//--- idx kan worden gebruikt om de werkwijze 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 voorwaarden voor het openen van een korte positie
//--- vorming van het Dark Cloud Cover patroon en signaallijn>70
  if (CheckCandlestickPattern(CANDLE_PATTERN_DARK_CLOUD_COVER) && (StochSignal(1)>70))
     result=80;
//--- controle van voorwaarden voor het sluiten van een lange positie
//--- signaallijn crossover van overbought/oversold niveaus (omlaag 80, omhoog 20)
   if((((StochSignal(1)<80) && (StochSignal(2)>80)) ||
       ((StochSignal(1)<20) && (StochSignal(2)>20))))
     result=40;
//--- return resultaat
   return(result);
  }


2.3. Een Expert Advisor maken met behulp van MQL5 Wizard

De CDC_PL_Stoch klasse is niet opgenomen in de Standaard Bibliotheek klassen. Om deze te gebruiken, is het noodzakelijk om het adc_pl_stoch.mqh bestand te downloaden (zie bijlagen) en 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 maken, start je de MQL5 Wizard:

Figuur 4. Een Expert Advisor maken met MQL5 Wizard

Figuur 4. Een Expert Advisor maken met MQL5 Wizard

Laten we de naam van de Expert Advisor opgeven:

Figuur 5. Algemene eigenschappen van de Expert Advisor

Figuur 5. Algemene eigenschappen van de Expert Advisor

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

Figuur 6. Signaal eigenschappen van de Expert Advisor

Figuur 6. Signaal eigenschappen van de Expert Advisor

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

Voeg de module "Signalen op Basis van Dark Cloud Cover/Piercing Line bevestigd door Stochastic" toe:

Figuur 7. Signaal eigenschappen van de Expert Advisor

Figuur 7. Signaal eigenschappen van de Expert Advisor

Module van handelsignalen toegevoegd:

Figuur 8. Signaal eigenschappen van de Expert Advisor

Figuur 8. Signaal eigenschappen van de Expert Advisor

Je kunt allerlei trailing eigenschappen selecteren, maar wij zullen "Trailing Stop niet gebruikt" gebruiken:

Figuur 9. Money management eigenschappen van de Expert Advisor

Figuur 9. Money management eigenschappen van de Expert Advisor

Wat betreft de money management eigenschappen, we zullen "Handelen met vaste handelsvolume" gebruiken:

Figuur 10. Money management eigenschappen van de Expert Advisor

Figuur 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_ADC_PL_Stoch.mq5, opgeslagen in terminal_data_folder\MQL5\Experts\.

De standaard invoerparameters van de gegenereerde Expert Advisor:

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

//--- inputs voor hoofd signaal
input int            Signal_ThresholdOpen   =40;     // Signaal drempelwaarde om te openen [0...100]
input int            Signal_ThresholdClose  =20     // Signaal 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 vaste waarden voor de drempel gedefinieerd:

  • 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, deze bestaat uit alle toegevoegde modules) wordt ook gebruikt, maar de LongCondition() en ShortCondition() methoden retourneren altijd 0.

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 deze factor bij het instellen van de drempelwaarden. Vanwege deze factor 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 sluitcondities 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.02.02, PeriodK=9, PeriodD=5, PeriodSlow=20, MA_period=27).

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

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

Figuur 11. Testresultaten van de Expert Advisor, gebaseerd op Dark Cloud Cover/Piercing Line + 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_adc_pl_stoch.mq5.


Lijst
Reactie 0