커뮤니티

부탁드립니다.

프로필 이미지
다올
2023-08-13 23:18:16
920
글번호 171470
답변완료
변형 부탁 드립니다. indicator("RSI Multi Length [LuxAlgo]") max = input(20,'Maximum Length') min = input(10,'Minimum Length') overbought = input.float(70,step=10) oversold = input.float(30,step=10) src = input(close) //---- rsi_avg_dn_css = input(#ff5d00,'Average RSI Gradient',group='Style',inline='inline1') rsi_avg_up_css = input(#2157f3,'',group='Style',inline='inline1') upper_css = input(#0cb51a,'Upper Level',group='Style') lower_css = input(#ff1100,'Lower Level',group='Style') ob_area = input(color.new(#0cb51a,70),'Overbought Area',group='Style') os_area = input(color.new(#ff1100,70),'Oversold Area',group='Style') //---- N = max-min+1 diff = nz(src - src[1]) var num = array.new_float(N,0) var den = array.new_float(N,0) //---- k = 0 overbuy = 0 oversell = 0 avg = 0. for i = min to max alpha = 1/i num_rma = alpha*diff + (1-alpha)*array.get(num,k) den_rma = alpha*math.abs(diff) + (1-alpha)*array.get(den,k) rsi = 50*num_rma/den_rma + 50 avg += rsi overbuy := rsi > overbought ? overbuy + 1 : overbuy oversell := rsi < oversold ? oversell + 1 : oversell array.set(num,k,num_rma) array.set(den,k,den_rma) k += 1 //---- avg_rsi = avg/N buy_rsi_ma = 0. sell_rsi_ma = 0. buy_rsi_ma := nz(buy_rsi_ma[1] + overbuy/N*(avg_rsi - buy_rsi_ma[1]),avg_rsi) sell_rsi_ma := nz(sell_rsi_ma[1] + oversell/N*(avg_rsi - sell_rsi_ma[1]),avg_rsi) //---- var tb = table.new(position.top_right,2,2) if barstate.islast table.cell(tb,0,0,'Overbought',text_color=color.gray,bgcolor=na) table.cell(tb,1,0,'Oversold',text_color=color.gray,bgcolor=na) table.cell(tb,0,1,str.tostring(overbuy/N*100,'#.##')+' %',text_color=#26a69a,bgcolor=color.new(#26a69a,80)) table.cell(tb,1,1,str.tostring(oversell/N*100,'#.##')+' %',text_color=#ef5350,bgcolor=color.new(#ef5350,80)) //---- css = color.from_gradient(avg_rsi,sell_rsi_ma,buy_rsi_ma,rsi_avg_dn_css,rsi_avg_up_css) plot(avg_rsi,'Average Multi Length RSI',color=css) up = plot(buy_rsi_ma,'Upper Channel',color=upper_css) dn = plot(sell_rsi_ma,'Lower Channel',color=lower_css) per_over = plot(overbuy/N*100,'Overbought Area',color=color.new(ob_area,100),editable=false) per_under = plot(100 - oversell/N*100,'Oversold Area',color=color.new(os_area,100),editable=false) upper = plot(100,color=na,editable=false,display=display.none) lower = plot(0,color=na,editable=false,display=display.none) fill(per_over,lower,ob_area) fill(upper,per_under,os_area) fill(up,dn,color.new(css,90)) hline(50,color=color.new(color.gray,50))
지표
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2023-08-16 18:44:14

