MetaStock -> Tools -> Indicator Builder -> New -> Copy and paste complete formulae between "---8<---" lines. ============== RoC since date ============== ---8<--------------------------------------- {Rate of Change (RoC) since past date - v2.1 Copyright © 2005-2009 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} StDay:=Input("start Day [1-31]",1,31,6); StMnth:=Input("start Month [1-12]",1,12,3); StYear:=Input("start Year [1800-2200]", 1800,2200,2009); in:=Input("Start: [1]Open [2]High [3]Low [4]Close [5]WghtCl",1,5,3); out:=Input("End: [1]Open [2]High [3]Low [4]Close [5]WghtCl",1,5,4); method:=Input("method: [1]%-percent, [2]$-points",1,2,1); {Start date signal} dateP:=Year()>StYear OR (Year()=StYear AND (Month()>StMnth OR Month()=StMnth AND DayOfMonth()>=StDay)); date:=dateP AND Alert(dateP=0,2); init:=Cum(IsDefined(date))=1; {Start & end data} start:=If(in=1,O,If(in=2,H,If(in=3,L, If(in=4,C,WC())))); start:=ValueWhen(1,init OR date,start); end:=If(out=1,O,If(out=2,H,If(out=3,L, If(out=4,C,WC())))); {RoC since chosen date} RoCper:=(end/start-1)*100; RoCpts:=end-start; {Select % or $ method} dateRoC:=If(method=1,RoCper,RoCpts); dateRoC:=If(dateP,dateRoC,0); {Plot in own window} dateRoC ---8<--------------------------------------- =============== RoC since event =============== ---8<--------------------------------------- { Rate of Change (RoC) since past event v1.0 } { ©Copyright 2005-2006 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 } choose:=Input("event: [1]Week, [2]Month, [3]Year, [4]User-defined",1,5,3); method:=Input("method: [1]%-percent, [2]$-points",1,2,1); plot:=Input("plot: [1]RoC, [2]Event signals", 1,2,1); { Event1 - start of Week } event1:=DayOfWeek()Ref(Year(),-1); { Event4 - EMA crossover signals example } event4:=Cross(Mov(C,5,E),Mov(C,21,E)); { Event5 - LinReg crossover signals example } event5:=Cross(LinearReg(C,5),LinearReg(C,21)); { Choose event } event:= If(choose=1,event1, If(choose=2,event2, If(choose=3,event3, If(choose=4,event4, event5)))); { Event's Close value } start:=Cum(IsDefined(event))=1; eventVal:=ValueWhen(1,event OR start,C); { RoC since chosen event } RoCper:=(C/eventVal-1)*100; RoCpts:=C-eventVal; { Select % or $ method } eventRoC:=If(method=1,RoCper,RoCpts); { Plot in own window } If(plot=1,eventRoC,event) ---8<--------------------------------------- http://www.metastocktools.com