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

Mike 2011.02.25 19:49 52 0 0
Bijlage

Met de MQL5 Wizard kun je eenvoudig kant-en-klare Expert Advisors (EA's) maken, gebaseerd op de Standaardbibliotheek van MetaTrader 5. Dit stelt je in staat om jouw handelsideeën snel te toetsen. Alles wat je hoeft te doen, is een eigen handelsignalenklasse te creëren. De structuur van deze klasse en een voorbeeld vind je in het artikel MQL5 Wizard: Hoe maak je een module voor handelsignalen?.

Het basisidee is als volgt: de klasse voor handelsignalen is afgeleid van CExpertSignal. Vervolgens moet je de LongCondition() en ShortCondition() virtuele methoden overschrijven met je eigen methoden.

Er is een boek getiteld "Strategieën van de beste traders" (in het Russisch), waarin verschillende handelsstrategieën worden besproken. Wij zullen ons richten op omkeer candlestick patronen, die bevestigd worden door de Stochastische, 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 candlestick patronen. Voor de bevestiging van handelsignalen, gegenereerd door candlestick patronen, is het voldoende om een klasse te schrijven, afgeleid van CCandlePattern, en daar de benodigde functies toe te voegen (bijvoorbeeld bevestiging door oscillators).

Hier beschouwen we de signalen die zijn gebaseerd op het "Dark Cloud Cover/Piercing Line" omkeer candlestick patroon, bevestigd door de Market Facilitation Index (MFI) indicator. De module van 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. "Dark Cloud Cover" en "Piercing Line" omkeer candlestick patronen

1.1. Dark Cloud Cover

Dit is een bearish omkeer candlestick patroon dat zich aan het einde van een opwaartse trend voordoet. Op de eerste dag wordt een lange witte candlestick gevormd, gevolgd door een gap omhoog op de tweede dag. 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 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 het vorige lichaam)
      (MidOpenClose(2)>CloseAvg(1))  && // (opwaartse trend)
      (Open(1)>High(2)))                // (open bij nieuwe high)
      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 versterkt de neerwaartse trend. Echter, de sluiting van de tweede dag is boven het midden van het lichaam van de eerste dag. Dit suggereert aan de beren dat er een bodem kan worden gevormd. Deze prijsactie is niet zo goed waarneembaar met bar charts als met candlestick charts. Hoe dieper de sluiting op de tweede dag in het lichaam 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 het vorige lichaam) 
      (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 de MFI indicator

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

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

  • als de MFI het tegenovergestelde kritieke niveau heeft bereikt (70 voor lange posities en 30 voor korte posities)
  • als het omkeersignaal niet wordt bevestigd (wanneer de MFI indicator de volgende niveaus bereikt: 30 voor lange posities en 70 voor korte posities)

Fig. 3.

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


  • int CDC_PL_MFI::LongCondition() - controleert de voorwaarden om een lange positie te openen (terugkeer 80) en sluiting van de korte positie (terugkeer 40);
  • int CDC_PL_MFI::ShortCondition() - controleert de voorwaarden om een korte positie te openen (terugkeer 80) en sluiting van de lange positie (terugkeer 40).

2.1. Open lange positie/Sluit korte positie

  1. De vorming van het "Morning Star" 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 korte positie moet worden gesloten als de MFI indicator omhoog de kritieke niveaus heeft gekruist (70 of 30).

//+------------------------------------------------------------------+
//| Controleert voorwaarden voor toegang en uitgang uit de markt |
//| 1) Markttoegang (open lange positie, resultaat=80) |
//| 2) Marktsluiting (sluit korte positie, resultaat=40) |
//+------------------------------------------------------------------+
int CDC_PL_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 voorwaarden om een lange positie te openen
//--- vorming van het Piercing Line patroon en MFI<40
  if(CheckCandlestickPattern(CANDLE_PATTERN_PIERCING_LINE) && (MFI(1)<40))
     result=80;
//--- controle van voorwaarden om een korte positie te sluiten
//--- signaallijn crossover van overgekochte/oververkochte 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 korte positie/Sluit lange positie

  1. De vorming van het "Dark Cloud Cover" 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 lange positie moet worden gesloten als de MFI indicator omhoog de kritieke niveaus heeft gekruist (70 of 30).

//+------------------------------------------------------------------+
//| Controleert voorwaarden voor toegang en uitgang uit de markt |
//| 1) Markttoegang (open korte positie, resultaat=80) |
//| 2) Marktsluiting (sluit lange positie, resultaat=40) |
//+------------------------------------------------------------------+
int CDC_PL_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 voorwaarden om een korte positie te openen
//--- vorming van het Dark Cloud Cover patroon en MFI>60
  if(CheckCandlestickPattern(CANDLE_PATTERN_DARK_CLOUD_COVER) && (MFI(1)>60))
     result=80;
//--- controle van voorwaarden om een lange positie te sluiten
//--- signaallijn crossover van overgekochte/oververkochte 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. Het creëren van een Expert Advisor met behulp van MQL5 Wizard

De CDC_PL_MFI klasse is niet opgenomen in de klassen van de Standaardbibliotheek. Om deze te gebruiken, moet je het adc_pl_mfi.mqh bestand downloaden (zie bijlagen) en het opslaan 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 herstart van de MetaEditor.

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

Fig. 4. Het creëren van een Expert Advisor met behulp van MQL5 Wizard

Fig. 4. Het creëren van een Expert Advisor 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 de gebruikte handelsignalen selecteren.

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 op basis van Dark Cloud Cover/Piercing Line bevestigd door MFI" 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 geldbeheer eigenschappen, zullen we "Handelen met vaste handelsvolume" gebruiken:

Fig. 10. Geldbeheer eigenschappen van de Expert Advisor

Fig. 10. Geldbeheer eigenschappen van de Expert Advisor

Door op de "Voltooi" knop te drukken, krijgen we de code van de gegenereerde Expert Advisor, gelegen in Expert_ADC_PL_MFI.mq5, die zal worden opgeslagen in 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    // Prijspunt 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    // Prijspunt 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 drempelwaarden opgegeven:

  • 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 hoofdmodule (als container, die 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 in de "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 dit feit moeten de ThresholdOpen en ThresholdClose ingesteld worden 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 data bekijken (EURUSD H1, testperiode: 2010.01.01-2011.03.16, PeriodMFI=49, MA_period=11).

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

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

Fig. 11. Testresultaten van de Expert Advisor, gebaseerd op Dark Cloud Cover/Piercing Line + 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 de MQL5 Wizard, is bijgevoegd in expert_adc_pl_mfi.mq5.


Lijst
Reactie 0