MetaStock -> Tools -> Indicator Builder -> New Copy and paste formula below. =========================== EMA - %PriceChange-filtered =========================== ---8<--------------------------- { Filtered Exponential Moving Average v1.1 } { EMA ignores prices outside min/max % zone } { EMA periodicity shortens on low bar count } { ©Copyright 2004 Jose Silva } { http://www.metastocktools.com } { User inputs } pds:=Input("EMA periods",1,2520,21); minCh:=Input("Minimum % price change", 0,100,2)/100; maxCh:=Input("Maximum % price change", 0,100,5)/100; 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]Crossover signals", 1,2,1); { Price field selection } x:=If(x=1,O,If(x=2,H,If(x=3,L,If(x=5,WC(),If(x=6,P,C))))); { Price filter } change:=Abs(x/Ref(x,-1)-1); filter:=change>=minCh AND change<=maxCh; x:=ValueWhen(1,filter,x); { Reduce periodicity on low bar count } pds:=If(pds>Cum(IsDefined(x)), Cum(IsDefined(x)),pds); { EMA formula } Ema:=x*2/(pds+1)+PREV*(1-2/(pds+1)); { EMA shift } Ema:=Ema*shift; { EMA crossover signals } signals:=Cross(x,Ema)-Cross(Ema,x); { Plot EMA on price chart } If(plot=2,signals,Ema) ---8<--------------------------- http://www.metastocktools.com