MQL5 Wizard maakt het mogelijk om automatisch Expert Advisors te creëren, zonder dat je hoeft te programmeren (zie MQL5 Wizard: Expert Advisors maken zonder te programmeren).
Laten we het hebben over de handelsignalen die gebaseerd zijn op de Alligator technische indicator, ontwikkeld door B. Williams in zijn boek "Trading Chaos". De strategie heet "Signalen gebaseerd op de Alligator" (bij het automatisch aanmaken van EA in MQL5 Wizard).
Deze strategie is gebaseerd op drie voortschrijdende gemiddelden (Lips, Tanden en Kaak), en oscillatoren die berekend worden op basis van de verschillen tussen deze lijnen. Handelsignalen worden gegenereerd na de crossover van de Alligator-lijnen, afhankelijk van de trend die wordt bepaald door de volgorde van deze lijnen. In het geval van een opwaartse trend is de Lips-lijn (met de kortste periode) de hoogste, gevolgd door de Tanden-lijn, en de laagste is de Kaak-lijn. Het omgekeerde geldt voor een neerwaartse trend.
De handelsignalen:
- Open een long positie: crossover van de Alligator-lijnen en een toename van de afstand tussen hen in het geval van een opwaartse trend;
- Sluit de long positie: opwaartse crossover van de Lips-lijn met de Kaak-lijn;
- Open een short positie: crossover van de Alligator-lijnen en een toename van de afstand tussen hen in het geval van een neerwaartse trend;
- Sluit de short positie: neerwaartse crossover van de Lips-lijn met de Kaak-lijn;
Deze strategie is geïmplementeerd in de CSignalAlligator klasse.

Figuur 1. Handelsignalen, gebaseerd op de Alligator technische indicator
Handelsignalen
De handelsstrategie is geïmplementeerd in CSignalAlligator en heeft enkele beschermde methoden om de toegang tot indicatorwaarden te vereenvoudigen:
double Kaak(int ind) // retourneert de waarde van de Kaaklijn van de bar double Tanden(int ind) // retourneert de waarde van de Tandenlijn van de bar double Lips(int ind) // retourneert de waarde van de Lipslijn van de bar double LipsTandenVerschil(int ind) // retourneert het verschil tussen de Lips en Tanden lijnen double TandenKaakVerschil(int ind) // retourneert het verschil tussen de Tanden en Kaak lijnen double LipsKaakVerschil(int ind) // retourneert het verschil tussen de Lips en Kaak lijnen bool ControleerCrossover(); // gebruikt om de crossover van Alligator-lijnen te controleren
1. Open long positie
Het controleren van handelsvoorwaarden heeft enkele kenmerken, veroorzaakt door de verschuiving van de Lips, Tanden en Kaak lijnen.
Voorwaarden om een long positie te openen:
- De ControleerCrossover wordt gebruikt om de crossover en verdere toename van het verschil tussen de lijnen te bepalen;
- LipsTandenVerschil(-2)>=LipsTandenVerschil(-1) en LipsTandenVerschil(-1)>=LipsTandenVerschil(0); controleer op toename van het verschil tussen de Lips en Tanden lijnen;
- LipsTandenVerschil(0)>=0.0; de Lipslijn is hoger dan de Tandenlijn;
- TandenKaakVerschil(-2) >=TandenKaakVerschil(-1) en TandenKaakVerschil(-1) >=TandenKaakVerschil(0); controleer op toename van het verschil tussen de Tanden en Kaak lijnen;
- TandenKaakVerschil(0) >=0.0; de Tandenlijn is hoger dan de Kaaklijn.
//+------------------------------------------------------------------+ //| Controleert voorwaarden om een long positie (koop) te openen | //+------------------------------------------------------------------+ bool CSignalAlligator::ControleerOpenLong(double& prijs,double& sl,double& tp,datetime& vervaldatum) { if(ControleerCrossover()) return(false); //--- prijs=0.0; sl =0.0; tp =0.0; //--- if(LipsTandenVerschil(-2)>=LipsTandenVerschil(-1) && LipsTandenVerschil(-1)>=LipsTandenVerschil(0) && LipsTandenVerschil(0)>=0.0 && TandenKaakVerschil(-2) >=TandenKaakVerschil(-1) && TandenKaakVerschil(-1) >=TandenKaakVerschil(0) && TandenKaakVerschil(0) >=0.0) m_crossed=true; //--- return(m_crossed); }
2. Sluit long positie
Voorwaarden om een long positie te sluiten (let op de verschuiving van de lijnen):
- LipsTandenVerschil(-1)<0; de Lipslijn van de volgende bar (vanwege de verschuiving) is lager dan de Tandenlijn;
- LipsTandenVerschil(0)>=0; de Lipslijn van de huidige bar is hoger/gelijk aan de Tandenlijn;
- LipsTandenVerschil(1)>0; de Lipslijn van de vorige (voltooide) bar is hoger dan de Tandenlijn.
//+------------------------------------------------------------------+ //| Controleert voorwaarden om de long positie te sluiten | //+------------------------------------------------------------------+ bool CSignalAlligator::ControleerSluitLong(double& prijs) { prijs=0.0; //--- return(LipsTandenVerschil(-1)>0 && LipsTandenVerschil(0)<=0 && LipsTandenVerschil(1)<0); }
3. Open short positie
Voorwaarden om een short positie te openen:
- De ControleerCrossover wordt gebruikt om de crossover en verdere toename van het verschil tussen de lijnen te bepalen;
- LipsTandenVerschil(-2)<=LipsTandenVerschil(-1) en LipsTandenVerschil(-1)<=LipsTandenVerschil(0); controleer op toename van het verschil tussen de Lips en Tanden lijnen;
- LipsTandenVerschil(0)<=0.0; de Lipslijn van de huidige bar is lager dan de Tandenlijn;
- TandenKaakVerschil(-2)<=TandenKaakVerschil(-1) en TandenKaakVerschil(-1)<=TandenKaakVerschil(0); controleer op toename van het verschil tussen de Tanden en Kaak lijnen;
- TandenKaakVerschil(0) <=0.0; de Tandenlijn van de huidige bar is lager dan de Kaaklijn;
//+------------------------------------------------------------------+ //| Controleert voorwaarden om een short positie (verkoop) te openen | //+------------------------------------------------------------------+ bool CSignalAlligator::ControleerOpenShort(double& prijs,double& sl,double& tp,datetime& vervaldatum) { if(ControleerCrossover()) return(false); //--- prijs=0.0; sl =0.0; tp =0.0; //--- if(LipsTandenVerschil(-2)<=LipsTandenVerschil(-1) && LipsTandenVerschil(-1)<=LipsTandenVerschil(0) && LipsTandenVerschil(0)<=0.0 && TandenKaakVerschil(-2) <=TandenKaakVerschil(-1) && TandenKaakVerschil(-1) <=TandenKaakVerschil(0) && TandenKaakVerschil(0) <=0.0) m_crossed=true; //--- return(m_crossed); }
4. Sluit short positie
Voorwaarden om een short positie te sluiten:
- LipsTandenVerschil(-1)>0; de Lipslijn van de volgende bar (vanwege de verschuiving) is hoger dan de Tandenlijn;
- LipsTandenVerschil(0)<=0; de Lipslijn van de huidige bar is lager/gelijk aan de Tandenlijn;
- LipsTandenVerschil(1)<0; de Lipslijn van de vorige (voltooide) bar is lager dan de Tandenlijn.
//+------------------------------------------------------------------+ //| Controleert voorwaarden om een short positie te sluiten | //+------------------------------------------------------------------+ bool CSignalAlligator::ControleerSluitShort(double& prijs) { prijs=0.0; //--- return(LipsTandenVerschil(-1)>0 && LipsTandenVerschil(0)<=0 && LipsTandenVerschil(1)<0); }
Een Expert Advisor maken met behulp van MQL5 Wizard
Om een handelsrobot te creëren op basis van de strategie, moet je de signaalinstellingen selecteren als "Signalen gebaseerd op de Alligator" in de optie "Kant-en-klare Expert Advisors maken" van MQL5 Wizard:

