Join our fan page
MQL5 Wizard - Trade Signals Based on Bullish Engulfing/Bearish Engulfing + RSI - expert for MetaTrader 5
- Views:
- 12025
- Rating:
- Published:
- 2011.03.10 10:55
- Updated:
- 2016.11.22 07:32
- Need a robot or indicator based on this code? Order it on Freelance Go to Freelance
The MQL5 Wizard allows creating ready-made Expert Advisors based on the Standard library classes delivered together with the client terminal (see Creating Ready-Made Expert Advisors in MQL5 Wizard for the details). It allows to check your trade ideas quickly, all you need is to create your own trading signals class. The structure of this class and example can be found in the article MQL5 Wizard: How to Create a Module of Trading Signals.
The generic idea is the following: the class of trading signals is derived from CExpertSignal, the next, it's necessary to override the LongCondition() and ShortCondition() virtual methods with your own methods.
There is a book "Strategies of best traders" (in Russian), there are many trading strategies are considered there, we will focus on reversal candlestick patterns, confirmed by Stochastic, CCI, MFI and RSI oscillators.
The best way is to create the separate class, derived from CExpertSignal for checking of formation of candlestick patterns. For confirmation of trade signals, generated by candlestick patterns, it's sufficient to write the class, derived from CCandlePattern and add the necessary features (for example, confirmation by oscillators) there.
Here we will consider the signals, based "Bullish Engulfing/Bearish Engulfing" reversal candlestick pattern, confirmed by RSI indicator. The module of trade signals is based on the CCandlePattern class, it's simple example of its use for creation of trade signals with candlestick patterns.
1. "Bullish Engulfing" and "Bearish Engulfing"
1.1. Bullish Engulfing
"Bullish Engulfing" reversal pattern forms in downtrend when a small black candlestick if followed by a large white candlestick that completely eclipses ("engulfs") the candlestick of the previous day. The shadows (tails) of the small candlestick are short, which enables the body of the large candlestick to cover the entire candlestick from the previous day.
Fig. 1. "Bullish Engulfing" candlestick pattern
The recognition of "Bullish Engulfing" pattern is implemented in CheckPatternBullishEngulfing() method of CCandlePattern class:
//+------------------------------------------------------------------+ //| Checks formation of "Bullish Engulfing" candlestick pattern | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternBullishEngulfing() { //--- Bullish Engulfing if((Open(2)>Close(2)) && // previous candle is bearish (Close(1)-Open(1)>AvgBody(1)) && // body of the bullish candle is higher than average value of the body (Close(1)>Open(2)) && // close price of the bullish candle is higher than open price of the bearish candle (MidOpenClose(2)<CloseAvg(2)) && // downtrend (Open(1)<Close(2))) // open price of the bullish candle is lower than close price of the bearish return(true); //--- return(false); }
The CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_ENGULFING) method of CCandlePattern class is used to check formation of "Bullish Engulfing" candlestick pattern.
1.2. Bearish Engulfing
"Bearish Engulfing" reversal pattern forms in uptrend when a small white candlestick if followed by a large black candlestick that completely eclipses ("engulfs") the candlestick of the previous day. The shadows (tails) of the small candlestick are short, which enables the body of the large candlestick to cover the entire candlestick from the previous day.
Figure 2. "Bearish Engulfing" candlestick pattern
The recognition of "Bearish Engulfing" pattern is implemented in CheckPatternBearishEngulfing() method of CCandlePattern class:
//+------------------------------------------------------------------+ //| Checks formation of "Bearish Engulfing" candlestick pattern | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternBearishEngulfing() { //--- Bearish Engulfing if((Open(2)<Close(2)) && // previous candle is bearish (Open(1)-Close(1)>AvgBody(1)) && // body of the candle is higher than average value of the body (Close(1)<Open(2)) && // close price of the bearish candle is lower than open price of the bullish candle (MidOpenClose(2)>CloseAvg(2)) && // uptrend (Open(1)>Close(2))) // Open price of the bearish candle is higher than close price of the bullish candle return(true); //--- return(false); }
The CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_ENGULFING) method of CCandlePattern class is used to check formation of "Bearish Engulfing" candlestick pattern.
2. Trade signals, confirmed by RSI indicator
The trading signals to open long or short position must be confirmed by RSI indicator. The value of RSI must be lower/greater than critical levels (40 for long position and 60 for short position).
The closing of opened position depends on the values of RSI. It can be done in 2 cases:
- if RSI has reached the opposite critical level (70 for long position and 30 for short position)
- if the reverse signal isn't confirmed (when RSI reaches the following levels: 30 for long position and 70 for short position)
Fig. 3. "Bullish Englulfing" pattern, confirmed by RSI indicator
- int CBE_BE_RSI::LongCondition() - checks conditions to open long position (returns 80) and close of the short position (returns 40);
- int CBE_BE_RSI::ShortCondition() - checks conditions to open short position (returns 80) and close of the long position (returns 40).
2.1. Open long position/Close short position
The formation of "Bullish Engulfing" pattern must be confirmed by RSI indicator: RSI(1)<40 (the value of the RSI of the last completed bar must be less than 40).
The short position must be closed if RSI indicator has crossed upward the critical levels 70 or 30.
//+------------------------------------------------------------------+ //| Checks conditions for entry and exit from market | //| 1) Market entry (open long position, result=80) | //| 2) Market exit (close short position, result=40) | //+------------------------------------------------------------------+ int CBE_BE_RSI::LongCondition() { int result=0; //--- idx can be used to determine Expert Advisor work mode //--- idx=0 - in this case EA checks trade conditions at each tick //--- idx=1 - in this case EA checks trade consition only at news bars int idx =StartIndex(); //--- checking of conditions to open long position //--- formation of Bullish Engulfing pattern and RSI<30 if(CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_ENGULFING) && (RSI(1)<40)) result=80; //--- checking of conditions to close short position //--- signal line crossover of overbought/oversold levels (upward 30, upward 70) if(((RSI(1)>30) && (RSI(2)<30)) || ((RSI(1)>70) && (RSI(2)<70))) result=40; //--- return result return(result); }
2.2. Open short position/Close long position
The formation of "Bearish Engulfing" pattern must be confirmed by RSI indicator: RSI(1)>60 (the value of the RSI indicator of the last completed bar must be greater than 60).
The long position must be closed if RSI indicator has crossed downward the critical levels 70 or 30.
//+------------------------------------------------------------------+ //| Checks conditions for entry and exit from market | //| 1) Market entry (open short position, result=80) | //| 2) Market exit (close long position, result=40) | //+------------------------------------------------------------------+ int CBE_BE_RSI::ShortCondition() { int result=0; //--- idx can be used to determine Expert Advisor work mode //--- idx=0 - in this case EA checks trade conditions at each tick //--- idx=1 - in this case EA checks trade consition only at news bars int idx =StartIndex(); //--- checking of conditions to open short position //--- formation of Bearish Engulfing pattern and RSI>60 if(CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_ENGULFING) && (RSI(1)>60)) result=80; //--- checking of conditions to close long position //--- signal line crossover of overbought/oversold levels (downward 70, downward 30) if(((RSI(1)<70) && (RSI(2)>70)) || ((RSI(1)<30) && (RSI(2)>30))) result=40; //--- return result return(result); }
2.3. Creating Expert Advisor using MQL5 Wizard
The CBE_BE_RSI class isn't included in the Standard Library classes, to use it, it's necessary to download the acml_rsi.mqh file (see attachments) and save it to the client_terminal_data\folder\MQL5\Include\Expert\Signal\MySignals. The same should be done with the acandlepatterns.mqh file. You can use it in MQL5 Wizard after restart of the MetaEditor.
To create an Expert Advisor launch MQL5 Wizard:
Fig. 4. Creating Expert Advisor using MQL5 Wizard
Let's specify the name of the Expert Advisor:
Fig. 5. General properties of the Expert Advisor
After that we need to select the modules of trade signals used.
Fig. 6. Signal properties of the Expert Advisor
In our case we use only one module of trade signals.
Adding the "Signals based on Bullish Engulfing/Bearish Engulfing confirmed by RSI" module of trading signals:
Fig. 7. Signal properties of the Expert Advisor
Module of trade signals added:
Fig. 8. Signal properties of the Expert Advisor
You can select any trailing properties, but we will use "Trailing Stop not used":
Fig. 9. Trailing properties of the Expert Advisor
Concerning the money management properties, we will use "Trading with fixed trade volume":
Fig. 10. Money management properties of the Expert Advisor
By pressing the "Finish" button, we will get the code of the generated Expert Advisor, located in Expert_ABE_BE_RSI.mq5, it will be saved in terminal_data_folder\MQL5\Experts\.
The default input parameters of the generated Expert Advisor:
//--- inputs for main signal input int Signal_ThresholdOpen =10; // Signal threshold value to open [0...100] input int Signal_ThresholdClose =10; // Signal threshold value to close [0...100] input double Signal_PriceLevel =0.0; // Price level to execute a deal input double Signal_StopLevel =50.0; // Stop Loss level (in points) input double Signal_TakeLevel =50.0; // Take Profit level (in points)
must be replaced to:
//--- inputs for main signal input int Signal_ThresholdOpen =40; // Signal threshold value to open [0...100] input int Signal_ThresholdClose =20; // Signal threshold value to close [0...100] input double Signal_PriceLevel =0.0; // Price level to execute a deal input double Signal_StopLevel =0.0; // Stop Loss level (in points) input double Signal_TakeLevel =0.0; // Take Profit level (in points)
The Signal_ThresholdOpen/Signal_ThresholdClose input parameters allow to specify threshold levels for open and close of positions.
In code of the LongCondition() and ShortCondition() methods of the trade signals class we have specified the fixed values of the threshold:
- Open position: 80;
- Close position: 40.
The Expert Advisor, generated by MQL5 Wizard open and close position using the "votes" from the modules of trade signals. The vote of the main module (as container, it consist of all the modules added) is also used, but its LongCondition() and ShortCondition() methods always return 0.
The vote results of the main module is also used in "votes" averaging. In our case we have: main module + 1 module of trade signals, so we need to take this fact into account when setting of the threshold values. Because of this fact the ThresholdOpen and ThresholdClose must be set as 40=(0+80)/2 and 20=(0+40)/2.
The values of Signal_StopLevel and Signal_TakeLevel input parameters is set to 0, it means that closing of the positions will be done only when closing conditions will be true.
2.4. History backtesting results
Let's consider backtesting of the Expert Advisor on historical data (EURUSD H1, testing period: 2010.01.01-2011.03.04, PeriodRSI=11, MA_period=5).
In creation of Expert Advisor we used the fixed volume (Trading Fixed Lot, 0.1), Trailing Stop algorithm is not used (Trailing not used).
Fig. 11. Testing results of the Expert Advisor, based on Bullish Engulfing/Bearish Engulfing + RSI
The best set of input parameters can be found using the Strategy Tester of MetaTrader 5 client terminal.
The code of the Expert Advisor, created by MQL5 Wizard is attached in expert_abe_be_rsi.mq5.
Translated from Russian by MetaQuotes Ltd.
Original code: https://www.mql5.com/ru/code/308
Trade signals based on "Bullish Engulfing/Bearish Engulfing" candlestick pattern, confirmed by Market Facilitation Index (MFI) indicator is considered. The code of the Expert Advisor based on this strategy can be generated automatically using the MQL5 Wizard.
MQL5 Wizard - Trade Signals Based on Bullish Engulfing/Bearish Engulfing + CCITrade signals based on "Bullish Engulfing/Bearish Engulfing" candlestick pattern, confirmed by Commodity Channel Index (CCI) indicator is considered. The code of the Expert Advisor based on this strategy can be generated automatically using the MQL5 Wizard.
Trade signals based on "Bullish Harami/Bearish Harami" candlestick pattern, confirmed by Stochastic indicator is considered. The code of the Expert Advisor based on this strategy can be generated automatically using the MQL5 Wizard.
MQL5 Wizard - Trade Signals Based on Bullish Harami/Bearish Harami + CCITrade signals based on "Bullish Harami/Bearish Harami" candlestick pattern, confirmed by Commodity Channel Index (CCI) indicator is considered. The code of the Expert Advisor based on this strategy can be generated automatically using the MQL5 Wizard.