Chiến lược này dựa trên chỉ số Chu kỳ Xu hướng Schaff, kết hợp với các nguyên tắc mua quá nhiều và bán quá nhiều của Stoch RSI, để xác định và theo dõi xu hướng sử dụng số liệu động lực. Nó đi dài khi giá vượt ra khỏi khu vực bán quá nhiều vào khu vực mua quá nhiều và đi ngắn khi giá phá vỡ từ khu vực mua quá nhiều vào khu vực bán quá nhiều. Chiến lược điều chỉnh động các vị trí bằng cách nắm bắt những thay đổi trong xu hướng giá.
Chiến lược chu kỳ xu hướng Schaff xác định quá mua / quá bán thông qua các chỉ số động lực để xác định những thay đổi xu hướng giá ngắn hạn. Mặc dù đơn giản và có thể điều chỉnh, nó có nguy cơ bẫy.
/*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)