//+------------------------------------------------------------------+
//|                                                     JL-Lines.mq4 |
//+------------------------------------------------------------------+
#property indicator_chart_window
#property indicator_buffers 4
#property indicator_color1 LightSkyBlue
#property indicator_color2 Tomato
#property indicator_color3 Blue
#property indicator_color4 Red

//---- buffers
double BreakA[],
       BreakB[],
       StopH[],
       StopL[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
{
   IndicatorShortName("JL-Lines");
//---- indicators
   SetIndexLabel (0,"Break A");
   SetIndexStyle (0,DRAW_LINE);
   SetIndexBuffer(0,BreakA);
   SetIndexLabel (1,"Break B");
   SetIndexStyle (1,DRAW_LINE);
   SetIndexBuffer(1,BreakB);
   SetIndexLabel (2,"Stop H");
   SetIndexStyle (2,DRAW_LINE);
   SetIndexBuffer(2,StopH);
   SetIndexLabel (3,"Stop L");
   SetIndexStyle (3,DRAW_LINE);
   SetIndexBuffer(3,StopL);
//----
   return(0);
}

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
{
//----
   for (int i = Bars-IndicatorCounted(); i >= 0; i--)
   {
      if(TimeHour(iTime(NULL,0,i)) != 0)
      {
         BreakA[i] = BreakA[i+1];
         BreakB[i] = BreakB[i+1];
         StopH [i] = StopH [i+1];
         StopL [i] = StopL [i+1];
         continue;
      }

      int candlesPerDay = PERIOD_D1/Period(),
          day           = MathFloor(i/candlesPerDay);

      double channel1 = 0.0,
             channel2 = 0.0;

      channel1 += 1.000*MathAbs(iOpen(NULL,PERIOD_D1,day+1)-iClose(NULL,PERIOD_D1,day+1));
      channel1 += 0.618*MathAbs(iOpen(NULL,PERIOD_D1,day+2)-iClose(NULL,PERIOD_D1,day+2));
      channel1 += 0.500*MathAbs(iOpen(NULL,PERIOD_D1,day+3)-iClose(NULL,PERIOD_D1,day+3));
      channel1 += 0.382*MathAbs(iOpen(NULL,PERIOD_D1,day+4)-iClose(NULL,PERIOD_D1,day+4));
      channel1 += 0.236*MathAbs(iOpen(NULL,PERIOD_D1,day+5)-iClose(NULL,PERIOD_D1,day+5));
      channel2 += 1.000*(iHigh(NULL,PERIOD_D1,day+1)-iLow(NULL,PERIOD_D1,day+1));
      channel2 += 0.618*(iHigh(NULL,PERIOD_D1,day+2)-iLow(NULL,PERIOD_D1,day+2));
      channel2 += 0.500*(iHigh(NULL,PERIOD_D1,day+3)-iLow(NULL,PERIOD_D1,day+3));
      channel2 += 0.382*(iHigh(NULL,PERIOD_D1,day+4)-iLow(NULL,PERIOD_D1,day+4));
      channel2 += 0.236*(iHigh(NULL,PERIOD_D1,day+5)-iLow(NULL,PERIOD_D1,day+5));
      
      channel1 /= 5.0;
      channel2 /= 5.0;

      double open = iOpen(NULL,PERIOD_D1,day);
      BreakA[i] = open+0.5*channel1;
      BreakB[i] = open-0.5*channel1;
      StopH[i]  = open+0.5*channel2;
      StopL[i]  = open-0.5*channel2;
      
      Comment("JL-Lines: "+DoubleToStr(channel1/Point,0)+", "+DoubleToStr(channel2/Point,0));
   }
//----
   return(0);
}
//+------------------------------------------------------------------+