

#property indicator_chart_window
#property indicator_buffers 6
#property indicator_color1 Red
#property indicator_color2 Blue
#property indicator_color3 Red
#property indicator_color4 Blue
#property indicator_color5 Yellow
#property indicator_color6 Yellow

string gs_76 = "";
string gs_84;
string gs_92;
bool gi_100 = FALSE;
bool gi_104 = TRUE;
extern bool Show_Alert = TRUE;
extern bool SendEmail = FALSE;
extern int Look_Back = 1000;
extern string PATTERNS_SETUP = "=== PATTERNS SETUP ===";
extern bool Show_Candlestick_Patterns = TRUE;
extern bool Show_Divergence_Patterns = TRUE;
extern bool Show_Bullish_Patterns = TRUE;
extern bool Show_Bearish_Patterns = TRUE;
extern bool Trend_Filter = TRUE;
extern int Reliability = 1;
extern string CANDLESTICK_PATTERNS = "=== CANDLESTICK PATTERNS ===";
bool gi_160 = FALSE;
extern string Bullish_Reversal = "=== Bullish Reversal ===";
extern bool Morning_Star = TRUE;
extern bool Piercing_Line = TRUE;
extern bool Abandoned_Baby_Bottom = TRUE;
extern bool Three_Inside_Up = TRUE;
extern bool Three_Outside_Up = TRUE;
extern bool Three_White_Soldiers = TRUE;
extern bool Concealing_Baby_Swallow = TRUE;
extern bool Bullish_Engulfing = TRUE;
extern bool Dragonfly_Doji_Bottom = TRUE;
extern bool Gravestone_Doji_Bottom = TRUE;
extern bool Doji_Star_Bottom = TRUE;
extern bool Bullish_Harami_Cross = TRUE;
extern bool Three_Stars_In_The_South = TRUE;
extern bool Bullish_Breakaway = TRUE;
extern bool Bullish_Harami = TRUE;
extern bool Hammer = TRUE;
extern bool Inverted_Hammer = TRUE;
extern string Bullish_Continuation = "=== Bullish Continuation ===";
extern bool Rising_Three_Methods = TRUE;
extern bool Bullish_Three_Line_Strike = TRUE;
extern bool Bullish_Mat_Hold = TRUE;
extern string Bearish_Reversal = "=== Bearish Reversal ===";
extern bool Evening_Star = TRUE;
extern bool Dark_Cloud_Cover = TRUE;
extern bool Abandoned_Baby_Top = TRUE;
extern bool Three_Inside_Down = TRUE;
extern bool Three_Outside_Down = TRUE;
extern bool Three_Black_Crows = TRUE;
extern bool Upside_Gap_Two_Crows = TRUE;
extern bool Bearish_Engulfing = TRUE;
extern bool Dragonfly_Doji_Top = TRUE;
extern bool Gravestone_Doji_Top = TRUE;
extern bool Doji_Star_Top = TRUE;
extern bool Bearish_Harami_Cross = TRUE;
extern bool Advance_Block = TRUE;
extern bool Two_Crows = TRUE;
extern bool Bearish_Breakaway = TRUE;
extern bool Bearish_Harami = TRUE;
extern bool Shooting_Star = TRUE;
extern bool Hanging_Man = TRUE;
extern string Bearish_Continuation = "=== Bearish Continuation ===";
extern bool Falling_Three_Methods = TRUE;
extern bool Bearish_Three_Line_Strike = TRUE;
extern bool Bearish_Mat_Hold = TRUE;
extern string DIVERGENCE_PATTERN = "=== DIVERGENCE PATTERN ===";
extern bool Only_Regular_Divergence = TRUE;
extern bool Only_Deep_Divergence = TRUE;
extern bool Show_Pattern_Names = TRUE;
int g_color_380 = Red;
int g_color_384 = Blue;
int g_color_388 = Yellow;
double g_ibuf_392[];
double g_ibuf_396[];
double g_ibuf_400[];
double g_ibuf_404[];
double g_ibuf_408[];
double g_ibuf_412[];
double g_ibuf_416[];
double g_ibuf_420[];
int g_count_424;
string gs_428;
datetime g_time_436;
int g_time_440 = 0;
string gs_444;
int gi_452;
int gi_456 = 200;
int gi_460;
int gi_464;
int gi_468;
int gi_472;
int g_period_476 = 12;
int g_period_480 = 26;
int g_period_484 = 9;

string cip(string as_0) {
   string l_str_concat_12 = "";
   for (int li_8 = 0; li_8 < StringLen(as_0); li_8++) l_str_concat_12 = StringConcatenate(l_str_concat_12, CharToStr(255 - StringGetChar(as_0, li_8)));
   return (l_str_concat_12);
}

int init() {
   gs_84 = StringTrimRight(StringSubstr(cip(gs_76), 0, 100));
   gs_92 = StringTrimLeft(StringSubstr(cip(gs_76), 100, 100));
   g_count_424 = 0;
   IndicatorBuffers(8);
   SetIndexStyle(0, DRAW_HISTOGRAM, STYLE_SOLID, 1, g_color_380);
   SetIndexBuffer(0, g_ibuf_392);
   SetIndexStyle(1, DRAW_HISTOGRAM, STYLE_SOLID, 1, g_color_384);
   SetIndexBuffer(1, g_ibuf_396);
   SetIndexStyle(2, DRAW_HISTOGRAM, STYLE_SOLID, 3, g_color_380);
   SetIndexBuffer(2, g_ibuf_400);
   SetIndexStyle(3, DRAW_HISTOGRAM, STYLE_SOLID, 3, g_color_384);
   SetIndexBuffer(3, g_ibuf_404);
   SetIndexStyle(4, DRAW_HISTOGRAM, STYLE_SOLID, 1, g_color_388);
   SetIndexBuffer(4, g_ibuf_408);
   SetIndexStyle(5, DRAW_HISTOGRAM, STYLE_SOLID, 1, g_color_388);
   SetIndexBuffer(5, g_ibuf_412);
   SetIndexBuffer(6, g_ibuf_416);
   SetIndexBuffer(7, g_ibuf_420);
   SetIndexDrawBegin(0, 10);
   SetIndexDrawBegin(1, 10);
   SetIndexDrawBegin(2, 10);
   SetIndexDrawBegin(3, 10);
   SetIndexDrawBegin(4, 10);
   SetIndexDrawBegin(5, 10);
   SetIndexBuffer(0, g_ibuf_392);
   SetIndexBuffer(1, g_ibuf_396);
   SetIndexBuffer(2, g_ibuf_400);
   SetIndexBuffer(3, g_ibuf_404);
   SetIndexBuffer(4, g_ibuf_408);
   SetIndexBuffer(5, g_ibuf_412);
   switch (Period()) {
   case PERIOD_M1:
      gs_428 = "M1";
      break;
   case PERIOD_M5:
      gs_428 = "M5";
      break;
   case PERIOD_M15:
      gs_428 = "M15";
      break;
   case PERIOD_M30:
      gs_428 = "M30";
      break;
   case PERIOD_H1:
      gs_428 = "H1";
      break;
   case PERIOD_H4:
      gs_428 = "H4";
      break;
   case PERIOD_D1:
      gs_428 = "D1";
      break;
   case PERIOD_W1:
      gs_428 = "W1";
      break;
   case PERIOD_MN1:
      gs_428 = "MN";
   }
   return (0);
}

