Rules:
1. The first candlestick is a red candlestick.
2. The second candlestick is a green candlestick which gaps below the first candlestick.
3. The third candlestick is a green candlestick which is about the same as the second candlestick.

Pattern Type:
Bearish Reversal.

                    
#region Namespaces using System; using System.IO; using System.Linq; #endregion namespace ScriptCode { /// <summary> /// Pattern scripts are used for recognizing and highlighting chart patterns. /// /// This script can be used in several ways: /// (1) It can be used on a chart. /// (2) It can be used from another script. /// (3) It can be used as a script column in a watchlist. /// </summary> public partial class MyPattern : PatternScriptBase // NEVER CHANGE THE CLASS NAME { #region Variables // Use for the underlying symbol index on which to calculate the pattern script. private int _symbolIndex; // Use for the maximum percentage difference between the open of the second candlestick and that of the third candlestick and the close of the second candlestick and that of the third candlestick. [Default 0.2] private double _maxDifference; #endregion #region OnInitialize /// <summary> /// This function accepts the user parameters for the script and is called when a new pattern instance is created. /// One of the parameters accepted by it must be that of a symbol or another script that is /// based on a symbol (drawing, indicator, pattern or signal). This symbol will be used as the underlying symbol for the pattern. /// /// The parameter values can be specified from the user interface (UI) or from another script, depending on usage. /// </summary> /// -------------------------------------------------------------------------------------------------- /// PLEASE USE THE SCRIPT WIZARD (CTRL+W) TO ADD, EDIT AND REMOVE THE SCRIPT PARAMETERS /// -------------------------------------------------------------------------------------------------- /// YOU MUST SET A PARAM TAG FOR EACH PARAMETER ACCEPTED BY THIS FUNCTION. /// ALL PARAM TAGS SHOULD BE SET IN THE 'OnInitialize' REGION, RIGHT ABOVE THE 'OnInitialize' FUNCTION. /// THE ORDER OF THE TAGS MUST MATCH THE ORDER OF THE ACTUAL PARAMETERS. /// REQUIRED ATTRIBUTES: /// (1) name: The exact parameter name. /// (2) type: The type of data to collect from the user: /// Set to "Integer" when the data type is 'int' /// Set to "IntegerArray" when the data type is 'int[]' /// Set to "DateTime" when the data type is 'long' /// Set to "DateTimeArray" when the data type is 'long[]' /// Set to "Boolean" when the data type is 'bool' /// Set to "BooleanArray" when the data type is 'bool[]' /// Set to "Double" when the data type is 'double' /// Set to "DoubleArray" when the data type is 'double[]' /// Set to "String" when the data type is 'string' /// Set to "StringArray" when the data type is 'string[]' /// Set to "Indicator" when the data type is 'Indicator' /// Set to "Pattern" when the data type is 'Pattern' /// Set to "Signal" when the data type is 'Signal' /// Set to "Drawing" when the data type is 'Drawing' /// Set to "Symbol" when the data type is 'int' representing a symbol index. /// OPTIONAL ATTRIBUTES: /// (3) default: The default parameter value is only valid when the type is Integer, Boolean, Double, String or an API Type. /// (4) min: The minimum parameter value is only valid when the type is Integer or Double. /// (5) max: The maximum parameter value is only valid when the type is Integer or Double. /// EXAMPLE: <param name="" type="" default="" min="" max="">Enter the parameter description here.</param> /// -------------------------------------------------------------------------------------------------- /// <param name="symbolIndex" type="Symbol" default="">Use for the underlying symbol index on which to calculate the pattern script.</param> /// <param name="maxDifference" type="Double" default="0.2">Use for the maximum percentage difference between the open of the second candlestick and that of the third candlestick and the close of the second candlestick and that of the third candlestick. [Default 0.2] </param> public void OnInitialize(int symbolIndex, double maxDifference) { // Set the parameters to script variables. _symbolIndex = symbolIndex; _maxDifference = maxDifference; } #endregion #region OnBarUpdate /// <summary> /// This function is used to determine whether a pattern match exists in which the latest bar is the last bar of the pattern. /// If such a pattern match is found, the function returns the number of bars in the pattern, otherwise it returns zero. /// </summary> /// <returns type="Integer">The total number of bars in the pattern ending at the latest bar (or zero if the pattern is not found).</returns> public override int OnBarUpdate() { // Check whether the first candlestick matches. if (BarOpen(_symbolIndex, 2) > BarClose(_symbolIndex, 2)) { // Check whether the second candlestick matches. if (BarOpen(_symbolIndex, 1) < BarClose(_symbolIndex, 1) && BarHigh(_symbolIndex, 1) < BarLow(_symbolIndex, 2)) { // Check whether the third candlestick matches. if (BarOpen(_symbolIndex, 0) < BarClose(_symbolIndex, 0) && BarHigh(_symbolIndex, 0) < BarLow(_symbolIndex, 2) && Math.Abs(100 * (BarOpen(_symbolIndex, 0) - BarOpen(_symbolIndex, 1)) / BarOpen(_symbolIndex, 0)) < _maxDifference && Math.Abs(100 * (BarClose(_symbolIndex, 0) - BarClose(_symbolIndex, 1)) / BarClose(_symbolIndex, 0)) < _maxDifference) { return 3; } } } return 0; } #endregion } }

The Algorithmic Trading Software for Hedge Funds and Quants