안녕하세요 예스스탁입니다. input : max(20),min(10); input : overbought(70),oversold(30); var : src(0), N(0),diff(0),i(0); var : k(0),overbuy(0),overSell(0),avgv(0); var : alpha(0),num_rma(0),den_rma(0); var : rsiv(0),avg_rsi(0),buy_rsi_ma(0),sell_rsi_ma(0); Array : num[100](0),den[100](0); src = C; N = max-min+1; diff = IFf(IsNan(src - src[1]) == False,src-src[1],0); k = 0; overbuy = 0; oversell = 0; avgv = 0; for i = min to max { alpha = 1/i; num_rma = alpha*diff + (1-alpha)*num[k]; den_rma = alpha*abs(diff) + (1-alpha)*den[k]; rsiv = 50*num_rma/den_rma + 50; avgv = avgv+ rsiv; overbuy = iff(rsiv > overbought , overbuy + 1 , overbuy); oversell = iff(rsiv < oversold , oversell + 1 , oversell); num[k] = num_rma; den[k] = den_rma; k = k + 1; } //---- avg_rsi = avgv/N; buy_rsi_ma = 0; sell_rsi_ma = 0; buy_rsi_ma = iff(IsNan(buy_rsi_ma[1] + overbuy/N*(avg_rsi - buy_rsi_ma[1])) == False,buy_rsi_ma[1] + overbuy/N*(avg_rsi - buy_rsi_ma[1]),avg_rsi); sell_rsi_ma = iff(IsNaN(sell_rsi_ma[1] + oversell/N*(avg_rsi - sell_rsi_ma[1])) == False,sell_rsi_ma[1] + oversell/N*(avg_rsi - sell_rsi_ma[1]), avg_rsi); plot1(avg_rsi,"Average Multi Length RSI"); plot2(buy_rsi_ma,"Upper Channel"); plot3(sell_rsi_ma,"Lower Channel"); plot4(overbuy/N*100,"Overbought Area"); plot5(100 - oversell/N*100,"Oversold Area"); PlotBaseLine1(100,"100"); PlotBaseLine2(0,"0"); PlotBaseLine3(50,"50"); 즐거운 하루되세요 > 다올 님이 쓴 글입니다. > 제목 : 부탁드립니다. > 변형 부탁 드립니다. indicator("RSI Multi Length [LuxAlgo]") max = input(20,'Maximum Length') min = input(10,'Minimum Length') overbought = input.float(70,step=10) oversold = input.float(30,step=10) src = input(close) //---- rsi_avg_dn_css = input(#ff5d00,'Average RSI Gradient',group='Style',inline='inline1') rsi_avg_up_css = input(#2157f3,'',group='Style',inline='inline1') upper_css = input(#0cb51a,'Upper Level',group='Style') lower_css = input(#ff1100,'Lower Level',group='Style') ob_area = input(color.new(#0cb51a,70),'Overbought Area',group='Style') os_area = input(color.new(#ff1100,70),'Oversold Area',group='Style') //---- N = max-min+1 diff = nz(src - src[1]) var num = array.new_float(N,0) var den = array.new_float(N,0) //---- k = 0 overbuy = 0 oversell = 0 avg = 0. for i = min to max alpha = 1/i num_rma = alpha*diff + (1-alpha)*array.get(num,k) den_rma = alpha*math.abs(diff) + (1-alpha)*array.get(den,k) rsi = 50*num_rma/den_rma + 50 avg += rsi overbuy := rsi > overbought ? overbuy + 1 : overbuy oversell := rsi < oversold ? oversell + 1 : oversell array.set(num,k,num_rma) array.set(den,k,den_rma) k += 1 //---- avg_rsi = avg/N buy_rsi_ma = 0. sell_rsi_ma = 0. buy_rsi_ma := nz(buy_rsi_ma[1] + overbuy/N*(avg_rsi - buy_rsi_ma[1]),avg_rsi) sell_rsi_ma := nz(sell_rsi_ma[1] + oversell/N*(avg_rsi - sell_rsi_ma[1]),avg_rsi) //---- var tb = table.new(position.top_right,2,2) if barstate.islast table.cell(tb,0,0,'Overbought',text_color=color.gray,bgcolor=na) table.cell(tb,1,0,'Oversold',text_color=color.gray,bgcolor=na) table.cell(tb,0,1,str.tostring(overbuy/N*100,'#.##')+' %',text_color=#26a69a,bgcolor=color.new(#26a69a,80)) table.cell(tb,1,1,str.tostring(oversell/N*100,'#.##')+' %',text_color=#ef5350,bgcolor=color.new(#ef5350,80)) //---- css = color.from_gradient(avg_rsi,sell_rsi_ma,buy_rsi_ma,rsi_avg_dn_css,rsi_avg_up_css) plot(avg_rsi,'Average Multi Length RSI',color=css) up = plot(buy_rsi_ma,'Upper Channel',color=upper_css) dn = plot(sell_rsi_ma,'Lower Channel',color=lower_css) per_over = plot(overbuy/N*100,'Overbought Area',color=color.new(ob_area,100),editable=false) per_under = plot(100 - oversell/N*100,'Oversold Area',color=color.new(os_area,100),editable=false) upper = plot(100,color=na,editable=false,display=display.none) lower = plot(0,color=na,editable=false,display=display.none) fill(per_over,lower,ob_area) fill(upper,per_under,os_area) fill(up,dn,color.new(css,90)) hline(50,color=color.new(color.gray,50))