int deinit() {
   string l_name_4;
   int l_objs_total_0 = ObjectsTotal();
   for (int li_12 = l_objs_total_0 - 1; li_12 >= 0; li_12--) {
      l_name_4 = ObjectName(li_12);
      if (StringSubstr(l_name_4, 0, 10) == "Patterns (") ObjectDelete(l_name_4);
   }
   return (0);
}

int NewBar() {
   if (Time[0] != g_time_440) {
      g_time_440 = Time[0];
      return (1);
   }
   return (0);
}

void Label(bool ai_0, int ai_4, string a_text_8) {
   double l_price_36;
   color l_color_44;
   g_count_424++;
   string l_name_16 = "Patterns (" + g_count_424 + ")";
   double ld_24 = 0;
   for (int li_32 = ai_4; li_32 < ai_4 + 10; li_32++) ld_24 += MathAbs(High[li_32] - Low[li_32]);
   ld_24 /= 10.0;
   if (ai_0) {
      l_price_36 = High[ai_4] + 1.3 * ld_24;
      l_color_44 = g_color_380;
   } else {
      l_price_36 = Low[ai_4] - 1.3 * ld_24;
      l_color_44 = g_color_384;
   }
   ObjectCreate(l_name_16, OBJ_TEXT, 0, Time[ai_4], l_price_36);
   ObjectSetText(l_name_16, a_text_8, 7, "Verdana", l_color_44);
}

void FillBar(int ai_0) {
   if (Open[ai_0] < Close[ai_0]) {
      g_ibuf_392[ai_0] = Low[ai_0];
      g_ibuf_396[ai_0] = High[ai_0];
      g_ibuf_400[ai_0] = Open[ai_0];
      g_ibuf_404[ai_0] = Close[ai_0];
      return;
   }
   if (Open[ai_0] > Close[ai_0]) {
      g_ibuf_392[ai_0] = High[ai_0];
      g_ibuf_396[ai_0] = Low[ai_0];
      g_ibuf_400[ai_0] = Open[ai_0];
      g_ibuf_404[ai_0] = Close[ai_0];
      return;
   }
   if (Open[ai_0] == Close[ai_0]) {
      g_ibuf_408[ai_0] = Low[ai_0];
      g_ibuf_412[ai_0] = High[ai_0];
   }
}

void FillBars(int ai_0, int ai_4) {
   for (int li_8 = ai_0; li_8 <= ai_4; li_8++) FillBar(li_8);
}

void ConnectPoints(int a_datetime_0, double a_price_4, int a_datetime_12, double a_price_16, color a_color_24, int a_window_28) {
   g_count_424++;
   string l_name_32 = "Patterns (" + g_count_424 + ")";
   ObjectCreate(l_name_32, OBJ_TREND, a_window_28, a_datetime_0, a_price_4, a_datetime_12, a_price_16);
   ObjectSet(l_name_32, OBJPROP_RAY, FALSE);
   ObjectSet(l_name_32, OBJPROP_COLOR, a_color_24);
   ObjectSet(l_name_32, OBJPROP_WIDTH, 2);
   ObjectSet(l_name_32, OBJPROP_STYLE, STYLE_SOLID);
}


double Body(int ai_0) {
   return (Close[ai_0] - Open[ai_0]);
}

double ABody(int ai_0) {
   return (MathAbs(Body(ai_0)));
}

double Range(int ai_0) {
   return (High[ai_0] - Low[ai_0]);
}

double Ratio(int ai_0) {
   if (Range(ai_0) > 0.0) return (ABody(ai_0) / Range(ai_0));
   return (0);
}

double Middle(int ai_0) {
   return ((Open[ai_0] + Close[ai_0]) / 2.0);
}

double BodyTop(int ai_0) {
   return (MathMax(Open[ai_0], Close[ai_0]));
}

double BodyBottom(int ai_0) {
   return (MathMin(Open[ai_0], Close[ai_0]));
}

double ShadowTop(int ai_0) {
   return (High[ai_0] - BodyTop(ai_0));
}

double ShadowBottom(int ai_0) {
   return (BodyBottom(ai_0) - Low[ai_0]);
}

int LongCandle(int ai_0) {
   return (Ratio(ai_0) > 0.6);
}

int rev(int ai_0) {
   if (gi_160) return (!ai_0);
   return (ai_0);
}

int Trend(int a_shift_0) {
   int l_period_4 = 12;
   int l_period_8 = 26;
   int l_period_12 = 9;
   double l_imacd_16 = iMACD(NULL, 0, l_period_4, l_period_8, l_period_12, PRICE_CLOSE, MODE_MAIN, a_shift_0);
   double l_imacd_24 = iMACD(NULL, 0, l_period_4, l_period_8, l_period_12, PRICE_CLOSE, MODE_SIGNAL, a_shift_0);
   if (l_imacd_16 > 0.0 && l_imacd_16 > l_imacd_24) return (1);
   if (l_imacd_16 < 0.0 && l_imacd_16 < l_imacd_24) return (-1);
   return (0);
}

int isTrendUp(int ai_0) {
   if (!Trend_Filter) return (1);
   return (Trend(ai_0) > 0);
}

int isTrendDown(int ai_0) {
   if (!Trend_Filter) return (1);
   return (Trend(ai_0) < 0);
}

int isMorning_Star(int ai_0) {
   return (Body(ai_0 + 2) < 0.0 && Body(ai_0) > 0.0 && LongCandle(ai_0 + 2) && Open[ai_0 + 1] < Close[ai_0 + 2] && Open[ai_0] > Close[ai_0 + 1] && Ratio(ai_0 + 1) < 0.3 &&
      ABody(ai_0 + 1) < ABody(ai_0 + 2) && ABody(ai_0 + 1) < ABody(ai_0) && Low[ai_0 + 1] < Low[ai_0] && Low[ai_0 + 1] < Low[ai_0 + 2] && High[ai_0 + 1] < Open[ai_0 + 2] && High[ai_0 + 1] < Close[ai_0]);
}

