RSI OTT는 Anıl Özekşi의 최신 파생 버전입니다. RSI 오시레이터에서 최적화된 트렌드 추적기. 그는 지표에 OTT를 채택하여 RSI 오시레이터의 가짜 신호를 해결할 수 있습니다. OTT를 모르는 사람들은 지표에서 검색할 수 있습니다.
백테스트
/*backtest start: 2022-05-09 00:00:00 end: 2022-05-15 23:59:00 period: 1m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 //created by : @Anil_Ozeksi //developer : @Anil_Ozeksi //author : @mr. fofenks study("RISOTTO",overlay=false, precision=2) src = close //RSI x1 = input(defval = 100 , title = "VAR RSI Period" , type = input.integer, minval = 1 ,step = 1 , group = "VAR RSI") //OTT x2 = input(defval = 50 , title = "RISOTTO Period" , type = input.integer, minval = 1 ,step = 1 , group = "RISOTTO") x3 = input(defval = 0.2 , title = "RISOTTO Percent" , type = input.float , minval = 0 ,step = 0.05 , group = "RISOTTO") //Signals showsignalsc = input( defval=false , title = "Show RSI/OTT Crossing Signals?", type=input.bool) OTT_Func(src,length, percent)=> valpha = 2/(length+1) vud1 = src>src[1] ? src-src[1] : 0 vdd1 = src<src[1] ? src[1]-src : 0 vUD = sum(vud1,9) vDD = sum(vdd1,9) vCMO = nz((vUD-vDD)/(vUD+vDD)) VAR = 0.0 VAR := nz(valpha*abs(vCMO)*src)+(1-valpha*abs(vCMO))*nz(VAR[1]) fark = VAR*percent*0.01//multi*atr // longStop = VAR - fark longStopPrev = nz(longStop[1], longStop) longStop := VAR > longStopPrev ? max(longStop, longStopPrev) : longStop shortStop = VAR + fark shortStopPrev = nz(shortStop[1], shortStop) shortStop := VAR < shortStopPrev ? min(shortStop, shortStopPrev) : shortStop dir = 1 dir := nz(dir[1], dir) dir := dir == -1 and VAR > shortStopPrev ? 1 : dir == 1 and VAR < longStopPrev ? -1 : dir MT = dir==1 ? longStop: shortStop OTT = VAR>MT ? MT*(200+percent)/200 : MT*(200-percent)/200 [VAR,OTT] rsi = rsi(src,x1) [VRSI,_] = OTT_Func(rsi, x2, 1) [_,RISOTTO] = OTT_Func(VRSI+1000, 2, x3) buySignalc = crossover(VRSI+1000, RISOTTO[2]) sellSignallc = crossunder(VRSI+1000, RISOTTO[2]) plot(VRSI+1000 , color=#0585E1 , linewidth=2, title="VAR RSI" , display = display.all) plot(nz(RISOTTO[2]) , color=#B800D9 , linewidth=2, title="RISOTTO" , display = display.all) plotshape(buySignalc and showsignalsc ? RISOTTO*0.995 : na, title="Buy" , text="Buy" , location=location.absolute, style=shape.labelup , size=size.tiny, color=color.green , textcolor=color.white) plotshape(sellSignallc and showsignalsc ? RISOTTO*1.005 : na, title="Sell" , text="Sell" , location=location.absolute, style=shape.labeldown , size=size.tiny, color=color.red , textcolor=color.white) //alertcondition(cross(src, OTT[2]), title="Price Cross Alert", message="OTT - Price Crossing!") //alertcondition(crossover(src, OTT[2]), title="Price Crossover Alarm", message="PRICE OVER OTT - BUY SIGNAL!") //alertcondition(crossunder(src, OTT[2]), title="Price Crossunder Alarm", message="PRICE UNDER OTT - SELL SIGNAL!") if buySignalc strategy.entry("Enter Long", strategy.long) else if sellSignallc strategy.entry("Enter Short", strategy.short)