MetaStock -> Tools -> Indicator Builder -> New Copy and paste formulae below. ==================================== MACD oscillator - Schaff Trend Cycle ==================================== ---8<--------------------------------------- { Stochastic-normalized MACD v2.0 Incorporating auto overbought/sold levels. ©Copyright 2005-2006 Jose Silva. For personal use only. http://www.metastocktools.com } { User inputs } pds:=Input("Stochastic (cycle) lookback periods",2,252,63); pds1:=Input("short EMA periods",1,252,12); pds2:=Input("long EMA periods",2,2520,26); pds3:=Input("MACD oscillator trigger signal periods",1,252,21); z:=Input("use Open=1 High=2 Low=3 Close=4 WhgtCl=5 Vol=6",1,6,4); plot:=Input("[1]MACD osc, [2]Histogram, [3]trigger Signals",1,3,1); { Chosen data array } z:=If(z=1,O,If(z=2,H,If(z=3,L,If(z=5,WC(),If(z=6,V,C))))); { MACD normalized } x:=Mov(z,pds1,E); y:=Mov(z,pds2,E); ratio:=Min(x,y)/Max(x,y); Mac:=(If(x>y,2-ratio,ratio)-1)*100; { Stochastic MACD } StochMac:=(Mac-LLV(Mac,pds)) /Max(HHV(Mac,pds)-LLV(Mac,pds),.000001)*100; trigger:=Mov(StochMac,pds3,E); hist:=StochMac-trigger; osc:=If(plot=1,StochMac,hist); avg:=Cum(osc)/Cum(IsDefined(osc)); { Auto overbought/sold levels } pk:=Ref(osc,-1)=HHV(osc,3) AND osc>avg; oBought:=ValueWhen(1,pk,Ref(osc,-1))*pk; oBought:=Cum(oBought)/Cum(pk); tr:=Ref(osc,-1)=LLV(osc,3) AND oscy,2-ratio,ratio)-1)*100; { Stochastic MACD } osc:=(Mac-LLV(Mac,pds)) /Max(HHV(Mac,pds)-LLV(Mac,pds),.000001)*100; avg:=Cum(osc)/Cum(IsDefined(osc)); { Auto overbought/sold levels } pk:=Ref(osc,-1)=HHV(osc,3) AND osc>avg; oBought:=ValueWhen(1,pk,Ref(osc,-1))*pk; oBought:=Cum(oBought)/Cum(pk); tr:=Ref(osc,-1)=LLV(osc,3) AND osc