int isPiercing_Line(int ai_0) {
   return (Body(ai_0 + 1) < 0.0 && Body(ai_0) > 0.0 && LongCandle(ai_0 + 1) && LongCandle(ai_0) && Open[ai_0] < Low[ai_0 + 1] && Close[ai_0] > Middle(ai_0 + 1) && Close[ai_0] < Open[ai_0 +
      1]);
}

int isAbandoned_Baby_Bottom(int ai_0) {
   return (Body(ai_0 + 2) < 0.0 && Body(ai_0) > 0.0 && LongCandle(ai_0 + 2) && Ratio(ai_0 + 1) < 0.3 && High[ai_0 + 1] < Low[ai_0 + 2] && High[ai_0 + 1] < Low[ai_0]);
}

int isThree_White_Soldiers(int ai_0) {
   return (Body(ai_0 + 2) > 0.0 && Body(ai_0 + 1) > 0.0 && Body(ai_0) > 0.0 && High[ai_0 + 1] > High[ai_0 + 2] && High[ai_0] > High[ai_0 + 1] && Close[ai_0 + 1] > Close[ai_0 +
      2] && Close[ai_0] > Close[ai_0 + 1] && Open[ai_0 + 1] > Open[ai_0 + 2] && Open[ai_0 + 1] < Close[ai_0 + 2] && Open[ai_0] > Open[ai_0 + 1] && Open[ai_0] < Close[ai_0 +
      1]);
}

int isBullish_Harami(int ai_0) {
   return (Body(ai_0 + 1) < 0.0 && Body(ai_0) > 0.0 && LongCandle(ai_0 + 1) && BodyBottom(ai_0) > BodyBottom(ai_0 + 1) && BodyTop(ai_0) < BodyTop(ai_0 + 1));
}

int isThree_Inside_Up(int ai_0) {
   return (Body(ai_0 + 2) < 0.0 && Body(ai_0 + 1) > 0.0 && Body(ai_0) > 0.0 && isBullish_Harami(ai_0 + 1) && Close[ai_0] > Close[ai_0 + 1]);
}

int isBullish_Engulfing(int ai_0) {
   return (Body(ai_0 + 1) < 0.0 && Body(ai_0) > 0.0 && BodyBottom(ai_0) < BodyBottom(ai_0 + 1) && BodyTop(ai_0) > BodyTop(ai_0 + 1) && LongCandle(ai_0));
}

int isThree_Outside_Up(int ai_0) {
   return (Body(ai_0 + 2) < 0.0 && Body(ai_0 + 1) > 0.0 && Body(ai_0) > 0.0 && isBullish_Engulfing(ai_0 + 1) && Close[ai_0] > Close[ai_0 + 1]);
}

int isConcealing_Baby_Swallow(int ai_0) {
   return (Body(ai_0 + 3) < 0.0 && Body(ai_0 + 2) < 0.0 && Body(ai_0 + 1) < 0.0 && Body(ai_0) < 0.0 && Ratio(ai_0 + 3) > 0.8 && Ratio(ai_0 + 2) > 0.8 && Ratio(ai_0) > 0.8 &&
      Open[ai_0 + 1] < Close[ai_0 + 2] && High[ai_0 + 1] > Close[ai_0 + 2] && ShadowTop(ai_0 + 1) > 0.6 * (ABody(ai_0 + 1) + ShadowBottom(ai_0 + 1)) && BodyBottom(ai_0) < BodyBottom(ai_0 +
      1) && BodyTop(ai_0) > High[ai_0 + 1]);
}

int isDragonfly_Doji_Bottom(int ai_0) {
   return (Body(ai_0 + 1) < 0.0 && LongCandle(ai_0 + 1) && Low[ai_0] < Low[ai_0 + 1] && ShadowBottom(ai_0) > 3.0 * ABody(ai_0) && ShadowTop(ai_0) < ShadowBottom(ai_0) / 3.0);
}

int isGravestone_Doji_Bottom(int ai_0) {
   return (Body(ai_0 + 1) < 0.0 && LongCandle(ai_0 + 1) && Low[ai_0] < Low[ai_0 + 1] && ShadowTop(ai_0) > 3.0 * ABody(ai_0) && ShadowBottom(ai_0) < ShadowTop(ai_0) / 3.0);
}

int isDoji_Star_Bottom(int ai_0) {
   return (Body(ai_0 + 1) < 0.0 && LongCandle(ai_0 + 1) && Low[ai_0] < Low[ai_0 + 1] && Open[ai_0] < Close[ai_0 + 1] && Ratio(ai_0) < 0.3 && Range(ai_0) < 0.3 * Range(ai_0 +
      1));
}

int isBullish_Harami_Cross(int ai_0) {
   return (Body(ai_0 + 1) < 0.0 && LongCandle(ai_0 + 1) && BodyBottom(ai_0) > BodyBottom(ai_0 + 1) && BodyTop(ai_0) < BodyTop(ai_0 + 1) && Ratio(ai_0) < 0.3 && Range(ai_0) < 0.3 * Range(ai_0 +
      1));
}

int isThree_Stars_In_The_South(int ai_0) {
   return (Body(ai_0 + 2) < 0.0 && Body(ai_0 + 1) < 0.0 && Body(ai_0) < 0.0 && ShadowTop(ai_0 + 2) < Range(ai_0 + 2) / 4.0 && ShadowBottom(ai_0 + 2) > ABody(ai_0 + 2) / 2.0 &&
      Low[ai_0 + 1] > Low[ai_0 + 2] && High[ai_0 + 1] < High[ai_0 + 2] && ABody(ai_0 + 1) < ABody(ai_0 + 2) && ShadowTop(ai_0 + 1) < Range(ai_0 + 1) / 4.0 && ShadowBottom(ai_0 +
      1) > ABody(ai_0 + 1) / 2.0 && Low[ai_0] > Low[ai_0 + 1] && High[ai_0] < High[ai_0 + 1] && ABody(ai_0) < ABody(ai_0 + 1) && ShadowTop(ai_0) < Range(ai_0) / 4.0 && ShadowBottom(ai_0) < Range(ai_0) / 4.0);
}

int isBullish_Breakaway(int ai_0) {
   return (Body(ai_0 + 4) < 0.0 && Body(ai_0 + 3) < 0.0 && Body(ai_0) > 0.0 && Open[ai_0 + 3] < Close[ai_0 + 4] && Close[ai_0 + 2] < Close[ai_0 + 3] && Close[ai_0 + 1] < Close[ai_0 +
      2] && LongCandle(ai_0) && Close[ai_0] < Close[ai_0 + 4] && Close[ai_0] > Open[ai_0 + 3]);
}

int isHammer(int ai_0) {
   return (Body(ai_0 + 1) < 0.0 && LongCandle(ai_0 + 1) && Low[ai_0] < Low[ai_0 + 1] && ShadowBottom(ai_0) > 2.0 * ABody(ai_0) && ShadowTop(ai_0) < 0.3 * ABody(ai_0));
}

