ProRealtime Code //PRC_RMI Trend Sniper //version = 0 //26.03.24 //Iv?n Gonz?lez @ www.prorealcode.com //Sharing ProRealTime knowledge //-----Inputs----------------------------------------------// Length=14//RMI Length pmom=66//Positive above nmom=30//Negative below filleshow=1//Show Range MA colorbar=1//Color candles drawsignals=1//Show arrows //-----RSI and MFI calculation-----------------------------// alpha = 1/length //-----Up src1 = max(close-close[1],0) if barindex = length then up = average[length](src1) else up = alpha*src1 + (1-alpha)*up[1] endif //-----Down src2 = - min(close-close[1],0) if barindex = length then down = average[length](src2) else down = alpha*src2 + (1-alpha)*down[1] endif //-----Rsi if down = 0 then myrsi = 100 elsif up = 0 then myrsi = 0 else myrsi = 100 - (100/(1+up/down)) endif //-----MFI mfi = MoneyFlowIndex[length] //-----RsiMfi rsimfi = (myrsi+mfi)/2 //----------------------------------------------------------// //-----Long Short Conditions--------------------------------// ema = average[5,1](close) bpmom = rsimfi[1]pmom and rsimfi>nmom and (ema-ema[1])>0 bnmom = rsimfi Inputs ------------- { var bool positive = false var bool negative = false string RSI_group = "RMI Settings" string mom_group = "Range Vales" string visual = "Visuals" int Length = input(14,"RMI Length ",inline = "RMI",group = RSI_group) int pmom = input(66," Positive above",inline = "rsi1",group =RSI_group ) int nmom = input(30,"Negative below",inline = "rsi1",group =RSI_group ) bool filleshow = input(true,"Show Range MA ",inline = "002",group =visual ) color bull = input(#00bcd4,"",inline = "002",group =visual ) color bear = input(#ff5252,"",inline = "002",group =visual ) float BarRange = high - low up = ta.rma(math.max(ta.change(close), 0), Length) down = ta.rma(-math.min(ta.change(close), 0), Length) rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down)) mf = ta.mfi(hlc3, Length) rsi_mfi = math.avg(rsi,mf) //------------------- } bool p_mom = rsi_mfi[1] < pmom and rsi_mfi > pmom and rsi_mfi > nmom and ta.change(ta.ema(close,5)) > 0 bool n_mom = rsi_mfi < nmom and ta.change(ta.ema(close,5)) < 0 // // ---> Momentums ------------- { if p_mom positive:= true negative:= false if n_mom positive:= false negative:= true // method _Band(int len)=> math.min (ta.atr (len) * 0.3, close * (0.3/100)) [20] /2 * 8 Band = _Band(30) method rangeMA(float Range,Prd)=> weight = Range / math.sum(Range, Prd) sum = math.sum(close * weight, Prd) tw= math.sum(weight, Prd) sum / tw // Calculate the RWMA rwma = rangeMA(BarRange,20) // Plotting the RWMA. colour = positive ? bull : bear RWMA = positive ? rwma - Band : negative ? rwma + Band : na alpha = color.new(color.black, 100) center = plot(filleshow ? RWMA : na, "RRTH", colour, editable = true) plot(filleshow ? RWMA : na, "RRTH", color.new(colour, 70), 2, editable = true) plot(filleshow ? RWMA : na, "RRTH", color.new(colour, 80), 3, editable = true) plot(filleshow ? RWMA : na, "RRTH", color.new(colour, 90), 4, editable = true) max = RWMA + Band min = RWMA - Band top = plot(filleshow ? max: na, "RRTH", alpha) bottom = plot(filleshow ? min: na, "RRTH", alpha) fill(top, center, top_value = max, bottom_value = RWMA, bottom_color = color.new(colour, 75), top_color = alpha, editable = true) fill(center, bottom, top_value = RWMA, bottom_value = min, bottom_color = alpha, top_color = color.new(colour, 75), editable = true) Barcol = positive ? color.green:color.red if negative and not negative[1] label.new(bar_index,max+(Band/2),"",color = color.red,size=size.small) if positive and not positive[1] label.new(bar_index,min-(Band/2),"",color = color.green,size=size.small,style= label.style_label_up) plotcandle(open, high, low, close,color = Barcol,wickcolor = Barcol,bordercolor = Barcol) barcolor(color = Barcol) // SPOT Trading Alerts alertcondition(positive and not positive[1],"BUY") alertcondition(negative and not negative[1],"SELL")