#property indicator_separate_window
#property indicator_minimum -5.0
#property indicator_maximum 120.0

extern string CurrencyPair = "";
extern string TimeFrames = "M1, M5, M15, M30, H1, H4, D1, W1, MN";
extern int NumCandles = 5;
extern color CandleUpColor = Lime;
extern color CandleDownColor = Red;
extern color TextColor = White;
extern bool DisplayInfo = TRUE;
extern int RefreshEveryXMins = 0;
string g_symbol_116;
int g_digits_124;
int g_timeframe_128;
int g_timeframe_132;
int g_window_136;
double gd_140;
double gd_148;
double gd_156;
double g_bid_164;
double g_ask_172;
double gd_180;
double gd_188;
double g_iopen_196;
double g_ihigh_204;
double g_ilow_212;
double g_iclose_220;
int g_datetime_228;

int init() {
   g_symbol_116 = Symbol();
   if (CurrencyPair > "") g_symbol_116 = CurrencyPair;
   g_timeframe_132 = Period();
   g_bid_164 = MarketInfo(g_symbol_116, MODE_BID);
   g_ask_172 = MarketInfo(g_symbol_116, MODE_ASK);
   gd_148 = MarketInfo(g_symbol_116, MODE_POINT);
   g_digits_124 = MarketInfo(g_symbol_116, MODE_DIGITS);
   gd_140 = MarketInfo(g_symbol_116, MODE_SPREAD);
   gd_156 = MarketInfo(g_symbol_116, MODE_TICKVALUE);
   if (g_digits_124 == 3 || g_digits_124 == 5) {
      gd_148 = 10.0 * gd_148;
      gd_140 /= 10.0;
      gd_156 = 10.0 * gd_156;
   }
   IndicatorShortName("RecCand-" + g_symbol_116);
   del_obj();
   plot_obj();
   if (RefreshEveryXMins > PERIOD_H4) RefreshEveryXMins = 240;
   if (RefreshEveryXMins > PERIOD_H1 && RefreshEveryXMins < PERIOD_H4) RefreshEveryXMins = 60;
   if (RefreshEveryXMins > PERIOD_M30 && RefreshEveryXMins < PERIOD_H1) RefreshEveryXMins = 30;
   if (RefreshEveryXMins > PERIOD_M15 && RefreshEveryXMins < PERIOD_M30) RefreshEveryXMins = 15;
   if (RefreshEveryXMins > PERIOD_M5 && RefreshEveryXMins < PERIOD_M15) RefreshEveryXMins = 5;
   if (RefreshEveryXMins > PERIOD_M1 && RefreshEveryXMins < PERIOD_M5) RefreshEveryXMins = 1;
   g_datetime_228 = -9999;
   return (0);
}

int deinit() {
   del_obj();
   return (0);
}

int start() {
   if (RefreshEveryXMins == 0) {
      del_obj();
      plot_obj();
   } else {
      if (g_datetime_228 != iTime(g_symbol_116, RefreshEveryXMins, 0)) {
         del_obj();
         plot_obj();
         g_datetime_228 = iTime(g_symbol_116, RefreshEveryXMins, 0);
      }
   }
   return (0);
}

void del_obj() {
   string l_name_4;
   int li_0 = 0;
   while (li_0 < ObjectsTotal()) {
      l_name_4 = ObjectName(li_0);
      if (StringSubstr(l_name_4, 0, 10) == "#RC-" + g_symbol_116) ObjectDelete(l_name_4);
      else li_0++;
   }
}

