Home Systeemhandel Bericht

Handelssignalen met MQL5 Wizard: Morning/Evening Stars & CCI

Bijlage
322.zip (6.46 KB, Downloaden 0 keer)

De MQL5 Wizard stelt je in staat om kant-en-klare Expert Advisors te maken op basis van de Standaard bibliotheek die samen met de client terminal wordt geleverd. Hiermee kun je je handelsideeën snel toetsen; alles wat je nodig hebt is het creëren van je eigen handelsignalenklasse. 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 moet je de virtuele methoden LongCondition() en ShortCondition() 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 richten ons op omkerende candlestickpatronen, bevestigd door de Stochastic, CCI, MFI en RSI oscillators.

De beste manier is om een aparte klasse te maken, 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 nodige functies toe te voegen (bijvoorbeeld bevestiging door oscillators).

Hier bekijken we de signalen op basis van de "Morning Star/Evening Star" (Morning Doji Star/Evening Doji Star) omkerende candlestickpatronen, bevestigd door de CCI 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. "Morning Star" en "Evening Star" omkerende candlestickpatronen

1.1. Morning Star

Dit patroon geeft de omkering van een neerwaartse trend aan. Het bestaat uit drie candles (Fig. 1). Na een lange zwarte candle volgt er een candle (de kleur is niet belangrijk) met een klein lichaam, dat buiten het lichaam van de zwarte candle ligt. Het kleine lichaam van een candle betekent dat de krachten van de stieren en beren gelijk zijn en dat de markt klaar is om de trend te veranderen.

De derde candle van het patroon is de bullish candle; het lichaam ervan overlapt niet met het lichaam van de tweede candle, en de sluitprijs ligt binnen het lichaam van de eerste (bearish) candle. De resulterende candle van het model is ook weergegeven in Fig. 1.

Als de tweede candle een doji-achtige candle is, wordt het model "Morning Doji Star" genoemd.

Fig. 1. Morning Star en Morning Doji Star candlestick patronen

Fig. 1. "Morning Star" en "Morning Doji Star" candlestick patronen

De identificatie van het "Morning Star" patroon wordt uitgevoerd in de methoden CheckPatternMorningStar() en CheckPatternMorningDoji() van de CCandlePattern klasse:

