Home Systeemhandel Bericht

MQL5 Wizard: Handelsignalen Geïnspireerd Door Morning/Evening Stars + MFI voor MetaTrader 5

Bijlage
323.zip (6.46 KB, Downloaden 3 keer)

Met de MQL5 Wizard kun je eenvoudig kant-en-klare Expert Advisors (EA's) maken op basis van de standaard bibliotheek die samen met de client terminal wordt geleverd (bekijk Hoe je kant-en-klare Expert Advisors maakt in MQL5 Wizard voor meer details). Dit stelt je in staat om je handelsideeën snel te testen; alles wat je nodig hebt is een eigen class voor handelsignalen. De structuur van deze class en een voorbeeld vind je in het artikel MQL5 Wizard: Hoe maak je een module voor handelsignalen.

Het algemene idee is als volgt: de class voor 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 de beste traders" (in het Russisch) worden veel handelsstrategieën besproken. Wij focussen ons hier op omkeer candlestick patronen, die bevestigd worden door Stochastic, CCI, MFI en RSI oscillators.

De beste manier is om een aparte class 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 class te schrijven, afgeleid van CCandlePattern, en daar de nodige functionaliteiten (bijvoorbeeld bevestiging door oscillators) aan toe te voegen.

Hier gaan we de signalen bekijken die zijn gebaseerd op de "Morning Star/Evening Star" (Morning Doji Star/Evening Doji Star) omkeer candlestick patronen, bevestigd door de MFI indicator. De module van handelsignalen is gebaseerd op de CCandlePattern class. Het is een eenvoudig voorbeeld van het gebruik ervan voor het creëren van handelsignalen met candlestick patronen.

1. "Morning Star" en "Evening Star" omkeer candlestick patronen

1.1. Morning Star

Dit patroon geeft een omkeer van de dalende trend aan en bestaat uit drie candles (Fig. 1). Na een lange zwarte candle verschijnt 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 de candle betekent dat de krachten van de bulls en bears gelijk zijn en dat de markt klaar is om van trend te veranderen.

De derde candle van het patroon is de bullish candle, waarvan het lichaam niet overlapt met dat 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 Figuur 1.

In het geval dat de tweede candle lijkt op een doji, wordt het model "Morning Doji Star" genoemd.

Fig. 1.

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

De identificatie van het "Morning Star" patroon is geïmplementeerd in de methoden CheckPatternMorningStar() en CheckPatternMorningDoji() van de CCandlePattern class:

//+------------------------------------------------------------------+
//| Controleer 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 body
      (MathAbs(Close(2)-Open(2)<AvgBody(1)*0.5) && // tweede candle heeft klein lichaam (lager dan de helft van het gemiddelde 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)))                  // sluiting van de laatste voltooide candle is hoger dan het midden van de eerste 
      return(true);
//---
   return(false);
  }
//+------------------------------------------------------------------+
//| Controleer 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 body 
      (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))             && // omhoog gap bij de laatste voltooide candle
      (Close(1)>Close(2)))             // sluiting van de laatste voltooide candle is hoger dan sluiting van de tweede
      return(true);
//---
   return(false);
  }

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


1.2. Evening Star

Dit patroon geeft de omkeer van een opgaande trend aan en 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 de candle betekent dat de krachten van de bulls en bears gelijk zijn en dat de markt klaar is om van trend te veranderen.

De derde candle van het patroon is de bearish candle, waarvan het lichaam niet overlapt met dat 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 Figuur 2.

In het geval dat de tweede candle lijkt op een doji, wordt het model "Evening Doji Star" genoemd.

Fig. 2.

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:

