Exponential Moving Average - Volume Adaptable
{ Volume adaptable EMA v1.0 }
{ EMA samples bars with above-avg Volume }
{ (c) Copyright 2004 Jose Silva }
{ For personal use only }
{ http://www.metastocktools.com }
{ User inputs }
pds:=Input("EMA periods",2,2520,21);
x:=Input("use Open=1 High=2 Low=3 Close=4 WClose=5 P=6",1,6,4);
shift:=Input("EMA vertical shift %",
-100,100,0)/100+1;
plot:=Input("[1]EMA, [2]Data, [3]Sampling bars, [4]Crossovers",1,4,1);
{ Select price field }
x:=If(x=1,O,If(x=2,H,If(x=3,L,If(x=5,WC(),If(x=6,P,C)))));
{ Above average Volume points }
VolAvgPlus:=V>Mov(V,pds,E);
{ Select above-avg bars for EMA }
x:=ValueWhen(1,VolAvgPlus,x);
{ Reduce periodicity on low bar count }
pds:=If(pds>Cum(IsDefined(x)),
Cum(IsDefined(x)),pds);
{ EMA }
Ema:=x*2/(pds+1)+PREV*(1-2/(pds+1));
Ema:=Ema*shift;
{ EMA/price crossover signals }
signals:=Cross(x,Ema)-Cross(Ema,x);
{ Plot on price chart }
If(plot=1,Ema,If(plot=2,x,
If(plot=3,VolAvgPlus,signals)))
|
Exponential Moving Average - Volume Adaptable Mk III
{ Volume adaptable EMA v3.0 }
{ EMA samples bars with above/below-avg Volume }
{ (c) Copyright 2004 Jose Silva }
{ For personal use only }
{ http://www.metastocktools.com#metastock }
{ User inputs }
pds:=Input("EMA periods",2,2520,21);
x:=Input("use Open=1 High=2 Low=3 Close=4 WClose=5 P=6",1,6,4);
shift:=Input("EMA vertical shift %",
-100,100,0)/100+1;
plot:=Input("[1]HiEMA, [2]LoEMA, [3]Both,[4]Diff, [5]Signals",1,5,3);
{ Select price field }
x:=If(x=1,O,If(x=2,H,If(x=3,L,If(x=5,WC(),If(x=6,P,C)))));
{ Above/Below average Volume points }
HiVol:=V>Mov(V,pds,E);
LoVol:=V<Mov(V,pds,E);
{ Select above/below-avg bars for EMA }
xHiVol:=ValueWhen(1,HiVol,x);
xLoVol:=ValueWhen(1,LoVol,x);
{ EMAs }
EmaHiVol:=Mov(xHiVol,pds,E)*shift;
EmaLoVol:=Mov(xLoVol,pds,E)*shift;
{ Hi/Lo EMA difference }
diff:=EmaHiVol-EmaLoVol;
{ Hi/LoEMA difference / zero crossover signals }
signals:=Cross(diff,0)-Cross(0,diff);
{ Plot EMAs on price chart }
If(plot=1,EmaHiVol,If(plot=2,EmaLoVol,
If(plot=3,EmaLoVol,If(plot=4,0,0))));
If(plot=1,EmaHiVol,If(plot=2,EmaLoVol,
If(plot=3,EmaHiVol,If(plot=4,diff,signals))))
|