//+------------------------------------------------------------------+
//| Controleert de vorming van het "Morning Star" patroon |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternMorningStar()
  {
//--- Morning Star
   if((Open(3)-Close(3)>AvgBody(1))
             && // bearish candle, zijn lichaam groter dan gemiddelde candle lichaam
      (MathAbs(Close(2)-Open(2)<AvgBody(1)*0.5) && // tweede candle heeft klein lichaam
      (Close(2)<Close(3))
      && // sluiting van de tweede candle is lager dan sluiting van de eerste
      (Open(2)<Open(3))
      && // opening van de tweede candle is lager dan opening van de eerste
      (Close(1)>MidOpenClose(3)))
      return(true);
//---
   return(false);
  }
//+------------------------------------------------------------------+
//| Controleert de vorming van het "Morning Doji Star" patroon |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternMorningDoji()
  {
//--- Morning Doji Star
   if((Open(3)-Close(3)>AvgBody(1)) && // bearish candle met lichaam groter dan gemiddelde candle lichaam
      (AvgBody(2)<AvgBody(1)*0.1)   && // de tweede candle heeft een zeer klein lichaam (doji)
      (Close(2)<Close(3))           && // sluiting van de tweede candle is lager dan sluiting van de eerste
      (Open(2)<Open(3))             && // opening van de tweede candle is lager dan opening van de eerste
      (Open(1)>Close(2))             && // up gap bij de laatste candle
      (Close(1)>Close(2)))             return(true);
//---
   return(false);
  }

De CheckCandlestickPattern(CANDLE_PATTERN_MORNING_STAR) en CheckCandlestickPattern(CANDLE_PATTERN_MORNING_DOJI) methoden van de CCandlePattern klasse worden gebruikt om de vorming van "Morning Star" en "Morning Doji Star" candlestick patronen te controleren.


1.2. Evening Star

Dit patroon geeft de omkering van een opwaartse trend aan en het bestaat uit drie candles (Fig. 2). Na een lange witte candle volgt er een candle (de kleur is niet belangrijk) met een klein lichaam, dat buiten het lichaam van de witte candle ligt. Het kleine lichaam van een candle betekent dat de krachten van de stieren en beren gelijk zijn en dat de markt klaar is om de trend te veranderen.

De derde candle van het patroon is de bearish candle; het lichaam ervan overlapt niet met het lichaam van de tweede candle, en de sluitprijs ligt binnen het lichaam van de eerste (bullish) candle. De resulterende candle van het model is ook weergegeven in Fig. 2.

Als de tweede candle een doji-achtige candle is, wordt het model "Evening Doji Star" genoemd.

Fig. 2. Evening Star en Evening Doji Star candlestick patronen

Fig. 2. "Evening Star" en "Evening Doji Star" candlestick patronen

Hier zijn de methoden voor het identificeren van "Evening Star" en "Evening Doji Star" patronen:

//+------------------------------------------------------------------+
//| Controleert de vorming van het "Evening Star" patroon |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternEveningStar()
  {
//--- Evening Star
   if((Close(3)-Open(3)>AvgBody(1))             && // bullish candle met lichaam hoger dan gemiddelde lichaam
      (MathAbs(Close(2)-Open(2)<AvgBody(1)*0.5) && // tweede candle heeft klein lichaam
      (Close(2)>Close(3))                   && // sluiting van de tweede candle is hoger dan sluiting van de eerste
      (Open(2)>Open(3))                     && // opening van de tweede candle is hoger dan opening van de eerste
      (Close(1)<MidOpenClose(3)))                  // sluiting van de laatste candle is lager dan het midden van de eerste
      return(true);
//---
   return(false);
  }
//+------------------------------------------------------------------+
//| Controleert de vorming van het "Evening Doji Star" patroon |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternEveningDoji()
  {
//--- Evening Doji Star
   if((Close(3)-Open(3)>AvgBody(1)) && // bullish candle met lichaam hoger dan gemiddelde lichaam
      (AvgBody(2)<AvgBody(1)*0.1)   && // tweede candle heeft een zeer klein lichaam (doji)
      (Close(2)>Close(3))           && // sluiting van de tweede candle is hoger dan sluiting van de eerste
      (Open(2)>Open(3))             && // opening van de tweede candle is hoger dan opening van de eerste
      (Open(1)<Close(2))             && // down gap bij de laatste candle
      (Close(1)<Close(2)))             return(true);
//---
   return(false);
  }

De CheckCandlestickPattern(CANDLE_PATTERN_EVENING_STAR) en CheckCandlestickPattern(CANDLE_PATTERN_EVENING_DOJI) methoden van de CCandlePattern klasse worden gebruikt om de vorming van "Evening Star" en "Evening Doji Star" candlestick patronen te controleren.


2. Handelsignalen, bevestigd door de CCI indicator

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

Het sluiten van geopende posities hangt af van de waarden van CCI. Dit kan in twee gevallen plaatsvinden:

  • als de CCI-lijn het tegenovergestelde kritieke niveau heeft bereikt (80 voor lange posities en -80 voor korte posities)
  • als het omgekeerde signaal niet wordt bevestigd (wanneer CCI de volgende niveaus bereikt: -80 voor lange posities en 80 voor korte posities)

Fig. 3. Het Evening Star patroon, bevestigd door CCI indicator

Fig. 3. Het "Evening Star" patroon, bevestigd door de CCI indicator


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

2.1. Lange positie openen/Korte positie sluiten

  1. De vorming van het "Morning Star" 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 kritieke niveau -80 of omlaag is gekruist onder het kritieke niveau 80.

//+------------------------------------------------------------------+
//| Controleert de voorwaarden voor toegang en uitgang van de markt |
//| 1) Markttoegang (lange positie openen, resultaat=80) |
//| 2) Marktuitgang (korte positie sluiten, resultaat=40) |
//+------------------------------------------------------------------+
int CMS_ES_CCI::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 nieuwsbar
   int idx   =StartIndex();
//--- controle van voorwaarden om een lange positie te openen
//--- vorming van Morning Star patroon en CCI<-50
   if(CheckCandlestickPattern(CANDLE_PATTERN_MORNING_STAR) && (CCI(1)<-50))
     result=80;
//--- controle van voorwaarden om de korte positie te sluiten
//--- signaallijn crossover van overbought/oversold niveaus (omlaag -80, omlaag -80)
   if(((CCI(1)>-80) && (CCI(2)<-80)) || ((CCI(1)<80) && (CCI(2)>80)))
     result=40;
//--- resultaat teruggeven
   return(result);
  }

2.2. Korte positie openen/Lange positie sluiten

  1. De vorming van het "Evening Star" 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 naar beneden is gekruist onder de -80 of 80 niveaus.

//+------------------------------------------------------------------+
//| Controleert de voorwaarden voor toegang en uitgang van de markt |
//| 1) Markttoegang (korte positie openen, resultaat=80) |
//| 2) Marktuitgang (lange positie sluiten, resultaat=40) |
//+------------------------------------------------------------------+
int CMS_ES_CCI::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 nieuwsbar
   int idx   =StartIndex();
//--- controle van voorwaarden om een korte positie te openen
//--- vorming van Evening Star patroon en CCI>50
   if(CheckCandlestickPattern(CANDLE_PATTERN_EVENING_STAR) && (CCI(1)>50))
     result=80;
//--- controle van voorwaarden om de lange positie te sluiten
//--- signaallijn crossover van overbought/oversold niveaus (omlaag -80, omhoog 80)
   if(((CCI(1)<80) && (CCI(2)>80)) || ((CCI(1)<-80) && (CCI(2)>-80)))
     result=40;
//--- resultaat teruggeven
   return(result);
  }


