RSI MTF Ob+Os

Author: 发明者量化, Date: 2022-05-09 15:35:09
Tags: RSI

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 :)

img


/*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)


//==============================================================================

//==============================================================================

Related

More