MQL5 Wizard - Trading Signals Based on 3 Black Crows/3 White Soldiers + Stochastic Indicator - MetaTrader 5 Expert











There is the book "Strategies of the Best Traders " (in Russian), where many trading strategies are considered, we will focus on reversal candlestick patterns, represented by Stochastic , CCI , Micro Institutions and RSI oscillators.
The best way is to create a separate class derived from Expert Signal for checking the formation of candlestick patterns. For the confirmation of trading signals generated by candlestick patterns, it is enough to write a class derived from CCandlePattern and add in it the necessary functionality (for example, confirmation by oscillator).
Here we will consider a signal based on the “3 Black Crows/3 White Soldiers” reversal candlestick pattern and confirm the Stochastic indicator in the following way. The trading signals module is based on the CC candle pattern class, which is a simple example of creating trading signals using candlestick patterns.
1. Three Black Crows and Three White Soldiers Reversal Candlestick Patterns
1.1. 3 Black Crow
A bearish candlestick pattern used to predict a reversal in the current uptrend. The pattern consists of three consecutive long candlesticks that close lower than the previous day, with each session opening within the body of the previous candle.

Figure 1. “3 Black Crows” Candlestick Pattern
The recognition of the "3 Black Crows" pattern is the CC candle pattern class implemented in the CheckPatternThreeBlackCrows method:
//+------------------------------------------------------------------+ //|Check the formation of the “3 Black Crows” candlestick pattern | //+------------------------------------------------------------------+ BooleanCCandlePattern ::CheckPatternThreeBlackCrows() { //--- 3 black crows if ((open( 3 )-closed( 3 )>average( 1 )) && // (long black) (Open( 2 )-Close( 2 )>AverageBody( 1 )) && (Open( 1 )-Close( 1 )>AverageBody( 1 )) && (Midpoint ( 2 )<Midpoint ( 3 )) && // (Lower midpoint) (midpoint( 1 )<midpoint( 2 ))) return ( true ); //--- return ( false ); }
CheckCandlestickPattern(CANDLE_PATTERN_THREE_BLACK_CROWS) method CC Candlestick Pattern class is used to check the formation of "3 Black Crows" candlestick pattern.
1.2. 3 White Soldier Candlestick Pattern
Bullish candlestick pattern used to predict a reversal in the current downtrend. The pattern consists of three consecutive long candlesticks with a closing price higher than the previous day and each session opening within the body of the previous candle.
The pattern is valid as long as the second day's candle opens in the upper half of the first day's range. By the end of the next day, it should close near the high, leaving a very small or non-existent upper shadow. Then repeat the same pattern on the third day.

Figure 2. “3 White Soldiers” Candlestick Pattern
The following is how to identify the "Three White Soldiers" pattern:
//+------------------------------------------------------------------+ //|Check the formation of the "3 White Soldiers" candlestick pattern| //+------------------------------------------------------------------+ BooleanCCandlePattern ::CheckPatternThreeWhiteSoldiers() { //--- 3 white soldiers if ((off( 3 )-on( 3 )>average( 1 )) && // Long White (off( 2 )-on( 2 )>averagebody( 1 )) && (off( 1 )-on( 1 )>averagebody( 1 )) && (midpoint( 2 )>midpoint( 3 )) && // higher midpoint (midpoint( 1 )>midpoint( 2 ))) return ( true ); //--- return ( false ); }
CheckCandlestickPattern(CANDLE_PATTERN_THREE_WHITE_SOLDIERS) method CC Candlestick Pattern class is used to check the formation of the "3 White Soldiers" candlestick pattern.
2. Trading signals, confirmed by stochastic indicator
The closing of an open position depends on the value of the %D indicator. This can be done in two situations:

Figure 3. “3 White Pawns” pattern, confirmed by Stochastic
Verification of entry and exit trade conditions is implemented in two ways:
2.1. Open long position/close short position
The formation of the "Three Soldiers in White" pattern must go through the stochastic indicator: StochSignal(1)<30 (the stochastic indicator signal line value of the final completed bar must be less than 30).
If the signal line Stochastic has crossed the 20 or 80 levels upwards.
//+------------------------------------------------------------------+ //|Check the conditions for entering and exiting the market | //| 1) Enter the market (open long position, result = 80) | //| 2) Market Exit (Close Position, Result=40) | //+------------------------------------------------------------------+ IntegerCBC_WS_Stoch ::LongCondition() { Integer result = 0 ; //--- idx can be used to determine the Expert Advisor working mode //--- idx=0 - in this case the EA checks the trading conditions on every price move //--- idx=1 - in this case the EA only checks the trading status of the news bar integer idx =StartIndex(); //--- checks the conditions for opening a long position //--- Form 3 white pawn patterns and signal lines < 30 if (CheckCandlestickPattern(CANDLE_PATTERN_THREE_WHITE_SOLDIERS) && (StochSignal( 1 ) < 30 )) Result = 80 ; //--- check closing conditions //--- Signal line crossover for overbought/oversold levels (down 20, up 80) if ((((StochSignal( 1 )> 20 ) && (StochSignal( 2 )< 20 )) || ((StochSignal( 1 )> 80 ) && (StochSignal( 2 )< 80 )))) result = 40 ; //--- return result return (result); }
2.2. Open short position/close long position
The formation of the "Three Black Crows" pattern must be caused by the Stochastic indicator: StochSignal(1)>70 (the value of the Stochastic indicator signal line of the final completed bar must be greater than 70).
If the signal line Stochastic has crossed below the 80 or 20 levels.
//+------------------------------------------------------------------+ //|Check the conditions for entering and exiting the market | //| 1) Enter the market (short position, result=80) | //| 2) Market Exit (Close Position, Result=40) | //+------------------------------------------------------------------+ Integer CBC_WS_Stoch::ShortCondition() { Integer result = 0 ; //--- idx can be used to determine the Expert Advisor working mode //--- idx=0 - in this case the EA checks the trading conditions on every price move //--- idx=1 - in this case the EA only checks the trading status of the news bar integer idx =StartIndex(); //--- checks the conditions for opening a short position //--- Form 3 Black Crow Patterns and Signal Line > 70 if (CheckCandlestickPattern(CANDLE_PATTERN_THREE_BLACK_CROWS) && (StochSignal( 1 ) > 70 )) result = 80 ; //--- Check closing conditions //--- Signal line crossover for overbought/oversold levels (80 down, 20 up) if ((((StochSignal( 1 ) < 80 ) && (StochSignal( 2 ) > 80 )) || ((StochSignal( 1 )< 20 ) && (StochSignal( 2 )> 20 )))) result = 40 ; //--- return result return (result); }
2.3. Use the MQL5 Wizard to create an Expert Advisor
The CBC_WS_Stoch class is not included in the standard library classes, to use it you need to download the acbc_ws_stoch.mqh file (see attachment) and save it to client_terminal_data\folder\MQL5\Include\Expert\Signal\MySignals. The same operation should be performed for the candlepatterns.mqh file. After restarting MetaEditor, you can use it in the MQL5 Wizard.
Create Expert Advisor Launch MQL5 Wizard :

