/*
James16 Patterns.mq4  (Adaptado por MF1Forex_2015).
*/

#property copyright "Copyright © 2007, Rob Rice (blueruby)."
#property link      ""

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Red
#property indicator_color2 DeepSkyBlue

extern string b = " --- Bearish Patterns --- ";
extern bool showDBHLC = TRUE;
extern bool showBEOVB = TRUE;
extern bool showTMLTB = TRUE;
extern string u = " --- Bullish Patterns --- ";
extern bool showDBLHC = TRUE;
extern bool showBUOVB = TRUE;
extern bool showTMHTB = TRUE;
extern string c = " --- Non Directional or both dir --- ";
extern bool showIB4 = TRUE;
extern bool showKEYRV = FALSE;
extern color Color_Letras=Brown;
double g_ibuf_132[];
double g_ibuf_136[];
string gsa_140[5000];
datetime g_time_144;
int g_digits_148;
int gi_152;

int init() {
   ObjectsDeleteAll(0, OBJ_TEXT);
   SetIndexStyle(0, DRAW_ARROW, EMPTY);
   SetIndexArrow(0, 72);
   SetIndexBuffer(0, g_ibuf_136);
   SetIndexStyle(1, DRAW_ARROW, EMPTY);
   SetIndexArrow(1, 71);
   SetIndexBuffer(1, g_ibuf_132);
   return (0);
}

int deinit() {
   ObjectsDeleteAll(0, OBJ_TEXT);
   return (0);
}

