MetaStock -> Tools -> Indicator Builder -> New -> copy & paste formula below. === RoC === ---8<------------------------------------- { Daily/Weekly/Monthly/Quarterly/Yearly %/$ multi-periodicity Rate of Change v2.0 Copyright © 2002-2008 Jose Silva. The grant of this license is for personal use only - no resale or repackaging allowed. All code remains the property of Jose Silva. http://www.metastocktools.com } { User inputs } period:=Input("RoC: [1]Day, [2]Week, [3]Mnth, [4]Qrtr, [5]Year",1,5,1); type:=Input("RoC: [1]Current, [2]Cumulative",1,2,1); method:=Input("RoC method: [1]%Percent, [2]$Points",1,2,1); start:=Input("Start month [1-12] for quarterly periods",1,12,1); plot:=Input("plot: [1]RoC, [2]period Signals",1,2,1); { Calendar counter engine } y:=Year()-(Month()<3); leap:=Int(y/4)-Int(y/100)+Int(y/400); mth:=Int((2+153*(Month()-3+12*(Month()<3)))/5); dayNr:=DayOfMonth()+mth+y*365+leap-730425; weekNr:=1+If(DayNr<1,1,2) -(Frac(Year()/100)=0 AND Frac(Year()/400)<>0); weekNr:=Int((DayNr-weekNr)/7)+(Year()>=2000); { Signals } init:=Cum(1)=2; day:=dayNr<>Ref(dayNr,-1) OR init; week:=weekNr<>Ref(weekNr,-1) OR init; mth:=Month()<>Ref(Month(),-1) OR init; quarter:=Mod(Month()-(start-1),4)=0; quarter:=quarter=0 AND Alert(quarter,2) OR init; yr:=Year()>Ref(Year(),-1) OR init; signal:= If(period=1,day, If(period=2,week, If(period=3,mth, If(period=4,quarter, yr)))); { Signal's Close } sigCl:=If(LastValue(Cum(signal=0))>0, ValueWhen(1,signal,C),Ref(C,-1)); { RoC %/$ select} pct:=(C/sigCl-1)*100; pts:=C-sigCl; RC:=If(method=1,pct,pts); RC:=If(type=1,RC,Cum(Ref(RC,-1)*signal)+RC); { Plot in own window } 0;If(plot=1,RC,signal) ---8<------------------------------------- http://www.metastocktools.com