//+------------------------------------------------------------------+
//|                   ÏËÀÂÍÛÉ ÊÀÍÀË ÒÐÅÍÄÀ 2.0                       |
//|                                                                  |
//|                                                                  |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

#property indicator_chart_window
#property indicator_buffers 3
#property indicator_color1 Sienna
#property indicator_color2 Black
#property indicator_color3 Sienna
extern int hours=10;
extern int s=10;
extern int cb=10000;
extern double Envelope_Shift=0.60;
extern int Shift=0;
double ci[];
double UperBuffer [];
double DownBuffer [];
//================================================
int init()
  {
  //---- drawing settings
   SetIndexStyle(0,DRAW_LINE);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexStyle(2,DRAW_LINE);
//---- IndexShift    
   SetIndexShift(0,Shift);
   SetIndexShift(1,Shift);
   SetIndexShift(2,Shift);
//----   
   IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS));
//----   
   SetIndexLabel (0, "Envelope+");
   SetIndexLabel (1, "at_Itp(t)");
   SetIndexLabel (2, "Envelope-");     
//---- indicator buffers   
    IndicatorBuffers(3);
//---- indicator buffers mapping
   SetIndexBuffer (0, UperBuffer);
   SetIndexBuffer (1, ci);
   SetIndexBuffer (2, DownBuffer);   
   
   return(0);
  }
//================================================
int start()
  {
//   int    counted_bars=IndicatorCounted();
int i,x,m,pt,aa,bb,cc;
//----------------------------
pt=hours*60/Period();
//-----------------------
for (m=0; m<=s; m++)
{
i=0;
while (i<=cb)
{
if (m==0) { ci[cb+pt]=Close[cb+pt]; ci[i]=Close[i]; ci[cb+2*pt]=Close[cb+2*pt];}
if (m!=0 & m!=s) { ci[i+pt]=0.5*(ci[i]+ci[i+2*pt]); ci[0]=0.5*(ci[0]+ci[pt]);  ci[cb+2*pt]=0.5*(ci[cb+2*pt]+ci[cb+pt]); } 
if (m==s) { aa=i; bb=i+pt; cc=i+2*pt;
for (x=i; x<=i+pt-1; x++)  {ci[x]=ci[aa]*((x-bb)*(x-cc))/((aa-bb)*(aa-cc))+ci[bb]*((x-aa)*(x-cc))/((bb-aa)*(bb-cc))+ci[cc]*((x-aa)*(x-bb))/((cc-aa)*(cc-bb));}
}

i=i+pt;
}
}

//+------------------------------------------------------------------+
//|+++++++++++++++++++++++++++++++++++++++++Envelope code+++++++++++++
//  Input indicator buffer: ci.                                      |
//| Output indicator buffers: UperBuffer, DownBuffer.                |
//+------------------------------------------------------------------+                                                                                                     |
     int ExtCountedBars=IndicatorCounted();
     
     int r;   r=Bars-ExtCountedBars-1; 
   while(r>=0)   
   {  
   
     UperBuffer[r] =   ci[r]*(1+Envelope_Shift/100);       
     DownBuffer[r] =   ci[r]/(1+Envelope_Shift/100);     
    
              r--; 
   }                                  
   return(0);
  }
//+------------------------------------------------------------------+