int start() {
   double ld_0;
   double ld_8;
   double ld_16;
   double ld_24;
   double ld_32;
   double ld_40;
   double ld_56;
   double ld_64;
   double ld_72;
   double ld_88;
   double ld_96;
   double ld_104;
   double ld_120;
   double ld_128;
   double ld_136;
   double ld_152;
   double ld_160;
   double ld_168;
   int li_188;
   int li_192;
   int li_196;
   string ls_unused_216;
   string ls_unused_224;
   g_digits_148 = MarketInfo(Symbol(), MODE_DIGITS);
   if (g_time_144 == Time[0]) return (0);
   g_time_144 = Time[0];
   if (Period() >= PERIOD_D1) gi_152 = 3;
   else gi_152 = 1;
   for (int l_index_232 = 0; l_index_232 < Bars; l_index_232++) gsa_140[l_index_232] = "pattern-" + l_index_232;
   for (int l_index_184 = 0; l_index_184 < Bars; l_index_184++) {
      ld_0 = 0;
      ld_40 = 0;
      for (int li_176 = l_index_184; li_176 <= l_index_184 + 9; li_176++) ld_40 += MathAbs(High[li_176] - Low[li_176]);
      ld_0 = ld_40 / 10.0;
      li_188 = l_index_184 + 1;
      li_192 = l_index_184 + 2;
      li_196 = l_index_184 + 3;
      ld_56 = NormalizeDouble(Open[li_188], g_digits_148);
      ld_64 = NormalizeDouble(Open[li_192], g_digits_148);
      ld_72 = NormalizeDouble(Open[li_196], g_digits_148);
      ld_152 = NormalizeDouble(High[li_188], g_digits_148);
      ld_160 = NormalizeDouble(High[li_192], g_digits_148);
      ld_168 = NormalizeDouble(High[li_196], g_digits_148);
      ld_120 = NormalizeDouble(Low[li_188], g_digits_148);
      ld_128 = NormalizeDouble(Low[li_192], g_digits_148);
      ld_136 = NormalizeDouble(Low[li_196], g_digits_148);
      ld_88 = NormalizeDouble(Close[li_188], g_digits_148);
      ld_96 = NormalizeDouble(Close[li_192], g_digits_148);
      ld_104 = NormalizeDouble(Close[li_196], g_digits_148);
      if (showDBHLC && ld_152 == ld_160 || ld_152 + gi_152 * Point == ld_160 || ld_152 - gi_152 * Point == ld_160 && ld_88 < ld_128) {
         ObjectCreate(gsa_140[l_index_184], OBJ_TEXT, 0, Time[li_188], High[li_188] + 0.3 * ld_0);
         ObjectSetText(gsa_140[l_index_184], "DBHLC", 7, "Arial", Color_Letras);
         g_ibuf_136[li_188] = High[li_188] + ld_0 / 10.0;
      }
      if (showBEOVB && ld_152 > ld_160 + gi_152 * Point && ld_120 < ld_128 - gi_152 * Point && ld_88 < ld_96) {
         ObjectCreate(gsa_140[l_index_184], OBJ_TEXT, 0, Time[li_188], High[li_188] + ld_0 / 2.0);
         ObjectSetText(gsa_140[l_index_184], "BEOVB", 7, "Arial", Color_Letras);
         g_ibuf_136[li_188] = High[li_188] + ld_0 / 10.0;
      }
      if (showTMLTB && ld_128 == ld_136 || ld_128 + gi_152 * Point == ld_136 || ld_128 - gi_152 * Point == ld_136 && ld_88 < ld_128 - gi_152 * Point) {
         ObjectCreate(gsa_140[l_index_184], OBJ_TEXT, 0, Time[li_188], High[li_188] + ld_0 / 2.0);
         ObjectSetText(gsa_140[l_index_184], "TMLTB", 7, "Arial", Color_Letras);
         g_ibuf_136[li_188] = High[li_188] + ld_0 / 10.0;
      }
      if (ld_120 >= ld_128 && ld_56 <= ld_160 && ld_88 <= ld_56 && ld_152 > ld_160 + (ld_152 - ld_120) / 3.0) {
         ObjectCreate(gsa_140[l_index_184], OBJ_TEXT, 0, Time[li_188], High[li_188] + 0.3 * ld_0);
         ObjectSetText(gsa_140[l_index_184], "Pin Bar", 7, "Arial", Color_Letras);
         g_ibuf_136[li_188] = High[li_188] + ld_0 / 10.0;
      }
      if (showKEYRV && ld_152 > ld_160 && ld_88 < ld_96) {
         ObjectCreate(gsa_140[l_index_184], OBJ_TEXT, 0, Time[li_188], High[li_188] + 0.3 * ld_0);
         ObjectSetText(gsa_140[l_index_184], "Key Reversal", 7, "Arial", Color_Letras);
         g_ibuf_136[li_188] = High[li_188] + ld_0 / 10.0;
      }
      if (showDBLHC && ld_120 == ld_128 || ld_120 + gi_152 * Point == ld_128 || ld_120 - gi_152 * Point == ld_128 && ld_88 > ld_160) {
         ObjectCreate(gsa_140[l_index_184], OBJ_TEXT, 0, Time[li_188], Low[li_188] - 0.3 * ld_0);
         ObjectSetText(gsa_140[l_index_184], "DBLHC", 7, "Arial", Color_Letras);
         g_ibuf_132[li_188] = Low[li_188] - ld_0 / 10.0;
      }
      if (showBUOVB && ld_152 > ld_160 + gi_152 * Point && ld_120 < ld_128 - gi_152 * Point && ld_88 > ld_96) {
         ObjectCreate(gsa_140[l_index_184], OBJ_TEXT, 0, Time[li_188], Low[li_188] - 0.3 * ld_0);
         ObjectSetText(gsa_140[l_index_184], "BUOVB", 7, "Arial", Color_Letras);
         g_ibuf_132[li_188] = Low[li_188] - ld_0 / 10.0;
      }
      if (showTMHTB && ld_160 == ld_168 || ld_160 + gi_152 * Point == ld_168 || ld_160 - gi_152 * Point == ld_168 && ld_88 > ld_160 + gi_152 * Point) {
         ObjectCreate(gsa_140[l_index_184], OBJ_TEXT, 0, Time[li_188], Low[li_188] - 0.3 * ld_0);
         ObjectSetText(gsa_140[l_index_184], "TMHTB", 7, "Arial", Color_Letras);
         g_ibuf_132[li_188] = Low[li_188] - ld_0 / 10.0;
      }
      if (ld_152 <= ld_160 && ld_56 >= ld_128 && ld_88 >= ld_56 && ld_120 < ld_128 - (ld_152 - ld_120) / 3.0) {
         ObjectCreate(gsa_140[l_index_184], OBJ_TEXT, 0, Time[li_188], Low[li_188] - 0.75 * ld_0);
         ObjectSetText(gsa_140[l_index_184], "Pin Bar", 7, "Arial", Color_Letras);
         g_ibuf_132[li_188] = Low[li_188] - ld_0 / 10.0;
      }
      if (showKEYRV && ld_120 < ld_128 && ld_88 > ld_96) {
         ObjectCreate(gsa_140[l_index_184], OBJ_TEXT, 0, Time[li_188], Low[li_188] - 0.75 * ld_0);
         ObjectSetText(gsa_140[l_index_184], "Key Reversal", 7, "Arial", Color_Letras);
         g_ibuf_132[li_188] = Low[li_188] - ld_0 / 10.0;
      }
      ld_8 = ld_152 - ld_120;
      ld_16 = ld_160 - ld_128;
      ld_24 = ld_168 - ld_136;
      ld_32 = High[l_index_184 + 4] - (Low[l_index_184 + 4]);
      if (showIB4 && ld_152 < ld_160 && ld_120 > ld_128 && ld_8 < ld_16 && ld_8 < ld_24 && ld_8 < ld_32) {
         if (g_ibuf_136[li_192] == EMPTY_VALUE || g_ibuf_136[li_192] == 0.0) {
            ObjectCreate(gsa_140[l_index_184], OBJ_TEXT, 0, Time[li_188], High[li_188] + 0.75 * ld_0);
            ObjectSetText(gsa_140[l_index_184], "IB4", 7, "Arial", Color_Letras);
            g_ibuf_136[li_188] = High[li_188] + ld_0 / 10.0;
         } else {
            ObjectCreate(gsa_140[l_index_184], OBJ_TEXT, 0, Time[li_188], Low[li_188] - 0.75 * ld_0);
            ObjectSetText(gsa_140[l_index_184], "IB4", 7, "Arial", Color_Letras);
            g_ibuf_132[li_188] = Low[li_188] - ld_0 / 10.0;
         }
      }
   }
   return (0);
}
