#property link      "http://www.themovingaverage.com"
#property indicator_chart_window

#property indicator_buffers 4
#property indicator_color1 Red
#property indicator_color2 Blue
#property indicator_color3 Crimson
#property indicator_color4 DarkTurquoise

double ExtMapBuffer1[];
double ExtMapBuffer2[];
double ExtMapBuffer3[];
double ExtMapBuffer4[];

extern int firstback=50;
extern int secondback=14;
extern int countbars=200;
extern int power=2;

int init()
  {
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,ExtMapBuffer1);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(1,ExtMapBuffer2);
   
   SetIndexStyle(2,DRAW_ARROW);
   SetIndexBuffer(2,ExtMapBuffer3);
   SetIndexStyle(3,DRAW_ARROW);
   SetIndexBuffer(3,ExtMapBuffer4);

   SetIndexEmptyValue(2,0.0);
   SetIndexEmptyValue(3,0.0);
   SetIndexArrow(2,108);
   SetIndexArrow(3,108);
   return(0);
  }
int deinit()
  {
   return(0);
  }
int last = 0;

int start(){
   if(last == Bars) return (0);
   last = Bars;
   int counted_bars=IndicatorCounted();
   int pos;
   int cnt;
   int mult;
   double first,second;
   ArrayInitialize(ExtMapBuffer1,0);
   ArrayInitialize(ExtMapBuffer2,0);
   pos=countbars;
   while (pos>-1){
      mult=firstback+1;
      first=0;
      second=0;
      for (cnt=pos;cnt<pos+firstback;cnt++){
         mult--;
         first=first+(Close[cnt]*MathPow(mult,power));
         //Print (cnt);
         }
      mult=firstback+1;
      for (cnt=pos;cnt<pos+firstback;cnt++){
         mult--;
         second=second+MathPow(mult,power);
         }
      ExtMapBuffer1[pos]=first/second;
      pos--;
      }

   pos=countbars;
   while (pos>-1){
      mult=secondback+1;
      first=0;
      second=0;
      for (cnt=pos;cnt<pos+secondback;cnt++){
         mult--;
         first=first+(Close[cnt]*MathPow(mult,power));
         //Print (cnt);
         }
      mult=secondback+1;
      for (cnt=pos;cnt<pos+secondback;cnt++){
         mult--;
         second=second+MathPow(mult,power);
         }
      ExtMapBuffer2[pos]=first/second;
      if((ExtMapBuffer2[pos]-ExtMapBuffer1[pos])*(ExtMapBuffer2[pos+1]-ExtMapBuffer1[pos+1])<0){
         if((ExtMapBuffer2[pos]-ExtMapBuffer1[pos])<0)
            ExtMapBuffer3[pos] = ExtMapBuffer1[pos];
         else
            ExtMapBuffer4[pos] = ExtMapBuffer2[pos];
         }
      pos--;
      }
   return(0);
  }