study(title="RSI cyclic smoothed", shorttitle="cRSI") src = close domcycle = input(20, minval=10, title="Dominant Cycle Length") crsi= 0.0 cyclelen = domcycle / 2 vibration= 10 leveling = 10.0 cyclicmemory = domcycle * 2 //set min/max ranges? h1 = hline(30. color=Dcolor.silver, linestyle-hline.style_ dashed h2 = hline(70, color=0color.silver, linestyle-hline.style_dashed) torque = 2.0 / (vibration + 1) phasinglag = (vibration - 1) / 2.0 up = rma(max(change(src). 0), cyclelen) down = rma(-min(change(src), 0), cyclelen) rsi = down==0 ? 100: up==07 0:100 - 100/ (1 + up / dow) crsi := torque " (2 * rsi - rsi[phasinglag]) + (1 - torque) * nz(crsi[i]) imax = -999999.0 lmin= 999999.0 for i = 0 to cyclicmemory -1 by 1 if nz(crsi[i], -999999.0)> lmax lmax := nz(crsi[i]) lmax else if nz(crsi[i], 999999.0) < lmin Imin:= nz(crsili]) imin mstep aperc L7 0.0 db for steps 0 to 100 by 1 testvalue s lmin + mstep * steps above below= 0 for m = 0 to cyclicmemor below:= below + iff(ersi[m] < testvalue, 1, 0) below cyclicmemory (lmax- lmin) /100 leveling/100 ratio = below if ratio >s aperc db: testvalue break else continue 0.0 ub for steps" 0to 100 by testvalue = lmax - mstep * steps above = 0 for m = 0 to cyclicmemory - 1 by 1 above := above + iff(ersi[m] >m testvalue, 1. 0) above ratio = above / cyclicmemory if ratio >= aperc ub := testvalue break else continue lowband = plot(db, "LoMBand", [color.aqua) highband = plot(ub, "HighBand", Dcolor.aqua) fill(hi, h2, color=Ecolor.silver. transp=90) fill(lonband, highband, color=Bcolor.gray, transp=90) plot(crsi, "CRSI", Wcolor.fuchsia)