Ehler's "Modified Least-Squares Quadratics"


Code
#include <profile.c>

var ModifiedSMA(var* Data, var* FractionalCoefficients)
{
	var sum=0., coefficientSum=0.;
	int i;
	int period=sizeof(FractionalCoefficients);
	
	for(i=0; i<period; i++) {
		sum += (Data[i] * FractionalCoefficients[i]);
		coefficientSum += FractionalCoefficients[i];
	}

	return sum / coefficientSum;
}

function run()
{
	set(PLOTNOW);
	BarPeriod = 1;
	LookBack = 100;
	StartDate = 20210702;
	EndDate = 20210816;

	vars seriesClose = series(priceClose());

	var sma = SMA(seriesClose, 5);
	var c1[] = {7,24,34,24,7};
	var c2[] = {1,6,12,14,12,6,1};
	var c3[] = {-1,28,78,108,118,108,78,28,-1};
	var c4[] = {-11,18,88,138,168,178,168,138,88,18,-11};

	var m1 = ModifiedSMA(seriesClose, c1);
	var m2 = ModifiedSMA(seriesClose, c2);
	var m3 = ModifiedSMA(seriesClose, c3);
	var m4 = ModifiedSMA(seriesClose, c4);

	// [7 24 34 24 7] / 96
        // [1 6 12 14 12 6 1] / 52
        // [−1 28 78 108 118 108 78 28 −1] / 544
        // [−11 18 88 138 168 178 168 138 88 18 −11] / 980
	
	plot("SMA 5", sma, MAIN, RED);
	plot("c1", m1, MAIN, BLUE);
	plot("c2", m2, MAIN, GREEN);
	plot("c3", m3, MAIN, MAGENTA);
	plot("c4", m4, MAIN, CYAN);
}


[Linked Image]

Last edited by Lapsa; 08/18/21 10:58.