MetaStock -> Tools -> Indicator Builder -> New Copy and paste two formulae below. ===== Siroc ===== ---8<--------------------------- { Siroc v2.0 } { System1: trigger crossovers } { System2: auto over-bought/sold crossovers } { ©Copyright 2002-2004 Jose Silva } { http://www.metastocktools.com } prd1:=Input("first period",2,252,21); prd2:=Input("second period",2,252,10); prdCrs:=Input("crossover periods",2,252,5); x:=Input("use Open=1 High=2 Low=3 Close=4 MP=5 P=6",1,6,5); plot:=Input("[1]Siroc, [2]System1, [3]System3",1,3,1); x:=If(x=1,O,If(x=2,H,If(x=3,L,If(x=5,V,If(x=6,P,C))))); Src:=Mov((x-Mov(x,prd1,E)) /Ref(Mov(x,prd1,E),-prd1),prd1,E); prd2:=prd2*2-1; y:=Src-Ref(Src,-1); Siroc:=100-100/(1+If(Mov( If(SrcRef(Src,-1),y,0),prd2,E) /(Mov(If(Src-1); { Automatic peak/trough historical boundaries } pk:=Ref(Siroc,-1)>Ref(Siroc,-2) AND Ref(Siroc,-1)>Siroc AND Ref(Siroc,-1)>SirocAvg; pkVal:=ValueWhen(1,pk,Ref(Siroc,-1)); oBought:=Cum(pkVal)/Cum(pkVal>-1); tr:=Ref(Siroc,-1)-1); { System signals } dTrigger:=Mov(Siroc,prdCrs,E); System1:= Cross(Siroc,dTrigger)-Cross(dTrigger,Siroc); System2:= Cross(Siroc,oSold)-Cross(Siroc,oBought); signals:=If(plot=2,System1,System2); If(plot=1,oBought,0); If(plot=1,oSold,0); If(plot=1,dTrigger,0); If(plot=1,Siroc,signals) ---8<--------------------------- ======== Siroc II ======== ---8<--------------------------- { Siroc II v2.0 } { System1: trigger crossovers } { System2: auto over-bought/sold crossovers } { ©Copyright 2002-2004 Jose Silva } { http://www.metastocktools.com } prd1:=Input("first period",2,252,21); prd2:=Input("second period",2,252,10); prd3:=Input("crossover periods",2,252,5); x:=Input("use Open=1 High=2 Low=3 Close=4 MP=5 P=6",1,6,5); plot:=Input("[1]Siroc, [2]System1, [3]System3",1,3,1); x:=If(x=1,O,If(x=2,H,If(x=3,L,If(x=5,MP(),If(x=6,P,C))))); y:=Mov(x,prd1,E); z:=Mov((x-y)/Ref(y,-prd1),prd2,E); Siroc:=100 *Mov(If(z>Ref(z,-1),z-Ref(z,-1),0),prd3,E) /(Mov(If(z>Ref(z,-1),z-Ref(z,-1),0),prd3,E) +Mov(If(z-1); { Automatic peak/trough historical boundaries } pk:=Ref(Siroc,-1)>Ref(Siroc,-2) AND Ref(Siroc,-1)>Siroc AND Ref(Siroc,-1)>SirocAvg; pkVal:=ValueWhen(1,pk,Ref(Siroc,-1)); oBought:=Cum(pkVal)/Cum(pkVal>-1); tr:=Ref(Siroc,-1)-1); { System signals } dTrigger:=Mov(Siroc,prd3,E); System1:= Cross(Siroc,dTrigger)-Cross(dTrigger,Siroc); System2:= Cross(Siroc,oSold)-Cross(Siroc,oBought); signals:=If(plot=2,System1,System2); If(plot=1,oBought,0); If(plot=1,oSold,0); If(plot=1,dTrigger,0); If(plot=1,Siroc,signals) ---8<--------------------------- http://www.metastocktools.com