int isInverted_Hammer(int ai_0) {
   return (Body(ai_0 + 1) < 0.0 && LongCandle(ai_0 + 1) && Low[ai_0] < Low[ai_0 + 1] && ShadowTop(ai_0) > 2.0 * ABody(ai_0) && ShadowBottom(ai_0) < 0.3 * ABody(ai_0));
}

int isRising_Three_Methods(int ai_0) {
   return (Body(ai_0 + 4) > 0.0 && Body(ai_0 + 3) < 0.0 && Body(ai_0 + 1) < 0.0 && Body(ai_0) > 0.0 && LongCandle(ai_0 + 4) && LongCandle(ai_0) && Close[ai_0 + 2] < Close[ai_0 +
      3] && Close[ai_0 + 1] < Close[ai_0 + 2] && High[ai_0 + 2] < High[ai_0 + 3] && High[ai_0 + 1] < High[ai_0 + 2] && Low[ai_0 + 1] > Low[ai_0 + 4] && Open[ai_0] > Close[ai_0 +
      1] && Close[ai_0] > High[ai_0 + 4] && Close[ai_0] > High[ai_0 + 3] && Close[ai_0] > High[ai_0 + 2] && Close[ai_0] > High[ai_0 + 1]);
}

int isBullish_Three_Line_Strike(int ai_0) {
   return (Body(ai_0 + 3) > 0.0 && Body(ai_0 + 2) > 0.0 && Body(ai_0 + 1) > 0.0 && Body(ai_0) < 0.0 && LongCandle(ai_0 + 3) && LongCandle(ai_0 + 2) && LongCandle(ai_0 +
      1) && Close[ai_0 + 2] > Close[ai_0 + 3] && Close[ai_0 + 1] > Close[ai_0 + 2] && Open[ai_0] > Close[ai_0 + 1] && Close[ai_0] < Open[ai_0 + 3]);
}

int isBullish_Mat_Hold(int ai_0) {
   return (Body(ai_0 + 4) > 0.0 && Body(ai_0 + 3) < 0.0 && Body(ai_0 + 1) < 0.0 && Body(ai_0) > 0.0 && LongCandle(ai_0 + 4) && Close[ai_0 + 3] > Close[ai_0 + 4] && Close[ai_0 +
      2] < Close[ai_0 + 3] && Close[ai_0 + 1] < Close[ai_0 + 2] && High[ai_0 + 2] < High[ai_0 + 3] && High[ai_0 + 1] < High[ai_0 + 2] && Low[ai_0 + 1] > Low[ai_0 + 4] &&
      Open[ai_0] > Close[ai_0 + 1] && Close[ai_0] > High[ai_0 + 4] && Close[ai_0] > High[ai_0 + 3] && Close[ai_0] > High[ai_0 + 2] && Close[ai_0] > High[ai_0 + 1]);
}

int isEvening_Star(int ai_0) {
   return (Body(ai_0 + 2) > 0.0 && Body(ai_0) < 0.0 && LongCandle(ai_0 + 2) && Open[ai_0 + 1] > Close[ai_0 + 2] && Open[ai_0] < Close[ai_0 + 1] && Ratio(ai_0 + 1) < 0.3 &&
      ABody(ai_0 + 1) < ABody(ai_0 + 2) && ABody(ai_0 + 1) < ABody(ai_0) && High[ai_0 + 1] > High[ai_0] && High[ai_0 + 1] > High[ai_0 + 2] && Low[ai_0 + 1] > Open[ai_0 + 2] && Low[ai_0 + 1] > Close[ai_0]);
}

int isDark_Cloud_Cover(int ai_0) {
   return (Body(ai_0 + 1) > 0.0 && Body(ai_0) < 0.0 && LongCandle(ai_0 + 1) && LongCandle(ai_0) && Open[ai_0] > High[ai_0 + 1] && Close[ai_0] < Middle(ai_0 + 1) && Close[ai_0] > Open[ai_0 +
      1]);
}

int isAbandoned_Baby_Top(int ai_0) {
   return (Body(ai_0 + 2) > 0.0 && Body(ai_0) < 0.0 && LongCandle(ai_0 + 2) && Ratio(ai_0 + 1) < 0.3 && Low[ai_0 + 1] > High[ai_0 + 2] && Low[ai_0 + 1] > High[ai_0]);
}

int isThree_Black_Crows(int ai_0) {
   return (Body(ai_0 + 2) < 0.0 && Body(ai_0 + 1) < 0.0 && Body(ai_0) < 0.0 && LongCandle(ai_0 + 2) && LongCandle(ai_0 + 1) && LongCandle(ai_0) && Low[ai_0 + 1] < Low[ai_0 +
      2] && Low[ai_0] < Low[ai_0 + 1] && Close[ai_0 + 1] < Close[ai_0 + 2] && Close[ai_0] < Close[ai_0 + 1] && Open[ai_0 + 1] < Open[ai_0 + 2] && Open[ai_0 + 1] > Close[ai_0 +
      2] && Open[ai_0] < Open[ai_0 + 1] && Open[ai_0] > Close[ai_0 + 1]);
}

int isBearish_Harami(int ai_0) {
   return (Body(ai_0 + 1) > 0.0 && Body(ai_0) < 0.0 && LongCandle(ai_0 + 1) && BodyBottom(ai_0) > BodyBottom(ai_0 + 1) && BodyTop(ai_0) < BodyTop(ai_0 + 1));
}

int isThree_Inside_Down(int ai_0) {
   return (Body(ai_0 + 2) > 0.0 && Body(ai_0 + 1) < 0.0 && Body(ai_0) < 0.0 && isBearish_Harami(ai_0 + 1) && Close[ai_0] < Close[ai_0 + 1]);
}

int isBearish_Engulfing(int ai_0) {
   return (Body(ai_0 + 1) > 0.0 && Body(ai_0) < 0.0 && BodyBottom(ai_0) < BodyBottom(ai_0 + 1) && BodyTop(ai_0) > BodyTop(ai_0 + 1) && LongCandle(ai_0));
}

int isThree_Outside_Down(int ai_0) {
   return (Body(ai_0 + 2) > 0.0 && Body(ai_0 + 1) < 0.0 && Body(ai_0) < 0.0 && isBearish_Engulfing(ai_0 + 1) && Close[ai_0] < Close[ai_0 + 1]);
}

int isUpside_Gap_Two_Crows(int ai_0) {
   return (Body(ai_0 + 2) > 0.0 && Body(ai_0 + 1) < 0.0 && Body(ai_0) < 0.0 && LongCandle(ai_0 + 2) && Open[ai_0 + 1] > Close[ai_0 + 2] && BodyTop(ai_0) > BodyTop(ai_0 +
      1) && BodyBottom(ai_0) < BodyBottom(ai_0 + 1) && Close[ai_0] > Close[ai_0 + 2]);
}

