MetaStock -> Tools -> Indicator Builder -> New Copy and paste formulae below. ========================= Trailing Stop - MetaStock ========================= ---8<--------------------------- { Triggers: Long (+1) & Short (-1) signals at crossover of user-defined trailing stops } { x23 slower than TradeSim's version } { ©Copyright 2003-2004 Jose Silva } { http://www.metastocktools.com } buffer:=Input("buffer % trailing stop",0,100,8); plot:=Input("plot: trailing stop=1, Long+Short=2, signals=3",1,3,1); adv:=Input("plot: today's trailing stop=0, tomorrow's stop=1",0,1,0); delay:=Input("Entry and Exit signal delay", 0,5,0); StLong:=C-C*buffer/100; StShort:=C+C*buffer/100; stopLong:=If(CPREV,StShort,Min(StShort,PREV)); In:=Cross(C,Ref(stopShort,-1)); Out:=Cross(Ref(stopLong,-1),C); Init:=Cum(In+Out>-1)=1; InInit:=Cum(In)=1; flag:=BarsSince(Init OR In) < BarsSince(Init OR Out)+InInit; signals:=Ref((InInit AND Alert(InInit=0,2) OR flag AND Alert(flag=0,2)) -(flag=0 AND Alert(flag,2)),-delay); stop:=Ref(If(flag=1,stopLong,stopShort),-1+adv); If(plot=1,stop, If(plot=2,Ref(stopLong,-1+adv),0)); If(plot=1,stop, If(plot=2,Ref(stopShort,-1+adv),signals)) ---8<--------------------------- ======================== Trailing Stop - TradeSim ======================== ---8<--------------------------- { Triggers: Long (+1) & Short (-1) signals at crossover of user-defined trailing stops } { x23 faster than MetaStock's 4-PREV version } { TradeSim.dll must be in ...\MetaStock\External Function DLLs\ folder } { ©Copyright 2003-2004 Jose Silva } { http://www.metastocktools.com } buffer:=Input("buffer % trailing stop",0,100,8); plot:=Input("plot: trailing stop=1, Long+Short=2, signals=3",1,3,1); adv:=Input("plot: today's trailing stop=0, tomorrow's stop=1",0,1,0); delay:=Input("Entry and Exit signal delay", 0,5,0); Volatility:=C*buffer/100; stopLong:=ExtFml("TradeSim.TrailingStop", BAND, {mode: band or trigger} LONG, {long or short} Volatility, {user defined see variable above} CLOSE, {RefPoint for stop calc} CLOSE); {threshold - stop breached} stopShort:=ExtFml("TradeSim.TrailingStop", BAND,SHORT,Volatility,C,C); In:=Cross(C,Ref(stopShort,-1)); Out:=Cross(Ref(stopLong,-1),C); Init:=Cum(In+Out>-1)=1; InInit:=Cum(In)=1; flag:=BarsSince(Init OR In) < BarsSince(Init OR Out)+InInit; signals:=Ref((InInit AND Alert(InInit=0,2) OR flag AND Alert(flag=0,2)) -(flag=0 AND Alert(flag,2)),-delay); stop:=Ref(If(flag=1,stopLong,stopShort),-1+adv); If(plot=1,stop, If(plot=2,Ref(stopLong,-1+adv),0)); If(plot=1,stop, If(plot=2,Ref(stopShort,-1+adv),signals)) ---8<--------------------------- ==================================== Trailing Stop - AdvTrailStop plug-in ==================================== ---8<------------------------------- { Plot on price chart } { Triggers: Long (+1) & Short (-1) signals at crossover of user-defined trailing stops } { Much faster than MetaStock's 4-PREV version } { ©Copyright 2004 Jose Silva } { http://www.metastocktools.com } { AdvancedStop.dll must be in ...\MetaStock\External Function DLLs\ folder } { AdvancedStop.dll by Richard Dale, free from: http://www.tradernexus.com/advancedstop/advancedstop.html } buffer1:= Input("initial stop % buffer",0,100,5)/100; buffer2:= Input("trailing stop % buffer",0,100,8)/100; plot:=Input("plot: trailing stop=1, Long+Short=2, signals=3",1,3,1); adv:=Input("plot: today's trailing stop=0, tomorrow's stop=1",0,1,0); delay:=Input("Entry and Exit signal delay", 0,5,0); entrySignal:=C=C; initialStopLong:=C*(1-buffer1); trailStopLong:=C*(1-buffer2); stopLong:=ExtFml("AdvancedStop.StopLong", entrySignal,initialStopLong,0,trailStopLong, 0,0,0,0); exitSignal:=Cross(stopLong,C); initialStopShort:=C*(1+buffer1); trailStopShort:=C*(1+buffer2); stopShort:=ExtFml("AdvancedStop.StopShort", exitSignal,initialStopShort,0,trailStopShort, 0,0,0,0); entrySignal:=Cross(C,stopShort); stopLong:=ExtFml("AdvancedStop.StopLong", entrySignal,initialStopLong,0,trailStopLong, 0,0,0,0); In:=Cross(C,Ref(stopShort,-1)); Out:=Cross(Ref(stopLong,-1),C); Init:=Cum(In+Out>-1)=1; flag:=BarsSince(Init OR In) < BarsSince(Init OR Out)+(Cum(In)=1); signals:=Ref(((Cum(In)=1) AND Alert((Cum(In)=1)=0,2) OR flag AND Alert(flag=0,2)) -(flag=0 AND Alert(flag,2)),-delay); stop:=Ref(If(flag=1,stopLong,stopShort),-1+adv); If(plot=1,stop, If(plot=2,Ref(stopLong,-1+adv),0)); If(plot=1,stop, If(plot=2,Ref(stopShort,-1+adv),signals)) ---8<------------------------------- http://www.metastocktools.com