Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //@version=4
- // Copiright (c) 2022 Alex Sobrino
- // Schaff Trend Cycle script may be freely distributed under the MIT license.
- study("Schaff Trend Cycle", shorttitle="STC")
- fastLength = input(title="MACD Fast Length", type=input.integer, defval=23)
- slowLength = input(title="MACD Slow Length", type=input.integer, defval=50)
- cycleLength = input(title="Cycle Length", type=input.integer, defval=10)
- d1Length = input(title="1st %D Length", type=input.integer, defval=3)
- d2Length = input(title="2nd %D Length", type=input.integer, defval=3)
- src = input(title="Source", type=input.source, defval=close)
- upper = input(title="Upper Band", type=input.integer, defval=75)
- lower = input(title="Lower Band", type=input.integer, defval=25)
- highlightBreakouts = input(title="Highlight Breakouts ?", type=input.bool, defval=true)
- macd = ema(src, fastLength) - ema(src, slowLength)
- k = nz(fixnan(stoch(macd, macd, macd, cycleLength)))
- d = ema(k, d1Length)
- kd = nz(fixnan(stoch(d, d, d, cycleLength)))
- stc = ema(kd, d2Length)
- stc := max(min(stc, 100), 0)
- stcColor1 = stc > stc[1] ? color.green : color.red
- stcColor2 = stc > upper ? color.green : stc <= lower ? color.red : color.orange
- stcColor = highlightBreakouts ? stcColor2 : stcColor1
- stcPlot = plot(stc, title="STC", color=stcColor, transp=0)
- upperLevel = plot(upper, title="Upper", color=color.gray)
- hline(50, title="Middle", linestyle=hline.style_dotted)
- lowerLevel = plot(lower, title="Lower", color=color.gray)
- fill(upperLevel, lowerLevel, title="Middle Zone", color=#f9cb9c, transp=90)
- upperFillColor = stc > upper and highlightBreakouts ? color.green : na
- lowerFillColor = stc < lower and highlightBreakouts ? color.red : na
- fill(upperLevel, stcPlot, color=upperFillColor, transp=80)
- fill(lowerLevel, stcPlot, color=lowerFillColor, transp=80)
- buySignal = crossover(stc, lower)
- sellSignal = crossunder(stc, upper)
- upperCrossover = crossover(stc, upper)
- upperCrossunder = crossunder(stc, upper)
- lowerCrossover = crossover(stc, lower)
- lowerCrossunder = crossunder(stc, lower)
- plotshape(upperCrossunder ? upper : na, title="Sell Signal", location=location.absolute, style=shape.circle, size=size.tiny, color=color.red, transp=0)
- plotshape(lowerCrossover ? lower : na, title="Buy Signal", location=location.absolute, style=shape.circle, size=size.tiny, color=color.green, transp=0)
- alertcondition(buySignal, title="Alert: Buy", message="STC: Buy!\nSymbol: {{exchange}}:{{ticker}}\nPrice: {{close}}")
- alertcondition(sellSignal, title="Alert: Sell", message="STC: Sell!\nSymbol: {{exchange}}:{{ticker}}\nPrice: {{close}}")
- alertcondition(upperCrossover, title="Alert: Upper Band Crossover", message="STC: Upper Band Crossover!\nSymbol: {{exchange}}:{{ticker}}\nPrice: {{close}}")
- alertcondition(upperCrossunder, title="Alert: Upper Band Crossunder", message="STC: Upper Band Crossunder!\nSymbol: {{exchange}}:{{ticker}}\nPrice: {{close}}")
- alertcondition(lowerCrossover, title="Alert: Lower Band Crossover", message="STC: Lower Band Crossover!\nSymbol: {{exchange}}:{{ticker}}\nPrice: {{close}}")
- alertcondition(lowerCrossunder, title="Alert: Lower Band Crossunder", message="STC: Lower Band Crossunder!\nSymbol: {{exchange}}:{{ticker}}\nPrice: {{close}}")
Advertisement
Add Comment
Please, Sign In to add comment