int isDragonfly_Doji_Top(int ai_0) {
   return (Body(ai_0 + 1) > 0.0 && LongCandle(ai_0 + 1) && High[ai_0] > High[ai_0 + 1] && ShadowBottom(ai_0) > 3.0 * ABody(ai_0) && ShadowTop(ai_0) < ShadowBottom(ai_0) / 3.0);
}

int isGravestone_Doji_Top(int ai_0) {
   return (Body(ai_0 + 1) > 0.0 && LongCandle(ai_0 + 1) && High[ai_0] > High[ai_0 + 1] && ShadowTop(ai_0) > 3.0 * ABody(ai_0) && ShadowBottom(ai_0) < ShadowTop(ai_0) / 3.0);
}

int isDoji_Star_Top(int ai_0) {
   return (Body(ai_0 + 1) > 0.0 && LongCandle(ai_0 + 1) && High[ai_0] > High[ai_0 + 1] && Open[ai_0] > Close[ai_0 + 1] && Ratio(ai_0) < 0.3 && Range(ai_0) < 0.3 * Range(ai_0 +
      1));
}

int isBearish_Harami_Cross(int ai_0) {
   return (Body(ai_0 + 1) > 0.0 && LongCandle(ai_0 + 1) && BodyBottom(ai_0) > BodyBottom(ai_0 + 1) && BodyTop(ai_0) < BodyTop(ai_0 + 1) && Ratio(ai_0) < 0.3 && Range(ai_0) < 0.3 * Range(ai_0 +
      1));
}

int isAdvance_Block(int ai_0) {
   return (Body(ai_0 + 2) > 0.0 && Body(ai_0 + 1) > 0.0 && Body(ai_0) > 0.0 && High[ai_0 + 2] < High[ai_0 + 1] && High[ai_0 + 1] < High[ai_0] && Open[ai_0 + 1] > BodyBottom(ai_0 +
      2) && Open[ai_0 + 1] < BodyTop(ai_0 + 2) && Open[ai_0] > BodyBottom(ai_0 + 1) && Open[ai_0] < BodyTop(ai_0 + 1) && ABody(ai_0 + 1) < ABody(ai_0 + 2) && ABody(ai_0) < ABody(ai_0 + 1));
}

int isTwo_Crows(int ai_0) {
   return (Body(ai_0 + 2) > 0.0 && Body(ai_0 + 1) < 0.0 && Body(ai_0) < 0.0 && LongCandle(ai_0 + 2) && Open[ai_0 + 1] > Close[ai_0 + 2] && Close[ai_0 + 1] > Close[ai_0 +
      2] && Open[ai_0] < BodyTop(ai_0 + 1) && Open[ai_0] > BodyBottom(ai_0 + 1) && Close[ai_0] < BodyTop(ai_0 + 2) && Close[ai_0] > BodyBottom(ai_0 + 2));
}

int isBearish_Breakaway(int ai_0) {
   return (Body(ai_0 + 4) > 0.0 && Body(ai_0 + 3) > 0.0 && Body(ai_0) < 0.0 && Open[ai_0 + 3] > Close[ai_0 + 4] && Close[ai_0 + 2] > Close[ai_0 + 3] && Close[ai_0 + 1] > Close[ai_0 +
      2] && LongCandle(ai_0) && Close[ai_0] > Close[ai_0 + 4] && Close[ai_0] < Open[ai_0 + 3]);
}

int isShooting_Star(int ai_0) {
   return (Body(ai_0 + 1) > 0.0 && LongCandle(ai_0 + 1) && High[ai_0] > High[ai_0 + 1] && ShadowTop(ai_0) > 2.0 * ABody(ai_0) && ShadowBottom(ai_0) < 0.3 * ABody(ai_0));
}

int isHanging_Man(int ai_0) {
   return (Body(ai_0 + 1) > 0.0 && LongCandle(ai_0 + 1) && High[ai_0] > High[ai_0 + 1] && ShadowBottom(ai_0) > 2.0 * ABody(ai_0) && ShadowTop(ai_0) < 0.3 * ABody(ai_0));
}

int isFalling_Three_Methods(int ai_0) {
   return (Body(ai_0 + 4) < 0.0 && Body(ai_0 + 3) > 0.0 && Body(ai_0 + 1) > 0.0 && Body(ai_0) < 0.0 && LongCandle(ai_0 + 4) && LongCandle(ai_0) && Close[ai_0 + 2] > Close[ai_0 +
      3] && Close[ai_0 + 1] > Close[ai_0 + 2] && Low[ai_0 + 2] > Low[ai_0 + 3] && Low[ai_0 + 1] > Low[ai_0 + 2] && High[ai_0 + 1] < High[ai_0 + 4] && Open[ai_0] < Close[ai_0 +
      1] && Close[ai_0] < Low[ai_0 + 4] && Close[ai_0] < Low[ai_0 + 3] && Close[ai_0] < Low[ai_0 + 2] && Close[ai_0] < Low[ai_0 + 1]);
}

int isBearish_Three_Line_Strike(int ai_0) {
   return (Body(ai_0 + 3) < 0.0 && Body(ai_0 + 2) < 0.0 && Body(ai_0 + 1) < 0.0 && Body(ai_0) > 0.0 && LongCandle(ai_0 + 3) && LongCandle(ai_0 + 2) && LongCandle(ai_0 +
      1) && Close[ai_0 + 2] < Close[ai_0 + 3] && Close[ai_0 + 1] < Close[ai_0 + 2] && Open[ai_0] < Close[ai_0 + 1] && Close[ai_0] > Open[ai_0 + 3]);
}

int isBearish_Mat_Hold(int ai_0) {
   return (Body(ai_0 + 4) < 0.0 && Body(ai_0 + 3) > 0.0 && Body(ai_0 + 1) > 0.0 && Body(ai_0) < 0.0 && LongCandle(ai_0 + 4) && Close[ai_0 + 3] < Close[ai_0 + 4] && Close[ai_0 +
      2] > Close[ai_0 + 3] && Close[ai_0 + 1] > Close[ai_0 + 2] && Low[ai_0 + 2] > Low[ai_0 + 3] && Low[ai_0 + 1] > Low[ai_0 + 2] && High[ai_0 + 1] < High[ai_0 + 4] && Open[ai_0] < Close[ai_0 +
      1] && Close[ai_0] < Low[ai_0 + 4] && Close[ai_0] < Low[ai_0 + 3] && Close[ai_0] < Low[ai_0 + 2] && Close[ai_0] < Low[ai_0 + 1]);
}

