Home Systeemhandel Bericht

MQL5 Wizard: Handelsignalen Gebaseerd op Morning/Evening Stars + Stochastic voor MetaTrader 5

Bijlage
301.zip (6.6 KB, Downloaden 3 keer)

Met de MQL5 Wizard kun je kant-en-klare Expert Advisors (EA's) maken op basis van de Standaardbibliotheek klassen die samen met de clientterminal worden geleverd (zie Kant-en-klare Expert Advisors maken in MQL5 Wizard voor details). Dit maakt het mogelijk om je handelsideeën snel te testen; je hoeft alleen maar je eigen handelsignalenklasse te creëren. De structuur van deze klasse en een voorbeeld zijn te vinden in het artikel MQL5 Wizard: Hoe maak je een module van handelsignalen.

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

Er is een boek "Strategieën van de beste traders" (in het Russisch), waarin vele handelsstrategieën worden besproken. Wij zullen ons richten op omkeer-candlestickpatronen, bevestigd door Stochastic, CCI, MFI en RSI oscillators.

Het beste 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 (bijvoorbeeld bevestiging door oscillators) toe te voegen.

Hier bekijken we de signalen, gebaseerd op "Morning Star/Evening Star" (Morning Doji Star/Evening Doji Star) omkeer-candlestickpatronen, bevestigd door de Stochastic indicator. De module van handelsignalen is gebaseerd op de CCandlePattern klasse, en het is een eenvoudig voorbeeld van het gebruik voor het creëren van handelsignalen met candlestickpatronen.


1. "Morning Star" en "Evening Star" omkeer-candlestickpatronen

1.1. Morning Star

Dit patroon geeft de omkeer van een downtrend 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, die buiten het lichaam van de zwarte candle ligt. Het kleine lichaam van een candle betekent dat de krachten van de bulls en bears gelijk zijn en de markt klaar is om de trend te veranderen.

De derde candle van het patroon is de bullish candle, zijn lichaam 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 afgebeeld in Figuur 1.

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

Figuur 1.

Figuur 1. "Morning Star" en "Morning Doji Star" candlestickpatronen

De identificatie van het "Morning Star" patroon wordt uitgevoerd in de CheckPatternMorningStar() en CheckPatternMorningDoji() methoden 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 gemiddeld candle lichaam
      (MathAbs(Close(2)-Open(2)<AvgBody(1)*0.5) && // tweede candle heeft een klein lichaam (lager dan de helft van het gemiddelde lichaam)
      (Close(2)<Close(3))                       && // sluiting van de tweede candle is lager dan de 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);
  }
//+------------------------------------------------------------------+
//| 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 gemiddeld 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 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 klasse worden gebruikt om de vorming van "Morning Star" en "Morning Doji Star" candlestickpatronen te controleren.


1.2. Evening Star

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

De derde candle van het patroon is de bearish candle, zijn lichaam 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 afgebeeld in Figuur 2.

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

Figuur 2.

Figuur 2. "Evening Star" en "Evening Doji Star" candlestickpatronen

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 gemiddeld lichaam 
      (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);
  }
//+------------------------------------------------------------------+
//| 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 gemiddeld 
      (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 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 klasse worden gebruikt om de vorming van "Evening Star" en "Evening Doji Star" candlestickpatronen te controleren.


2. Handelsignalen, bevestigd door de Stochastic indicator

De handelsignalen om een lange of korte positie te openen moeten worden bevestigd door de Stochastic oscillator. De %D-lijn moet groter of kleiner zijn dan het bijbehorende kritieke niveau (30 of 70).

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

  1. Als de %D-lijn het tegenovergestelde kritieke niveau heeft bereikt (80 voor lange posities en 20 voor korte posities)
  2. Als het omkeersignaal niet wordt bevestigd (wanneer de %D-lijn de volgende niveaus bereikt: 20 voor lange posities en 80 voor korte posities)

Figuur 3.

Figuur 3. "Evening Star" patroon, bevestigd door Stochastic indicator



  • int CH_HM_Stoch::LongCondition() - controleert de voorwaarden om een lange positie te openen (geeft 80 terug) en sluit de korte positie (geeft 40 terug);
  • int CH_HM_Stoch::ShortCondition() - controleert de voorwaarden om een korte positie te openen (geeft 80 terug) en sluit 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 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) Marktafgang (sluit korte positie, resultaat=40)                  |
