MetaStock -> Tools -> Indicator Builder -> New -> copy & paste complete formula between "---8<---" lines. =========== MA - phased =========== ---8<----------------------------------------- { PMA v1.0 -- Phased Moving Average. As suggested by Mark Jurik of Jurik Research, http://www.jurikres.com ©Copyright 2007 Jose Silva. For personal use only. http://www.metastocktools.com } { User inputs } pds:=Input("PMA periods",1,2600,21); factor:=Input("Lag reduction scaling factor [-1 = Auto]",-1,1000,-1); x:=Input("use [1]Open [2]High [3]Low [4]Close [5]WCl [6]Vol",1,6,4); type:=Input("[1]EMA [2]SMA [3]TmSr [4]Tri [5]Var [6]Vol [7]Wght",1,7,2); shift:=Input("PMA bands spread %",0,100,5)/100; plot:=Input("[1]PMA, [2]PMA+Bands, [3]Band crossover Signals",1,3,1); { Data array } x:=If(x=1,O, If(x=2,H, If(x=3,L, If(x=4,C, If(x=5,WC(), V))))); { MovAvg type: 1 - Exponential MA 2 - Simple MA 3 - Time Series MA 4 - Triangular MA 5 - Variable MA 6 - Volume adjusted MA 7 - Weighted MA } ma:= If(type=1,Mov(x,pds,E), If(type=2,Mov(x,pds,S), If(type=3,Mov(x,pds,T), If(type=4,Mov(x,pds,TRI), If(type=5,Mov(x,pds,VAR), If(type=6,Mov(x,pds,VOL), Mov(x,pds,W))))))); { Phased Mov Avg } factor:=If(factor>=0,factor,pds/4); PMA:=(ma+LinRegSlope(x,pds)*factor); { PMA % bands } upper:=PMA*(1+shift); lower:=PMA*(1-shift); { PMA bands crossover signals } entry:=Cross(C,upper); exit:=Cross(lower,C); { Clean signals } init:=Cum(IsDefined(entry+exit))=1; bin:=ValueWhen(1,entry-exit<>0 OR init,entry); long:=bin*(Alert(bin=0,2) OR entry*Cum(entry)=1); short:=(bin=0)*(Alert(bin,2) OR exit*Cum(exit)=1); signals:=long-short; {Plot PMA on price chart, signals in own window} If(plot=1,PMA,If(plot=2,upper,0)); If(plot=1,PMA,If(plot=2,lower,0)); If(plot=3,signals,PMA) ---8<----------------------------------------- http://www.metastocktools.com