//------------------------------------------------------------------
//
//------------------------------------------------------------------
//
//
//
//
//
//

double workRsq[][1];
double iRsq(double price, double period, int i, int instanceNo=0)
{
   if (ArrayRange(workRsq,0) != Bars) ArrayResize(workRsq,Bars); i = Bars-i-1;
  
   //
   //
   //
   //
   //

      workRsq[i][instanceNo] = price;

         double SumX  = 0;
         double SumXX = 0;
         double SumXY = 0;
         double SumYY = 0;
         double SumY  = 0;
 
                  for(int k=0; k<period && (i-k)>=0; k++)
                  {
                     double tprice = workRsq[i-k][instanceNo];
                        SumX  += (k+1); 
                        SumXX += (k+1)*(k+1);
                        SumXY += (k+1)*tprice;
                        SumYY +=       tprice*tprice;
                        SumY  +=       tprice;
                  }
   
         double Q1  = SumXY - SumX*SumY/period;
         double Q2  = SumXX - SumX*SumX/period;
         double Q3  = SumYY - SumY*SumY/period;
         return((Q1*Q1)/(Q2*Q3));
}