//+------------------------------------------------------------------+
int CMS_ES_Stoch::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 de handelsvoorwaarden bij elke tick
//--- idx=1 - in dit geval controleert de EA de handelsvoorwaarden alleen bij nieuws bars
  int idx   =StartIndex();
//--- controle van voorwaarden om een lange positie te openen
//--- vorming van het Morning Star patroon en signaallijn<30
  if (CheckCandlestickPattern(CANDLE_PATTERN_MORNING_STAR) && (StochSignal(1)<30))
     result=80;
//--- controle van voorwaarden om korte positie te sluiten
//--- 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;
//--- retourneer resultaat
   return(result);
  }

2.2. Korte positie openen/Lange positie sluiten

  1. De vorming van het "Evening Star" 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 omlaag 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) Marktafgang (sluit lange positie, resultaat=40)                     |
//+------------------------------------------------------------------+
int CMS_ES_Stoch::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 de handelsvoorwaarden bij elke tick
//--- idx=1 - in dit geval controleert de EA de handelsvoorwaarden alleen bij nieuws bars
  int idx   =StartIndex();
//--- controle van voorwaarden om een korte positie te openen
//--- vorming van het Evening Star en signaallijn>70
  if (CheckCandlestickPattern(CANDLE_PATTERN_EVENING_STAR) && (StochSignal(1)>70))
     result=80;
//--- controle van voorwaarden om lange positie te sluiten
//--- 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;
//--- retourneer resultaat
   return(result);
  }


2.3. Een Expert Advisor maken met behulp van MQL5 Wizard

De CMS_ES_Stoch klasse is niet opgenomen in de Standaardbibliotheek klassen. Om deze te gebruiken, is het noodzakelijk om het acms_es_stoch.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. Algemene eigenschappen van de Expert Advisor

Fig. 5. Algemene eigenschappen van de Expert Advisor

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

Fig. 6. Signal properties of the Expert Advisor

Fig. 6. Signal eigenschappen van de Expert Advisor

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

Toevoegen van de "Signals based on Morning/Evening Stars by Stochastic" module van handelsignalen:

Fig. 7. Signal properties of the Expert Advisor

Fig. 7. Signal eigenschappen van de Expert Advisor

Module van handelsignalen toegevoegd:

Fig. 8. Signal properties of the Expert Advisor

Fig. 8. Signal eigenschappen van de Expert Advisor

Je kunt elke 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 money management eigenschappen, zullen we "Handelen met vaste handelsvolume" gebruiken:

Fig. 10. Money management properties of the Expert Advisor

Fig. 10. Money management 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_Stoch.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;     // Signaaldrempelwaarde om te openen [0...100]
input int            Signal_ThresholdClose  =10     // Signaaldrempelwaarde om te sluiten [0...100]
input double         Signal_PriceLevel      =0.0    // Prijslijn 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;     // Signaaldrempelwaarde om te openen [0...100]
input int            Signal_ThresholdClose  =20     // Signaaldrempelwaarde om te sluiten [0...100]
input double         Signal_PriceLevel      =0.0    // Prijslijn 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 laten de drempelniveaus voor het openen en sluiten van posities specificeren.

In de code van de LongCondition() en ShortCondition() methoden van de handelsignalenklasse hebben we vaste waarden van de drempel aangegeven:

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

De stemresultaten van de hoofdmodule worden ook gebruikt bij het "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 beschouwen (EURUSD H1, testperiode: 2000.01.01-2011.03.16, PeriodK=12, PeriodD=8, PeriodSlow=29, MA_period=4).

Bij de creatie 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. Testing results of the Expert Advisor, based on Morning/Evening Stars + Stochastic

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


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 MQL5 Wizard, is bijgevoegd in expert_ams_es_stoch.mq5.


Gerelateerde berichten

Reactie (0)