MQL5 Wizard biedt de mogelijkheid om automatisch Expert Advisors te creëren, zonder dat je hoeft te programmeren (zie MQL5 Wizard: Maak Expert Advisors zonder Programmeervaardigheden).
De klasse CSignalCandles genereert handelsignalen op basis van omkeer candlestick patronen. De strategie heet "Handelsignalen op basis van omkeer candlestick patronen" (bij het automatisch creëren van een EA in MQL5 Wizard).
Het doel van dit systeem is om omkeer patronen te identificeren met behulp van de berekening van de samengestelde candle. De omkeer patronen zijn vergelijkbaar met de "Hammer" en "Hanging Man" patronen uit de Japanse candlestick analyse. Echter, het gebruikt de samengestelde candle in plaats van de enkele candle en heeft geen kleine body van de samengestelde candle nodig om de omkering te bevestigen.
Invoergegevens:
- Bereik - maximaal aantal candles dat gebruikt wordt in de berekening van de samengestelde candle.
- Minimum - minimale grootte van de samengestelde candle (in conventionele punten).
- SchaduwGroot en SchaduwKlein - schaduwen (in eenheden van de samengestelde candle).
- Limiet, StopLoss en TakeProfit - open prijs, SL en TP niveaus, de waarden gedefinieerd ten opzichte van de slotprijs van de samengestelde candle (eenheden van de samengestelde candle).
- Vervaldatum - vervaltijd van de order (in candles), gebruikt bij het handelen met pending orders (Limiet!=0.0).
De omkeer candlestick patronen worden als volgt bepaald:
Er worden parameters van de samengestelde candle berekend, beginnend bij de recent voltooide candle (met index 1) tot het aantal candles dat gedefinieerd is door de invoergegevens Bereik. Als de grootte van de samengestelde candle groter is dan de waarde, gespecificeerd door de invoergegevens Minimum, worden de omkeercondities van de samengestelde candle gecontroleerd door de analyse van de schaduwen.
De kracht van de beren wordt gekarakteriseerd door de grootte van de bovenste schaduw van de samengestelde candle, terwijl de kracht van de stieren wordt gekarakteriseerd door de grootte van de onderste schaduw.
- Om de omkering van de bearish trend (en het begin van de bullish trend) te bevestigen, is het nodig dat de grootte van de onderste schaduw (stierenkracht) groter is dan de waarde, gedefinieerd door de invoergegevens SchaduwGroot. De grootte van de bovenste schaduw (berenkracht) moet minder zijn dan de waarde, gedefinieerd door de invoergegevens SchaduwKlein.
- Om de omkering van de bullish trend (en het begin van de bearish trend) te bevestigen, is het nodig dat de grootte van de bovenste schaduw (berenkracht) groter is dan de waarde, gedefinieerd door de invoergegevens SchaduwGroot. De grootte van de onderste schaduw (stierenkracht) moet minder zijn dan de waarde, gedefinieerd door de invoergegevens SchaduwKlein.
Naast de omkeerstrategie is het mogelijk om doorbraakstrategieën te gebruiken door een negatieve waarde van de invoergegevens Limiet op te geven (zie MQL5 Wizard - Handelsignalen op Basis van de Kruising van Twee EMA met intra-dag tijdfilter).
Afhankelijk van de Limiet worden er drie verschillende manieren van markttoegang gebruikt:
- Limiet>0. Er zal worden ingegaan op de terugbeweging van de prijs, beter dan de marktprijs (De Buy Limit of Sell Limit pending orders worden geplaatst, afhankelijk van het handelsignaal).
- Limiet<0. Er zal worden ingegaan in de richting van de prijsbeweging (De Buy Stop of Sell Stop pending orders zullen worden gebruikt, afhankelijk van het handelsignaal).
- Limiet=0. Er zal worden gehandeld met de marktprijzen.
Deze strategie is geïmplementeerd in de CSignalCandles klasse.