void plot_obj() {
   string l_text_4;
   string l_text_20;
   string l_name_32;
   string l_name_40;
   string l_name_48;
   string l_name_56;
   string l_symbol_64;
   string l_name_72;
   g_bid_164 = MarketInfo(g_symbol_116, MODE_BID);
   gd_140 = MarketInfo(g_symbol_116, MODE_SPREAD);
   gd_156 = MarketInfo(g_symbol_116, MODE_TICKVALUE);
   if (g_digits_124 == 3 || g_digits_124 == 5) {
      gd_140 /= 10.0;
      gd_156 = 10.0 * gd_156;
   }
   g_window_136 = WindowFind("RecCand-" + g_symbol_116);
   int li_0 = 1;
   for (int li_12 = 9; li_12 >= 1; li_12--) {
      switch (li_12) {
      case 1:
         g_timeframe_128 = 43200;
         l_text_4 = "MN1";
         break;
      case 2:
         g_timeframe_128 = 10080;
         l_text_4 = "W1";
         break;
      case 3:
         g_timeframe_128 = 1440;
         l_text_4 = "D1";
         break;
      case 4:
         g_timeframe_128 = 240;
         l_text_4 = "H4";
         break;
      case 5:
         g_timeframe_128 = 60;
         l_text_4 = "H1";
         break;
      case 6:
         g_timeframe_128 = 30;
         l_text_4 = "M30";
         break;
      case 7:
         g_timeframe_128 = 15;
         l_text_4 = "M15";
         break;
      case 8:
         g_timeframe_128 = 5;
         l_text_4 = "M5";
         break;
      case 9:
         g_timeframe_128 = 1;
         l_text_4 = "M1";
      }
      if (li_12 >= 1 && li_12 <= 8 && StringFind(TimeFrames, l_text_4 + ",", 0) < 0) continue;
      if (li_12 == 9 && StringFind(TimeFrames, "MN", 0) < 0) continue;
      l_text_20 = g_symbol_116 + "," + l_text_4;
      gd_180 = 0;
      gd_188 = 999999;
      for (int li_28 = 0; li_28 <= NumCandles; li_28++) {
         gd_180 = MathMax(gd_180, iHigh(g_symbol_116, g_timeframe_128, li_28));
         gd_188 = MathMin(gd_188, iLow(g_symbol_116, g_timeframe_128, li_28));
      }
      for (li_28 = 0; li_28 <= NumCandles; li_28++) {
         g_iopen_196 = iOpen(g_symbol_116, g_timeframe_128, li_28);
         g_ihigh_204 = iHigh(g_symbol_116, g_timeframe_128, li_28);
         g_ilow_212 = iLow(g_symbol_116, g_timeframe_128, li_28);
         g_iclose_220 = iClose(g_symbol_116, g_timeframe_128, li_28);
         l_name_32 = "#RC-" + l_text_20 + "-" + li_28 + "-b";
         l_name_40 = "#RC-" + l_text_20 + "-" + li_28 + "-w";
         if (g_iopen_196 == g_iclose_220) {
            ObjectCreate(l_name_32, OBJ_TREND, g_window_136, iTime(g_symbol_116, g_timeframe_132, li_0), DivZero(100.0 * (g_iopen_196 - gd_188), gd_180 - gd_188), iTime(g_symbol_116, g_timeframe_132, li_0 +
               2), DivZero(100.0 * (g_iclose_220 - gd_188), gd_180 - gd_188));
         } else {
            ObjectCreate(l_name_32, OBJ_RECTANGLE, g_window_136, iTime(g_symbol_116, g_timeframe_132, li_0), DivZero(100.0 * (g_iopen_196 - gd_188), gd_180 - gd_188), iTime(g_symbol_116, g_timeframe_132, li_0 +
               2), DivZero(100.0 * (g_iclose_220 - gd_188), gd_180 - gd_188));
         }
         ObjectSet(l_name_32, OBJPROP_COLOR, CandleUpColor);
         ObjectSet(l_name_32, OBJPROP_RAY, FALSE);
         ObjectCreate(l_name_40, OBJ_TREND, g_window_136, iTime(g_symbol_116, g_timeframe_132, li_0 + 1), DivZero(100.0 * (g_ihigh_204 - gd_188), gd_180 - gd_188), iTime(g_symbol_116, g_timeframe_132, li_0 +
            1), DivZero(100.0 * (g_ilow_212 - gd_188), gd_180 - gd_188));
         ObjectSet(l_name_40, OBJPROP_COLOR, CandleUpColor);
         ObjectSet(l_name_40, OBJPROP_RAY, FALSE);
         if (g_iclose_220 < g_iopen_196) {
            ObjectSet(l_name_32, OBJPROP_COLOR, CandleDownColor);
            ObjectSet(l_name_40, OBJPROP_COLOR, CandleDownColor);
         }
         li_0 += 4;
      }
      li_0 += 4;
      l_name_48 = "#RC-" + l_text_20 + "-s";
      ObjectCreate(l_name_48, OBJ_TREND, g_window_136, iTime(g_symbol_116, g_timeframe_132, li_0 + 1), 120, iTime(g_symbol_116, g_timeframe_132, li_0 + 1), -20);
      ObjectSet(l_name_48, OBJPROP_COLOR, TextColor);
      l_name_56 = "#RC-" + l_text_20 + "-t";
      ObjectCreate(l_name_56, OBJ_TEXT, g_window_136, iTime(g_symbol_116, g_timeframe_132, li_0 - 8 - NumCandles), 118);
      if (NumCandles < 1) ObjectSetText(l_name_56, l_text_4, 9, "Arial", TextColor);
      else ObjectSetText(l_name_56, l_text_20, 9, "Arial", TextColor);
      li_0 += 8;
   }
   if (DisplayInfo) {
      l_symbol_64 = g_symbol_116;
      l_name_72 = "#RC-" + g_symbol_116 + "-i1";
      ObjectCreate(l_name_72, OBJ_TEXT, g_window_136, iTime(g_symbol_116, g_timeframe_132, li_0 + 27), 118);
      ObjectSetText(l_name_72, l_symbol_64, 9, "Arial", TextColor);
      l_symbol_64 = "  Bid = " + DoubleToStr(g_bid_164, g_digits_124);
      l_name_72 = "#RC-" + g_symbol_116 + "-i2";
      ObjectCreate(l_name_72, OBJ_TEXT, g_window_136, iTime(g_symbol_116, g_timeframe_132, li_0 + 21), 93);
      ObjectSetText(l_name_72, l_symbol_64, 9, "Arial", TextColor);
      l_symbol_64 = "  Spread = " + DoubleToStr(gd_140, 1);
      l_name_72 = "#RC-" + g_symbol_116 + "-i3";
      ObjectCreate(l_name_72, OBJ_TEXT, g_window_136, iTime(g_symbol_116, g_timeframe_132, li_0 + 21), 68);
      ObjectSetText(l_name_72, l_symbol_64, 9, "Arial", TextColor);
      l_symbol_64 = "  Pip Value = " + DoubleToStr(gd_156, 3);
      l_name_72 = "#RC-" + g_symbol_116 + "-i4";
      ObjectCreate(l_name_72, OBJ_TEXT, g_window_136, iTime(g_symbol_116, g_timeframe_132, li_0 + 16), 43);
      ObjectSetText(l_name_72, l_symbol_64, 9, "Arial", TextColor);
   }
}

double DivZero(double ad_0, double ad_8) {
   if (ad_8 == 0.0) return (0);
   else return (ad_0 / ad_8);
}