int isBullish_Signal(int ai_0) {
   if (isTrendDown(ai_0 + 3) && rev(Morning_Star) && isMorning_Star(ai_0)) {
      gs_444 = "Morning Star";
      gi_452 = 3;
      return (1);
   }
   if (isTrendDown(ai_0 + 2) && rev(Piercing_Line) && isPiercing_Line(ai_0)) {
      gs_444 = "Piercing Line";
      gi_452 = 2;
      return (1);
   }
   if (isTrendDown(ai_0 + 3) && rev(Abandoned_Baby_Bottom) && isAbandoned_Baby_Bottom(ai_0)) {
      gs_444 = "Abandoned Baby";
      gi_452 = 3;
      return (1);
   }
   if (isTrendDown(ai_0 + 3) && rev(Three_Inside_Up) && isThree_Inside_Up(ai_0)) {
      gs_444 = "Three Inside Up";
      gi_452 = 3;
      return (1);
   }
   if (isTrendDown(ai_0 + 3) && rev(Three_Outside_Up) && isThree_Outside_Up(ai_0)) {
      gs_444 = "Three Outside Up";
      gi_452 = 3;
      return (1);
   }
   if (isTrendDown(ai_0 + 3) && rev(Three_White_Soldiers) && isThree_White_Soldiers(ai_0)) {
      gs_444 = "Three White Soldiers";
      gi_452 = 3;
      return (1);
   }
   if (isTrendDown(ai_0 + 4) && rev(Concealing_Baby_Swallow) && isConcealing_Baby_Swallow(ai_0)) {
      gs_444 = "Concealing Baby Swallow";
      gi_452 = 4;
      return (1);
   }
   if (isTrendDown(ai_0 + 2) && rev(Bullish_Harami) && isBullish_Harami(ai_0) && Reliability <= 1) {
      gs_444 = "Harami";
      gi_452 = 2;
      return (1);
   }
   if (isTrendDown(ai_0 + 2) && rev(Bullish_Engulfing) && isBullish_Engulfing(ai_0) && Reliability <= 2) {
      gs_444 = "Engulfing";
      gi_452 = 2;
      return (1);
   }
   if (isTrendDown(ai_0 + 2) && rev(Dragonfly_Doji_Bottom) && isDragonfly_Doji_Bottom(ai_0) && Reliability <= 2) {
      gs_444 = "Dragonfly Doji";
      gi_452 = 2;
      return (1);
   }
   if (isTrendDown(ai_0 + 2) && rev(Gravestone_Doji_Bottom) && isGravestone_Doji_Bottom(ai_0) && Reliability <= 2) {
      gs_444 = "Gravestone Doji";
      gi_452 = 2;
      return (1);
   }
   if (isTrendDown(ai_0 + 2) && rev(Doji_Star_Bottom) && isDoji_Star_Bottom(ai_0) && Reliability <= 2) {
      gs_444 = "Doji Star";
      gi_452 = 2;
      return (1);
   }
   if (isTrendDown(ai_0 + 2) && rev(Bullish_Harami_Cross) && isBullish_Harami_Cross(ai_0) && Reliability <= 2) {
      gs_444 = "Harami Cross";
      gi_452 = 2;
      return (1);
   }
   if (isTrendDown(ai_0 + 3) && rev(Three_Stars_In_The_South) && isThree_Stars_In_The_South(ai_0) && Reliability <= 2) {
      gs_444 = "Three Stars In The South";
      gi_452 = 3;
      return (1);
   }
   if (isTrendDown(ai_0 + 5) && rev(Bullish_Breakaway) && isBullish_Breakaway(ai_0) && Reliability <= 2) {
      gs_444 = "Breakaway";
      gi_452 = 5;
      return (1);
   }
   if (isTrendDown(ai_0 + 2) && rev(Hammer) && isHammer(ai_0) && Reliability <= 1) {
      gs_444 = "Hammer";
      gi_452 = 2;
      return (1);
   }
   if (isTrendDown(ai_0 + 2) && rev(Inverted_Hammer) && isInverted_Hammer(ai_0) && Reliability <= 1) {
      gs_444 = "Inverted Hammer";
      gi_452 = 2;
      return (1);
   }
   if (isTrendUp(ai_0 + 5) && rev(Rising_Three_Methods) && isRising_Three_Methods(ai_0)) {
      gs_444 = "Rising Three Methods";
      gi_452 = 5;
      return (1);
   }
   if (isTrendUp(ai_0 + 4) && rev(Bullish_Three_Line_Strike) && isBullish_Three_Line_Strike(ai_0)) {
      gs_444 = "Three Line Strike";
      gi_452 = 4;
      return (1);
   }
   if (isTrendUp(ai_0 + 5) && rev(Bullish_Mat_Hold) && isBullish_Mat_Hold(ai_0)) {
      gs_444 = "Mat Hold";
      gi_452 = 5;
      return (1);
   }
   return (0);
}

