
#property copyright "flatfx"
#property link      ""

#property indicator_separate_window
#property indicator_minimum 0.0
#property indicator_maximum 1.0
#property indicator_buffers 3
#property indicator_color1 Red
#property indicator_color2 Lime
#property indicator_color3 Gray

extern int flat_use = 8;
extern int flat_up = 8;
extern int flat_period = 5;
extern int flat_down = 11;
extern int flat_bars = 98980;
double g_ibuf_96[];
double g_ibuf_100[];
double g_ibuf_104[];
string gs_unused_108;
double g_imacd_116;
double g_imacd_124;

int init() {
   SetIndexStyle(0, DRAW_HISTOGRAM, STYLE_DASHDOTDOT, 1, Red);
   SetIndexBuffer(0, g_ibuf_96);
   SetIndexStyle(1, DRAW_HISTOGRAM, STYLE_DASHDOTDOT, 1, Lime);
   SetIndexBuffer(1, g_ibuf_100);
   SetIndexStyle(2, DRAW_HISTOGRAM, STYLE_DASHDOTDOT, 5, Gray);
   SetIndexBuffer(2, g_ibuf_104);
   switch (flat_use) {
   case 1:
      gs_unused_108 = "Per_M1";
      break;
   case 5:
      gs_unused_108 = "Per_M5";
      break;
   case 15:
      gs_unused_108 = "Per_M15";
      break;
   case 30:
      gs_unused_108 = "Per_M30";
      break;
   case 60:
      gs_unused_108 = "Per_H1";
      break;
   case 240:
      gs_unused_108 = "Per_H4";
      break;
   case 1440:
      gs_unused_108 = "Per_D1";
      break;
   case 10080:
      gs_unused_108 = "Per_W1";
      break;
   case 43200:
      gs_unused_108 = "Per_MN1";
      break;
   default:
      gs_unused_108 = "Timeframe";
      flat_use = 0;
   }
   return (0);
}

int deinit() {
   return (0);
}

int start() {
   int l_ind_counted_0 = IndicatorCounted();
   for (int l_shift_4 = 0; l_shift_4 < flat_bars; l_shift_4++) {
      g_ibuf_96[l_shift_4] = 0;
      g_ibuf_100[l_shift_4] = 0;
      g_ibuf_104[l_shift_4] = 0;
      g_imacd_116 = iMACD(NULL, flat_use, flat_up, flat_down, flat_period, PRICE_CLOSE, MODE_SIGNAL, l_shift_4);
      g_imacd_124 = iMACD(NULL, flat_use, flat_up, flat_down, flat_period, PRICE_CLOSE, MODE_MAIN, l_shift_4);
      if (g_imacd_116 < g_imacd_124 && g_imacd_124 > 0.0) g_ibuf_100[l_shift_4] = 1;
      if (g_imacd_116 > g_imacd_124 && g_imacd_124 < 0.0) g_ibuf_96[l_shift_4] = 1;
      if (g_ibuf_96[l_shift_4] == 0.0 && g_ibuf_100[l_shift_4] == 0.0) g_ibuf_104[l_shift_4] = 1;
   }
   return (0);
}