#define CYAN 0x00ffff
#define ORANGE 0xff8000
var ALMA(var *Data, int Period, int sigma, var offset)
{
var m = floor(offset * (Period - 1));
var s = Period / sigma;
var alma, wSum;
int i;
for (i = 0; i < Period; i++) {
var w = exp(-((i - m) * (i - m)) / (2 * s * s));
alma += Data[Period - 1 - i] * w;
wSum += w;
}
return alma / wSum;
}
var ALMA(var *Data, int Period) {
return ALMA(Data, Period, 6, 0.85);
}
function run()
{
set(PLOTNOW|PLOTPRICE);
StartDate = 2012;
LookBack = 400;
BarPeriod = 60;
PlotWidth = 8000;
vars Close = series(priceClose());
vars MA1 = series(EMA(Close, 50));
vars MA2 = series(LowPass(Close, 100));
vars MA3 = series(ALMA(Close, 100));
if (peak(MA1)) {
if (!NumOpenLong)
enterLong();
} else if (valley(MA1)) {
if (!NumOpenShort)
enterShort();
}
plot("EMA50", MA1[0], 0, BLUE);
plot("LP100", MA2[0], 0, ORANGE);
plot("ALMA100", MA3[0], 0, CYAN);
}