Figuur 2. Selecteer "Signalen gebaseerd op de Alligator" in MQL5 Wizard
Vervolgens moet je het benodigde trailing stop algoritme en geld- en risicobeheer systeem opgeven. De code van de Expert Advisor wordt automatisch aangemaakt, je kunt deze compileren en testen in de Strategietester van de MetaTrader 5 clientterminal.
Testresultaten
Laten we de backtesting van de Expert Advisor op historische data bekijken (EURUSD H1, testperiode: 1.1.2010-05.01.2011, JawPeriod=13, JawShift=8, TeethPeriod=8, TeethShift=5, LipsPeriod=5, LipsShift=3, MaMethod=2, Applied=5, CrossMeasure=5).
Bij het creëren van de Expert Advisor hebben we een vast volume gebruikt (Vaste Lot Trading, 0.1), en het Trailing Stop algoritme is niet gebruikt (Trailing niet gebruikt).

Figuur 3. Testresultaten van de Expert Advisor met handelsignalen, gebaseerd op de Alligator indicator
De winst kan worden vergroot als je dealfiltratie toepast en rekening houdt met de markteigenschappen, afhankelijk van de tijd. De CSignalITF klasse stelt je in staat om de intraday-tijdfilter toe te voegen. De beste tijden kunnen worden gevonden met behulp van de Strategietester van de MetaTrader 5 clientterminal. Zie het voorbeeld in MQL5 Wizard - Handelsignalen op basis van crossover van twee EMA met intraday tijdfilter.
Bijlagen: De SignalAlligator.mqh met de CSignalAlligator klasse moet worden geplaatst in de terminal_data_folder\MQL5\Include\Expert\Signal map.
De expert_alligator.mq5 bevat de code van de Expert Advisor, die is gemaakt met behulp van MQL5 Wizard.
Reactie 0