#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 Green
#property indicator_color2 Red
#property indicator_width1 2
#property indicator_width2 2

extern int PERIOD = 38;
extern double Dev = 0.018;
int MA_Method = MODE_SMA;
int App_Price = PRICE_CLOSE;
double BufferUp[];
double BufferDown[];
double DevUP[];
double DevDOWN[];
double G_ibuf_172[];
double Gd_184 = 0.0;

int init() {
   IndicatorBuffers(7);
   SetIndexBuffer(0, BufferUp);
   SetIndexBuffer(1, BufferDown);
   SetIndexBuffer(4, DevUP);
   SetIndexBuffer(5, DevDOWN);
   SetIndexBuffer(6, G_ibuf_172);
   SetIndexStyle(0, DRAW_HISTOGRAM);
   SetIndexStyle(1, DRAW_HISTOGRAM);
   SetIndexLabel(0, "PremiumFXScalper ");
   SetIndexEmptyValue(0, 0);
   SetIndexEmptyValue(1, 0);
   IndicatorDigits(Digits);
   IndicatorShortName("PremiumFXScalper (" + PERIOD + ") (" + Dev + ")");
   SetIndexLabel(0, "Up");
   SetIndexLabel(1, "Down");
   SetIndexDrawBegin(0, PERIOD - 1);
   SetIndexDrawBegin(1, PERIOD - 1);
   return (0);
}

void deinit() {
}

int start() {
   int Li_24;
   int i;
   if (Bars <= PERIOD) return (0);
   int counted_bars = IndicatorCounted();
   if (counted_bars < 0) return (-1);
   if (counted_bars == 0) {
      Li_24 = Bars - PERIOD - 1;
      for (i = 0; i < Bars; i++) {
         BufferUp[i] = 0;
         BufferDown[i] = 0;
      }
   } else Li_24 = Bars - counted_bars - 1;
   for (i = Li_24; i > 0; i--) {
      DevUP[i] = (Dev / 100.0 + 1.0) * iMA(NULL, 0, PERIOD, 0, MA_Method, App_Price, i);
      DevDOWN[i] = (1 - Dev / 100.0) * iMA(NULL, 0, PERIOD, 0, MA_Method, App_Price, i);
      G_ibuf_172[i] = G_ibuf_172[i + 1];
      if (Close[i] > DevUP[i + 1]) G_ibuf_172[i] = 1;
      if (Close[i] < DevDOWN[i + 1]) G_ibuf_172[i] = -1;
      if (G_ibuf_172[i] > 0.0) {
         if (DevDOWN[i] < DevDOWN[i + 1]) DevDOWN[i] = DevDOWN[i + 1];
         if (BufferUp[i + 1] == 0.0) Gd_184 = BufferDown[i + 1] - DevDOWN[i];
         BufferUp[i] = DevDOWN[i] + Gd_184;
         BufferDown[i] = 0;
      } else {
         if (DevUP[i] > DevUP[i + 1]) DevUP[i] = DevUP[i + 1];
         BufferDown[i] = DevUP[i];
         BufferUp[i] = 0;
      }
   }
   return (0);
}