Ehler's "Modified Simple Moving Averages"


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, 4);
	var coefficients[] = {.5,1,1,1,.5};	
	var modifiedSMA = ModifiedSMA(seriesClose, coefficients);
	
	var weirdCoefficients[] = {.2,1,1.6,1,.2};
	var weirdSMA = ModifiedSMA(seriesClose, weirdCoefficients);
	
	var weirderCoefficients[] = {.1,1,1,1.7,.2};
	var weirderSMA = ModifiedSMA(seriesClose, weirderCoefficients);

	var shouldBeFastestCoefficients[] = {2,.2,1.2,.2,.4};
	var shouldBeFastest = ModifiedSMA(
		seriesClose, shouldBeFastestCoefficients
	);
	
	plot("SMA 4", sma, MAIN, RED);
	plot(".5 1 1 1 .5", modifiedSMA, MAIN, BLUE);
	plot(".2 1 1.6 1 .2", weirdSMA, MAIN, GREEN);
	plot(".1 1 1 1.7 .2", weirderSMA, MAIN, MAGENTA);
	plot("2 .2 1.2 .2 .4", shouldBeFastest, MAIN, CYAN);
}


[Linked Image]

Last edited by Lapsa; 08/17/21 20:45.