int isBearish_Signal(int ai_0) {
   if (isTrendUp(ai_0 + 3) && rev(Evening_Star) && isEvening_Star(ai_0)) {
      gs_444 = "Evening Star";
      gi_452 = 3;
      return (1);
   }
   if (isTrendUp(ai_0 + 2) && rev(Dark_Cloud_Cover) && isDark_Cloud_Cover(ai_0)) {
      gs_444 = "Dark Cloud Cover";
      gi_452 = 2;
      return (1);
   }
   if (isTrendUp(ai_0 + 3) && rev(Abandoned_Baby_Top) && isAbandoned_Baby_Top(ai_0)) {
      gs_444 = "Abandoned Baby";
      gi_452 = 3;
      return (1);
   }
   if (isTrendUp(ai_0 + 3) && rev(Three_Inside_Down) && isThree_Inside_Down(ai_0)) {
      gs_444 = "Three Inside Down";
      gi_452 = 3;
      return (1);
   }
   if (isTrendUp(ai_0 + 3) && rev(Three_Outside_Down) && isThree_Outside_Down(ai_0)) {
      gs_444 = "Three Outside Down";
      gi_452 = 3;
      return (1);
   }
   if (isTrendUp(ai_0 + 3) && rev(Three_Black_Crows) && isThree_Black_Crows(ai_0)) {
      gs_444 = "Three Black Crows";
      gi_452 = 3;
      return (1);
   }
   if (isTrendUp(ai_0 + 3) && rev(Upside_Gap_Two_Crows) && isUpside_Gap_Two_Crows(ai_0)) {
      gs_444 = "Upside Gap Two Crows";
      gi_452 = 3;
      return (1);
   }
   if (isTrendUp(ai_0 + 2) && rev(Bearish_Harami) && isBearish_Harami(ai_0) && Reliability <= 1) {
      gs_444 = "Harami";
      gi_452 = 2;
      return (1);
   }
   if (isTrendUp(ai_0 + 2) && rev(Bearish_Engulfing) && isBearish_Engulfing(ai_0) && Reliability <= 2) {
      gs_444 = "Engulfing";
      gi_452 = 2;
      return (1);
   }
   if (isTrendUp(ai_0 + 2) && rev(Dragonfly_Doji_Top) && isDragonfly_Doji_Top(ai_0) && Reliability <= 2) {
      gs_444 = "Dragonfly Doji";
      gi_452 = 2;
      return (1);
   }
   if (isTrendUp(ai_0 + 2) && rev(Gravestone_Doji_Top) && isGravestone_Doji_Top(ai_0) && Reliability <= 2) {
      gs_444 = "Gravestone Doji";
      gi_452 = 2;
      return (1);
   }
   if (isTrendUp(ai_0 + 2) && rev(Doji_Star_Top) && isDoji_Star_Top(ai_0) && Reliability <= 2) {
      gs_444 = "Doji Star";
      gi_452 = 2;
      return (1);
   }
   if (isTrendUp(ai_0 + 2) && rev(Bearish_Harami_Cross) && isBearish_Harami_Cross(ai_0) && Reliability <= 2) {
      gs_444 = "Harami Cross";
      gi_452 = 2;
      return (1);
   }
   if (isTrendUp(ai_0 + 3) && rev(Advance_Block) && isAdvance_Block(ai_0) && Reliability <= 2) {
      gs_444 = "Advance Block";
      gi_452 = 3;
      return (1);
   }
   if (isTrendUp(ai_0 + 3) && rev(Two_Crows) && isTwo_Crows(ai_0) && Reliability <= 2) {
      gs_444 = "Two Crows";
      gi_452 = 3;
      return (1);
   }
   if (isTrendUp(ai_0 + 5) && rev(Bearish_Breakaway) && isBearish_Breakaway(ai_0) && Reliability <= 2) {
      gs_444 = "Breakaway";
      gi_452 = 5;
      return (1);
   }
   if (isTrendUp(ai_0 + 2) && rev(Shooting_Star) && isShooting_Star(ai_0) && Reliability <= 1) {
      gs_444 = "Shooting Star";
      gi_452 = 2;
      return (1);
   }
   if (isTrendUp(ai_0 + 2) && rev(Hanging_Man) && isHanging_Man(ai_0) && Reliability <= 1) {
      gs_444 = "Hanging Man";
      gi_452 = 2;
      return (1);
   }
   if (isTrendDown(ai_0 + 5) && rev(Falling_Three_Methods) && isFalling_Three_Methods(ai_0)) {
      gs_444 = "Falling Three Methods";
      gi_452 = 5;
      return (1);
   }
   if (isTrendDown(ai_0 + 4) && rev(Bearish_Three_Line_Strike) && isBearish_Three_Line_Strike(ai_0)) {
      gs_444 = "Three Line Strike";
      gi_452 = 4;
      return (1);
   }
   if (isTrendDown(ai_0 + 5) && rev(Bearish_Mat_Hold) && isBearish_Mat_Hold(ai_0)) {
      gs_444 = "Mat Hold";
      gi_452 = 5;
      return (1);
   }
   return (0);
}

double MACD(int a_shift_0) {
   return (iMACD(NULL, 0, g_period_476, g_period_480, g_period_484, PRICE_CLOSE, MODE_MAIN, a_shift_0));
}

double MACD_Signal(int a_shift_0) {
   return (iMACD(NULL, 0, g_period_476, g_period_480, g_period_484, PRICE_CLOSE, MODE_SIGNAL, a_shift_0));
}

double Line(int ai_0, int ai_4, double ad_8, int ai_16, double ad_20) {
   if (ai_4 == ai_16) return (0);
   double ld_28 = (ad_20 - ad_8) / (ai_16 - ai_4);
   double ld_36 = ad_8 - ld_28 * ai_4;
   return (ld_28 * ai_0 + ld_36);
}

int isBullish_Divergence(int ai_0) {
   bool li_24 = FALSE;
   if (!(MACD(ai_0) < 0.0 && MACD(ai_0) > MACD(ai_0 + 1) && MACD(ai_0 + 1) < MACD(ai_0 + 2))) return (0);
   for (int li_4 = ai_0; li_4 <= ai_0 + gi_456; li_4++) {
      if (MACD(li_4 + 1) >= 0.0) li_24 = TRUE;
      if (MACD(li_4) < MACD_Signal(li_4) && MACD(li_4 + 1) > MACD_Signal(li_4 + 1)) break;
   }
   int li_16 = li_4;
   for (li_4 = li_16 + 1; li_4 <= ai_0 + gi_456; li_4++) {
      if (MACD(li_4 + 1) >= 0.0) li_24 = TRUE;
      if (MACD(li_4) > MACD_Signal(li_4) && MACD(li_4 + 1) < MACD_Signal(li_4 + 1)) break;
   }
   if (Only_Deep_Divergence && !li_24) return (0);
   int li_12 = li_4;
   for (li_4 = li_12 + 1; li_4 <= ai_0 + gi_456; li_4++)
      if (MACD(li_4 + 1) >= 0.0 || MACD(li_4 + 1) > MACD_Signal(li_4 + 1)) break;
   int li_8 = li_4;
   if (li_12 - li_16 < 3) return (0);
   li_4 = li_16 + 1;
   int li_20 = li_16;
   while (li_4 <= li_12 - 1) {
      if (MACD(li_20) <= MACD(li_4)) li_20 = li_4;
      li_4++;
   }
   li_4 = li_20;
   gi_464 = ai_0;
   while (li_4 >= ai_0) {
      if (Low[li_4] < Low[gi_464]) gi_464 = li_4;
      li_4--;
   }
   li_4 = li_20;
   gi_460 = li_20;
   while (li_4 <= li_8) {
      if (Low[li_4] < Low[gi_460]) gi_460 = li_4;
      li_4++;
   }
   li_4 = ai_0;
   gi_472 = ai_0;
   while (li_4 <= li_20) {
      if (MACD(li_4) < MACD(gi_472)) gi_472 = li_4;
      li_4++;
   }
   li_4 = li_20;
   gi_468 = li_20;
   while (li_4 <= li_8) {
      if (MACD(li_4) < MACD(gi_468)) gi_468 = li_4;
      li_4++;
   }
   if (MACD(gi_468) > MACD(gi_472)) return (0);
   for (li_4 = gi_464 + 1; li_4 < gi_460; li_4++)
      if (Low[li_4] < Line(li_4, gi_460, Low[gi_460], gi_464, Low[gi_464])) return (0);
   if (Only_Regular_Divergence && Low[gi_460] < Low[gi_464]) return (0);
   gi_452 = gi_460 - gi_464 + 1;
   gs_444 = "Divergence";
   return (1);
}

