Here's an alternate, keeping things in the previous form. Get a nasty crash that I cant figure out:
Code:
double FullLength = 2.0*HalfLength+1.0;

	vars Trimavar = series(Trima(Price,5));
	var upper;
	var lower;
	vars wuBuffer;
	vars wdBuffer;
	double diff = 0;//SMA(Price,1)-Trimavar[0];
	
        upper = Trimavar[0];
        lower = Trimavar[0];
        if (diff>=0)
           {
              wuBuffer[0] = pow(diff,2);
              wdBuffer[0] = 0;
           }
        else
           {               
              wdBuffer[0] = pow(diff,2);
              wuBuffer[0] = 0;
           }                  
        if(diff>=0)
        {
           wuBuffer[0] = (wuBuffer[1]*(FullLength-1)+pow(diff,2))/FullLength;
           wdBuffer[0] =  wdBuffer[1]*(FullLength-1)/FullLength;
        }
        else
        {
           wdBuffer[0] = (wdBuffer[1]*(FullLength-1)+pow(diff,2))/FullLength;
           wuBuffer[0] =  wuBuffer[1]*(FullLength-1)/FullLength;
         }
         upper = Trimavar[0] + BandsDeviations*sqrt(wuBuffer[0]);
         lower = Trimavar[0] - BandsDeviations*sqrt(wdBuffer[0]);