MQL5 Wizard maakt het mogelijk om automatisch de code voor Expert Advisors te genereren. Voor meer informatie, zie Klaar om te gebruiken Expert Advisors in MQL5 Wizard.
In dit artikel bespreken we een strategie die gebaseerd is op prijsoverschrijvingen met de Moving Average indicator. Deze strategie wordt aangeduid als "Signalen gebaseerd op prijsoverschrijvingen met MA" wanneer je een EA automatisch aanmaakt met de MQL5 Wizard.
De handelssignalen:
- Kopen: prijs kruist omhoog met de Moving Average.
- Verkopen: prijs kruist omlaag met de Moving Average.
- De controle op stijging/daling van de MA wordt gebruikt om valse signalen te filteren.
Deze strategie is geïmplementeerd in de CSignalMA klasse van de Trading Strategie klassen van de MQL5 Standaardbibliotheek (te vinden in MQL5\Include\Expert\Signal\SignalMA.mqh).

Figuur 1. Handelssignalen op basis van prijsoverschrijvingen met de Moving Average
Handelssignalen
De handelsstrategie is geïmplementeerd in de CSignalMA klasse. Deze klasse bevat enkele beschermde methoden om de toegang tot indicatoren en prijswaarden te vereenvoudigen:
double MA(int ind) // retourneert de waarde van de moving average van de bar double Open(int ind) // retourneert de openingsprijs van de bar double Close(int ind) // retourneert de sluitprijs van de bar double StateMA(int ind) // retourneert positieve waarde als het gemiddelde stijgt en negatief als het daalt double StateOpen(int ind) // retourneert het verschil tussen de openingsprijs en de moving average double StateClose(int ind) // retourneert het verschil tussen de sluitprijs en de moving average
1. Open een lange positie
Voorwaarden om een lange positie te openen (prijsoverschrijding met MA en controleren van MA-stijging):
- Open(1)<MA(1): openingsprijs is lager dan de moving average;
- Close(1)>MA(1): sluitprijs is hoger dan de moving average;
- MA(1)>MA(2): controleer stijging van de moving average (om valse signalen te filteren).
//+------------------------------------------------------------------+ //| Controleert voorwaarden om een lange positie te openen (kopen) | //+------------------------------------------------------------------+ bool CSignalMA::CheckOpenLong(double& price,double& sl,double& tp,datetime& expiration) { price=0.0; sl =0.0; tp =0.0; //--- prijs heeft de MA omhoog gekruist en MA stijgt return(StateOpen(1)<0 && StateClose(1)>0 && StateMA(1)>0); }
2. Sluit lange positie
Voorwaarden om een lange positie te sluiten (prijsoverschrijding met MA en controleren van MA-daling):
- Open(1)>MA(1): openingsprijs is hoger dan de moving average;
- Close(1)<MA(1): sluitprijs is lager dan de moving average;
- MA(1)<MA(2): controleer daling van de moving average (om valse signalen te filteren).
//+------------------------------------------------------------------+ //| Controleert voorwaarden om een lange positie te sluiten | //+------------------------------------------------------------------+ bool CSignalMA::CheckCloseLong(double& price) { price=0.0; //--- prijs heeft de moving average omlaag gekruist en moving average daalt return(StateOpen(1)>0 && StateClose(1)<0 && StateMA(1)<0); }
3. Open een korte positie
De voorwaarden om een korte positie te openen zijn dezelfde als de voorwaarden voor het sluiten van een lange positie.
//+------------------------------------------------------------------+ //| Controleert voorwaarden om een korte positie te openen (verkopen) | //+------------------------------------------------------------------+ bool CSignalMA::CheckOpenShort(double& price,double& sl,double& tp,datetime& expiration) { price=0.0; sl =0.0; tp =0.0; //--- prijs heeft de moving average omhoog gekruist en moving average daalt return(StateOpen(1)>0 && StateClose(1)<0 && StateMA(1)<0); }
4. Sluit korte positie
De voorwaarden om een korte positie te sluiten zijn dezelfde als de voorwaarden voor het openen van een lange positie.
//+------------------------------------------------------------------+ //| Controleert voorwaarden om een korte positie te sluiten | //+------------------------------------------------------------------+ bool CSignalMA::CheckCloseShort(double& price) { price=0.0; //--- prijs heeft de moving average omhoog gekruist en moving average stijgt return(StateOpen(1)<0 && StateClose(1)>0 && StateMA(1)>0); } //+------------------------------------------------------------------+
Een Expert Advisor maken met MQL5 Wizard
Om een handelsrobot te creëren op basis van de strategie moet je de signaalparameters kiezen als "Signalen gebaseerd op prijsoverschrijvingen met MA" in de optie "Klaar om te gebruiken Expert Advisors" van MQL5 Wizard:

Figuur 2. Kies "Signalen gebaseerd op prijsoverschrijvingen met MA" in MQL5 Wizard
Vervolgens moet je het benodigde trailing stop algoritme en het geld- en risicomanagement systeem specificeren. De code van de Expert Advisor wordt automatisch aangemaakt, je kunt deze compileren en testen in de Strategietester van de MetaTrader 5 client terminal.
Testresultaten
Laten we de backtesting van de Expert Advisor op historische data bekijken (EURUSD H1, aangepaste periode: 1.1.2010-05.01.2011, MA_period=12, MA_Shift=0).
Bij het creëren van de Expert Advisor hebben we het vaste volume gebruikt (Handel met Vaste Lot, 0.1), het Trailing Stop algoritme is niet gebruikt (Trailing niet gebruikt).

Figuur 3. Historische backtestingresultaten van de Expert Advisor, gebaseerd op prijsoverschrijvingen met MA
Bijlagen: De SignalMA.mqh met CSignalMA klasse (inbegrepen in MQL5 Standaardbibliotheek) is te vinden in de MQL5\Include\Expert\Signal map. Het bestand crossoverma.mq5 bevat de code van de Expert Advisor, gemaakt met behulp van MQL5 Wizard.
Reactie 0