//+------------------------------------------------------------------+
//| Controleer de vorming van het "Evening Star" patroon                    |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternEveningStar()
  {
//--- Evening Star
   if((Close(3)-Open(3)>AvgBody(1))             && // bullish candle met lichaam groter dan gemiddelde body 
      (MathAbs(Close(2)-Open(2)<AvgBody(1)*0.5) && // tweede candle heeft een klein lichaam (lager dan de helft van het gemiddelde)
      (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 voltooide candle is lager dan het midden van de eerste 
      return(true);
//---
   return(false);
  }
//+------------------------------------------------------------------+
//| Controleer 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 groter dan gemiddelde 
      (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 voltooide candle
      (Close(1)<Close(2)))             // sluiting van de laatste voltooide candle is lager dan sluiting van de tweede 
      return(true);
//---
   return(false);
  }

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


2. Handelsignalen, bevestigd door de MFI indicator

De handelsignalen om een lange of korte positie te openen moeten worden bevestigd 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).

De sluiting van een geopende positie hangt af van de waarden van de MFI indicator. Dit kan op 2 manieren gebeuren:

  1. als MFI het tegenovergestelde kritieke niveau bereikt (70 voor lange posities en 30 voor korte posities)
  2. als het omgekeerde signaal niet wordt bevestigd (wanneer de MFI indicator de volgende niveaus bereikt: 30 voor lange posities en 70 voor korte posities)

Figuur 3. Het

Figuur 3. Het "Morning Star" patroon, bevestigd door de MFI indicator


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

2.1. Open lange positie/Sluit korte positie

  1. De vorming van het "Morning Star" patroon moet worden bevestigd door de MFI indicator: MFI(1)<40 (de waarde van de MFI indicator van de laatste voltooide bar moet lager zijn dan 40).

  2. De korte positie moet worden gesloten als de MFI indicator de kritieke niveaus (70 of 30) omhoog heeft gekruist.

//+------------------------------------------------------------------+
//| Controleert de voorwaarden voor de toegang en uitgang van de markt                 |
//| 1) Markttoegang (open lange positie, resultaat=80)                  |
//| 2) Marktafgang (sluit korte positie, resultaat=40)                 |
//+------------------------------------------------------------------+
int CMS_ES_MFI::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 nieuws bars
  int idx   =StartIndex();
//--- controle van de voorwaarden voor het openen van een lange positie
//--- vorming van het Morning Star patroon en MFI<40
  if(CheckCandlestickPattern(CANDLE_PATTERN_MORNING_STAR) && (MFI(1)<40))
     result=80;
//--- controle van de voorwaarden voor het sluiten van de korte positie
//--- signaallijn oversteken van overgekochte/oververkochte niveaus (omhoog 30, omhoog 70)
  if(((MFI(1)>30) && (MFI(2)<30)) || ((MFI(1)>70) && (MFI(2)<70)))
     result=40;
//--- resultaat retourneren
   return(result);
  }


2.2. Open korte positie/Sluit lange positie

  1. De vorming van het "Evening Star" patroon moet worden bevestigd door de MFI indicator: MFI(1)>60 (de waarde van de MFI indicator van de laatste voltooide bar moet hoger zijn dan 60).

  2. De lange positie moet worden gesloten als de MFI indicator de kritieke niveaus (70 of 30) omhoog heeft gekruist.

//+------------------------------------------------------------------+
//| Controleert de voorwaarden voor de toegang en uitgang van de markt                 |
//| 1) Markttoegang (open korte positie, resultaat=80)                 |
//| 2) Marktafgang (sluit lange positie, resultaat=40)                  |
//+------------------------------------------------------------------+
int CMS_ES_MFI::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 nieuws bars
  int idx   =StartIndex();
//--- controle van de voorwaarden voor het openen van een korte positie
//--- vorming van het Evening Star patroon en MFI>60
  if(CheckCandlestickPattern(CANDLE_PATTERN_EVENING_STAR) && (MFI(1)>60))
     result=80;
//--- controle van de voorwaarden voor het sluiten van de lange positie
//--- signaallijn oversteken van overgekochte/oververkochte niveaus (omhoog 70, omlaag 30)
   if(((MFI(1)>70) && (MFI(2)<70)) || ((MFI(1)<30) && (MFI(2)>30)))
     result=40;
//--- resultaat retourneren
   return(result);
  }


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

De CMS_ES_MFI class is niet opgenomen in de standaard bibliotheek classes. Om deze te gebruiken, is het noodzakelijk om het ams_es_mfi.mqh bestand te downloaden (zie bijlagen) en op te slaan 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 het herstarten 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 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.

Toevoegen van de "Signalen gebaseerd op Morning Star/Evening Star 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 we 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 money management eigenschappen, zullen we "Handelen met vaste handelsvolume" gebruiken:

Fig. 10. Money management eigenschappen van de Expert Advisor

Fig. 10. Money management eigenschappen van de Expert Advisor

Door op de knop "Voltooi" te drukken, krijgen we de code van de gegenereerde Expert Advisor, die zich bevindt in Expert_AMS_ES_MFI.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 vervangen worden 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 ons in staat om drempelniveaus voor het openen en sluiten van posities te specificeren.

In de code van de LongCondition() en ShortCondition() methoden van de handelsignalen class 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, die alle toegevoegde modules bevat) wordt ook gebruikt, maar de LongCondition() en ShortCondition() methoden retourneren altijd 0.

De stemresultaten van de hoofdmodule worden ook gebruikt bij de "stemmen" gemiddelden. 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 respectievelijk 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 sluiting van de posities alleen zal gebeuren wanneer de sluitvoorwaarden waar zijn.


2.4. Resultaten van backtesting van de geschiedenis

Laten we de backtesting van de Expert Advisor op historische gegevens bekijken (EURUSD H1, testperiode: 2010.01.01-2011.03.16, PeriodMFI=49, MA_period=3).

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

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

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


De beste set van invoerparameters kan gevonden worden 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_mfi.mq5.

Gerelateerde berichten

Reactie (0)