EMA Ribbon

So I've been reading that book.
Yesterday it got me wondering - how exactly EMAs with varying alphas look like.


Code
#include <profile.c>

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

	vars closes = series(priceClose());

	var ema1 = EMA(closes,.1);
	var ema2 = EMA(closes,.2);
	var ema3 = EMA(closes,.3);
	var ema4 = EMA(closes,.4);
	var ema5 = EMA(closes,.5);
	var ema6 = EMA(closes,.6);
	var ema7 = EMA(closes,.7);
	var ema8 = EMA(closes,.8);
	var ema9 = EMA(closes,.9);
	var ema10 = EMA(closes,.15);
	
	plot(".1", ema1, MAIN, RED);
	plot(".2", ema2, MAIN, GREEN);
	plot(".3", ema3, MAIN, BLUE);
	plot(".4", ema4, MAIN, ORANGE);
	plot(".5", ema5, MAIN, BLACK);
	plot(".6", ema6, MAIN, MAGENTA);
	plot(".7", ema7, MAIN, OLIVE);
	plot(".8", ema8, MAIN, PURPLE);
	plot(".9", ema9, MAIN, LIGHTBLUE);
	plot(".15", ema10, MAIN, MAROON);
}


[Linked Image]


Looks beautiful.

Can't help but see that graph in 3D.
Reminds me of Sietches from Dune.

Ohkay... Is there an application for bunch of EMAs?

One of the most obvious "Market inefficiencies" for an algo trader to exploit is automation itself.

Got me wondering how would ribbon look like with more commonly used time periods.


Code
#include <profile.c>

function run()
{
	set(PLOTNOW);
	BarPeriod = 1;
	LookBack = 1500;
	StartDate = 20210703;
	EndDate = 20210816;

	vars closes = series(priceClose());

	var ema2 = EMA(closes,2);
	var ema5 = EMA(closes,5);
	var ema15 = EMA(closes,15);
	var ema30 = EMA(closes,30);
	var ema45 = EMA(closes,45);	
	var ema60 = EMA(closes,60);
	var ema120 = EMA(closes,120);	
	var ema180 = EMA(closes,180);
	var ema240 = EMA(closes,240);
	var ema1440 = EMA(closes,1440);	
	
	plot("2", ema2, MAIN, SILVER + TRANSP);
	plot("5", ema5, MAIN, CYAN + TRANSP);
	plot("15", ema15, MAIN, GREEN + TRANSP);
	plot("30", ema30, MAIN, MAGENTA);
	plot("45", ema45, MAIN, BLUE);
	plot("60", ema60, MAIN, DARKBLUE);
	plot("120", ema120, MAIN, PURPLE);
	plot("180", ema180, MAIN, MAROON);
	plot("240", ema240, MAIN, RED);
	plot("1440", ema1440, MAIN, BLACK);
}


[Linked Image]


Frikin sea waves!

Lets smash in some trade signals!!!111eleven


Code
#include <profile.c>

function run()
{
	set(NFA|PRELOAD|PLOTNOW);
	BarPeriod = 1;
	LookBack = 2000;
	StartDate = 20210703;
	EndDate = 20210716;
	BarMode = BR_FLAT;	
	History = "*.t6";
	Amount = 8;
	Capital = 600;
	// MaxLong = 5;
	// MaxShort = 5;
	// Stop = ATR(100) * 10;

	vars closes = series(priceClose());

	vars ema2 = series(KAMA(closes,2));
	vars ema5 = series(EMA(closes,5));
	vars ema15 = series(EMA(closes,14));
	vars ema30 = series(EMA(closes,27));
	vars ema45 = series(EMA(closes,44));	
	vars ema60 = series(EMA(closes,60));
	vars ema120 = series(EMA(closes,120));	
	vars ema180 = series(EMA(closes,181));
	vars ema240 = series(EMA(closes,235));
	vars ema1440 = series(EMA(closes,1433));	
	
	if (
		rising(ema2)
		&& rising(ema5)
		&& rising(ema15)
		&& rising(ema30)
		&& rising(ema45)
		&& rising(ema60)
		&& rising(ema120)
		&& rising(ema180)
		&& rising(ema240)
		&& rising(ema1440)
		&& ema2[0] > ema15[0]
		&& ema15[0] > ema30[0]
		&& ema30[0] > ema45[0]
		&& ema45[0] > ema60[0]
		&& ema120[0] > ema180[0]
		&& ema180[0] > ema240[0]
		&& ema240[0] < ema1440[0]		
	) enterLong(Amount);
	
	if (
		falling(ema2)
		&& falling(ema5)
		&& falling(ema15)
		&& falling(ema30)
		&& falling(ema45)
		&& falling(ema60)
		&& falling(ema120)
		&& falling(ema180)
		&& falling(ema240)
		&& falling(ema1440)
		&& ema2[0] < ema15[0]
		&& ema15[0] < ema30[0]
		&& ema30[0] < ema45[0]
		&& ema45[0] < ema60[0]
		&& ema120[0] < ema180[0]
		&& ema180[0] < ema240[0]
		&& ema240[0] > ema1440[0]
	) enterLong(Amount);
	
	if (crossUnder(ema5, ema45))
		exitShort();
	
	if (crossOver(ema5, ema45))
		exitLong();
}


[Linked Image]

Quote

Monte Carlo Analysis... Median AR 2070%
Win 10650$ MI 23156$ DD 2952$ Capital 666$
Trades 532 Win 62.6% Avg +25.0p Bars 59
CAGR 163492235397780660000000000000000000.00% PF 2.41 SR 0.00 UI 0% R2 1.00
Chart...


Finetuned af.
Likes to randomly pop up Margin Calls.