Volume SMA 9 / 20 / 50This is real time volume average lines having option to select period of volume lines . it not only provides volume with respect to price action but also we can find out real picture of price action pressure. use it with ADX and MACD wisely . only volume spike is not confirmation some times fake breakout , so wait for confirmation and participate at breakout confirmation.
Educational
Micro Futures Risk Calculator (Minimal)risk calculator based off of stop distance. to keep risk consistent for consistent growth
Trap longs - Hamza Naveed// This source code is subject to the terms of the Mozilla Public License 2.0 at mozilla.org
//@version=5
indicator("Trap Longs - Hamza Naveed", max_labels_count = 500, overlay = false, format = format.volume)
g1 = '📊 Net Positions '
g2 = '📈 Moving Averages (VWMA/EMA) '
g3 = '⚙️ Additional Settings '
g4 = '🎚️ Profile '
g5 = '🖥️ Statistics '
g6 = '⚖️ Divergences'
// User inputs - General settings
dtype = input.string('Net Positions', 'Type', options = )
disp = input.string('Candles', 'Display as', options = )
cumu = input.string('Full Data', 'Cumulation', options = )
denom = input.string('Quote Currency', 'Quoted in', options = )
// User inputs - Data Source Settings
binance = input.bool(true, 'Binance USDT.P', inline = 'src')
binance2 = input.bool(true, 'Binance USD.P', inline = 'src')
binance3 = input.bool(true, 'Binance BUSD.P', inline = 'src2')
bitmex = input.bool(true, 'BitMEX USD.P', inline = 'src2')
bitmex2 = input.bool(true, 'BitMEX USDT.P ', inline = 'src3')
kraken = input.bool(true, 'Kraken USD.P', inline = 'src3')
// User inputs - Net Positions
showL = input.bool(true, 'NET LONGS ►', group = g1, inline='l')
showS = input.bool(false, 'NET SHORTS ►', group = g1, inline='s')
showD = input.bool(false, 'NET DELTA ►', group = g1, inline='d')
showR = input.bool(false, 'NET RATIO ►', group = g1, inline='r')
pcolL = input.color(#a5d6a7, '', group = g1, inline = 'l')
ncolL = input.color(#f77c80, '', group = g1, inline = 'l')
lcolL = input.color(#a5d6a7, '━', group = g1, inline = 'l')
pcolS = input.color(#a5d6a7, '', group = g1, inline = 's')
ncolS = input.color(#f77c80, '', group = g1, inline = 's')
lcolS = input.color(#faa1a4, '━', group = g1, inline = 's')
pcolD = input.color(#a5d6a7, '', group = g1, inline = 'd')
ncolD = input.color(#f77c80, '', group = g1, inline = 'd')
lcolD = input.color(#90bff9, '━', group = g1, inline = 'd')
pcolR = input.color(#a5d6a7, '', group = g1, inline = 'r')
ncolR = input.color(#f77c80, '', group = g1, inline = 'r')
lcolR = input.color(#f9d690, '━', group = g1, inline = 'r')
// User inputs - Net Positions EMAs
mat = input.string('VWMA', 'Type', options= , group=g2)
emaL = input.bool(false, 'LONGS ', group=g2, inline='emal')
emaS = input.bool(false, 'SHORTS ', group=g2, inline='emas')
emaD = input.bool(false, 'DELTA ',group=g2, inline='emad')
emaR = input.bool(false, 'RATIO ',group=g2, inline='emar')
emaLl = input.int(100, '', group=g2, inline='emal')
emaSl = input.int(100, '', group=g2, inline='emas')
emaDl = input.int(100, '', group=g2, inline='emad')
emaRl = input.int(100, '', group=g2, inline='emar')
emaLc = input.color(color.rgb(165, 214, 167, 60), '', group=g2, inline='emal')
emaSc = input.color(color.rgb(250, 161, 164, 60), '', group=g2, inline='emas')
emaDc = input.color(color.rgb(144, 191, 249, 60), '', group=g2, inline='emad')
emaRc = input.color(color.rgb(249, 214, 144, 60), '', group=g2, inline='emar')
// User inputs - Additional settings
volhm = input.bool(false, 'Volume HM', group=g3, inline='vol')
volc2 = input.color(color.rgb(49, 121, 245),'', group=g3, inline = 'vol')
offs = input.int (10, 'Label Offset', group=g3)
length = input.int (14, 'Position RSI Length', group=g3)
vlbl = input.bool(true, 'Value Labels', group=g3, inline='lv')
nlbl = input.bool(true, 'Data Labels', group=g3, inline='lv')
wick = input.bool(false, 'Show Candle Wicks', group=g3)
// User inputs - Profile settings
prof = input.bool (false, 'Generate a profile', group=g4)
profsrc = input.string('Net Longs', 'Profile Data', options = , group=g4)
vapct = input.float (70, 'Value Area %', minval = 5, maxval = 95, group = g4)
ori = input.string("Left", 'Position', options = , group = g4)
profSize = input.int (2, 'Node Size', minval = 1, group = g4)
rows = input.int (40, 'Rows', minval = 6, maxval = 500, step = 25, group = g4) - 1
vancol = input.color (color.new(color.blue, 75), 'Node Colors ', group = g4, inline = 'nc')
nvancol = input.color (color.new(color.gray, 75), '━', group = g4, inline = 'nc')
poc = input.bool (false, 'POC', group = g4, inline = 'POC'),
poccol = input.color (color.new(color.red, 50), ' ', group = g4, inline = "POC")
val = input.bool (false, 'VA', group = g4, inline = "VA")
vafill = input.color (color.new(color.blue, 95), ' ', group = g4, inline = 'VA')
// User inputs - Statistics
stats = input.bool(false, 'Show Stats', group = g5)
chg_b = input.int(50, 'Bars Back', group = g5)
tablevpos = input.string('Horizontal', 'Orientation', options= , group = g5)
tablepos = input.string('Bottom Center', 'Position', options= , group = g5)
stat_oi = input.bool(true, 'OI ━', group = g5, inline = 'oi')
stat_nl = input.bool(true, 'NL ━', group = g5, inline = 'nl')
stat_ns = input.bool(true, 'NS ━', group = g5, inline = 'ns')
stat_nd = input.bool(true, 'ND ━', group = g5, inline = 'nd')
stat_oi_c = input.bool(true, 'OI Change ━', group = g5, inline = 'oi')
stat_nl_c = input.bool(true, 'NL Change ━', group = g5, inline = 'nl')
stat_ns_c = input.bool(true, 'NS Change ━', group = g5, inline = 'ns')
stat_nd_c = input.bool(true, 'ND Change ━', group = g5, inline = 'nd')
stat_oi_r = input.bool(true, 'OI RSI', group = g5, inline = 'oi')
stat_nl_r = input.bool(true, 'NL RSI', group = g5, inline = 'nl')
stat_ns_r = input.bool(true, 'NS RSI', group = g5, inline = 'ns')
stat_nd_r = input.bool(true, 'ND RSI', group = g5, inline = 'nd')
// User inputs - Divergence Finder
showdiv = input.bool(false, 'Divergence finder', group = g6)
divsrc = input.string('Net Longs', 'Source', options = , group=g6)
pivotDistance = input.int(5, 'Maximum Distance', minval=0, group=g6)
leftPivot = input.int(8, 'Lookback Bars Left', minval=1, group=g6)
rightPivot = input.int(8, 'Lookback Bars Right', minval=1, group=g6)
pHH_npLH = input.bool(true, 'Price HH + Data LH', group = g6, inline='div1')
pLH_npHH = input.bool(true, 'Price LH + Data HH', group = g6, inline='div2')
pLL_npHL = input.bool(true, 'Price LL + Data HL ', group = g6, inline='div3')
pHL_npLL = input.bool(true, 'Price HL + Data LL ', group = g6, inline='div4')
pHH_npLHcol = input.color(color.red, '', group = g6, inline='div1')
pLH_npHHcol = input.color(color.red, '', group = g6, inline='div2')
pLL_npHLcol = input.color(color.green, '', group = g6, inline='div3')
pHL_npLLcol = input.color(color.green, '', group = g6, inline='div4')
// Getting OI data
mex = syminfo.basecurrency=='BTC' ? 'XBT' : string(syminfo.basecurrency)
= request.security('BINANCE' + ":" + string(syminfo.basecurrency) + 'USDT.P_OI', timeframe.period, [close-close , close], ignore_invalid_symbol = true)
= request.security('BINANCE' + ":" + string(syminfo.basecurrency) + 'USD.P_OI', timeframe.period, [close-close , close], ignore_invalid_symbol = true)
= request.security('BINANCE' + ":" + string(syminfo.basecurrency) + 'BUSD.P_OI', timeframe.period, [close-close , close], ignore_invalid_symbol = true)
= request.security('BITMEX' + ":" + mex + 'USD.P_OI', timeframe.period, [close-close , close], ignore_invalid_symbol = true)
= request.security('BITMEX' + ":" + mex + 'USDT.P_OI', timeframe.period, [close-close , close], ignore_invalid_symbol = true)
= request.security('KRAKEN' + ":" + string(syminfo.basecurrency) + 'USD.P_OI', timeframe.period, [close-close , close], ignore_invalid_symbol = true)
deltaOI = (binance ? nz(oid1,0) : 0) + (binance2 ? nz(oid2,0)/close : 0) + (binance3 ? nz(oid3,0) : 0) + (bitmex ? nz(oid4,0)/close : 0) + (bitmex2 ? nz(oid5,0)/close : 0) + (kraken ? nz(oid6,0)/close : 0)
OI = (binance ? nz(oi1,0) : 0) + (binance2 ? nz(oi2,0)/close : 0) + (binance3 ? nz(oi3,0) : 0) + (bitmex ? nz(oi4,0)/close : 0) + (bitmex2 ? nz(oi5,0)/close : 0) + (kraken ? nz(oi6,0)/close : 0)
// Conditions for positions entering and exiting
priceUP = close>open
priceDOWN = close0
oiDOWN = deltaOI<0
newlongs = oiUP and priceUP
rektlongs = oiDOWN and priceDOWN
newshorts = oiUP and priceDOWN
rektshorts = oiDOWN and priceUP
// Visible range
vrc = cumu=='Visible Range' ? time > chart.left_visible_bar_time and time <= chart.right_visible_bar_time : true
// Cumulation of positions entering and exiting
longs_entering = ta.cum(newlongs and vrc ? (denom=='Base Currency' ? deltaOI : deltaOI * close) : 0)
longs_exiting = ta.cum(rektlongs and vrc ? (denom=='Base Currency' ? deltaOI : deltaOI * close) : 0)
shorts_entering = ta.cum(newshorts and vrc ? (denom=='Base Currency' ? deltaOI : deltaOI * close) : 0)
shorts_exiting = ta.cum(rektshorts and vrc ? (denom=='Base Currency' ? deltaOI : deltaOI * close) : 0)
// Output data
net_longs = longs_entering - math.abs(longs_exiting)
net_shorts = shorts_entering - math.abs(shorts_exiting)
net_delta = net_longs - net_shorts
net_ratio = net_longs / net_shorts
// Calculating Relative Strength
longs_strength = ta.rsi(net_longs, length)
shorts_strength = ta.rsi(net_shorts, length)
delta_strength = ta.rsi(net_delta, length)
ratio_strength = ta.rsi(net_ratio, length)
oi_strength = ta.rsi(OI, length)
// Calculating candle OHLC
src = dtype=='Net Positions' ? net_longs : longs_strength
OpenL = wick ? ta.sma(src , 2) : src
HighL = ta.highest(src, 1)
LowL = ta.lowest(src, 1)
CloseL = wick ? ta.sma(src, 2) : src
src2 = dtype=='Net Positions' ? net_shorts : shorts_strength
OpenS = wick ? ta.sma(src2 , 2) : src2
HighS = ta.highest(src2, 1)
LowS = ta.lowest(src2, 1)
CloseS = wick ? ta.sma(src2, 2) : src2
src3 = dtype=='Net Positions' ? net_delta : delta_strength
OpenD = wick ? ta.sma(src3 , 2) : src3
HighD = ta.highest(src3, 1)
LowD = ta.lowest(src3, 1)
CloseD = wick ? ta.sma(src3, 2) : src3
src4 = dtype=='Net Positions' ? net_ratio : ratio_strength
OpenR = wick ? ta.sma(src4 , 2) : src4
HighR = ta.highest(src4, 1)
LowR = ta.lowest(src4, 1)
CloseR = wick ? ta.sma(src4, 2) : src4
// Calculating EMAs
Lema = mat=='EMA' ? ta.ema(src, emaLl) : ta.vwma(src, emaLl)
Sema = mat=='EMA' ? ta.ema(src2, emaSl) : ta.vwma(src2, emaSl)
Dema = mat=='EMA' ? ta.ema(src3, emaDl) : ta.vwma(src3, emaDl)
Rema = mat=='EMA' ? ta.ema(src4, emaRl) : ta.vwma(src4, emaRl)
// Conditions
lcondL = showL and (disp=='Line' or disp=='Columns'), ccondL = showL and disp=='Candles'
lcondS = showS and (disp=='Line' or disp=='Columns'), ccondS = showS and disp=='Candles'
lcondD = showD and (disp=='Line' or disp=='Columns'), ccondD = showD and disp=='Candles'
lcondR = showR and (disp=='Line' or disp=='Columns'), ccondR = showR and disp=='Candles'
// Plotting Lines
plot(lcondL ? src : na, title="Net Longs", color=disp=='Line' ? lcolL : (net_longs >0 ? pcolL : ncolL), linewidth=1, style = disp=='Line' ? plot.style_line : disp=='Columns' ? plot.style_columns : na, editable = false)
plot(lcondS ? src2 : na, title="Net Shorts", color=disp=='Line' ? lcolS : (net_shorts >0 ? pcolS : ncolS), linewidth=1, style = disp=='Line' ? plot.style_line : disp=='Columns' ? plot.style_columns : na, editable = false)
plot(lcondD ? src3 : na, title="Net Shorts", color=disp=='Line' ? lcolD : (net_delta >0 ? pcolD : ncolD), linewidth=1, style = disp=='Line' ? plot.style_line : disp=='Columns' ? plot.style_columns : na, editable = false)
plot(lcondR ? src4 : na, title="Net Ratio", color=disp=='Line' ? lcolR : (net_ratio >0 ? pcolR : ncolR), linewidth=1, style = disp=='Line' ? plot.style_line : disp=='Columns' ? plot.style_columns : na, editable = false)
// Plotting Candles
plotcandle(ccondL ? OpenL : na, ccondL ? HighL : na, ccondL ? LowL : na, ccondL ? CloseL : na, "Longs", CloseL>OpenL ? pcolL : ncolL, CloseL>OpenL ? pcolL : ncolL, false, bordercolor = CloseL>OpenL ? pcolL : ncolL)
plotcandle(ccondS ? OpenS : na, ccondS ? HighS : na, ccondS ? LowS : na, ccondS ? CloseS : na, "Shorts", CloseS>OpenS ? pcolS : ncolS, CloseS>OpenS ? pcolS : ncolS, false, bordercolor = CloseS>OpenS ? pcolS : ncolS)
plotcandle(ccondD ? OpenD : na, ccondD ? HighD : na, ccondD ? LowD : na, ccondD ? CloseD : na, "Delta", CloseD>OpenD ? pcolD : ncolD, CloseD>OpenD ? pcolD : ncolD, false, bordercolor = CloseD>OpenD ? pcolD : ncolD)
plotcandle(ccondR ? OpenR : na, ccondR ? HighR : na, ccondR ? LowR : na, ccondR ? CloseR : na, "Ratio", CloseR>OpenR ? pcolR : ncolR, CloseR>OpenR ? pcolR : ncolR, false, bordercolor = CloseR>OpenR ? pcolR : ncolR)
// Plotting EMAs
plot(emaL ? Lema : na, color=emaLc, editable = false)
plot(emaS ? Sema : na, color=emaSc, editable = false)
plot(emaD ? Dema : na, color=emaDc, editable = false)
plot(emaR ? Rema : na, color=emaRc, editable = false)
// Plotting Relative Strength
plot(dtype=='Position RSI' ? 100 : na, color=color.rgb(120, 123, 134, 90), title = 'RSI 100')
plot(dtype=='Position RSI' ? 70 : na, color=color.rgb(120, 123, 134, 72), title = 'RSI 70')
plot(dtype=='Position RSI' ? 50 : na, color=color.rgb(120, 123, 134, 90), title = 'RSI 50')
plot(dtype=='Position RSI' ? 30 : na, color=color.rgb(120, 123, 134, 72), title = 'RSI 30')
plot(dtype=='Position RSI' ? 0 : na, color=color.rgb(120, 123, 134, 90), title = 'RSI 0')
// Volume Heatmap
vol = volume
volmax = ta.highest(volume, 50)
col = color.from_gradient(volume, 0, volmax, chart.bg_color, volc2)
plotshape(time>chart.left_visible_bar_time and volhm, style=shape.square, size=size.normal,location = location.bottom, color=col, editable = false)
// Labels
if vlbl and disp=='Candles'
vLlabel = showL ? label.new(bar_index, CloseL>OpenL ? HighL : LowL, newlongs or rektlongs ? str.tostring(deltaOI, format.volume) : na, size = size.auto, color=color.rgb(255, 255, 255, 100), textcolor = chart.fg_color, style = CloseL>OpenL ? label.style_label_down : label.style_label_up) : na
vSlabel = showS ? label.new(bar_index, CloseS>OpenS ? HighS : LowS, newshorts or rektshorts ? str.tostring(deltaOI, format.volume) : na, size = size.auto, color=color.rgb(255, 255, 255, 100), textcolor = chart.fg_color, style = CloseS>OpenS ? label.style_label_down : label.style_label_up) : na
vDlabel = showD ? label.new(bar_index, CloseD>OpenD ? HighD : LowD, str.tostring(deltaOI, format.volume), size = size.auto, color=color.rgb(255, 255, 255, 100), textcolor = chart.fg_color, style = CloseD>OpenD ? label.style_label_down : label.style_label_up) : na
vRlabel = showR ? label.new(bar_index, CloseR>OpenR ? HighR : LowR, str.tostring(deltaOI, format.volume), size = size.auto, color=color.rgb(255, 255, 255, 100), textcolor = chart.fg_color, style = CloseR>OpenR ? label.style_label_down : label.style_label_up) : na
if nlbl and disp!='Columns'
Llabel = showL ? label.new(bar_index+offs, src, 'NET LONGS', size = size.tiny, color=lcolL, textcolor = color.black, style = label.style_label_left) : na
Slabel = showS ? label.new(bar_index+offs, src2, 'NET SHORTS', size = size.tiny, color=lcolS, textcolor = color.black, style = label.style_label_left) : na
Dlabel = showD ? label.new(bar_index+offs, src3, 'NET DELTA', size = size.tiny, color=lcolD, textcolor = color.black, style = label.style_label_left) : na
Rlabel = showR ? label.new(bar_index+offs, src4, 'NET RATIO', size = size.tiny, color=lcolR, textcolor = color.black, style = label.style_label_left) : na
label.delete(Llabel )
label.delete(Slabel )
label.delete(Dlabel )
label.delete(Rlabel )
// Generating a profile - Code from @KioseffTrading's "Profile Any Indicator" script (used with their permission)
srcp = profsrc=='Net Longs' ? src : profsrc=='Net Shorts' ? src2 : profsrc=='Net Delta' ? src3 : src4
var int timeArray = array.new_int()
var float dist = array.new_float()
var int x2 = array.new_int(rows + 1, 5)
var vh = matrix.new(1, 1)
array.unshift(timeArray, math.round(time))
if prof and time >= chart.left_visible_bar_time and time <= chart.right_visible_bar_time
matrix.add_col(vh)
matrix.set(vh, 0, matrix.columns(vh) - 1, srcp)
if prof and barstate.islast
= switch ori
"Left" =>
=>
calc = (matrix.max(vh) - matrix.min(vh)) / (rows + 1)
for i = 0 to rows
array.push(dist, matrix.min(vh) + (i * calc))
for i = 1 to matrix.columns(vh) - 1
for x = 0 to array.size(dist) - 1
if matrix.get(vh, 0, i) >= matrix.get(vh, 0, i - 1)
if array.get(dist, x) >= matrix.get(vh, 0, i - 1) and array.get(dist, x) <= matrix.get(vh, 0, i)
array.set(x2, x, array.get(x2, x) + profSize)
else
if array.get(dist, x) >= matrix.get(vh, 0, i) and array.get(dist, x) <= matrix.get(vh, 0, i - 1)
array.set(x2, x, array.get(x2, x) + profSize)
boc = array.new_box()
for i = 1 to rows
right = array.get(timeArray, n + array.get(x2, i))
if ori == "Left"
switch math.sign(n - array.get(x2, i))
-1 => right := chart.right_visible_bar_time
=> right := array.get(timeArray, n - array.get(x2, i))
array.push(boc, box.new(pos, array.get(dist, i - 1),
right, array.get(dist, i), xloc = xloc.bar_time, border_color =
nvancol, bgcolor = nvancol
))
if i == rows
array.push(boc, box.new(pos, array.get(dist, array.size(dist) - 1),
right, array.get(dist, array.size(dist) - 1) + calc, xloc = xloc.bar_time, border_color =
nvancol, bgcolor = nvancol
))
array.shift(x2), nx = array.indexof(x2, array.max(x2))
nz = nx - 1, nz2 = 0, nz3 = 0, nz4 = 0
for i = 0 to array.size(x2) - 1
if nz > -1 and nx <= array.size(x2) - 1
switch array.get(x2, nx) >= array.get(x2, nz)
true => nz2 += array.get(x2, nx), nx += 1
=> nz2 += array.get(x2, nz), nz -= 1
else if nz <= -1
nz2 += array.get(x2, nx), nx += 1
else if nx >= array.size(x2)
nz2 += array.get(x2, nz), nz -= 1
if nz2 >= array.sum(x2) * (vapct / 100)
nz3 := nx <= array.size(x2) - 1 ? nx : array.size(x2) - 1, nz4 := nz <= -1 ? 0 : nz
break
for i = nz3 to nz4
box.set_border_color(array.get(boc, i), vancol)
box.set_bgcolor(array.get(boc, i), vancol)
if poc
var pocL = line(na)
y = math.avg(box.get_top(array.get(boc, array.indexof(x2, array.max(x2)))), box.get_bottom(array.get(boc, array.indexof(x2, array.max(x2)))))
if na(pocL)
pocL := line.new(chart.left_visible_bar_time, y, chart.right_visible_bar_time, y, xloc = xloc.bar_time, color = poccol, width = 1)
else
line.set_xy1(pocL, chart.left_visible_bar_time, y)
line.set_xy2(pocL, chart.right_visible_bar_time, y)
if val
var vaup = line(na), var vadn = line(na)
ydn = box.get_bottom(array.get(boc, nz3)), yup = box.get_top(array.get(boc, nz4))
if na(vaup)
vadn := line.new(chart.left_visible_bar_time, ydn, chart.right_visible_bar_time, ydn, xloc = xloc.bar_time, color = vancol, width = 1)
vaup := line.new(chart.left_visible_bar_time, yup, chart.right_visible_bar_time, yup, xloc = xloc.bar_time, color = vancol, width = 1)
else
line.set_xy1(vadn, chart.left_visible_bar_time, ydn), line.set_xy2(vadn, chart.right_visible_bar_time, ydn)
line.set_xy1(vaup, chart.left_visible_bar_time, yup), line.set_xy2(vaup, chart.right_visible_bar_time, yup)
linefill.new(vadn, vaup, vafill)
//Generating tables for Stats
switchpos(tablepos) =>
switch tablepos
'Top Left' => position.top_left
'Top Center' => position.top_center
'Top Right' => position.top_right
'Bottom Left' => position.bottom_left
'Bottom Center' => position.bottom_center
'Bottom right' => position.bottom_right
dataTable = table.new(switchpos(tablepos), columns=15, rows=15, bgcolor=color.rgb(120, 123, 134, 56))
fill_rows(cond, txt, c, r) =>
if cond
table.cell(table_id=dataTable, column = tablevpos=='Horizontal' ? c : 0, row = tablevpos=='Horizontal' ? 0 : r, text = txt, height=0, text_color=color.white, text_halign=text.align_center, text_valign= text.align_center)
if barstate.islast and stats and dtype!='Position RSI'
txt = ' •𝗢𝗜: ' + (denom=='Quote Currency' ? '$' : '') + str.tostring(denom=='Base Currency' ? OI : OI*close, format = format.volume) + ' ' + (denom=='Base Currency' ? str.tostring(string(syminfo.basecurrency)) : '')
txt2 = ' •𝗡𝗟: ' + (denom=='Quote Currency' ? '$' : '') + str.tostring(net_longs, format = format.volume) + ' ' + (denom=='Base Currency' ? str.tostring(string(syminfo.basecurrency)) : '')
txt3 = ' •𝗡𝗦: ' + (denom=='Quote Currency' ? '$' : '') + str.tostring(net_shorts, format = format.volume) + ' ' + (denom=='Base Currency' ? str.tostring(string(syminfo.basecurrency)) : '')
txt4 = ' •𝗡𝗗: ' + (denom=='Quote Currency' ? '$' : '') + str.tostring(net_delta, format = format.volume) + ' ' + (denom=='Base Currency' ? str.tostring(string(syminfo.basecurrency)) : '')
txt5 = ' •𝗢𝗜𝗖: ' + (denom=='Quote Currency' ? '$' : '') + str.tostring(denom=='Base Currency' ? OI-OI : (OI-OI ) * close, format = format.volume) + ' ' + (denom=='Base Currency' ? str.tostring(string(syminfo.basecurrency)) : '')
txt6 = ' •𝗡𝗟𝗖: ' + (denom=='Quote Currency' ? '$' : '') + str.tostring(net_longs - net_longs , format = format.volume) + ' ' + (denom=='Base Currency' ? str.tostring(string(syminfo.basecurrency)) : '')
txt7 = ' •𝗡𝗦𝗖: ' + (denom=='Quote Currency' ? '$' : '') + str.tostring(net_shorts - net_shorts , format = format.volume) + ' ' + (denom=='Base Currency' ? str.tostring(string(syminfo.basecurrency)) : '')
txt8 = ' •𝗡𝗗𝗖: ' + (denom=='Quote Currency' ? '$' : '') + str.tostring(net_delta - net_delta , format = format.volume) + ' ' + (denom=='Base Currency' ? str.tostring(string(syminfo.basecurrency)) : '')
txt9 = ' •𝗢𝗜 𝗥𝗦𝗜: ' + str.tostring(math.round(oi_strength,1))
txt10 = ' •𝗡𝗟 𝗥𝗦𝗜: ' + str.tostring(math.round(longs_strength,1))
txt11 = ' •𝗡𝗦 𝗥𝗦𝗜: ' + str.tostring(math.round(shorts_strength, 1))
txt12 = ' •𝗡𝗗 𝗥𝗦𝗜: ' + str.tostring(math.round(delta_strength, 1))
fill_rows(stat_oi, txt, 0, 0)
fill_rows(stat_nl, txt2, 1, 1)
fill_rows(stat_ns, txt3, 2, 2)
fill_rows(stat_nd, txt4, 3, 3)
fill_rows(stat_oi_c, txt5, 4, 4)
fill_rows(stat_nl_c, txt6, 5, 5)
fill_rows(stat_ns_c, txt7, 6, 6)
fill_rows(stat_nd_c, txt8, 7, 7)
fill_rows(stat_oi_r, txt9, 8, 8)
fill_rows(stat_nl_r, txt10, 9, 9)
fill_rows(stat_ns_r, txt11, 10, 10)
fill_rows(stat_nd_r, txt12, 11, 11)
// Divergence Finder
switchdivsrc(divsrc) =>
switch divsrc
'Net Longs' => src
'Net Shorts' => src2
'Net Delta' => src3
'Net Ratio' => src4
np = switchdivsrc(divsrc)
var priceHigh = array.new_float(0), var priceLow = array.new_float(0)
var priceHighIndex = array.new_int (0), var priceLowIndex = array.new_int (0)
var npHigh = array.new_float(0), var npLow = array.new_float(0)
var npHighIndex = array.new_int (0), var npLowIndex = array.new_int (0)
var priceHighTrend = 0, var priceLowTrend = 0
var npHighTrend = 0, var npLowTrend = 0
bool closeRecentHighs = false, bool closeOldHighs = false
bool closeHighs = false, bool closeRecentLows = false
bool closeOldLows = false, bool closeLows = false
curPriceHigh = ta.pivothigh(close, leftPivot, rightPivot)
curPriceLow = ta.pivotlow (close, leftPivot, rightPivot)
curnpHigh = ta.pivothigh(np, leftPivot, rightPivot)
curnpLow = ta.pivotlow (np, leftPivot, rightPivot)
if not na(curPriceHigh)
array.push(priceHigh, curPriceHigh)
array.push(priceHighIndex, bar_index-rightPivot)
if not na(curPriceLow)
array.push(priceLow, curPriceLow)
array.push(priceLowIndex, bar_index-rightPivot)
if not na(curnpHigh)
array.push(npHigh, curnpHigh)
array.push(npHighIndex, bar_index-rightPivot)
if not na(curnpLow)
array.push(npLow, curnpLow)
array.push(npLowIndex, bar_index-rightPivot)
if showdiv
if array.size(priceHigh) >= 2 and not na(curPriceHigh)
if array.get(priceHigh, array.size(priceHigh)-1) >= array.get(priceHigh, array.size(priceHigh)-2)
priceHighTrend := 1
else
priceHighTrend := -1
if array.size(priceLow) >= 2 and not na(curPriceLow)
if array.get(priceLow, array.size(priceLow)-1) >= array.get(priceLow, array.size(priceLow)-2)
priceLowTrend := 1
else
priceLowTrend := -1
if array.size(npHigh) >= 2 and not na(curnpHigh)
if array.get(npHigh, array.size(npHigh)-1) >= array.get(npHigh, array.size(npHigh)-2)
npHighTrend := 1
else
npHighTrend := -1
if array.size(npLow) >= 2 and not na(curnpLow)
if array.get(npLow, array.size(npLow)-1) >= array.get(npLow, array.size(npLow)-2)
npLowTrend := 1
else
npLowTrend := -1
if array.size(priceHighIndex) >= 2 and array.size(npHighIndex) >=2
closeRecentHighs := math.abs(array.get(priceHighIndex, array.size(priceHighIndex)-1) - array.get(npHighIndex, array.size(npHighIndex)-1)) <= pivotDistance
closeOldHighs := math.abs(array.get(priceHighIndex, array.size(priceHighIndex)-2) - array.get(npHighIndex, array.size(npHighIndex)-2)) <= pivotDistance
closeHighs := closeRecentHighs and closeOldHighs
if array.size(priceLowIndex) >= 2 and array.size(npLowIndex) >=2
closeRecentLows := math.abs(array.get(priceLowIndex, array.size(priceLowIndex)-1) - array.get(npLowIndex, array.size(npLowIndex)-1)) <= pivotDistance
closeOldLows := math.abs(array.get(priceLowIndex, array.size(priceLowIndex)-2) - array.get(npLowIndex, array.size(npLowIndex)-2)) <= pivotDistance
closeLows := closeRecentLows and closeOldLows
bool uptrendExhuastion = closeHighs and priceHighTrend > 0 and npHighTrend < 0 and (not na(curnpHigh) or not na(curPriceHigh))
bool uptrendAbsorption = closeHighs and priceHighTrend < 0 and npHighTrend > 0 and (not na(curnpHigh) or not na(curPriceHigh))
bool downtrendExhuastion = closeLows and priceLowTrend < 0 and npLowTrend > 0 and (not na(curnpLow) or not na(curPriceLow))
bool downtrendAbsorption = closeLows and priceLowTrend > 0 and npLowTrend < 0 and (not na(curnpLow) or not na(curPriceLow))
drawDiv(time1, price1, time2, price2, type) =>
dcol = type == 'Uptrend Exhuastion' ? pHH_npLHcol : type == 'Uptrend Absorption' ? pLH_npHHcol : type == 'Downtrend Exhaustion' ? pLL_npHLcol : type == 'Downtrend Absorption' ? pHL_npLLcol : na
line.new(x1=time1, y1=price1, x2=time2, y2=price2, color=dcol, width=1)
if uptrendAbsorption or uptrendExhuastion and showdiv
highTime1 = array.get(npHighIndex, array.size(npHighIndex)-1)
highPrice1 = array.get(npHigh, array.size(npHigh)-1)
highTime2 = array.get(npHighIndex, array.size(npHighIndex)-2)
highPrice2 = array.get(npHigh, array.size(npHigh)-2)
if uptrendExhuastion and pHH_npLH
drawDiv(highTime1, highPrice1, highTime2, highPrice2, 'Uptrend Exhuastion')
if uptrendAbsorption and pLH_npHH
drawDiv(highTime1, highPrice1, highTime2, highPrice2, 'Uptrend Absorption')
if downtrendAbsorption or downtrendExhuastion and showdiv
lowTime1 = array.get(npLowIndex, array.size(npLowIndex)-1)
lowPrice1 = array.get(npLow, array.size(npLow)-1)
lowTime2 = array.get(npLowIndex, array.size(npLowIndex)-2)
lowPrice2 = array.get(npLow, array.size(npLow)-2)
if downtrendExhuastion and pLL_npHL
drawDiv(lowTime1, lowPrice1, lowTime2, lowPrice2, 'Downtrend Exhuastion')
if downtrendAbsorption and pHL_npLL
drawDiv(lowTime1, lowPrice1, lowTime2, lowPrice2, 'Downtrend Absorption')
TDPOWERSYS vs Market-Cap Weighted Peersfor QIC - UnCut Diamonds team..
to compare one company vs its peers bundled as basket.
editable..
Pullback Master Pro v2Yes, excellent for scalping too when used on lower timeframes (1-15 min):
Why it works for scalping:
Quick pullback identification for fast entries
EMA slope changes catch momentum shifts early
RSI extremes pinpoint overextended moves
Volume spikes confirm momentum entries
Fast signals for quick in-and-out trades
Scalping Setup:
Use on 1-5 minute charts
Set higher timeframe to 15-30 minutes for trend filter
Shorter EMA periods (5-9) for faster signals
Small pullback depth (5-15%) for tighter entries
The indicator's real-time signals and clean visualization make it ideal for rapid scalping decisions.
Pullback Master ProPullback Master Pro - Scalping & Swing Trading Indicator
Perfect for both scalping and swing trading:
For Scalpers (1-5 min charts):
Quick pullback signals with fast EMA response
Real-time RSI/volume confirmation for rapid entries
Clean signals for fast in/out decisions
For Swing Traders (1H-4H charts):
Multi-timeframe trend filtering for higher accuracy
Deep pullback detection for better risk/reward
Sustained momentum signals for longer holds
Core Features:
Pullback detection with customizable depth
Multi-timeframe trend alignment
RSI + Volume + EMA confluence
Adjustable signal display (opacity, position, size)
Always-visible 3×6 data table
Multiple themes and customization options
One indicator for all timeframes - works equally well for quick scalps and strategic swing trades by adjusting the settings.
Macro Risk Sentiment - Intermarket Timing SignalOverview
This indicator builds a composite macro sentiment score by analyzing intermarket relationships between bonds, credit spreads, the US dollar, and volatility. The core premise is that these markets often signal shifts in risk appetite before equities react, providing a timing edge for managing exposure.
When macro conditions favor risk assets, the indicator signals RISK-ON (green). When conditions deteriorate, it signals RISK-OFF (red). This is not a predictive tool but rather a systematic way to assess the current macro environment.
The Problem It Solves
Markets do not move in isolation. Before major equity drawdowns, stress often appears first in credit markets, bonds, and volatility. By monitoring these leading indicators systematically, we can identify periods when holding equity exposure carries elevated risk.
The goal is not to catch every move but to avoid the worst drawdowns by stepping aside when multiple macro factors align negatively.
How It Works
Step 1: Data Collection
The indicator pulls daily data from four key markets:
Risk-On Inputs (positive for equities when rising):
- TLT (20+ Year Treasury Bonds): Rising bonds can signal improving liquidity or flight-to-safety ending
- JNK (High-Yield Corporate Bonds): Rising junk bonds indicate credit conditions improving and risk appetite increasing
Risk-Off Inputs (negative for equities when rising):
- DXY (US Dollar Index): Strong dollar tightens global financial conditions and signals risk-off flows
- VIX (Volatility Index): Elevated VIX indicates fear and hedging demand
Step 2: Z-Score Normalization
Each input trades at different absolute levels, so direct comparison is impossible. The indicator converts each to a z-score: how many standard deviations the current value is from its 252-day (1 year) average.
A z-score of +1 means "unusually high relative to recent history." A z-score of -1 means "unusually low." This puts all inputs on the same scale.
Step 3: Composite Calculation
The macro score combines the normalized inputs:
Macro Score = (TLT z-score + JNK z-score) - (DXY z-score + VIX z-score)
The result is clamped between -1.5 and +1.5 to prevent outliers from dominating, then smoothed with an EMA to reduce noise.
Step 4: Signal Generation
Seven different methods are available for determining when conditions shift:
1. EMA Cross: Classic crossover between smoothed macro and its signal line
2. Slope: Simple direction of the macro trend
3. Momentum: Rate of change exceeding a threshold
4. Session Delta: Comparing today's reading to yesterday's
5. Pivot: Market structure analysis (higher lows vs lower highs)
6. Acceleration: Second derivative (is momentum increasing?)
7. Multi-Confirm: Requires 4 or more methods to agree
Why These Specific Markets?
Bonds (TLT)
Treasury bonds often lead equities at turning points. When institutions rotate into bonds, it signals caution. When they rotate out, it signals risk appetite returning.
Credit (JNK)
High-yield bonds price credit risk faster than equities. Widening credit spreads (falling JNK) often precede equity weakness by days or weeks.
Dollar (DXY)
A strong dollar creates headwinds for multinational earnings, tightens global USD liquidity, and signals defensive positioning globally.
Volatility (VIX)
The options market prices fear before it manifests in price. Sustained elevated VIX readings indicate hedging demand and uncertainty.
Research Application: Weekly Put Selling
One application of this indicator is timing premium-selling strategies. I tested using the EMA Cross method to filter 7-day-to-expiration (7DTE) put sales on ES futures with 90% Profit Target and 600% Stop Loss, only selling puts when the indicator showed RISK-ON.
Results with Macro Filter (2020-2025):
- Trades: 200
- Win Rate: 96.0%
- Total P/L: +$33,636
- Max Drawdown: 2.91%
- Profit Factor: 3.51
Results without Filter (same period):
- Trades: 357
- Win Rate: 96.1%
- Total P/L: +$63,492
- Max Drawdown: 10.30%
- Profit Factor: 2.90
Key Insight:
The filtered approach made less total profit (fewer trades) but reduced maximum drawdown by 72% (from 10.30% to 2.91%). This significantly improves risk-adjusted returns and allows for potentially higher position sizing with confidence.
Note: These results are from external backtesting on actual options data, not the TradingView backtest engine. Past performance does not guarantee future results.
Features
Seven configurable signal methods for different trading styles
Adjustable weights for each data source
Z-score normalization puts all inputs on equal footing
Visual info table showing all metrics at a glance
Background coloring for quick regime identification
Alert conditions for signal changes
Secondary plot showing method-specific metrics
Settings Guide
Macro Settings
Z-Score Lookback (default 252): Period for calculating standard deviations. 252 equals approximately one trading year. Longer periods are more stable but slower to adapt.
Macro EMA (default 7): Smoothing for the raw composite score. Lower values give faster but noisier signals.
Signal EMA (default 8): Secondary smoothing for the signal line. Used primarily in EMA Cross method.
Signal Method
EMA Cross : Recommended starting point. Signals when smoothed macro crosses its signal line.
Slope : Simpler approach based purely on trend direction.
Momentum : Requires rate of change to exceed a threshold.
Session Delta : Compares today to yesterday (daily timeframe focus).
Pivot : Uses market structure (higher lows for bullish, lower highs for bearish).
Acceleration : Measures change in slope (second derivative).
Multi-Confirm : Conservative approach requiring 4+ methods to agree.
Data Sources
Each source can be enabled/disabled and weighted from 0 to 3
Default is equal weighting (1.0) for all four sources
Experiment with emphasizing sources most relevant to your trading (tested on SPX)
How to Use
Basic Interpretation:
Green background / RISK-ON: Macro conditions favor equity exposure
Red background / RISK-OFF: Macro conditions suggest caution
Arrow markers indicate regime changes
For Risk Management:
Use RISK-OFF signals to reduce position size or hedge
Use RISK-ON signals to resume normal exposure
Consider the indicator as one input among many, not a complete system
For Options Strategies:
Avoid selling premium during RISK-OFF periods
Resume premium selling when RISK-ON returns
This approach trades frequency for reduced tail risk
Alert Setup:
Set alerts on "Bullish Turn" and "Bearish Turn" conditions
Receive notifications when the macro regime changes
Research Ideas
This indicator is designed as a research framework. Consider testing:
Different signal methods for your specific strategy
Adding or removing data sources based on what you trade
Varying the z-score lookback for different market regimes
Combining with price-based filters (moving averages, support/resistance)
Using the multi-confirm method for higher-conviction signals only
Limitations
The indicator uses daily data, so intraday signals may lag
Overnight gaps from surprise news cannot be anticipated
False signals will occur, especially in choppy, range-bound markets
The z-score lookback creates a recency bias; what was "normal" a year ago may not be relevant today
Not all drawdowns are preceded by macro deterioration; some come from idiosyncratic events
Past intermarket relationships may not persist in the future
Disclaimer
This indicator is for educational and research purposes only. It does not constitute financial advice.
Past performance does not guarantee future results
The research results shared are from historical backtesting and may not reflect actual trading conditions
Always conduct your own research and due diligence
Consider your personal risk tolerance before making any trading decisions
Never risk more than you can afford to lose
Credits
Intermarket analysis concepts draw from established macro trading principles. The multi-signal approach is original work designed to give users flexibility in how they interpret the macro data.
Argentina Bonds TIR - Sovereign Bond Yield Curves Indicator# Argentina Bonds TIR
A comprehensive indicator that calculates the Internal Rate of Return (IRR/TIR) for Argentine sovereign bonds and projects future price curves at fixed yield levels.
## Features
**Real-time TIR Calculation**
- Calculates current yield based on market price and expected cashflows
- Uses Newton-Raphson iterative method for precise IRR calculation
- Day count convention: Actual/365 with T+1 settlement
**Automatic Currency Conversion**
- Works with any trading currency: ARS, USD MEP (D suffix), USD Cable (C suffix)
- Automatically converts prices using AL30/AL30D/AL30C ratios
- Bonares use MEP conversion, Globales use Cable conversion
**Yield Curve Projections**
- Projects price curves 150 bars into the future (configurable)
- Fixed TIR lines at 7%, 8%, 9%, 10%, 11%, 12% (each toggleable)
- Current TIR line showing price trajectory at current yield
- Custom TIR line with user-defined yield value
**Clear Labeling**
- Labels positioned near current date for easy reading (configurable offset)
- Color-coded lines for quick identification
- Info panel showing bond details, prices, TIR, and exchange rates
## Supported Bonds
**Bonares** (Argentina legislation, USD MEP): AE38, AL29, AL30, AL35, AL41, AN29
**Globales** (Foreign legislation, USD Cable): GD29, GD30, GD35, GD38, GD41, GD46
## How to Use
1. Apply indicator to any supported bond symbol (e.g., BCBA:AL30D, BCBA:GD35C)
2. The indicator auto-detects bond type and currency
3. View current TIR in the info panel
4. Use projected lines to visualize price targets at different yield levels
5. Toggle individual TIR lines on/off as needed
6. Add a custom TIR line for specific yield analysis
## Settings
**Display**: Show/hide current TIR line, projection bars (30-300), label offset in days
**Fixed TIR Lines**: Individual toggles for 7%, 8%, 9%, 10%, 11%, 12%
**Custom TIR**: Enable custom TIR line, set value (%), choose color
**Colors**: Customize colors for all lines
## Info Panel
Shows bond ticker, type (Bonar/Global), trading currency, current price, native price, current TIR percentage, MEP and CCL exchange rates.
---
## Español
Indicador que calcula la Tasa Interna de Retorno (TIR) para bonos soberanos argentinos y proyecta curvas de precios futuros a niveles fijos de rendimiento.
### Características
- Cálculo de TIR en tiempo real usando método Newton-Raphson
- Conversión automática de moneda (ARS, USD MEP, USD Cable)
- Líneas de TIR fijas al 7%, 8%, 9%, 10%, 11%, 12%
- Línea de TIR personalizada configurable
- Panel informativo con detalles del bono y tipos de cambio
### Bonos Soportados
- **Bonares** (USD MEP): AE38, AL29, AL30, AL35, AL41, AN29
- **Globales** (USD Cable): GD29, GD30, GD35, GD38, GD41, GD46
---
**DISCLAIMER**: This indicator is for informational and educational purposes only. Eco Valores S.A. does NOT provide investment advice or recommendations. Consult a qualified financial advisor before making investment decisions.
**AVISO LEGAL**: Este indicador es solo para fines informativos y educativos. Eco Valores S.A. NO brinda asesoramiento ni recomendaciones de inversión. Consulte con un asesor financiero calificado antes de invertir.
RSI Divergence Pro Price Overlay High-Prob v6RSI Divergence Pro — Comprehensive Usage Guide
1) What This Indicator Does (in plain English)
Goal: Detect high-probability reversal (and optionally continuation) points using RSI divergences, then draw clean visual lines on price (red/bearish, green/bullish) and attach a % Strength label to help you quickly decide if it’s worth trading.
Core logic:
• Finds confirmed peaks and valleys using ta.pivothigh and ta.pivotlow.
• Bearish: Price makes Higher High while RSI makes Lower High.
• Bullish: Price makes Lower Low while RSI makes Higher Low.
• Filters for high probability: RSI near OB/OS, min RSI diff, ATR scaling, pivot spacing.
• Draws lines on price chart and attaches % Strength label.
• Alerts trigger only when a new divergence line is drawn.
2) Inputs & What Each One Means
• RSI Period: Shorter = more reactive; longer = smoother.
• Pivot Left/Right: Controls peak/valley confirmation.
• RSI Overbought/Oversold: Default 60/40; tighten for lower TFs.
• Min RSI Divergence: Minimum difference between RSI pivots.
• ATR Length & Min Price Move vs ATR: Ensures structural change.
• Bars Between Pivots: Avoid micro noise and stale signals.
• Hidden Divergence toggle: OFF for reversal; ON for continuation.
3) The % Strength Label — What It Represents
Combines RSI divergence magnitude (60%), Price move vs ATR (30%), OB/OS proximity (10%).
Interpretation:
• 80–100%: A-grade signals.
• 60–79%: Good, tradable with confirmation.
• 40–59%: Caution.
• <40%: Usually skip.
4) High-Probability Trading Workflow (H1)
1. Step 1: Scan & identify the signal.
2. Step 2: Confirm with price action (structure break or engulfing).
3. Step 3: Entry (conservative or aggressive).
4. Step 4: Stop placement (pivot ±0.5×ATR).
5. Step 5: Take profit & management (TP1 1×ATR, TP2 2×ATR, trail).
5) Confluence & Filters
• EMA slope confirmation.
• Structure alignment with S/R zones.
• Volatility regime check.
6) Example Scenarios
• A) Bearish Classic Divergence: HH price + LH RSI, Strength 83%.
• B) Bullish Classic Divergence: LL price + HL RSI, Strength 68%.
• C) Hidden Bullish Divergence: HL price + LL RSI, Strength 75%.
7) Common Pitfalls & How to Avoid Them
• Forcing signals in dead volatility.
• Taking divergences in strong trends without confirmation.
• Ignoring pivot spacing.
8) Tuning for Your Style
• H1 defaults: RSI 10, pivots 5/5, thresholds 60/40.
• M15/M5: thresholds 65/35, min RSI diff 10–12.
• H4/D1: thresholds 58/42, ATR multiple 0.4–0.6.
9) Multi-Asset Notes
• FX majors: overlap session ideal.
• Indices: require engulfing confirmation.
• Crypto: use ATR multiple ≥0.7.
10) Alerts — How to Use Them
• Set alerts Once per bar close.
• Alert names: Bearish RSI Divergence, Bullish RSI Divergence.
11) Backtesting & Forward Testing
• Define rules: entry, stop, TP.
• Track Strength % bins.
12) Troubleshooting & Diagnostics
• No lines? Loosen thresholds.
• Too many lines? Tighten thresholds.
13) Quick Operator’s Checklist
• Signal present?
• Location near S/R?
• Confirmation present?
14) Future Upgrade Options
• Session filter (London–NY overlap).
• EMA slope confirmation.
• Structure-break confirmation.
• Alert text enhancements.
Breakout ProAdvanced breakout/breakdown indicator featuring multi-pattern detection, quality tier scoring (S/A/B/C), strength analysis (0-10), VWAP integration, multi-timeframe filters, and adaptive R-based take-profit/stop-loss framework. Includes comprehensive dashboard with real-time metrics and market regime detection.
Breakout Alert Pro + VWAPAdvanced breakout/breakdown indicator featuring multi-pattern detection, quality tier scoring (S/A/B/C), strength analysis (0-10), VWAP integration, multi-timeframe filters, and adaptive R-based take-profit/stop-loss framework. Includes comprehensive dashboard with real-time metrics and market regime detection.
9/21 EMA Strategy"Disclaimer: I am not a SEBI Registered Investment Advisor. This script is for educational purposes only and should not be considered financial advice. Trading involves significant risk. Please consult your financial advisor before making any investment decisions based on this tool."Trading involves significant risk. This tool is for educational purposes and should be used alongside your own analysis.
World sessionsThe indicator highlights trading sessions of major global exchanges (Tokyo, Hong Kong, Frankfurt, London, New York, Chicago).
It highlights them with horizontal dashed lines from the start to the end of each session. At the session start, it draws a label with the exchange name above the bar, with adjustable height based on ATR.
With gratitude to God the Father, the Lord Jesus Christ - the Son of God, and the Holy Spirit.
// © icman — ic380.com
// Open Source: исходный код открыт (MPL-2.0)
Global Sovereign Spread MonitorIn the summer of 2011, the yield on Italian government bonds rose dramatically while German Bund yields fell to historic lows. This divergence, measured as the BTP-Bund spread, reached nearly 550 basis points in November of that year, signaling what would become the most severe test of the European monetary union since its inception. Portfolio managers who monitored this spread had days, sometimes weeks, of advance warning before equity markets crashed. Those who ignored it suffered significant losses.
The Global Sovereign Spread Monitor is built on a simple but powerful observation that has been validated repeatedly in academic literature: sovereign bond spreads contain forward-looking information about systemic risk that is not fully reflected in equity prices (Longstaff et al., 2011). When investors demand higher yields to hold peripheral government debt relative to safe-haven bonds, they are expressing a view about credit risk, liquidity conditions, and the probability of systemic stress. This information, when properly analyzed, provides actionable signals for traders across all asset classes.
The Science of Sovereign Spreads
The academic study of government bond yield differentials began in earnest following the creation of the European Monetary Union. Codogno, Favero and Missale (2003) published what remains one of the foundational papers in this field, examining why yields on government bonds within a currency union should differ at all. Their analysis, published in Economic Policy, identified two primary drivers: credit risk and liquidity. Countries with higher debt-to-GDP ratios and weaker fiscal positions commanded higher yields, but importantly, these spreads widened dramatically during periods of market stress even when fundamentals had not changed significantly.
This observation led to a crucial insight that Favero, Pagano and von Thadden (2010) explored in depth in the Journal of Financial and Quantitative Analysis. They found that liquidity effects can amplify credit risk during stress periods, creating a feedback loop where rising spreads reduce liquidity, which in turn pushes spreads even higher. This dynamic explains why sovereign spreads often move in non-linear fashion, remaining stable for extended periods before suddenly widening rapidly.
Longstaff, Pan, Pedersen and Singleton (2011) extended this research in their American Economic Review paper by examining the relationship between sovereign credit default swap spreads and bond spreads across multiple countries. Their key finding was that a significant portion of sovereign credit risk is driven by global factors rather than country-specific fundamentals. This means that when spreads widen in Italy, it often reflects broader risk aversion that will eventually affect other asset classes including equities and corporate bonds.
The practical implication of this research is clear: sovereign spreads function as a leading indicator for systemic risk. Aizenman, Hutchison and Jinjarak (2013) confirmed this in their analysis of European sovereign debt default probabilities, finding that spread movements preceded rating downgrades and provided earlier warning signals than traditional fundamental analysis.
How the Indicator Works
The Global Sovereign Spread Monitor translates these academic findings into a systematic framework for monitoring credit conditions. The indicator calculates yield differentials between peripheral government bonds and German Bunds, which serve as the benchmark safe-haven asset in European markets. Italian ten-year yields minus German ten-year yields produce the BTP-Bund spread, the single most important metric for Eurozone stress. Spanish yields minus German yields produce the Bonos-Bund spread, providing a secondary confirmation signal. The transatlantic US-Bund spread captures divergence between the two major safe-haven markets.
Raw spreads are converted to Z-scores, which measure how many standard deviations the current spread is from its historical average over the lookback period. This normalization is essential because absolute spread levels vary over time with interest rate cycles and structural changes in sovereign debt markets. A spread of 150 basis points might have been concerning in 2007 but entirely normal in 2023 following the European debt crisis and subsequent ECB interventions.
The composite index combines these individual Z-scores using weights that reflect the relative importance of each spread for global risk assessment. Italy receives the highest weight because it represents the third-largest sovereign bond market globally and any Italian debt crisis would have systemic implications for the entire Eurozone. Spain provides confirmation of peripheral stress, while the US-Bund spread captures flight-to-quality dynamics between the two primary safe-haven markets.
Regime classification transforms the continuous Z-score into discrete states that correspond to different market environments. The Stress regime indicates that spreads have widened to levels historically associated with crisis periods. The Elevated regime signals rising risk aversion that warrants increased attention. Normal conditions represent typical spread behavior, while the Calm regime may actually signal complacency and potential mean-reversion opportunities.
Retail Trader Applications
For individual traders without access to institutional research teams, the Global Sovereign Spread Monitor provides a window into the macro environment that typically remains opaque. The most immediate application is risk management for equity positions.
Consider a trader holding a diversified portfolio of European stocks. When the composite Z-score rises above 1.0 and enters the Elevated regime, historical data suggests an increased probability of equity market drawdowns in the coming days to weeks. This does not mean the trader must immediately liquidate all positions, but it does suggest reducing position sizes, tightening stop-losses, or adding hedges such as put options or inverse ETFs.
The BTP-Bund spread specifically provides actionable information for anyone trading EUR/USD or European equity indices. Research by De Grauwe and Ji (2013) demonstrated that sovereign spreads and currency movements are closely linked during stress periods. When the BTP-Bund spread widens sharply, the Euro typically weakens against the Dollar as investors question the sustainability of the monetary union. A retail forex trader can use the indicator to time entries into EUR/USD short positions or to exit long positions before spread-driven selloffs occur.
The regime classification system simplifies decision-making for traders who cannot constantly monitor multiple data feeds. When the dashboard displays Stress, it is time to adopt a defensive posture regardless of what individual stock charts might suggest. When it displays Calm, the trader knows that risk appetite is elevated across institutional markets, which typically supports equity prices but also means that any negative catalyst could trigger a sharp reversal.
Mean-reversion signals provide opportunities for more active traders. When spreads reach extreme levels in either direction, they tend to revert toward their historical average. A Z-score above 2.0 that begins declining suggests professional investors are starting to buy peripheral debt again, which historically precedes broader risk-on behavior. A Z-score below minus 1.0 that starts rising may indicate that complacency is ending and risk-off positioning is beginning.
The key for retail traders is to use the indicator as a filter rather than a primary signal generator. If technical analysis suggests a long entry in European stocks, check the sovereign spread regime first. If spreads are elevated or rising, the technical setup becomes higher risk. If spreads are stable or compressing, the technical signal has a higher probability of success.
Professional Applications
Institutional investors use sovereign spread analysis in more sophisticated ways that go beyond simple risk filtering. Systematic macro funds incorporate spread data into quantitative models that generate trading signals across multiple asset classes simultaneously.
Portfolio managers at large asset allocators use sovereign spreads to make strategic allocation decisions. When the composite Z-score trends higher over several weeks, they reduce exposure to peripheral European equities and bonds while increasing allocations to German Bunds, US Treasuries, and other safe-haven assets. This rotation often happens before explicit risk-off signals appear in equity markets, giving these investors a performance advantage.
Fixed income specialists at banks and hedge funds use sovereign spreads for relative value trades. When the BTP-Bund spread widens to historically elevated levels but fundamentals have not deteriorated proportionally, they may go long Italian government bonds and short German Bunds, betting on mean reversion. These trades require careful risk management because spreads can widen further before reversing, but when properly sized they offer attractive risk-adjusted returns.
Risk managers at financial institutions use sovereign spread monitoring as an input to Value-at-Risk models and stress testing frameworks. Elevated spreads indicate higher correlation among risk assets, which means diversification benefits are reduced precisely when they are needed most. This information feeds into position sizing decisions across the entire trading book.
Currency traders at proprietary trading firms incorporate sovereign spreads into their EUR/USD and EUR/CHF models. The relationship between the BTP-Bund spread and EUR weakness is well-documented in academic literature and provides a systematic edge when combined with other factors such as interest rate differentials and positioning data.
Central bank watchers use sovereign spreads to anticipate policy responses. The European Central Bank has demonstrated repeatedly that it will intervene when spreads reach levels that threaten financial stability, most notably through the Outright Monetary Transactions program announced in 2012 and the Transmission Protection Instrument introduced in 2022. Understanding spread dynamics helps investors anticipate these interventions and position accordingly.
Interpreting the Dashboard
The statistics panel provides real-time information that supports both quick assessments and deeper analysis. The composite Z-score is the primary metric, representing the weighted average of all spread Z-scores. Values above zero indicate spreads are wider than their historical average, while values below zero indicate compression. The magnitude matters: a reading of 0.5 suggests modestly elevated stress, while 2.0 or higher indicates conditions similar to historical crisis periods.
The regime classification translates the Z-score into actionable categories. Stress should trigger immediate review of risk exposure and consideration of hedges. Elevated warrants increased vigilance and potentially reduced position sizes. Normal indicates no immediate concerns from sovereign markets. Calm suggests risk appetite may be elevated, which supports risk assets but also creates potential for sharp reversals if sentiment changes.
The percentile ranking provides historical context by showing where the current Z-score falls within its distribution over the lookback period. A reading of 90 percent means spreads are wider than they have been 90 percent of the time over the past year, which is significant even if the absolute Z-score is not extreme. This metric helps identify when spreads are creeping higher before they reach official stress thresholds.
Momentum indicates whether spreads are widening or compressing. Rising momentum during elevated spread conditions is particularly concerning because it suggests stress is accelerating. Falling momentum during stress suggests the worst may be past and mean reversion could be beginning.
Individual spread readings allow traders to identify which component is driving the composite signal. If the BTP-Bund spread is elevated but Bonos-Bund remains normal, the stress may be Italy-specific rather than systemic. If all spreads are widening together, the signal reflects broader flight-to-quality that affects all risk assets.
The bias indicator provides a simple summary for traders who need quick guidance. Risk-Off means spreads indicate defensive positioning is appropriate. Risk-On means spread conditions support risk-taking. Neutral means spreads provide no clear directional signal.
Limitations and Risk Factors
No indicator provides perfect signals, and sovereign spread analysis has specific limitations that users must understand. The European Central Bank has demonstrated its willingness to intervene in sovereign bond markets when spreads threaten financial stability. The Transmission Protection Instrument announced in 2022 specifically targets situations where spreads widen beyond levels justified by fundamentals. This creates a floor under peripheral bond prices and means that extremely elevated spreads may not persist as long as historical patterns would suggest.
Political events can cause sudden spread movements that are impossible to anticipate. Elections, government formation crises, and policy announcements can move spreads by 50 basis points or more in a single session. The indicator will reflect these moves but cannot predict them.
Liquidity conditions in sovereign bond markets can temporarily distort spread readings, particularly around quarter-end and year-end when banks adjust their balance sheets. These technical factors can cause spread widening or compression that does not reflect fundamental credit risk.
The relationship between sovereign spreads and other asset classes is not constant over time. During some periods, spread movements lead equity moves by several days. During others, both markets move simultaneously. The indicator provides valuable information about credit conditions, but users should not expect mechanical relationships between spread signals and subsequent price moves in other markets.
Conclusion
The Global Sovereign Spread Monitor represents a systematic application of academic research on sovereign credit risk to practical trading decisions. The indicator monitors yield differentials between peripheral and safe-haven government bonds, normalizes these spreads using statistical methods, and classifies market conditions into regimes that correspond to different risk environments.
For retail traders, the indicator provides risk management information that was previously available only to institutional investors with access to Bloomberg terminals and dedicated research teams. By checking the sovereign spread regime before executing trades, individual investors can avoid taking excessive risk during periods of elevated credit stress.
For professional investors, the indicator offers a standardized framework for monitoring sovereign credit conditions that can be integrated into broader macro models and risk management systems. The real-time calculation of Z-scores, regime classifications, and component spreads provides the inputs needed for systematic trading strategies.
The academic foundation is robust, built on peer-reviewed research published in top finance and economics journals over the past two decades. The practical applications have been validated through multiple market cycles including the European debt crisis of 2011-2012, the COVID-19 shock of 2020, and the rate normalization stress of 2022.
Sovereign spreads will continue to provide valuable forward-looking information about systemic risk for as long as credit conditions vary across countries and investors respond rationally to changes in default probabilities. The Global Sovereign Spread Monitor makes this information accessible and actionable for traders at all levels of sophistication.
References
Aizenman, J., Hutchison, M. and Jinjarak, Y. (2013) What is the Risk of European Sovereign Debt Defaults? Fiscal Space, CDS Spreads and Market Pricing of Risk. Journal of International Money and Finance, 34, pp. 37-59.
Codogno, L., Favero, C. and Missale, A. (2003) Yield Spreads on EMU Government Bonds. Economic Policy, 18(37), pp. 503-532.
De Grauwe, P. and Ji, Y. (2013) Self-Fulfilling Crises in the Eurozone: An Empirical Test. Journal of International Money and Finance, 34, pp. 15-36.
Favero, C., Pagano, M. and von Thadden, E.L. (2010) How Does Liquidity Affect Government Bond Yields? Journal of Financial and Quantitative Analysis, 45(1), pp. 107-134.
Longstaff, F.A., Pan, J., Pedersen, L.H. and Singleton, K.J. (2011) How Sovereign Is Sovereign Credit Risk? American Economic Review, 101(6), pp. 2191-2212.
Manganelli, S. and Wolswijk, G. (2009) What Drives Spreads in the Euro Area Government Bond Market? Economic Policy, 24(58), pp. 191-240.
Arghyrou, M.G. and Kontonikas, A. (2012) The EMU Sovereign-Debt Crisis: Fundamentals, Expectations and Contagion. Journal of International Financial Markets, Institutions and Money, 22(4), pp. 658-677.
Discipline Sleeping TimeThe Sleeping Time indicator highlights a predefined time window on the chart that represents your sleeping hours. This will help doing backtest easily by filtering out unrealistic result of trades while we are still sleeping.
During the selected period:
- The chart background is softly shaded to visually mark your sleep window
- The first candle of the range is labeled “Sleep”
- The last candle of the range is labeled “Wake Up”
You can also use it for other purpose.
This makes it easy to:
- Visually avoid trading during sleep hours
- Identify when a trading session should be inactive
- Maintain discipline and consistency across different markets and timezones
Key Features:
- Custom Time Range
Define your sleeping hours using a start and end time.
- UTC Offset Selector
Adjust the time window using a UTC offset dropdown (−10 to +13), so the indicator aligns correctly with your local time.
- Clear Visual Markers
Background shading during sleep hours
- Start label: Sleep
- End label: Wake Up
- Customizable Labels
Change label text, size, and style to suit your chart layout.
Best Use Case
Use this indicator to lock in rest time, avoid emotional trades, and respect personal trading boundaries. Because good trades start with good sleep 😴
Advanced Momentum TrackerThe Advanced Momentum Tracker (AMT) is a technical indicator designed to identify high-probability trend reversals and momentum shifts in real-time. Unlike traditional indicators that rely solely on mathematical formulas, AMT analyzes price action structure and historical patterns to detect when market momentum is shifting from bullish to bearish (and vice versa).
Core Methodology:
The indicator tracks consecutive price movements and maintains a comprehensive database of historical momentum patterns. It identifies trend changes by analyzing:
Sequential candle relationships (opens and closes)
Break of key trailing stop levels formed by recent price action
Historical success rates of similar momentum patterns
Key Features
1. Dynamic Levels:
Automatically plots real-time dynamic trailing stop levels based on current momentum
Color-coded lines: Green for bullish momentum, Red for bearish momentum
These levels act as trigger points for potential trend changes
2. Entry Signal Markers:
Clear BUY (↑) and SELL (↓) arrows when momentum shifts are detected
Arrows positioned above/below candles for maximum visibility ,Signals only appear on confirmed trend changes
3. Momentum Score Display:
Shows statistical probability based on historical pattern analysis
Displays strength percentage of current momentum continuation
Helps traders assess confidence level of the current trend
4. Exit Zone Indicator:
Plots recommended exit levels for active positions
Dynamic color coding: Red for long exits, Green for short exits
Warning system (orange) when price breaches exit zones
5. Position Management Filter:
Optional risk filter to avoid trades with excessive distance from trigger level
Customizable position threshold percentage
Helps maintain consistent risk-reward ratios
6. Comprehensive Alert System:
Customizable alert messages for both long and short signals
Configurable alert frequency (once per bar or once per bar close)
Real-time notifications for all signal types
Customization Options-
Visual Settings:
Toggle visibility of current price level, momentum score, and exit zones
Customizable colors for all elements (bullish/bearish themes)
Adjustable line thickness for dynamic levels
Entry Markers:
Custom colors for long and short entry signals
Adjustable arrow distance from candles
Core Parameters:
Historical Depth: Amount of past data to analyze (default: 20,000 bars)
Sensitivity Level: Controls how strong a move must be to trigger signals (default: 4)
Higher values = fewer but stronger signals
Lower values = more signals with earlier entries
Position Management:
Enable/disable position filter
Set maximum acceptable risk threshold as percentage
How It Works:-
Momentum Detection Engine: The script continuously monitors price action, tracking each bullish and bearish leg. It maintains arrays of opens, closes, and counts to build a comprehensive picture of market structure.
Pattern Recognition: When price breaks key levels (minimum/maximum of recent candles based on sensitivity), the indicator recognizes a potential momentum shift.
Statistical Validation: The script compares the current pattern against its historical database to calculate the probability of momentum continuation.
Signal Generation: When a valid trend change is detected (and passes the position filter if enabled), entry signals are displayed with corresponding exit zones.
Best Use Cases:
Swing trading on any timeframe (works on 1m to 1D charts)
Trend reversal identification
Momentum trading strategies
Works on all markets: Forex, Stocks, Crypto, Indices, Commodities etc
Recommended Settings:
Scalping/Day Trading: Sensitivity 2-3, Historical Depth 10,000-20,000
Swing Trading: Sensitivity 3-4, Historical Depth 20,000-30,000
Position Trading: Sensitivity 4-5, Historical Depth 30,000+
Important Notes:
Signals appear only on confirmed bars (not on real-time candles unless confirmed)
The momentum score becomes more accurate as more historical data is processed
Position filter should be adjusted based on the volatility of the instrument being traded
Best used in conjunction with proper risk management and position sizing
What Makes This Indicator Unique:
Unlike indicators that simply apply mathematical formulas to price data, AMT learns from historical price behavior. It doesn't just tell you what happened—it tells you what's likely to happen next based on thousands of similar situations in the past. The statistical momentum score provides an edge that pure technical indicators cannot offer.
Disclaimer: This indicator is a tool for technical analysis and should not be used as the sole basis for trading decisions. Always use proper risk management and combine with your own analysis. Happy Trading !!
CBDR Standard Deviation V2CBDR
Standard Deviation measures how far price statistically deviates from the central bank dealer range before institutional rebalancing occurs. CBDR defines fair value, while standard deviation highlights liquidity expansion zones. Moves into ±2 SD or beyond often signal stop-loss sweeps and inventory imbalance, where institutions favor mean reversion, not breakouts.
CBDR SD Core Checklist
□ Daily IPDA bias defined
□ Clean CBDR formed (Asia / early London)
□ CBDR high & low marked
□ ±1 and ±2 SD levels plotted
□ Liquidity sweep beyond CBDR
□ No high-impact news in session
CBDR SD Reversal Trade Checklist
□ Price taps ±2 SD or ±2.5 SD
□ Clear rejection (wick / displacement)
□ Entry against the expansion, not on breakout
□ Stop placed beyond liquidity extreme
□ TP1: CBDR boundary
□ TP2: CBDR midpoint (mean)
□ TP3 (optional): Opposite CBDR extreme
□ Invalidate if strong trend displacement continues
This reversal model captures institutional fade trades after liquidity is harvested, keeping execution statistical, disciplined, and prop-firm resilient.
Elliott Wave Pattern AnalyzerElliott Wave Pattern Analyzer
Overview
This indicator automatically detects Elliott Wave impulse patterns and diagonal formations on your chart. It analyzes price structure based on classic Elliott Wave rules and displays wave counts with confidence scores, Fibonacci projections, and invalidation levels.
Why I Built This
After reading Glenn Neely's book on Elliott Wave theory, I wanted to put my learning into practice by building something tangible. There's no better way to understand a concept than trying to code it!
I'll be honest – corrective wave patterns (zigzags, flats, triangles, combinations) were simply too complex for me to implement reliably. So instead, I focused on what I could manage: impulse waves and diagonal patterns. Maybe someday I'll tackle the corrections, but for now, this is my humble contribution.
The retracement visualization style was inspired by LuxAlgo's elegant approach – credit where credit is due!
How It Works
1. Wave Detection
The indicator uses pivot points to identify potential 5-wave structures:
WaveRuleWave 2Cannot retrace more than 100% of Wave 1Wave 3Cannot be the shortest among Waves 1, 3, 5Wave 4Should not overlap Wave 1 territory (impulse)Wave 5Completes the motive structure
2. Pattern Types
Impulse Waves
Classic 5-wave motive structure
Wave 3 typically extends (≥1.618 of Wave 1)
Strict mode enforces all Elliott rules
Diagonal Patterns
Ending diagonal (wedge-shaped)
Waves progressively contract
Lines 1-3 and 2-4 converge to an apex
Often signals trend exhaustion
3. Confidence Scoring
Each pattern receives a confidence score (0-100%) based on:
Fibonacci ratio adherence
Wave proportion relationships
Rule compliance
Structural clarity
Only patterns exceeding your threshold (default: 60%) are displayed.
4. Fibonacci Projections
After Wave 5 completion, the indicator projects potential retracement levels:
0.382, 0.500, 0.618, 0.786 of the entire impulse
5. Extension Channel
Connects Wave 0 origin to the retracement low, projecting:
0.618, 1.000, 1.272, 1.618 extensions
Optional extended levels: 2.000, 2.618, 4.236
6. Invalidation Levels
Shows the price level where the wave count becomes invalid – helping you know when your analysis is wrong.
Settings Explained
Impulse Wave Settings
Pivot Length: Sensitivity of wave detection (recommended: 5, 7, 14)
Strict Mode: Enforce all classic Elliott rules
Min Wave 3 Extension: Minimum ratio for Wave 3 (default: 1.618)
Diagonal Wave Settings
Allow Wave 4-1 Overlap: Required for valid diagonals
Extend Trendline: Project diagonal boundaries forward
Projection Settings
Fibonacci Levels: Customize retracement targets
Extension Bars: How far projections extend on chart
Pattern Management
Max Patterns: Limit displayed patterns to reduce clutter
Pattern Lifetime: Auto-remove old patterns after X bars
Use Cases
Trend Trading: Enter on Wave 3 or Wave 5 breakouts
Reversal Spotting: Diagonal completion often signals reversals
Target Setting: Use Fibonacci extensions for take-profit levels
Risk Management: Invalidation levels provide clear stop-loss references
Notes
This indicator uses pivot detection and may repaint – signals are confirmed after the specified pivot length
Designed for educational and analytical purposes, not as a signal generator
Elliott Wave analysis is subjective – this is my algorithmic interpretation
Works best on liquid markets with clear trend structure
Not financial advice – always do your own research
Re-publishing Notice
This indicator was previously blocked due to some house rule violations on my part. I've recently had time to review and fix those issues, and I'm now re-publishing a compliant version. Thanks for your patience!
Feedback Welcome
I'm still learning Elliott Wave theory myself, so if you spot any issues or have suggestions for improvement, please leave a comment. Let's learn together!
Happy trading! 📈
KCP MACD + RSI Overlay [Dr.K.C.Prakash]KCP MACD + RSI Overlay is a price-chart indicator that combines MACD crossovers (momentum change) with RSI strength confirmation.
It gives BUY when momentum turns bullish and RSI shows strength, and SELL when momentum turns bearish with weak RSI—helping filter false signals and trade only higher-quality moves.
KCP VWAP + Previous Day High/Low + CPR [Dr.K.C.Prakash]KCP VWAP + PDH/PDL + CPR Indicator
This indicator combines VWAP, Previous Day High (PDH), Previous Day Low (PDL), and CPR (Pivot, BC, TC) levels for intraday trading.
VWAP shows the fair price and intraday trend direction
PDH & PDL act as strong support and resistance
CPR levels help identify range, breakout, and reversal zones
Displays only today’s levels with clean right-side labels
Best suited for index and stock intraday trading
Use:
Above VWAP → bullish bias | Below VWAP → bearish bias
Price near CPR → range | Break from CPR → trending move
Session By BullancePrime Multi-Session VisualizerThe Session BullancePrime indicator allows you to visualize the major trading sessions (Asia, London, New York) directly on your chart. It provides:
✅ Customizable session times in AM/PM or 24-hour format
✅ Enable/disable each session independently
✅ Background highlighting for each session
✅ Open line, high/low tracking, vertical line, and midline for precise session analysis
✅ Midline centered on the session range, updating in real-time
✅ Fully customizable colors, line styles, and widths
Use it to identify key trading ranges, session overlaps, and potential breakout zones across global markets. Ideal for day traders, swing traders, and anyone looking to analyze session-based price action.






