Figure 4. Creating an Expert Advisor using the MQL5 Wizard
Let's specify the name of the Expert Advisor:

Figure 5. General properties of EA trading
After that we need to choose the trading signal module to use.

Figure 6. Signal properties of EA trading
In our case we use only one trading signals module.

Figure 7. Signal properties of EA trading
Added trading signals module:

Figure 8. Signal properties of EA trading
You can choose any trailing attribute, but we will use "Unused Trailing Stop":

Figure 9. Tracking properties of Expert Advisor
Regarding the money management properties, we will use "Fixed Volume Trading":

Figure 10. Money management attributes of EA trading
Press the "Finish" button and we will get the code of the generated Expert Advisor in Expert_ABC_WS_Stoch.mq5, which will be saved in terminal_data_folder\MQL5\Experts\.
Default input parameters of the generated Expert Advisor:
//--- Main signal input Input integer Signal_ThresholdOpen = 10 ; //Open signal threshold[0...100] Input integer Signal_ThresholdClose = 10 ; // Close signal threshold [0...100] Enter double Signal_PriceLevel = 0.0 ; // price level at which to execute the trade Enter double Signal_StopLevel = 50.0 ; // Stop loss level in pips Enter double Signal_TakeLevel = 50.0 ; // Take profit level (in pips)
Must be replaced with:
//--- Main signal input Input integer Signal_ThresholdOpen = 40 ; //Open signal threshold[0...100] Input integer Signal_ThresholdClose = 20 ; // Close signal threshold [0...100] Enter double Signal_PriceLevel = 0.0 ; // price level at which to execute the trade Enter double Signal_StopLevel = 0.0 ; // Stop loss level in points Enter double Signal_TakeLevel = 0.0 ; // Take profit level (in pips)
Signal_ThresholdOpen/Signal_ThresholdClose input parameters allow specifying threshold levels for opening and closing positions.
In the code of the LongCondition() and ShortCondition() methods of the trading signal class, we specify the fixed value of the threshold:
The Expert Advisor generates opening and closing positions by the MQL5 Wizard using "votes" in the Trading Signals module. The vote of the main module (which acts as a container and consists of all added modules) is also used, but its LongCondition() and ShortCondition() methods always return 0.
The voting results from the main module are also used for "voting" averaging. In our case we have: main module + 1 trading signals module, so we need to take this fact into account when setting the thresholds. Therefore, ThresholdOpen and ThresholdClose must be set to 40=(0+80)/2 and 20=(0+40)/2.
The value of the Signal_StopLevel and Signal_TakeLevel input parameters is set to 0, which means that the position will be closed only if the closing conditions are met.
2.4. Historical backtest results
Let us consider the backtesting of EA trading on historical data (EURUSD H1, test period: 2010.01.01-2011.02.02, PeriodK=47, PeriodD=9, PeriodSlow=13, MA_period=5).
When creating the EA, we used a fixed trading volume ( fixed lot size for trading , 0.1) and did not use the trailing stop algorithm ( trailing was not used ).

Figure 11. Test results of EA trading, based on 3 black crows/3 white soldiers + stochastic indicator"
The best set of input parameters for the Strategy Tester MetaTrader 5 client can be found using the following command.
The code for the Expert Advisor created by the MQL5 Wizard is attached in Expert_abc_ws_stoch.mq5.
Attachment download
📎 acandlepatterns.mqh (20.34 KB)
📎 acbc_ws_stoch.mqh (8.5 KB)
📎expert_abc_ws_stoch.mq5 (7.24 KB)
Source: MQL5 #283
💡 Featured Recommendations
✍️ Latest by the author
- •
- •
- •
- •
- •
- •
📌 Popular topics
- •
- •
- •
- •
- •
- •
- •
- •
🔗 You May Be Interested In
- •
- •
- •
- •
- •
- •