
이 전략은 슈아프 트렌드 순환 지표에 기반하고, 스토치 RSI의 오버 바이 오버 셀 원칙을 결합하여 동력 지표를 통해 트렌드를 판단하고 추적합니다. 가격이 오버 바이 영역에서 오버 바이 영역으로 돌파 할 때, 더 많은 것을하십시오. 가격이 오버 바이 영역에서 오버 바이 영역으로 넘어갈 때, 공백을하십시오. 이 전략은 가격 트렌드의 변화 지점을 포착하여 포지션을 동적으로 조정하고, 가격 움직임을 추적합니다.
샤프 트렌드 사이클 전략은 동력 지표를 통해 과매매 지역을 판단하고, 이를 통해 가격의 단기 트렌드 변화를 판단한다. 이 전략은 간단하고 명확하며, 다른 시장의 파라미터에 따라 조정할 수 있지만, 수축의 위험도 존재한다. 보조 지표 판단과 상쇄를 통해 최적화하여 강한 추세에서 더 나은 효과를 발휘할 수 있다.
/*backtest
start: 2023-10-01 00:00:00
end: 2023-10-31 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
// Copyright (c) 2018-present, Alex Orekhov (everget)
// Schaff Trend Cycle script may be freely distributed under the MIT license.
strategy("Schaff Trend Cycle", shorttitle="STC Backtest", overlay=true)
fastLength = input(title="MACD Fast Length", defval=23)
slowLength = input(title="MACD Slow Length", defval=50)
cycleLength = input(title="Cycle Length", defval=10)
d1Length = input(title="1st %D Length", defval=3)
d2Length = input(title="2nd %D Length", defval=3)
src = input(title="Source", defval=close)
highlightBreakouts = input(title="Highlight Breakouts ?", type=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 := stc > 100 ? 100 : stc < 0 ? 0 : stc
//stcColor = not highlightBreakouts ? (stc > stc[1] ? green : red) : #ff3013
//stcPlot = plot(stc, title="STC", color=stcColor, transp=0)
upper = input(75, defval=75)
lower = input(25, defval=25)
transparent = color(white, 100)
upperLevel = plot(upper, title="Upper", color=gray)
// hline(50, title="Middle", linestyle=dotted)
lowerLevel = plot(lower, title="Lower", color=gray)
fill(upperLevel, lowerLevel, color=#f9cb9c, transp=90)
upperFillColor = stc > upper and highlightBreakouts ? green : transparent
lowerFillColor = stc < lower and highlightBreakouts ? red : transparent
//fill(upperLevel, stcPlot, color=upperFillColor, transp=80)
//fill(lowerLevel, stcPlot, color=lowerFillColor, transp=80)
long = crossover(stc, lower) ? lower : na
short = crossunder(stc, upper) ? upper : na
long_filt = long and not short
short_filt = short and not long
prev = 0
prev := long_filt ? 1 : short_filt ? -1 : prev[1]
long_final = long_filt and prev[1] == -1
short_final = short_filt and prev[1] == 1
strategy.entry("long", strategy.long, when = long )
strategy.entry("short", strategy.short, when = short)
plotshape(crossover(stc, lower) ? lower : na, title="Crossover", location=location.absolute, style=shape.circle, size=size.tiny, color=green, transp=0)
plotshape(crossunder(stc, upper) ? upper : na, title="Crossunder", location=location.absolute, style=shape.circle, size=size.tiny, color=red, transp=0)
alertcondition(long_final, "Long", message="Long")
alertcondition(short_final,"Short", message="Short")
plotshape(long_final, style=shape.arrowup, text="Long", color=green, location=location.belowbar)
plotshape(short_final, style=shape.arrowdown, text="Short", color=red, location=location.abovebar)