2.3. Een Expert Advisor maken met behulp van MQL5 Wizard

De CMS_ES_CCI klasse is niet opgenomen in de Standaard Bibliotheek klassen. Om deze te gebruiken, is het noodzakelijk om het bestand acms_es_cci.mqh te downloaden (zie bijlagen) en op te slaan in de client_terminal_data_folder\MQL5\Include\Expert\Signal\MySignals. Dit moet ook gedaan worden 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:

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 "Signalen op basis van Morning/Evening Stars bevestigd door CCI" van handelsignalen toe:

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 een vast handelsvolume" gebruiken:

Fig. 10. Geldbeheer eigenschappen van de 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, gelegen in Expert_AMS_ES_CCI.mq5, het wordt opgeslagen in terminal_data_folder\MQL5\Experts\.

De standaard invoerparameters van de gegenereerde Expert Advisor:

//--- inputs voor hoofd signaal
input int            Signal_ThresholdOpen   =10;     // Drempelwaarde voor openen [0...100]
input int            Signal_ThresholdClose  =10     // Drempelwaarde voor 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;     // Drempelwaarde voor openen [0...100]
input int            Signal_ThresholdClose  =20     // Drempelwaarde voor 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 de drempelniveaus in voor het openen en sluiten van posities.

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, 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 in de "stemmen" gemiddelde. 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 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 gegevens bekijken (EURUSD H1, testperiode: 2009.01.01-2011.03.16, PeriodCCI=25, MA_period=5).

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

Fig. 11. Testresultaten van de Expert Advisor, gebaseerd op Morning/Evening Stars + CCI

Fig. 11. Testresultaten van de Expert Advisor, gebaseerd op Morning/Evening Stars + CCI


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

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


Gerelateerde berichten

Reactie (0)