{ Downloaded From https://www.WiseStockTrader.com } { Schaff Trend Cycle Indicator v1.0 } { Automatic trigger levels } { Also see: "MACD oscillator - Schaff Trend Cycle" } { http://www.metastocktools.com } { With thanks to Tim Straiton, www.stoploss.ch } { variables input } buffer:=Input("Long/Short buffer zone %", 0,100,0)/100; pdsCy:=Input("Schaff cycle periods",2,252,10); pdsSh:=Input("Short periods",1,252,10); pdsLg:=Input("Long periods",2,2520,21); { Schaff Trend Cycle } MCD:=Wilders(MP(),pdsSh)-Wilders(MP(),pdsLg); ST:=(MCD-LLV(MCD,pdsCy)) /(HHV(MCD,pdsCy)-LLV(MCD,pdsCy))*100; STC:=Wilders(ST,pdsCy/2); { Schaff Trend Cycle } MCD:=Wilders(MP(),pdsSh)-Wilders(MP(),pdsLg); ST:=(MCD-LLV(MCD,pdsCy)) /(HHV(MCD,pdsCy)-LLV(MCD,pdsCy))*100; STC:=Wilders(ST,pdsCy/2); { automatic trigger levels } pk:=Ref(STC,-1)>STC AND Ref(STC,-1)>Ref(STC,-2); pkVal:=If(pk,Ref(STC,-1),0); pkAvg:=Cum(pkVal)/(Cum(pk)+.000001); pkAvg:=If(pkAvg=0,100,pkAvg); tr:=Ref(STC,-1)-1)=1; flag:=BarsSince(Init OR In) < BarsSince(Init OR Out)+InInit; signals:=(InInit AND Alert(InInit=0,2) OR flag AND Alert(flag=0,2)) -(flag=0 AND Alert(flag,2)); { trend support/resistance levels } STCI:=If(flag,ValueWhen(1,signals,L*(1-buffer)), ValueWhen(1,signals=-1 OR Init,H*(1+buffer))); { alternative STC crossover signals method} {bb:=BarsSince(Cross(STC,trAvg)); bs:=BarsSince(Cross(pkAvg,STC)); tb:=ValueWhen(1,Cross(STC,trAvg),H*(1+buffer)); ts:=ValueWhen(1,Cross(pkAvg,STC),L*(1-buffer)); STCI:=If(bb