int isBearish_Divergence(int ai_0) {
   bool li_24 = FALSE;
   if (!(MACD(ai_0) > 0.0 && MACD(ai_0) < MACD(ai_0 + 1) && MACD(ai_0 + 1) > MACD(ai_0 + 2))) return (0);
   for (int li_4 = ai_0; li_4 <= ai_0 + gi_456; li_4++) {
      if (MACD(li_4 + 1) <= 0.0) li_24 = TRUE;
      if (MACD(li_4) > MACD_Signal(li_4) && MACD(li_4 + 1) < MACD_Signal(li_4 + 1)) break;
   }
   int li_16 = li_4;
   for (li_4 = li_16 + 1; li_4 <= ai_0 + gi_456; li_4++) {
      if (MACD(li_4 + 1) <= 0.0) li_24 = TRUE;
      if (MACD(li_4) < MACD_Signal(li_4) && MACD(li_4 + 1) > MACD_Signal(li_4 + 1)) break;
   }
   if (Only_Deep_Divergence && !li_24) return (0);
   int li_12 = li_4;
   for (li_4 = li_12 + 1; li_4 <= ai_0 + gi_456; li_4++)
      if (MACD(li_4 + 1) <= 0.0 || MACD(li_4 + 1) < MACD_Signal(li_4 + 1)) break;
   int li_8 = li_4;
   if (li_12 - li_16 < 3) return (0);
   li_4 = li_16 + 1;
   int li_20 = li_16;
   while (li_4 <= li_12 - 1) {
      if (MACD(li_20) >= MACD(li_4)) li_20 = li_4;
      li_4++;
   }
   li_4 = li_20;
   gi_464 = ai_0;
   while (li_4 >= ai_0) {
      if (High[li_4] > High[gi_464]) gi_464 = li_4;
      li_4--;
   }
   li_4 = li_20;
   gi_460 = li_20;
   while (li_4 <= li_8) {
      if (High[li_4] > High[gi_460]) gi_460 = li_4;
      li_4++;
   }
   li_4 = ai_0;
   gi_472 = ai_0;
   while (li_4 <= li_20) {
      if (MACD(li_4) > MACD(gi_472)) gi_472 = li_4;
      li_4++;
   }
   li_4 = li_20;
   gi_468 = li_20;
   while (li_4 <= li_8) {
      if (MACD(li_4) > MACD(gi_468)) gi_468 = li_4;
      li_4++;
   }
   if (MACD(gi_468) < MACD(gi_472)) return (0);
   for (li_4 = gi_464 + 1; li_4 < gi_460; li_4++)
      if (High[li_4] > Line(li_4, gi_460, High[gi_460], gi_464, High[gi_464])) return (0);
   if (Only_Regular_Divergence && High[gi_460] > High[gi_464]) return (0);
   gi_452 = gi_460 - gi_464 + 1;
   gs_444 = "Divergence";
   return (1);
}

int start() {
   int l_ind_counted_12;
   int l_acc_number_0 = AccountNumber();
   string l_acc_number_4 = l_acc_number_0;
   
/*   
   if (!IsConnected() || l_acc_number_0 <= 0) {
      gi_100 = TRUE;
      gi_104 = TRUE;
      return (0);
   }
   
/*
   if (l_acc_number_4 != gs_92) {
      if (gi_104) Alert("Invalid account. This program is licensed to " + gs_84 + ", account " + gs_92 + ".");
      gi_100 = TRUE;
      gi_104 = FALSE;
      return (0);
   }
   
   */
   
   
   if (gi_100) l_ind_counted_12 = 0;
   else {
      l_ind_counted_12 = IndicatorCounted();
      gi_100 = FALSE;
   }
   if (l_ind_counted_12 < 0) return (-1);
   int li_16 = Bars - l_ind_counted_12 - 1;
   li_16 = MathMin(li_16, Look_Back);
   if (!NewBar()) return (0);
   if (Bars < 50) return (0);
   int li_20 = WindowFind("MACD(12,26,9)");
   while (li_16 >= 1) {
      g_ibuf_416[li_16] = (g_ibuf_416[li_16 + 1] + (g_ibuf_420[li_16 + 1])) / 2.0;
      g_ibuf_420[li_16] = (Open[li_16] + High[li_16] + Low[li_16] + Close[li_16]) / 4.0;
      if (Show_Candlestick_Patterns && Show_Bullish_Patterns && isBullish_Signal(li_16)) {
         FillBars(li_16, li_16 + gi_452 - 1);
         if (Show_Pattern_Names) Label(0, li_16, gs_444);
         if (Show_Alert && li_16 == 1 && Time[1] != g_time_436) {
            Alert(Symbol() + " " + gs_428 + " " + gs_444);
            if (SendEmail) SendMail("CPR Signal", Symbol() + " " + gs_428 + " " + gs_444);
         }
      }
      if (Show_Candlestick_Patterns && Show_Bearish_Patterns && isBearish_Signal(li_16)) {
         FillBars(li_16, li_16 + gi_452 - 1);
         if (Show_Pattern_Names) Label(1, li_16, gs_444);
         if (Show_Alert && li_16 == 1 && Time[1] != g_time_436) {
            Alert(Symbol() + " " + gs_428 + " " + gs_444);
            if (SendEmail) SendMail("CPR Signal", Symbol() + " " + gs_428 + " " + gs_444);
         }
      }
      if (Show_Divergence_Patterns && Show_Bullish_Patterns && isBullish_Divergence(li_16)) {
         ConnectPoints(Time[gi_464], Low[gi_464], Time[gi_460], Low[gi_460], g_color_384, 0);
         if (li_20 > -1) ConnectPoints(Time[gi_472], MACD(gi_472), Time[gi_468], MACD(gi_468), g_color_384, li_20);
         if (Show_Alert && li_16 == 1 && Time[1] != g_time_436) {
            Alert(Symbol() + " " + gs_428 + " " + gs_444);
            if (SendEmail) SendMail("CPR Signal", Symbol() + " " + gs_428 + " " + gs_444);
         }
      }
      if (Show_Divergence_Patterns && Show_Bearish_Patterns && isBearish_Divergence(li_16)) {
         ConnectPoints(Time[gi_464], High[gi_464], Time[gi_460], High[gi_460], g_color_380, 0);
         if (li_20 > -1) ConnectPoints(Time[gi_472], MACD(gi_472), Time[gi_468], MACD(gi_468), g_color_380, li_20);
         if (Show_Alert && li_16 == 1 && Time[1] != g_time_436) {
            Alert(Symbol() + " " + gs_428 + " " + gs_444);
            if (SendEmail) SendMail("CPR Signal", Symbol() + " " + gs_428 + " " + gs_444);
         }
      }
      li_16--;
   }
   g_time_436 = Time[1];
   return (0);
}