Figuur 1. Handelsignalen op basis van omkeer candlestick patronen
Handelsignalen
De handelsignalen zijn geïmplementeerd in de CSignalCandles klasse, er is een functie Candle() die gebruikt wordt voor de analyse:
int Candle(int ind); // Geeft een positief/negatief getal terug, afhankelijk van het type van de samengestelde candle // de geretourneerde waarde is het aantal candles in de samengestelde candle (beginnend vanaf ind)
Meerdere candles kunnen worden gebruikt bij de constructie van de samengestelde candle. Het minimale aantal candles wordt gedefinieerd door de invoergegevens Bereik. In sommige gevallen kan de samengestelde candle worden gevormd met minder candles dan Bereik (wanneer de grootte/schaduwvoorwaarden zijn voldaan). De functie Candle retourneert 0 als de samengestelde candle niet kan worden gevormd.
1. Open lange positie
Om een lange positie te openen, is de bullish samengestelde candle nodig. De functie controleert dit en retourneert als de samengestelde candle nog niet is gevormd of als de samengestelde candle bearish is. Anders wordt de grootte van de samengestelde candle berekend (nodig voor de berekening van prijs, SL en TP niveaus) en worden de prijsniveaus voor de pending order berekend.
Let op, dat het type pending order (Buy Limit of Buy Stop) afhankelijk is van het teken van de invoergegevens Limiet (als Limiet=0 of |prijs-ask|<stops niveau, zal een markt kooporder worden geplaatst, als Limiet>0, wordt de Buy Limit pending order geplaatst, als Limiet<0, wordt de Buy Stop pending order geplaatst).
//+------------------------------------------------------------------+ //| Controleert de voorwaarden om een lange positie (koop) te openen | //+------------------------------------------------------------------+ bool CSignalCandles::CheckOpenLong(double& price,double& sl,double& tp,datetime& expiration) { //--- controleert de feitelijke vorming van de bullish samengestelde candle if(Candle(1)<=0) return(false); //--- haal de grootte van de samengestelde candle double size=m_high_composite-m_low_composite; //--- bereken de prijs van de pending order price=m_symbol.NormalizePrice(m_symbol.Ask()-m_limit*size); //--- bereken de Stop Loss prijs sl =m_symbol.NormalizePrice(price-m_stop_loss*size); //--- bereken de Take Profit prijs tp =m_symbol.NormalizePrice(price+m_take_profit*size); //--- stel de vervaltijd van de order in expiration+=m_expiration*PeriodSeconds(m_period); //--- de voorwaarden zijn voldaan, retourneer true return(true); }
2. Sluit lange positie
Als de bearish samengestelde candle is gevormd, wordt de lange positie gesloten.
//+------------------------------------------------------------------+ //| Controleert de voorwaarden om een lange positie te sluiten |//+------------------------------------------------------------------+ bool CSignalCandles::CheckCloseLong(double& price) { //--- controleert de feitelijke vorming van de bearish samengestelde candle if(Candle(1)>=0) return(false); //--- price=0.0; //--- de voorwaarden zijn voldaan, retourneer true return(true); }
3. Open korte positie
Om een korte positie te openen, moet de bearish samengestelde candle zijn gevormd. Als de samengestelde candle nog niet is gevormd, of als deze niet bearish is, retourneer dan. Anders bepalen we de grootte en berekenen we de prijsniveaus voor de pending order.
(het type order is afhankelijk van het teken van de invoergegevens Limiet, zie "Open lange positie").
//+------------------------------------------------------------------+ //| Controleert de voorwaarden om een korte positie (verkoop) te openen | //+------------------------------------------------------------------+ bool CSignalCandles::CheckOpenShort(double& price,double& sl,double& tp,datetime& expiration) { //--- controleert de feitelijke vorming van de bearish samengestelde candle if(Candle(1)>=0) return(false); //--- haal de grootte van de samengestelde candle double size=m_high_composite-m_low_composite; //--- bereken de prijs van de pending order price=m_symbol.NormalizePrice(m_symbol.Bid()+m_limit*size); //--- bereken de Stop Loss prijs sl =m_symbol.NormalizePrice(price+m_stop_loss*size); //--- bereken de Take Profit prijs tp =m_symbol.NormalizePrice(price-m_take_profit*size); //--- stel de vervaltijd van de order in expiration+=m_expiration*PeriodSeconds(m_period); //--- de voorwaarden zijn voldaan, retourneer true return(true); }
4. Sluit korte positie
Als de bullish samengestelde candle is gevormd, wordt de korte positie gesloten.
//+------------------------------------------------------------------+ //| Controleert de voorwaarden om een korte positie te sluiten |//+------------------------------------------------------------------+ bool CSignalCandles::CheckCloseShort(double& price) { //--- controleert de feitelijke vorming van de bullish samengestelde candle if(Candle(1)<=0) return(false); //--- price=0.0; //--- de voorwaarden zijn voldaan, retourneer true return(true); }
Een Expert Advisor maken met MQL5 Wizard
Om een trading robot op basis van de strategie te creëren, moet je de signaleigenschappen selecteren als "Handelsignalen op basis van omkeer candlestick patronen" in de optie "Klaar-made Expert Advisors maken" van MQL5 Wizard:

Figuur 2. Selecteer 'Handelsignalen op basis van omkeer candlestick patronen' in MQL5 Wizard
Daarna moet je het benodigde trailing stop algoritme en geld- en risicomanagement systeem specificeren. De code van de Expert Advisor wordt automatisch gegenereerd, 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 M15, testperiode: 1.1.2010-05.01.2011, Bereik=3, Minimum=50, SchaduwGroot=0.5, SchaduwKlein=0.2, Limiet=0, StopLoss=2.0, TakeProfit=1.0, Vervaldatum=4).
Bij de creatie van de Expert Advisor hebben we het vaste volume gebruikt (Vaste Lot Trading, 0.1), Trailing Stop algoritme wordt niet gebruikt (Trailing niet gebruikt).

Figuur 3. Testresultaten van de Expert Advisor met handelsignalen op basis van de omkeer candlestick patronen
Bijlagen: Het bestand SignalCandles.mqh met de klasse CSignalCandles moet worden geplaatst in de terminal_data_folder\MQL5\Include\Expert\Signal map.
Het bestand expert_candles.mq5 bevat de code van de Expert Advisor, gemaakt met behulp van MQL5 Wizard.
Gerelateerde berichten
- MQL5 Wizard: Creëer Handelsstrategieën met Bullish en Bearish Engulfing Candlestick Patronen en Stochastic
- Efficiënt Trendvolgend Handelsysteem met Exp_X2MA_JFatl voor MetaTrader 5
- Close Cross MA: Efficiënt Orders Sluiten met MetaTrader 4
- Efficiënt Handelen met het ColorSchaffJCCXTrendCycle Systeem voor MetaTrader 5
- Efficiënt Handelen met de Ang_Zad_C Indicator voor MetaTrader 5