[LegacyColorValue = true]; 

{ TSMTriangularAverage : Puts the greatest weight on the middle value
  Copyright 1998-1999, PJ Kaufman. All rights reserved }

	inputs :  Price(NumericSeries), Length(NumericSimple);
	vars   :  sum(0), sumw(0), mid(0), w(0), ix(0);

	sum = 0;
	sumw = 0;
	mid = intportion(length / 2);
	if mod(length,2) = 0 then begin
{ even number of input items }
		w = 0;
		for ix = 1 to length begin
			if ix <= mid then w = w + 1
				else if ix > mid + 1 then w = w - 1;
			sum = sum + w * price[ix - 1];
			sumw = sumw + w;
			end;
		end
	else begin
{ odd number of input items }
		w = 0;
		for ix = 1 to length begin
			if ix <= mid + 1 then w = w + 1 else w = w - 1;
			sum = sum + w * price[ix - 1];
			sumw = sumw + w;
			end;
		end;
	if sumw > 0 then
		TSMTriangularAverage = sum / sumw
	else
		TSMTriangularAverage  = 0;