PyTai Top/Bottom Finder v0.1When the average StochRSI line rises high (near or above 80), it often signals the asset's price is approaching the peak or end of an uptrend, as momentum becomes overextended across multiple timeframes—aligning with your view on run endings. Conversely, a low average (near or below 20) suggests exhaustion in a downtrend, hinting at potential bottoms. The cluster columns amplify this: wide green bars (high positive netScore) show broad oversold agreement for bullish reversals, while red bars indicate overbought consensus for bearish turns. However, StochRSI can remain extreme in strong trends, so combine with price action or volume to avoid false signals; backtest on your assets to refine thresholds, as shorter smoothing (e.g., 1-3) increases sensitivity but noise.
Осцилляторы
Directional Movement Index - HistogramModified standard DMI to have histogram instead of standard lines
RSI-ma Wave Sensor (Free ver.)RSI-ma Wave Sensor is a 3-line RSI-based oscillator (Main / Middle / Wave) that shows trend direction, momentum and higher timeframe context in a single pane.
Compared with many classic MA/RSI tools it aims to:
• react with very low lag (almost real-time feeling)
• detect trend direction early
• avoid “overbought/oversold sticking” so you can hold calmly until the trend really starts to end
This Free version is a DAY trade preset for the 15m chart:
• Main = 14, Middle = EMA 9, Wave = EMA 28
• 1h higher timeframe wave sensor included
• good for learning / testing how to read trends with RSI waves
Multi-factor momentum & flow confluence oscillator
MarketExploiter
Momentum–flow confluence oscillator.
Overview
This indicator combines momentum structure, money-flow behavior, trend context, and divergence detection into a single visual tool. It helps highlight when momentum is strengthening, weakening, or beginning to shift direction.
Components
• A smoothed momentum curve that visualizes acceleration and exhaustion.
• Money-flow bias reflecting underlying buying or selling pressure.
• Momentum-shift dots that appear only when several factors align, such as momentum inflection, curve behavior, and supportive flow.
• Bullish and bearish divergence detection between price and the momentum curve.
• A trend panel offering broader directional context.
How to Use
Signals are most effective when they appear in the direction of the trend panel and when money-flow conditions support the move. Divergence signals may highlight early strength or weakness relative to price action. The indicator is intended for context and confirmation rather than standalone entries. Works across all liquid markets and timeframes.
Notes
Non-repainting. Suitable for momentum assessment, trend reading, and identifying potential inflection zones.
Best Metal to Sell → More BTCWhichever precious metal has outperformed Bitcoin the most over the last 21 days (by >4%) is showing short-term strength → sell a small slice of that metal and rotate into BTC.
Orange = trim some gold → buy BTC
Grey = trim some silver → buy BTC
Black = no clear edge → hold
This is a gradual, disciplined rebalancing tool for anyone holding physical gold & silver who wants to slowly increase their BTC exposure on relative strength spikes — without ever going “all-in”.
You decide the pace: 1% per signal, pause anytime, or stop when you’ve reached your personal comfort level of BTC allocation.
2020–2025 backtest (weekly 1% rotations):
$200k metals → 18.4 BTC + $0 metals left = $1.68 million
HODL metals only = $320k
HODL BTC from day one = ~$1.4 million
It’s not about beating BTC every cycle — it’s about turning stagnant metals into more sats, at your own pace.
RSI + BB + RSI Advanced MTF Panel//@version=6
indicator(title="RSI + BB + RSI Advanced MTF Panel", shorttitle="RSI + BB + RSI Advance MTF Panel", format=format.price, precision=2, overlay=false)
bb_group = "BB (Price Overlay)"
bb_length = input.int(50, minval=1, group = bb_group)
bb_maType = input.string("SMA", "Basis MA Type", options = , group = bb_group)
bb_src = input.source(close, title="Source", group = bb_group)
bb_mult = input.float(0.2, minval=0.001, maxval=50, title="StdDev", group = bb_group)
BasisColor = input.color(color.rgb(163, 41, 245), "Basis Color", group = bb_group, display = display.none)
UpperColor = input.color(color.rgb(120, 156, 202,100), "Upper Color", group = bb_group, display = display.none)
LowerColor = input.color(color.rgb(120, 156, 202,100), "Lower Color", group = bb_group, display = display.none)
offset = input.int(0, "Offset", minval = -500, maxval = 500, display = display.data_window, group = bb_group)
ma(source, bb_length, _type) =>
switch _type
"SMA" => ta.sma(source, bb_length)
"EMA" => ta.ema(source, bb_length)
"SMMA (RMA)" => ta.rma(source, bb_length)
"WMA" => ta.wma(source, bb_length)
"VWMA" => ta.vwma(source, bb_length)
basis = ma(bb_src, bb_length, bb_maType)
dev = bb_mult * ta.stdev(bb_src, bb_length)
upper = basis + dev
lower = basis - dev
plot(basis, "Basis", color=BasisColor, offset = offset, force_overlay = true)
p1 = plot(upper, "Upper", color=UpperColor, offset = offset, force_overlay = true)
p2 = plot(lower, "Lower", color=LowerColor, offset = offset, force_overlay = true)
fill(p1, p2, title = "Background", color=color.rgb(163, 41, 245, 90))
rsiLengthInput = input.int(30, minval=1, title="RSI Length", group="RSI Settings")
rsiSourceInput = input.source(close, "Source", group="RSI Settings")
calculateDivergence = input.bool(false, title="Calculate Divergence", group="RSI Settings", display = display.data_window, tooltip = "Calculating divergences is needed in order for divergence alerts to fire.")
SignalDot = input.bool(false, title="Signal Dot", group="Smoothing", display = display.data_window, tooltip = "Signal for possible entry")
change = ta.change(rsiSourceInput)
up = ta.rma(math.max(change, 0), rsiLengthInput)
down = ta.rma(-math.min(change, 0), rsiLengthInput)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))
rsiPlot = plot(rsi, "RSI", color= rsi >= 51 ? color.rgb(13, 197, 230) : color.red)
rsiUpperBand = hline(70, "RSI Upper Band", color=#787B86)
midline = hline(50, "RSI Middle Band", color=color.new(#787B86, 50))
rsiLowerBand = hline(30, "RSI Lower Band", color=#787B86)
fill(rsiUpperBand, rsiLowerBand, color=color.rgb(126, 87, 194, 90), title="RSI Background Fill")
midLinePlot = plot(50, color = na, editable = false, display = display.none)
fill(rsiPlot, midLinePlot, 100, 70, top_color = color.new(color.green, 0), bottom_color = color.new(color.green, 100), title = "Overbought Gradient Fill")
fill(rsiPlot, midLinePlot, 30, 0, top_color = color.new(color.red, 100), bottom_color = color.new(color.red, 0), title = "Oversold Gradient Fill")
GRP = "Smoothing"
TT_BB = "Only applies when 'SMA + Bollinger Bands' is selected. Determines the distance between the SMA and the bands."
maTypeInput = input.string("SMA", "Type", options = , group = GRP, display = display.data_window)
maLengthInput = input.int(14, "Length", group = GRP, display = display.data_window)
bbMultInput = input.float(2.0, "BB StdDev", minval = 0.001, maxval = 50, step = 0.5, tooltip = TT_BB, group = GRP, display = display.data_window)
var enableMA = maTypeInput != "None"
var isBB = maTypeInput == "SMA + Bollinger Bands"
smoothma(source, length, MAtype) =>
switch MAtype
"SMA" => ta.sma(source, length)
"SMA + Bollinger Bands" => ta.sma(source, length)
"EMA" => ta.ema(source, length)
"SMMA (RMA)" => ta.rma(source, length)
"WMA" => ta.wma(source, length)
"VWMA" => ta.vwma(source, length)
smoothingMA = enableMA ? smoothma(rsi, maLengthInput, maTypeInput) : na
smoothingStDev = isBB ? ta.stdev(rsi, maLengthInput) * bbMultInput : na
plot(smoothingMA, "RSI-based MA", color=color.yellow, display = enableMA ? display.all : display.none, editable = enableMA)
bbUpperBand = plot(smoothingMA + smoothingStDev, title = "Upper Bollinger Band", color=color.green, display = isBB ? display.all : display.none, editable = isBB)
bbLowerBand = plot(smoothingMA - smoothingStDev, title = "Lower Bollinger Band", color=color.green, display = isBB ? display.all : display.none, editable = isBB)
fill(bbUpperBand, bbLowerBand, color= isBB ? color.new(color.green, 90) : na, title="Bollinger Bands Background Fill", display = isBB ? display.all : display.none, editable = isBB)
lookbackRight = 5
lookbackLeft = 5
rangeUpper = 60
rangeLower = 5
bearColor = color.red
bullColor = color.green
textColor = color.white
noneColor = color.new(color.white, 100)
_calcBarsSince(cond) =>
ta.barssince(cond)
rsiLBR = rsi
// 1. Calculate Pivots Unconditionally
plFound = not na(ta.pivotlow(rsi, lookbackLeft, lookbackRight))
phFound = not na(ta.pivothigh(rsi, lookbackLeft, lookbackRight))
// 2. Calculate History Unconditionally
barsSincePL = _calcBarsSince(plFound )
barsSincePH = _calcBarsSince(phFound )
// 3. Check Ranges Unconditionally
inRangePL = rangeLower <= barsSincePL and barsSincePL <= rangeUpper
inRangePH = rangeLower <= barsSincePH and barsSincePH <= rangeUpper
// 4. Calculate Conditions
var bool bullCond = false
var bool bearCond = false
if calculateDivergence
rsiHL = rsiLBR > ta.valuewhen(plFound, rsiLBR, 1) and inRangePL
lowLBR = low
priceLL = lowLBR < ta.valuewhen(plFound, lowLBR, 1)
bullCond := priceLL and rsiHL and plFound
rsiLH = rsiLBR < ta.valuewhen(phFound, rsiLBR, 1) and inRangePH
highLBR = high
priceHH = highLBR > ta.valuewhen(phFound, highLBR, 1)
bearCond := priceHH and rsiLH and phFound
else
bullCond := false
bearCond := false
plot(plFound ? rsiLBR : na, offset = -lookbackRight, title = "Regular Bullish", linewidth = 2, color = (bullCond ? bullColor : noneColor), display = display.pane, editable = calculateDivergence)
plotshape(bullCond ? rsiLBR : na, offset = -lookbackRight, title = "Regular Bullish Label", text = " Bull ", style = shape.labelup, location = location.absolute, color = bullColor, textcolor = textColor, display = display.pane, editable = calculateDivergence)
plot(phFound ? rsiLBR : na, offset = -lookbackRight, title = "Regular Bearish", linewidth = 2, color = (bearCond ? bearColor : noneColor), display = display.pane, editable = calculateDivergence)
plotshape(bearCond ? rsiLBR : na, offset = -lookbackRight, title = "Regular Bearish Label", text = " Bear ", style = shape.labeldown, location = location.absolute, color = bearColor, textcolor = textColor, display = display.pane, editable = calculateDivergence)
alertcondition(bullCond, title='Regular Bullish Divergence', message="Found a new Regular Bullish Divergence.")
alertcondition(bearCond, title='Regular Bearish Divergence', message='Found a new Regular Bearish Divergence.')
// --- Panel Options (General) ---
g_panel = 'MTF Panel Options'
i_orientation = input.string('Vertical', 'Orientation', options = , group = g_panel)
i_position = input.string('Bottom Right', 'Position', options = , group = g_panel)
i_border_width = input.int(1, 'Border Width', minval = 0, maxval = 10, group = g_panel, inline = 'border')
i_color_border = input.color(#000000, '', group = g_panel, inline = 'border')
i_showHeaders = input.bool(true, 'Show Headers', group = g_panel)
i_color_header_bg = input.color(#5d606b, 'Headers Background', group = g_panel, inline = 'header')
i_color_header_text = input.color(color.white, 'Text', group = g_panel, inline = 'header')
i_color_tf_bg = input.color(#2a2e39, 'Timeframe Background', group = g_panel, inline = 'tf')
i_color_tf_text = input.color(color.white, 'Text', group = g_panel, inline = 'tf')
i_debug = input.bool(false, 'Display colors palette (debug)', group = g_panel)
// --- RSI Colors (Conditional Formatting) ---
g_rsi = 'MTF RSI Colors'
i_threshold_ob = input.int(70, 'Overbought Threshold', minval=51, maxval=100, group = g_rsi)
i_color_ob = input.color(#128416, 'Overbought Background', inline = 'ob', group = g_rsi)
i_tcolor_ob = input.color(color.white, 'Text', inline = 'ob', group = g_rsi)
i_threshold_uptrend = input.int(60, 'Uptrend Threshold', minval=51, maxval=100, group = g_rsi)
i_color_uptrend = input.color(#2d472e, 'Uptrend Background', inline = 'up', group = g_rsi)
i_tcolor_uptrend = input.color(color.white, 'Text', inline = 'up', group = g_rsi)
i_color_mid = input.color(#131722, 'No Trend Background', group = g_rsi, inline = 'mid')
i_tcolor_mid = input.color(#b2b5be, 'Text', group = g_rsi, inline = 'mid')
i_threshold_downtrend = input.int(40, 'Downtrend Threshold', group = g_rsi, minval=0, maxval=49)
i_color_downtrend = input.color(#5b2e2e, 'Downtrend Background', group = g_rsi, inline = 'down')
i_tcolor_downtrend = input.color(color.white, 'Text', group = g_rsi, inline = 'down')
i_threshold_os = input.int(30, 'Oversold Threshold', minval=0, maxval=49, group = g_rsi)
i_color_os = input.color(#db3240, 'Oversold Background', group = g_rsi, inline = 'os')
i_tcolor_os = input.color(color.white, 'Text', group = g_rsi, inline = 'os')
// --- Individual RSI Settings (MTF Sources) ---
g_rsi1 = 'RSI #1'
i_rsi1_enabled = input.bool(true, title = 'Enabled', group = g_rsi1)
i_rsi1_tf = input.timeframe('5', 'Timeframe', group = g_rsi1)
i_rsi1_len = input.int(30, 'Length', minval = 1, group = g_rsi1)
i_rsi1_src = input.source(close, 'Source', group = g_rsi1) * 10000
v_rsi1 = i_rsi1_enabled ? request.security(syminfo.tickerid, i_rsi1_tf, ta.rsi(i_rsi1_src, i_rsi1_len)) : na
g_rsi2 = 'RSI #2'
i_rsi2_enabled = input.bool(true, title = 'Enabled', group = g_rsi2)
i_rsi2_tf = input.timeframe('15', 'Timeframe', group = g_rsi2)
i_rsi2_len = input.int(30, 'Length', minval = 1, group = g_rsi2)
i_rsi2_src = input.source(close, 'Source', group = g_rsi2) * 10000
v_rsi2 = i_rsi2_enabled ? request.security(syminfo.tickerid, i_rsi2_tf, ta.rsi(i_rsi2_src, i_rsi2_len)) : na
g_rsi3 = 'RSI #3'
i_rsi3_enabled = input.bool(true, title = 'Enabled', group = g_rsi3)
i_rsi3_tf = input.timeframe('60', 'Timeframe', group = g_rsi3)
i_rsi3_len = input.int(30, 'Length', minval = 1, group = g_rsi3)
i_rsi3_src = input.source(close, 'Source', group = g_rsi3) * 10000
v_rsi3 = i_rsi3_enabled ? request.security(syminfo.tickerid, i_rsi3_tf, ta.rsi(i_rsi3_src, i_rsi3_len)) : na
g_rsi4 = 'RSI #4'
i_rsi4_enabled = input.bool(true, title = 'Enabled', group = g_rsi4)
i_rsi4_tf = input.timeframe('240', 'Timeframe', group = g_rsi4)
i_rsi4_len = input.int(30, 'Length', minval = 1, group = g_rsi4)
i_rsi4_src = input.source(close, 'Source', group = g_rsi4) * 10000
v_rsi4 = i_rsi4_enabled ? request.security(syminfo.tickerid, i_rsi4_tf, ta.rsi(i_rsi4_src, i_rsi4_len)) : na
g_rsi5 = 'RSI #5'
i_rsi5_enabled = input.bool(true, title = 'Enabled', group = g_rsi5)
i_rsi5_tf = input.timeframe('D', 'Timeframe', group = g_rsi5)
i_rsi5_len = input.int(30, 'Length', minval = 1, group = g_rsi5)
i_rsi5_src = input.source(close, 'Source', group = g_rsi5) * 10000
v_rsi5 = i_rsi5_enabled ? request.security(syminfo.tickerid, i_rsi5_tf, ta.rsi(i_rsi5_src, i_rsi5_len)) : na
g_rsi6 = 'RSI #6'
i_rsi6_enabled = input.bool(true, title = 'Enabled', group = g_rsi6)
i_rsi6_tf = input.timeframe('W', 'Timeframe', group = g_rsi6)
i_rsi6_len = input.int(30, 'Length', minval = 1, group = g_rsi6)
i_rsi6_src = input.source(close, 'Source', group = g_rsi6) * 10000
v_rsi6 = i_rsi6_enabled ? request.security(syminfo.tickerid, i_rsi6_tf, ta.rsi(i_rsi6_src, i_rsi6_len)) : na
g_rsi7 = 'RSI #7'
i_rsi7_enabled = input.bool(false, title = 'Enabled', group = g_rsi7)
i_rsi7_tf = input.timeframe('W', 'Timeframe', group = g_rsi7)
i_rsi7_len = input.int(30, 'Length', minval = 1, group = g_rsi7)
i_rsi7_src = input.source(close, 'Source', group = g_rsi7) * 10000
v_rsi7 = i_rsi7_enabled ? request.security(syminfo.tickerid, i_rsi7_tf, ta.rsi(i_rsi7_src, i_rsi7_len)) : na
g_rsi8 = 'RSI #8'
i_rsi8_enabled = input.bool(false, title = 'Enabled', group = g_rsi8)
i_rsi8_tf = input.timeframe('W', 'Timeframe', group = g_rsi8)
i_rsi8_len = input.int(30, 'Length', minval = 1, group = g_rsi8)
i_rsi8_src = input.source(close, 'Source', group = g_rsi8) * 10000
v_rsi8 = i_rsi8_enabled ? request.security(syminfo.tickerid, i_rsi8_tf, ta.rsi(i_rsi8_src, i_rsi8_len)) : na
g_rsi9 = 'RSI #9'
i_rsi9_enabled = input.bool(false, title = 'Enabled', group = g_rsi9)
i_rsi9_tf = input.timeframe('W', 'Timeframe', group = g_rsi9)
i_rsi9_len = input.int(30, 'Length', minval = 1, group = g_rsi9)
i_rsi9_src = input.source(close, 'Source', group = g_rsi9) * 10000
v_rsi9 = i_rsi9_enabled ? request.security(syminfo.tickerid, i_rsi9_tf, ta.rsi(i_rsi9_src, i_rsi9_len)) : na
g_rsi10 = 'RSI #10'
i_rsi10_enabled = input.bool(false, title = 'Enabled', group = g_rsi10)
i_rsi10_tf = input.timeframe('W', 'Timeframe', group = g_rsi10)
i_rsi10_len = input.int(30, 'Length', minval = 1, group = g_rsi10)
i_rsi10_src = input.source(close, 'Source', group = g_rsi10) * 10000
v_rsi10 = i_rsi10_enabled ? request.security(syminfo.tickerid, i_rsi10_tf, ta.rsi(i_rsi10_src, i_rsi10_len)) : na
// --- Panel Helper Functions ---
// Function 4: String Position to Constant (Indentation cleaned)
f_StrPositionToConst(_p) =>
switch _p
'Top Left' => position.top_left
'Top Right' => position.top_right
'Top Center' => position.top_center
'Middle Left' => position.middle_left
'Middle Right' => position.middle_right
'Middle Center' => position.middle_center
'Bottom Left' => position.bottom_left
'Bottom Right' => position.bottom_right
'Bottom Center' => position.bottom_center
=> position.bottom_right
// Function 5: Timeframe to Human Readable (Indentation cleaned)
f_timeframeToHuman(_tf) =>
seconds = timeframe.in_seconds(_tf)
if seconds < 60
_tf
else if seconds < 3600
str.tostring(seconds / 60) + 'm'
else if seconds < 86400
str.tostring(seconds / 60 / 60) + 'h'
else
switch _tf
"1D" => "D"
"1W" => "W"
"1M" => "M"
=> str.tostring(_tf)
type TPanel
table src = na
bool vertical_orientation = true
int row = 0
int col = 0
// Method 1: Increment Column (Indentation cleaned)
method incCol(TPanel _panel) =>
if _panel.vertical_orientation
_panel.col += 1
else
_panel.row += 1
// Method 2: Increment Row (Indentation cleaned)
method incRow(TPanel _panel) =>
if not _panel.vertical_orientation
_panel.col += 1
_panel.row := 0
else
_panel.row += 1
_panel.col := 0
// Method 3: Add Cell (Indentation cleaned)
method add(TPanel _panel, string _v1, color _bg1, color _ctext1, string _v2, color _bg2, color _ctext2) =>
table.cell(_panel.src, _panel.col, _panel.row, _v1, text_color = _ctext1, bgcolor = _bg1)
_panel.incCol()
table.cell(_panel.src, _panel.col, _panel.row, _v2, text_color = _ctext2, bgcolor = _bg2)
_panel.incRow()
// Function 6: Background Color
f_bg(_rsi) =>
c_line = na(_rsi) ? i_color_mid :
_rsi >= i_threshold_ob ? i_color_ob :
_rsi >= i_threshold_uptrend ? i_color_uptrend :
_rsi <= i_threshold_os ? i_color_os :
_rsi <= i_threshold_downtrend ? i_color_downtrend :
i_color_mid
// Function 7: Text Color
f_rsi_text_color(_rsi) =>
c_line = na(_rsi) ? i_tcolor_mid :
_rsi >= i_threshold_ob ? i_tcolor_ob :
_rsi >= i_threshold_uptrend ? i_tcolor_uptrend :
_rsi <= i_threshold_os ? i_tcolor_os :
_rsi <= i_threshold_downtrend ? i_tcolor_downtrend :
i_tcolor_mid
f_formatRsi(_rsi) => na(_rsi) ? 'N/A' : str.tostring(_rsi, '0.00')
// --- Panel Execution Logic ---
if barstate.islast
v_panel = TPanel.new(vertical_orientation = i_orientation == 'Vertical')
v_max_rows = 20
v_panel.src := table.new(f_StrPositionToConst(i_position), v_max_rows, v_max_rows, border_width = i_border_width, border_color = i_color_border)
if i_showHeaders
v_panel.add('TF', i_color_header_bg, i_color_header_text, 'RSI', i_color_header_bg, i_color_header_text)
if i_rsi1_enabled
v_panel.add(f_timeframeToHuman(i_rsi1_tf), i_color_tf_bg, i_color_tf_text, f_formatRsi(v_rsi1), f_bg(v_rsi1), f_rsi_text_color(v_rsi1))
if i_rsi2_enabled
v_panel.add(f_timeframeToHuman(i_rsi2_tf), i_color_tf_bg, i_color_tf_text, f_formatRsi(v_rsi2), f_bg(v_rsi2), f_rsi_text_color(v_rsi2))
if i_rsi3_enabled
v_panel.add(f_timeframeToHuman(i_rsi3_tf), i_color_tf_bg, i_color_tf_text, f_formatRsi(v_rsi3), f_bg(v_rsi3), f_rsi_text_color(v_rsi3))
if i_rsi4_enabled
v_panel.add(f_timeframeToHuman(i_rsi4_tf), i_color_tf_bg, i_color_tf_text, f_formatRsi(v_rsi4), f_bg(v_rsi4), f_rsi_text_color(v_rsi4))
if i_rsi5_enabled
v_panel.add(f_timeframeToHuman(i_rsi5_tf), i_color_tf_bg, i_color_tf_text, f_formatRsi(v_rsi5), f_bg(v_rsi5), f_rsi_text_color(v_rsi5))
if i_rsi6_enabled
v_panel.add(f_timeframeToHuman(i_rsi6_tf), i_color_tf_bg, i_color_tf_text, f_formatRsi(v_rsi6), f_bg(v_rsi6), f_rsi_text_color(v_rsi6))
if i_rsi7_enabled
v_panel.add(f_timeframeToHuman(i_rsi7_tf), i_color_tf_bg, i_color_tf_text, f_formatRsi(v_rsi7), f_bg(v_rsi7), f_rsi_text_color(v_rsi7))
if i_rsi8_enabled
v_panel.add(f_timeframeToHuman(i_rsi8_tf), i_color_tf_bg, i_color_tf_text, f_formatRsi(v_rsi8), f_bg(v_rsi8), f_rsi_text_color(v_rsi8))
if i_rsi9_enabled
v_panel.add(f_timeframeToHuman(i_rsi9_tf), i_color_tf_bg, i_color_tf_text, f_formatRsi(v_rsi9), f_bg(v_rsi9), f_rsi_text_color(v_rsi9))
if i_rsi10_enabled
v_panel.add(f_timeframeToHuman(i_rsi10_tf), i_color_tf_bg, i_color_tf_text, f_formatRsi(v_rsi10), f_bg(v_rsi10), f_rsi_text_color(v_rsi10))
if i_debug
t = table.new(position.middle_center, 21, 20, border_width = i_border_width, border_color = i_color_border)
v_panel2 = TPanel.new(t, vertical_orientation = i_orientation == 'Vertical')
v_panel2.add('Debug', i_color_header_bg, i_color_header_text, 'Colors', i_color_header_bg, i_color_header_text)
// Using a tuple array for debugging colors demo
// Final Syntax Correction: Use array.new() and array.set() to avoid 'tuple()' function reference error
v_rows = 5 // We know we have 5 elements
demo = array.new(v_rows, '') // Initialize array with 5 string elements, will hold string representation of the tuple
// We will push the elements as a *string* representation of the tuple, as Pine v6 allows
// and then parse them inside the loop if necessary.
// To preserve the structure (string, float) without the tuple() function:
// We must define two separate arrays if the 'tuple' function is truly unavailable.
tf_array = array.new(v_rows)
rsi_array = array.new(v_rows)
// Populate the arrays
array.set(tf_array, 0, 'Overbought')
array.set(rsi_array, 0, float(i_threshold_ob))
array.set(tf_array, 1, 'Uptrend')
array.set(rsi_array, 1, float(i_threshold_uptrend))
array.set(tf_array, 2, 'No Trend')
array.set(rsi_array, 2, 50.0)
array.set(tf_array, 3, 'Downtrend')
array.set(rsi_array, 3, float(i_threshold_downtrend))
array.set(tf_array, 4, 'Oversold')
array.set(rsi_array, 4, float(i_threshold_os))
// Iterate over the arrays using a simple index
for i = 0 to v_rows - 1
tf = array.get(tf_array, i)
rsi = array.get(rsi_array, i)
v_panel2.add(tf, i_color_tf_bg, i_color_tf_text, f_formatRsi(rsi), f_bg(rsi), f_rsi_text_color(rsi))
RSI cyclic smoothed ProCyclic Smoothed Relative Strength Indicator - Pro Version
The cyclic smoothed RSI indicator is an enhancement of the classic RSI, adding
additional smoothing according to the market vibration,
adaptive upper and lower bands according to the cyclic memory and
using the current dominant cycle length as input for the indicator.
The cRSI is used like a standard indicator. The chart highlights trading signals where the signal line crosses above or below the adaptive lower/upper bands. It is much more responsive to market moves than the basic RSI.
The indicator uses the dominant cycle as input to optimize signal, smoothing and cyclic memory. To get more in-depth information on the cyclic-smoothed RSI indicator, please read Chapter 4 "Fine tuning technical indicators" of the book "Decoding the Hidden Market Rhythm, Part 1" available at your favorite book store.
Info: Pro Version
This is the actively maintained and continuously enhanced edition of my free, open-source indicator “RSI Cyclic Smoothed v2” which was recognized with a TradingView Editors’ Pick. The Pro Version will remain fully up to date with the latest Pine Script standards and will receive ongoing refinements and feature improvements, all while preserving the core logic and intent of the original tool. The legacy version will continue to be available for code review and educational purposes, but it will no longer receive updates. The legacy open-source version is here
Pro Features V1:
1) Leveraging multi-timeframe analysis
Indicator can be used on one chart by using different time frames at the same time. Read more on TradingView here .
2) Scoring feature added for scanning and filtering
This indicator now provides four distinct scoring states for both bullish and bearish conditions, making it fully compatible with the TradingView Screener .
Each score reflects a specific market phase based on RSI behavior, slope, and crossover signals.
Bullish States (Positive Scores)
+1 – Bull Exhaustion: Price is above the upper threshold and still rising (upsloping).
+2 – Bull Fatigue: Price is above the upper threshold but losing momentum (downsloping).
+3 – Bull Exit: A fresh downward crossover has occurred.
+4 – Recent Bull Exit: A downward crossover occurred within the recent lookback window.
Bearish States (Negative Scores)
–1 – Bear Exhaustion: Price is below the lower threshold and still declining (downsloping).
–2 – Bear Fatigue: Price is below the lower threshold but starting to turn upward (upsloping).
–3 – Bear Exit: A fresh upward crossover has occurred.
–4 – Recent Bear Exit: An upward crossover occurred within the recent lookback window.
The scoring states are shown in the indicator status panel when plotting the indicator on the chart. For a Screener run, use a generic cycle length setting.
How to determine the current active cycle length?
You can use the following additional tools to fine-tune the current dominant cycle length:
1. The advanced dyanmic Cycle Spectrum Scanner
2. The free Detremded Market Rhythm Oscillator
Платный скрипт
Volume Trabar Rank PRO🔑 Key Concept
The indicator uses a rank-based system that counts the number of timeframe periods (lengths) where price has exceeded standard deviation thresholds. The higher the absolute rank value, the more extreme the market condition — indicating stronger potential reversal zones.
⚙️ How The Indicator Works
The indicator operates on a unique multi-length Bollinger Band analysis system:
📏 Multiple Length Analysis
📊 Rank Calculation
Counts how many bands the price has broken through to generate a rank value from -18 to +18
🎨 Visual Coding
Color-coded histogram and threshold lines for quick visual interpretation
Ranking System Explained :
Rank Value Signal Strength Typical Action
+8 to +18 Very Strong Consider Selling / Taking Profit
+7 Strong Watch for reversal signals
+4 to +6 Moderate Caution for new longs
+1 to +3 Weak Monitor market conditions
0 Neutral No extreme condition
-1 to -3 Weak Monitor market conditions
-4 to -6 Moderate Look for entry opportunities
-7 Strong Strong buy signal
-8 to -18 Very Strong High probability buy zone
Advanced Features
✅Filter #1: Volume Weighting
✅Filter #2: Outlier Filtering (IQR)
✅Filter #3: Anti-Repaint Logic
⏰ Multi-Timeframe Analysis
The indicator can simultaneously monitor up to 4 different timeframes (default: 1m, 5m, 15m, 30m), allowing traders to:
Identify confluence zones where multiple timeframes show the same signal
Spot divergences between timeframes for better timing
Generate "READY" signals when all MTF conditions align
🎯 MTF Ready Signal
READY BUY: Triggers when MTF #1, #2, and #3 all show oversold ranks ≤ -5
READY SELL: Triggers when MTF #1, #2, and #3 all show overbought ranks ≥ +5
These signals indicate strong multi-timeframe alignment, providing high-probability trading opportunities.
You can see here :
🛠️ How This Indicator Was Created
Accuracy Improvements (v3.0)
Volume Weighting: Replaced SMA with VWMA for better accuracy
Outlier Filtering: Added IQR-based filtering to remove false signals from price spikes
✨ Key Advantages
🚫 No Repainting
Anti-repaint logic ensures signals don't disappear or change after bar closure, providing reliable backtesting and live trading signals.
📊 Multi-Timeframe
Simultaneously monitor up to 4 timeframes, identifying confluence and divergence for better timing and higher probability trades.
🎯 Volume-Weighted
Uses actual volume data to weight calculations, making signals more representative of true market sentiment and participation.
🔬 Outlier Filtered
IQR-based filtering removes false signals from flash crashes, spikes, and other anomalous price action that doesn't represent real conditions.
⚡ Performance Optimized
Carefully tuned to balance accuracy with speed. Default settings optimize for the top 10% extreme conditions without lag.
🎨 Highly Customizable
Over 30 input parameters allow complete customization of lengths, thresholds, colors, and display options to match your trading style.
I just also add :
5M SCALPING OPTIMAL SETTINGS
Alert 🔥 Extreme Signal (Buy/Sell) - Priority HIGH and ⭐ Mid-Term Signal (Buy/Sell) - Priority NORMAL
MTF Blending Options ( 8 Blending Modes )
Rank Occurrences Table.
Bull and Bear divergence
-------
To get access to this script you have to be a member, or DM on TradingView.
Trend-Momentum Matrix [Pro]The Problem: Analysis Paralysis Traders often struggle to align multiple timeframe signals. You might see momentum on the 5-minute chart but fail to notice a major resistance on the 1-hour, or enter a trend just as it loses strength. Juggling multiple indicators (RSI, Moving Averages, ADX, Clouds) on a single chart creates clutter and confusion.
The Solution: Trend-Momentum Matrix The Trend-Momentum Matrix is a professional-grade dashboard that condenses complex market data into a single, high-contrast heatmap. It allows you to monitor the health of a trend across 7 distinct timeframes simultaneously—from scalping charts to long-term views—without cluttering your screen.
This tool is built on a "Strict Compliance" engine. It does not issue signals based on loose guesses; it waits for a high-probability confluence of three market forces: Price Structure, Momentum Velocity, and Trend Strength.
Core Capabilities
1. Dual-Engine Logic The system runs two independent strategies in parallel to catch both sides of the market:
Compounder Engine (Longs) : Identifies high-growth setups where momentum has entered a "Bullish Power Zone," supported by institutional trend strength.
Breakdown Engine (Shorts): Detects structural failures where momentum is accelerating downward and trend support has been breached.
2. The "Squint Test" Visualization Markets move fast. You shouldn't have to read numbers to know the trend. The Matrix utilizes a Heatmap Architecture:
Solid Green Row: Confirmed Bullish Confluence (Safe to Buy).
Solid Red Row: Confirmed Bearish Breakdown (Safe to Short).
Black/Mixed: Noise or Consolidation (Stay Out).
3. Advanced Noise Filtering: Most indicators fail in choppy markets. This tool uses a multi-layered filter:
Trend Strength (ADX) Filter: Signals are ignored if the prevailing trend is too weak or sideways.
Structure Lock: Signals are strictly gated by key moving averages. If the price structure isn't sound, the signal is suppressed.
4. Donchian Breakout Detection The matrix automatically tracks volatility breakouts. It monitors whether the current price action is expanding beyond historical volatility bands (Upper/Lower Donchian channels) to confirm true breakouts versus fake-outs.
Key Features
Multi-Timeframe Matrix: Monitor 7 timeframes (fully customizable with On/Off toggles) in one corner of your screen.
Auto-Adaptive Interface: The table uses a high-contrast Black background that remains clearly visible on both Light and Dark TradingView themes.
Smart Ribbon: Includes an optional, non-intrusive 8-line Moving Average Ribbon to visualize trend flow directly on the chart.
Strict Exit System: The system is designed to protect capital. The moment the specific conditions for Momentum or Structure are lost, the signal immediately converts to an EXIT or COVER command.
Risk Disclaimer: Trading involves substantial risk and is not suitable for every investor. This tool is an analysis aid and does not constitute financial advice. Past performance is not indicative of future results.
Access: This is an Invite-Only premium indicator. Please contact the author to request access.
Trend Composite (Auto 125d + Daily Overlay)Arthur Hill’s Trend Composite is a multi-factor trend indicator designed to quantify the overall trend strength of any market. Instead of relying on a single moving average or MACD signal, the Trend Composite combines five proven long-term trend measures into one clear score.
The indicator outputs a value from –5 to +5, where:
+5 → Strong uptrend
0 → Neutral / transition zone
–5 → Strong downtrend
A higher score means more trend components are aligned bullishly. A lower score means multiple trend components are pointing bearish.
The Trend Composite evaluates:
Price vs 100-day SMA
Price vs 200-day SMA
50-day SMA vs 200-day SMA
Slope of the 200-day SMA
MACD line vs Signal line
Each component votes +1 (bullish) or –1 (bearish), and the sum becomes the Trend Composite score.
Why This Indicator Works
Trend signals by themselves can be noisy or lagging. When you combine multiple uncorrelated trend measures, you remove false positives and get a cleaner picture of market direction. The result is a powerful, balanced trend filter that works across stocks, crypto, forex, indices, and commodities.
How Traders Use It
Trend filter for long trades: Only trade long when the score is ≥ +3
Avoid chop: Stay out when the score is between –2 and +2
Short setups: Look for –3 or lower
Watchlist ranking: Sort symbols by composite score to find the strongest trends
Stage analysis: Helps identify clear Stage 2 uptrends and Stage 4 downtrends
This makes it ideal for systematic traders, swing traders, trend followers, and anyone building rule-based strategies.
Notes
This is not a buy/sell signal on its own — it’s a trend framework. Combine it with volume patterns, relative strength, volatility contraction, or your preferred entry setup for best results.
ZynIQ Premium/Discount Master v2 - (Lite Pack)Overview
ZynIQ Premium-Discount Master v2 (Lite) is a simplified tool designed to highlight premium/discount zones relative to short-term market structure. It helps traders see when price is stretched above or below fair value, using volatility-adjusted logic suitable for intraday and swing trading.
Key Features
• Automated premium/discount classification
• Volatility-aware thresholds for mild and strong stretch conditions
• Clear visual cues for overbought/oversold environments
• Direction-aware structure to complement trend and momentum tools
• Clean labels marking stretch transitions
• Lightweight visuals suitable for fast charting workflows
Use Cases
• Identifying premium and discount zones for entries or exits
• Assessing when price has deviated significantly from equilibrium
• Combining with breakout or VWAP tools for structured confluence
• Improving trade timing with stretch-based context
Notes
This tool provides premium/discount structure and stretch context. It is not a standalone trading system. Use it along with your own confirmation and risk management rules.
Double Relative Strength IndexBase on Regular Relative Streng Index, I am add 1 more RSI on it.
Using method:
When faster RSI cross lower RSI, price direction move at the same direction. It faster to know the direction of price than just using 1 RSI.
Hope it useful for you.
Ehlers Dominant Cycle Stochastic RSIEhlers Enhanced Cycle Stochastic RSI
OVERVIEW
The Ehlers Enhanced Cycle Stochastic RSI is a momentum oscillator that automatically adjusts its lookback periods based on the dominant market cycle. Unlike traditional Stochastic RSI which uses fixed periods, this indicator detects the current cycle length and scales its calculations—making it responsive in fast markets and stable in slow ones.
The indicator combines John Ehlers' digital signal processing research with the classic Stochastic RSI indicator, then adds a confirmation system to ensure cycle measurements are reliable.
THE THEORY
Traditional oscillators use fixed lookback periods (ie, 14-bar RSI). This creates a fundamental problem: markets don't move in fixed cycles. A 14-period RSI might capture the rhythm perfectly during one market phase, then completely miss it when conditions change.
Ehlers' research demonstrated that price data contains measurable cyclical components. If you can detect the dominant cycle length, you can tune your indicators to match it—like tuning a radio to the right frequency.
This indicator takes that concept further by using three independent cycle detection methods and only trusting the measurement when they agree:
Hilbert Transform — A mathematical technique from signal processing that extracts cycle period from the phase relationship between price and its derivative. It is fast but can be noisy.
Autocorrelation Periodogram — Measures how similar the price series is to lagged versions of itself. The lag with highest correlation reveals the dominant cycle. More stable than Hilbert, but slightly slower to adapt.
Goertzel Algorithm (DFT) — A frequency-domain approach that calculates spectral power at each candidate period. Identifies which frequencies contain the most energy.
When all three methods converge on similar period estimates, confidence is high. When they disagree, the market may be in a non-cyclical or in transition.
HOW IT CHANGES THE STOCHASTIC RSI
Standard Stochastic RSI:
1. Calculate RSI with fixed period (14 bars)
2. Apply Stochastic formula over fixed period (14 bars)
3. Smooth with fixed periods
Ehlers Enhanced Cycle Stochastic RSI:
1. Detect dominant cycle using three methods
2. Confirm cycle measurement (methods must agree)
3. Calculate RSI with period scaled to the detected cycle
4. Apply Stochastic formula with cycle-scaled lookback
5. Smooth adaptively
The result: when the market is cycling quickly (say, 15-bar cycles), the indicator uses shorter periods and responds faster. When the market stretches into longer cycles (such as 40-bar cycles), it automatically extends its lookback to avoid whipsaws.
The Period Multipliers let you fine-tune this relationship:
• 1.0 = Use the full detected cycle (smoother, fewer signals)
• 0.5 = Use half the cycle (more responsive, catches turns earlier)
INTERPRETATION
Reading the Oscillator:
• K Line (Blue) — The main signal line. Moves between 0 and 100.
• D Line (Orange) — Smoothed version of K. Use for confirmation.
• Above 80 — Overbought. Momentum stretched to upside.
• Below 20 — Oversold. Momentum stretched to downside.
• Crossovers — K crossing above D suggests bullish momentum shift; K crossing below D suggests bearish.
Spectral Dilation (optional):
When enabled, applies a bandpass filter before cycle detection. This isolates the frequency band of interest and reduces noise. Useful for:
• Very noisy instruments
• Lower timeframes
• When confidence stays persistently low
MTF Trend Avcısı ema ve supertrendi birleştirip h2-h3-h4 uyumlu olduğu zaman al sat sinyali üreten indikatördür
Penny Stock Golden Cross ScannerPenny Stock Golden Cross Scanner
Scan and track potential breakout opportunities in penny stocks with this Golden Cross Scanner. Designed for traders looking at low-priced, high-volume stocks, this indicator identifies bullish setups using 50, 100, and 200-period moving averages.
Key Features:
✅ Monitors up to 10 user-defined tickers.
✅ Filters penny stocks by maximum price and minimum volume.
✅ Detects proximity to 100 MA and 200 MA for potential golden cross or support/resistance signals.
✅ Assigns signal tiers for each stock (Tier 1 🔥, Tier 2 ⚡, Tier 3 📊) based on price action relative to moving averages.
✅ Customizable scanner table with position options on the chart.
✅ Real-time plotting of 50, 100, and 200 moving averages for context.
✅ Option to display only stocks currently generating signals.
CYCLE RESEARCH PRO - FIXEDCYCLE RESEARCH PRO – Fixed & Cleaned (2025 Edition)
The only public T+21 / T+35 / T+147 cycle tracker that actually works.
Features:
• Exact days since the legendary GME sneeze (28 Jan 2021)
• Highlights active T+21, T+35, and T+147 windows (± user-defined tolerance)
• Live countdown to next cycle date for all three
• FTD Proxy detector (extreme volume + true-range spike)
• Clean wide dashboard – no clutter
• Background glows when any cycle window is active
• Built-in alerts including the infamous “T+21 + FTD” combo
• 100 % non-repainting – uses only confirmed bars
• Zero errors, zero warnings, Pine v6 native
Made famous in the meme-stock wars.
Now cleaned, fixed, and ready for the next run.
Works on GME, AMC, BBBY, any stock or crypto.
Use it. Share it. Profit.
Not financial advice. Just math & cycles.
– Published with love for the apes, degens, and cycle chads everywhere
Erva & nur (stoch rsi)This script builds a custom oscillator that combines WaveTrend, RSI and Stochastic RSI to analyze momentum and overbought/oversold zones.
Bli-Rik (Buy and sell based on RSI & SMA)Basis analysis of Stoch RSI + RSI + 34/200 SMA Signals we have identified and generated Buy and sell indication on chart, This will help to guild buy and sell process...
Traffic Lights - BETA ZONESTraffic Lights - BETA ZONES
Overview
The Traffic Light indicator is a simple, visual tool designed to help traders gauge market bias, trend strength, and momentum at a glance. It displays three rows of colored dots (like a traffic light) in a separate pane below your chart:
• Green: Bullish signal (go/buy bias).
• Red: Bearish signal (stop/sell bias).
• Orange: Neutral or caution (mixed/uncertain conditions).
This indicator combines price action (via EMA positioning), trend direction (via RSI), and momentum expansion (via RSI + MACD histogram) to provide a layered view of the market. When all three rows align as green or red, it generates Buy or Sell labels on the main chart for potential entry signals.
It's non-repainting in its core logic (Row 2 uses delayed RSI comparison to avoid noise), making it reliable for live trading. Best used on trending markets like forex, stocks, or crypto on timeframes from 15M to Daily.
How It Works
The indicator evaluates three independent "rows" of conditions, each represented by a colored dot:
1. Row 1: Price Action Signal (EMA Touch) This row assesses the overall trend bias based on price's position relative to a slow EMA (default: 50-period).
o Green: Price is cleanly above the EMA (bullish bias).
o Red: Price is cleanly below the EMA (bearish bias).
o Orange: Price is "touching" or within a volatility buffer around the EMA (neutral/caution). The "touch zone" is defined by ATR padding, which can be toggled off for a stricter (green/red only) mode.
2. Row 2: Buyers/Sellers Trend (RSI) This row tracks the underlying trend of buyer/seller strength using RSI (default: 14-period on close). To reduce noise and repainting, it uses a delayed comparison (RSI vs. RSI ):
o Green: RSI is rising (buyers gaining strength).
o Red: RSI is falling (sellers gaining strength). No orange here—it's purely directional.
3. Row 3: Buyers/Sellers Signal (RSI + MACD Histogram) This row focuses on momentum expansion, requiring alignment across RSI zones and MACD histogram:
o Green: RSI > 50 (bull zone), MACD hist > 0 (positive), and histogram is expanding upward.
o Red: RSI < 50 (bear zone), MACD hist < 0 (negative), and histogram is expanding downward.
o Orange: Any mismatch (e.g., pullbacks, consolidations, or weak momentum). MACD defaults: Fast=12, Slow=26, Signal=9.
Signals
• Buy Signal: Triggers a "Buy" label below the bar when all three rows turn green for the first time (crossover from non-aligned).
• Sell Signal: Triggers a "Sell" label above the bar when all three rows turn red for the first time. These are conservative signals—use them for trend confirmation or entries in alignment with your strategy. They don't repaint once fired.
Inputs & Customization
All inputs are grouped for easy tweaking:
• Row 1: Price Action Signal
o Slow EMA Length (default: 50): Adjusts the trend baseline.
o EMA Timeframe (default: empty/current): Use a higher timeframe (e.g., "240" for 4H) for multi-timeframe analysis.
o Enable Orange 'Touch' Zone (default: true): Toggle for strict (green/red only) vs. touch mode.
o ATR Length (default: 3): Volatility period for touch padding.
o Touch Padding (ATR mult, default: 0.15): Widens the orange buffer; set to 0 for wick-touch only.
• Row 2: Buyers/Sellers Trend (RSI)
o RSI Length (default: 14): Period for RSI calculation.
o RSI Source (default: close): Change to high/low/open for different sensitivities.
• Row 3: Buyers/Sellers Signal (RSI + MACD hist)
o MACD Fast/Slow/Signal Lengths (defaults: 12/26/9): Standard MACD settings.
Usage Tips
• Trend Trading: Wait for all-green for long entries or all-red for shorts. Use in conjunction with support/resistance.
• Scalping/Intraday: Enable orange touch zone for more nuance in choppy markets; disable for cleaner signals in trends.
• Multi-Timeframe: Set Row 1 EMA to a higher TF for "big picture" bias while keeping others on current.
• Risk Management: Always combine with stop-losses (e.g., below recent lows for buys). Backtest on your asset/timeframe.
• Limitations: In ranging markets, orange dots may dominate—pair with volatility filters like ADX. Not a standalone system; use as a confirmation tool.
If you have feedback or suggestions, drop a comment below! Happy trading 🚦
Multi-Timeframe RSI Table (Movable) by AKIt as a Multi Time Frame RSI (Movable) by AK
It has RSI value from 5 min to 1 month timeframe.
Green indicates RSI above 60 - Yellow indicates RSI Below 40
Marumaroo's RSI + MFI (가격과 거래량의 이중 체크)매매할 때 RSI랑 MFI를 같이 보는데, 지표창 두 개 띄우기 귀찮아서 하나로 합쳤습니다.
RSI(가격)만 보면 가짜 반등에 속을 때가 많은데, MFI(거래량)랑 같이 보면 다이버전스나 휩소 걸러내기가 훨씬 수월합니다.
특징:
보기 편함: RSI는 빨강, MFI는 회색입니다.
배경색 알림: 과매수(80 이상) 구간은 빨간 배경, 과매도(20 이하) 구간은 초록 배경이 뜹니다. 한눈에 파악하기 좋습니다.
복잡한 기능 다 빼고 깔끔하게 만들었으니 필요하신 분 쓰세요.
I combined RSI and MFI into a single chart to save screen space and filter out fake signals.
Checking Money Flow (MFI) alongside Price Action (RSI) helps in spotting divergences and avoiding traps.
Features:
Clean Look: RSI is Red, MFI is Gray.
Background Colors: automatically highlights Overbought (>80) zones in Red and Oversold (<20) zones in Green.
Simple and lightweight script. Hope it helps!
Relative Strength Heatmap [BackQuant]Relative Strength Heatmap
A multi-horizon RSI matrix that compresses 20 different lookbacks into a single panel, turning raw momentum into a visual “pressure gauge” for overbought and oversold clustering, trend exhaustion, and breadth of participation across time horizons.
What this is
This indicator builds a strip-style heatmap of 20 RSIs, each with a different length, and stacks them vertically as colored tiles in a single pane. Every tile is colored by its RSI value using your chosen palette, so you can see at a glance:
How many “fast” versus “slow” RSIs are overbought or oversold.
Whether momentum is concentrated in the short lookbacks or spread across the whole curve.
When momentum extremes cluster, signalling strong market pressure or exhaustion.
On top of the tiles, the script plots two simple breadth lines:
A white line that counts how many RSIs are above 70 (overbought cluster).
A black line that counts how many RSIs are below 30 (oversold cluster).
This turns a single symbol’s RSI ladder into a compact “market pressure gauge” that shows not only whether RSI is overbought or oversold, but how many different horizons agree at the same time.
Core idea
A single RSI looks at one length and one timescale. Markets, however, are driven by flows that operate on multiple horizons at once. By computing RSI over a ladder of lengths, you approximate a “term structure” of strength:
Short lengths react to immediate swings and very recent impulses.
Medium lengths reflect swing behaviour and local trends.
Long lengths reflect structural bias and higher timeframe regime.
When many lengths agree, for example 10 or more RSIs all above 70, it suggests broad participation and strong directional pressure. When only a few fast lengths stretch to extremes while longer ones stay neutral, the move is more fragile and more likely to mean-revert.
This script makes that structure visible as a heatmap instead of forcing you to run many separate RSI panes.
How it works
1) Generating RSI lengths
You control three parameters in the calculation settings:
RS Period – the base RSI length used for the shortest strip.
RSI Step – the amount added to each successive RSI length.
RSI Multiplier – a global scaling factor applied after the step.
Each of the 20 RSIs uses:
RSI length = round((base_length + step × index) × multiplier) , where the index goes from 0 to 19.
That means:
RSI 1 uses (len + step × 0) × mult.
RSI 2 uses (len + step × 1) × mult.
…
RSI 20 uses (len + step × 19) × mult.
You can keep the ladder dense (small step and multiplier) or stretch it across much longer horizons.
2) Heatmap layout and grouping
Each RSI is plotted as an “area” strip at a fixed vertical level using histbase to stack them:
RSI 1–5 form Group 1.
RSI 6–10 form Group 2.
RSI 11–15 form Group 3.
RSI 16–20 form Group 4.
Each group has a toggle:
Show only Group 1 and 2 if you care mainly about fast and medium horizons.
Show all groups for a full spectrum from very short to very long.
Hide any group that feels redundant for your workflow.
The actual numeric RSI values are not plotted as lines. Instead, each strip is drawn as a horizontal band whose fill color represents the current RSI regime.
3) Palette-based coloring
Each tile’s color is driven by the RSI value and your chosen palette. The script includes several palettes:
Viridis – smooth green to yellow, good for subtle reading.
Jet – strong blue to red sequence with high contrast.
Plasma – purple through orange to yellow.
Custom Heat – cool blues to neutral grey to hot reds.
Gray – grayscale from white to black for minimalistic layouts.
Cividis, Inferno, Magma, Turbo, Rainbow – additional scientific and rainbow-style maps.
Internally, RSI values are bucketed into ranges (for example, below 10, 10–20, …, 90–100). Each bucket maps to a unique colour for that palette. In all schemes, low RSI values are mapped to the “cold” or darker side and high RSI values to the “hot” or brighter side.
The result is a true momentum heatmap:
Cold or dark tiles show low RSI and oversold or compressed conditions.
Mid tones show neutral or mid-range RSI.
Warm or bright tiles show high RSI and overbought or stretched conditions.
4) Bull and bear breadth counts
All 20 RSI values are collected into an array each bar. Two counters are then calculated:
Bull count – how many RSIs are above 70.
Bear count – how many RSIs are below 30.
These are plotted as:
A white line (“RSI > 70 Count”) for the overbought cluster.
A black line (“RSI < 30 Count”) for the oversold cluster.
If you enable the “Show Bull and Bear Count” option, you get an immediate reading of how many of the 20 horizons are stretched at any moment.
5) Cluster alerts and background tagging
Two alert conditions monitor “strong cluster” regimes:
RSI Heatmap Strong Bull – triggers when at least 10 RSIs are above 70.
RSI Heatmap Strong Bear – triggers when at least 10 RSIs are below 30.
When one of these conditions is true, the indicator can tint the background of the chart using a soft version of the current palette. This visually marks stretches where momentum is extreme across many lengths at once, not just on a single RSI.
What it plots
In one oscillator window, the indicator provides:
Up to 20 horizontal RSI strips, each representing a different RSI length.
Color-coded tiles reflecting the current RSI value for each length.
Group toggles to show or hide each block of five RSIs.
An optional white line that counts how many RSIs are above 70.
An optional black line that counts how many RSIs are below 30.
Optional background highlights when the number of overbought or oversold RSIs passes the strong-cluster threshold.
How it measures breadth and pressure
Single-symbol breadth
Breadth is usually defined across a basket of symbols, such as how many stocks advance versus decline. This indicator uses the same concept across time horizons for a single symbol. The question becomes:
“How many different RSI lengths are stretched in the same direction at once?”
Examples:
If only 2 or 3 of the shortest RSIs are above 70, bull count stays low. The move is fast and local, but not yet broadly supported.
If 12 or more RSIs across short, medium and long lengths are above 70, the bull count spikes. The move has broad momentum and strong upside pressure.
If 10 or more RSIs are below 30, bear count spikes and you are in a broad oversold regime.
This is breadth of momentum within one market.
Market pressure gauge
The combination of heatmap tiles and breadth lines acts as a pressure gauge:
High bull count with warm colors across most strips indicates strong upside pressure and crowded long positioning.
High bear count with cold colors across most strips indicates strong downside pressure and capitulation or forced selling.
Low counts with a mixed heatmap indicate neutral pressure, fragmented flows, or range-bound conditions.
You can treat the strong-cluster alerts as “extreme pressure” signals. When they fire, the market is heavily skewed in one direction across many horizons.
How to read the heatmap
Horizontal patterns (through time)
Look along the time axis and watch how the colors evolve:
Persistent hot tiles across many strips show sustained bullish pressure and trend strength.
Persistent cold tiles across many strips show sustained bearish pressure and weak demand.
Frequent flipping between hot and cold colours indicates a choppy or mean-reverting environment.
Vertical structure (across lengths at one bar)
Focus on a single bar and read the column of tiles from top to bottom:
Short RSIs hot, long RSIs neutral or cool: early trend or short-term fomo. Price has moved fast, longer horizons have not caught up.
Short and long RSIs all hot: mature, entrenched uptrend. Broad participation, high pressure, greater risk of blow-off or late-entry vulnerability.
Short RSIs cold but long RSIs mid to high: pullback in a higher timeframe uptrend. Dip-buy and continuation setups are often found here.
Short RSIs high but long RSIs low: countertrend rallies within a broader downtrend. Good hunting ground for fades and short entries after a bounce.
Bull and bear breadth lines
Use the two lines as simple, numeric breadth indicators:
A rising white line shows more RSIs pushing above 70, so bullish pressure is expanding in breadth.
A rising black line shows more RSIs pushing below 30, so bearish pressure is expanding in breadth.
When both lines are low and flat, few horizons are extreme and the market is in mid-range territory.
Cluster zones
When either count crosses the strong threshold (for example 10 out of 20 RSIs in extreme territory):
A strong bull cluster marks a broadly overbought regime. Trend followers may see this as confirmation. Mean-reversion traders may see it as a late-stage or blow-off context.
A strong bear cluster marks a broadly oversold regime. Downtrend traders see strong pressure, but the risk of sharp short-covering bounces also increases.
Trading applications
Trend confirmation
Use the heatmap and breadth lines as a trend filter:
Prefer long setups when the heatmap shows mostly mid to high RSIs and the bull count is rising.
Avoid fresh shorts when there is a strong bull cluster, unless you are specifically trading exhaustion.
Prefer short setups when the heatmap is mostly low RSIs and the bear count is rising.
Avoid aggressive longs when a strong bear cluster is active, unless you are trading reflexive bounces.
Mean-reversion timing
Treat cluster extremes as exhaustion zones:
Look for reversal patterns, failed breakouts, or order flow shifts when bull count is very high and price starts to stall or diverge.
Look for reflexive bounce potential when bear count is very high and price stops making new lows or shows absorption at the lows.
Use the palette and counts together: hot tiles plus a peaking white line can mark blow-off conditions, cold tiles plus a peaking black line can mark capitulation.
Regime detection and risk toggling
Use the overall shape of the ladder over time:
If upper strips stay warm and lower strips stay neutral or warm for extended periods, the market is in an uptrend regime. You can justify higher risk for long-biased strategies.
If upper strips stay cold and lower strips stay neutral or cold, the market is in a downtrend regime. You can justify higher risk for short-biased strategies or defensive positioning.
If colours and counts flip frequently, you are likely in a range or choppy regime. Consider reducing size or using more tactical, short-term strategies.
Multi-horizon synchronization
You can think of each RSI length as a proxy for a different “speed” of the same market:
When only fast RSIs are stretched, the move is local and less robust.
When fast, medium and slow RSIs align, the move has multi-horizon confirmation.
You can require a minimum bull or bear count before allowing your main strategy to engage.
Spotting hidden shifts
Sometimes price appears flat or drifting, but the heatmap quietly cools or warms:
If price is sideways while many hot tiles fade toward neutral, momentum is decaying under the surface and trend risk is increasing.
If price is sideways while many cold tiles climb back toward neutral, selling pressure is decaying and the tape is repairing itself.
Settings overview
Calculation Settings
RS Period – base RSI length for the shortest strip.
RSI Step – the increment added to each successive RSI length.
RSI Multiplier – scales all generated RSI lengths.
Calculation Source – the input series, such as close, hlc3 or others.
Plotting and Coloring Settings
Heatmap Color Palette – choose between Viridis, Jet, Plasma, Custom Heat, Gray, Cividis, Inferno, Magma, Turbo or Rainbow.
Show Group 1 – toggles RSI 1–5.
Show Group 2 – toggles RSI 6–10.
Show Group 3 – toggles RSI 11–15.
Show Group 4 – toggles RSI 16–20.
Show Bull and Bear Count – enables or disables the two breadth lines.
Alerts
RSI Heatmap Strong Bull – fires when the number of RSIs above 70 reaches or exceeds the configured threshold (default 10).
RSI Heatmap Strong Bear – fires when the number of RSIs below 30 reaches or exceeds the configured threshold (default 10).
Tuning guidance
Fast, tactical configurations
Use a small base RS Period, for example 2 to 5.
Use a small RSI Step, for tight clustering around the fast horizon.
Keep the multiplier near 1.0 to avoid extreme long lengths.
Focus on Group 1 and Group 2 for intraday and short-term trading.
Swing and position configurations
Use a mid-range RS Period, for example 7 to 14.
Use a moderate RSI Step to fan out into slower horizons.
Optionally use a multiplier slightly above 1.0.
Keep all four groups enabled for a full view from fast to slow.
Macro or higher timeframe configurations
Use a larger base RS Period.
Use a larger RSI Step so the top of the ladder reaches very slow lengths.
Focus on Group 3 and Group 4 to see structural momentum.
Treat clusters as regime markers rather than frequent trading signals.
Notes
This indicator is a contextual tool, not a standalone trading system. It does not model execution, spreads, slippage or fundamental drivers. Use it to:
Understand whether momentum is narrow or broad across horizons.
Confirm or filter existing signals from your primary strategy.
Identify environments where the market is crowded into one side.
Distinguish between isolated spikes and truly broad pressure moves.
The Relative Strength Heatmap is designed to answer a simple but powerful question:
“How many versions of RSI agree with what I am seeing on the chart?”
By compressing those answers into a single panel with clear colour coding and breadth lines, it becomes a practical, visual gauge of momentum breadth and market pressure that you can overlay on any trading framework.
Magic Equity Trend & PivotsMagic Equity Trend & Pivots is a robust technical analysis engine designed specifically for equity and index traders. It serves as a comprehensive "Trend & Level" companion, combining institutional Pivot Points with a proprietary EMA trend filtering system to identify high-probability setups.
How the Magic Works
This indicator simplifies complex market data into a clear visual workflow:
1. The Magic Equity Trend (Trend Identification) The script uses a weighted system to determine the dominant market direction:
Bullish Trend: Price holds above the primary Trend SMA + a Volatility Buffer (Green Zone).
Bearish Trend: Price is rejected below the Trend SMA - Buffer (Red Zone).
No-Trade Zone: When the price is trapped inside the buffer (Gray Channel), the trend is considered weak or ranging.
2. Institutional Pivot Points Price often reacts at hidden levels. This tool calculates and overlays these levels automatically:
Multi-Type Support: Choose between Traditional, Fibonacci, Woodie, Classic, DM, and Camarilla pivots.
Timeframe Smart-Switching: Use fixed timeframes (e.g., Weekly Pivots on a Daily chart) or let the "Auto" mode decide the best reference period for your current view.
Historical Mode: Unlike standard pivots, these can be back-tested visually to see how prices respected levels in the past.
3. Precision Entry & Exit Logic Trade signals are not random; they are based on a strict confluence of "Magic" factors:
Entry Signal: Requires Trend Alignment + Fast/Slow EMA Crossover + RSI Strength (>60) + Relative Volume Spike.
Top-Up (Add-on): Detects low-risk opportunities to add to a position when price pulls back to the EMA10/20 during a strong trend.
Two-Stage Exit: Secures profits using either an ATR Trailing Stop or an Intraday RSI Breakdown, depending on your settings.
4. Divergence & Momentum
RSI Divergence: Automatically plots Regular Bullish and Bearish divergences to warn of potential reversals at tops or bottoms.
Darvas Boxes: Visualizes consolidation ranges to help identify breakouts.
5. Performance Dashboard A data table provides a snapshot of the asset's health:
Mean Reversion: Measures the % distance from key EMAs (10, 20, 50).
RVOL & ADR: Displays Relative Volume and Average Daily Range to gauge volatility.
Performance Tracker: A theoretical summary table showing how the trend signals have performed over the last 1W, 1M, and 1Y periods.
Settings & Customization
Visuals: Fully customizable colors for the Trend Cloud, Pivots, and Backgrounds.
Filters: Toggle specific filters (Volume, RSI, Trend Buffer) to adapt the sensitivity to different asset classes.
Disclaimer: This tool is for educational purposes and technical analysis assistance only. Past performance displayed in the dashboard does not guarantee future results.






















