Hello Traders,
This indicator use the same concept as my previous indicator “CCI MTF Ob+Os”.
It is a simple “Relative Strength Index” ( RSI ) indicator with multi-timeframe (MTF) overbought and oversold level.
It can detect overbought and oversold level up to 5 timeframes, which help traders spot potential reversal point more easily.
There are options to select 1-5 timeframes to detect overbought and oversold.
Aqua Background is “Oversold” , looking for “Long”. Orange Background is “Overbought” , looking for “Short”.
Have fun :)
/*backtest
start: 2021-05-08 00:00:00
end: 2022-05-07 23:59:00
period: 6h
basePeriod: 15m
exchanges: [{"eid":"Bitfinex","currency":"BTC_USD"}]
*/
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © thakon33
// __ __ __ ____ ____
// / /_/ / ___ _/ /_____ ___ |_ /|_ /
// / __/ _ \/ _ `/ '_/ _ \/ _ \_/_ <_/_ <
// \__/_//_/\_,_/_/\_\\___/_//_/____/____/
//@version=5
indicator("RSI MTF Ob+Os")
//------------------------------------------------------------------------------
// Input
var g_rsi = "[ RSI SETTING ]"
rsiSrc = input (title="Source", defval=close, group=g_rsi)
rsiLength = input.int(title="Length", defval=14, minval=1, group=g_rsi)
rsiOverbought = input.int(title="Overbought", defval=65, minval=50, maxval=99, step=1, group=g_rsi)
rsiOversold = input.int(title="Oversold", defval=35, minval=1, maxval=50, step=1, group=g_rsi)
var g_tf = "[ SELECT TIMEFRAME ]"
rsiTf1 = input.timeframe(title="Timeframe 1", defval="15", group=g_tf, inline="tf1")
rsiTf2 = input.timeframe(title="Timeframe 2", defval="30", group=g_tf, inline="tf2")
rsiTf3 = input.timeframe(title="Timeframe 3", defval="60", group=g_tf, inline="tf3")
rsiTf4 = input.timeframe(title="Timeframe 4", defval="120", group=g_tf, inline="tf4")
rsiTf5 = input.timeframe(title="Timeframe 5", defval="240", group=g_tf, inline="tf5")
rsiTf1_E = input.bool(title="", defval=true, group=g_tf, inline="tf1")
rsiTf2_E = input.bool(title="", defval=true, group=g_tf, inline="tf2")
rsiTf3_E = input.bool(title="", defval=true, group=g_tf, inline="tf3")
rsiTf4_E = input.bool(title="", defval=true, group=g_tf, inline="tf4")
rsiTf5_E = input.bool(title="", defval=true, group=g_tf, inline="tf5")
//------------------------------------------------------------------------------
// Calculate RSI
Fsec(Sym, Tf, Exp) =>
request.security(Sym, Tf, Exp[barstate.isrealtime ? 1 : 0], barmerge.gaps_off, barmerge.lookahead_off) [barstate.isrealtime ? 0 : 1]
rsi1 = Fsec(syminfo.tickerid, rsiTf1, ta.rsi(rsiSrc, rsiLength))
rsi2 = Fsec(syminfo.tickerid, rsiTf2, ta.rsi(rsiSrc, rsiLength))
rsi3 = Fsec(syminfo.tickerid, rsiTf3, ta.rsi(rsiSrc, rsiLength))
rsi4 = Fsec(syminfo.tickerid, rsiTf4, ta.rsi(rsiSrc, rsiLength))
rsi5 = Fsec(syminfo.tickerid, rsiTf5, ta.rsi(rsiSrc, rsiLength))
//------------------------------------------------------------------------------
// RSI Overbought and Oversold detect
rsi1_Ob = not rsiTf1_E or rsi1 >= rsiOverbought
rsi2_Ob = not rsiTf2_E or rsi2 >= rsiOverbought
rsi3_Ob = not rsiTf3_E or rsi3 >= rsiOverbought
rsi4_Ob = not rsiTf4_E or rsi4 >= rsiOverbought
rsi5_Ob = not rsiTf5_E or rsi5 >= rsiOverbought
rsi1_Os = not rsiTf1_E or rsi1 <= rsiOversold
rsi2_Os = not rsiTf2_E or rsi2 <= rsiOversold
rsi3_Os = not rsiTf3_E or rsi3 <= rsiOversold
rsi4_Os = not rsiTf4_E or rsi4 <= rsiOversold
rsi5_Os = not rsiTf5_E or rsi5 <= rsiOversold
rsiOb = rsi1_Ob and rsi2_Ob and rsi3_Ob and rsi4_Ob and rsi5_Ob
rsiOs = rsi1_Os and rsi2_Os and rsi3_Os and rsi4_Os and rsi5_Os
//------------------------------------------------------------------------------
// Drawing on chart
plot (rsiTf1_E ? rsi1 : na, title="TF 1", color=color.rgb(255, 205, 22, 20), linewidth=1)
plot (rsiTf2_E ? rsi2 : na, title="TF 2", color=color.rgb(255, 22, 239, 20), linewidth=1)
plot (rsiTf3_E ? rsi3 : na, title="TF 3", color=color.rgb(38, 22, 255, 0), linewidth=1)
plot (rsiTf4_E ? rsi4 : na, title="TF 4", color=color.rgb(123, 253, 22, 20), linewidth=1)
plot (rsiTf5_E ? rsi5 : na, title="TF 5", color=color.rgb(0, 255, 255, 50), linewidth=1)
strategy.entry("BUY", strategy.long, when=rsiOb)
strategy.entry("SELL", strategy.short, when=rsiOs)
//==============================================================================
//==============================================================================