MetaStock -> Tools -> Indicator Builder -> New Copy and paste formula below. ============================= EMA - ATR volatility adjusted ============================= ---8<--------------------------- { ATR volatility-adjusted, dyn-period EMA v2.1 } { Positive sensitivity: EMA periodicity shortens on high ATR volatility - increases on low ATR volatility } { Negative sensitivity: EMA periodicity shortens on low ATR volatility - increases on high ATR volatility } { [1]EMA: ATR volatility-adjusted EMA } { [2]Dyn periods: EMA periodicity used } { [3]ATR vlty: ATR volatility 0~100% } { [4]Signals: EMA/price crossover signals } { ©Copyright 2004 Jose Silva } { http://www.metastocktools.com } pds:=Input("EMA avg periods",1,2520,21); sens:=Input("ATR volatility sensitivity (+100 to -100)%",-100,100,100)/100; pdsVlty:=Input("ATR volatility sampling periods",2,2520,126); pdsATR:=Input("ATR periods",1,2520,10); x:=Input("[1]Open [2]High [3]Low [4]Close [5]Vol [6]P",1,6,4); plot:=Input("[1]EMA, [2]Dyn periods, [3]ATR vlty, [4]Signals",1,4,1); x:=If(x=1,O,If(x=2,H,If(x=3,L,If(x=5,V,If(x=6,P,C))))); ATRvlty:=(ATR(pdsATR)-LLV(ATR(pdsATR),pdsVlty)) /(HHV(ATR(pdsATR),pdsVlty) -LLV(ATR(pdsATR),pdsVlty)+.000001); multi:=If(ATRvlty<=.5, 10*Power(ATRvlty,3.4739)+.1, 10*Power(ATRvlty,3.32)+.000001); multi:=If(sens>0,1/multi,multi); multi:=If(multi<1,1-(1-multi)*Abs(sens), (multi-1)*Abs(sens)+1); pds:=pds*multi; pds:=If(pds>Cum(IsDefined(x))-(pdsVlty+pdsATR), Cum(IsDefined(x))-(pdsVlty+pdsATR),pds); pds:=If(pds<1,1,pds); ATREma:=x*2/(pds+1)+PREV*(1-2/(pds+1)); signals:=Cross(x,ATREma)-Cross(ATREma,x); If(plot=2,pds,If(plot=3,ATRvlty*100, If(plot=4,signals,ATREma))) ---8<--------------------------- http://www.metastocktools.com