TA Checklist and Kontext and VstupKontext a vstup pravidla TA, jednoduché věty pro vlastní vstup a přehled.
Educational
Kadunagra-Pivot Point SuperTrend-trades analysis
📊 Pivot Point SuperTrend Strategy (MA-Filtered, 100% Equity)
This strategy is a trend-following system that combines Pivot Point–based SuperTrend logic with a higher-timeframe Moving Average filter and percentage-based risk control.
---
🔹 Core Logic
1️⃣ Trend Detection (Pivot Point SuperTrend)
Uses pivot highs and lows to calculate a dynamic center line
Builds ATR-based upper and lower bands
Determines market trend:
Bullish trend when price breaks above the trailing band
Bearish trend when price breaks below the trailing band
Trend changes generate:
Buy signal → trend flips from bearish to bullish
Sell signal → trend flips from bullish to bearish
---
2️⃣ Moving Average Trend Filter (User-Selectable)
A single Moving Average is used as a higher-timeframe confirmation
User can select the MA type from a dropdown:
SMA, EMA, WMA, VWMA, RMA, or HMA
Trade rules:
Long trades only when price is above the selected MA
Short trades only when price is below the selected MA
This helps avoid counter-trend trades and improves signal quality.
---
3️⃣ Trade Execution & Position Sizing
Strategy uses 100% of account equity per trade
No pyramiding
Long and short trades are handled symmetrically
---
4️⃣ Risk Management (Percentage Stop-Loss)
Uses a fixed percentage stop-loss
Stop-loss is calculated from the actual entry price:
Long SL → Entry Price − SL%
Short SL → Entry Price + SL%
Ensures consistent risk control across all trades
---
⏱ Recommended Timeframe & Market
✅ Default / Optimized Use Case
Timeframe: 4-Hour (4H)
Market: BTC (Bitcoin)
MA Length (default): 200 EMA
ATR Factor & Period: Tuned for swing-style trend moves
These default parameters are best suited for 4H BTC based on trend behavior and volatility.
---
⚙️ Customization & Flexibility
All parameters are fully adjustable and can be optimized for:
Different timeframes (1H, Daily, etc.)
Other cryptocurrencies or markets
More aggressive or conservative risk profiles
You can modify:
Pivot period
ATR factor & period
MA type and length
Stop-loss percentage
---
🧠 Strategy Style Summary
✔ Trend-following
✔ MA-filtered confirmation
✔ No repaint logic
✔ Works best in trending markets
✔ Suitable for swing trading
Peter's Relative Strength vs VTI (1 year)In Stockcharts.com, I would always view 1-year charts and have a RS line showing relative strength of the stock or ETF I'm looking at relative to VTI. When I moved to TradingView, this information was harder to see, so I made this indicator. It always shows what the stock or ETF has done relative to the wider market over the past 1 year.
Heikin Ashi SMA 9 / 20 / 50 (MTF + Selectable Source)This is simple Heikin ashi value three moving average as 9 / 20 / 50 for clear trend identification . use it wisely with other confirmation .
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.
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')
Gaps-Trendlines-CHOCH-BOS By @crypto_alphabitBINANCE:BTCUSDT
This indicator includes .....
1) Fair value gaps ...
* Bullish gaps
* Bearish gaps
* Automatically removed when the gaps filled
* Gaps color can be changed from setting
2) Recent Trend lines
* Higher trend lines ( from high to high)
* Lower trend lines ( from low to low )
* Higher trend lines breakout ( Bullish Breakout)
* Lower trend lines breakout ( bearish Breakout)
* Coloring breakout candle
* Colors can be changed from setting
* Swing lookback can be changed from setting
* Alert for Bullish Breakout
* Alert for Bearish Breakout
3) COCH & BOS
* Bullish Change of character
* Bearish change of character
* Bullish break of structure
* Bearish break of structure
* Swing lookback can be changed from setting
* Keeping specific number of last drawings
* keeping and removing exact ( CHOCH or BOS) can be managed from setting
* Colors can be changed from setting
* Alert for Bullish CHOCH
* Alert for Bearish CHOCH
* Alert for Bullish BOS
* Alert for Bearish BOS
Thank you for reading .... by @Crypto_alphabit
Range Breakout Statistics [Honestcowboy]⯁ Overview
The Range Breakout Statistics uses a very simple system to detect ranges/consolidating markets. The principle is simple, it looks for areas where the slope of a moving average is flat compared to past values. If the moving average is flat for X amount of bars that's a range and it will draw a box.
The statistics part of the script is a bit more complicated. The aim of this script is to expand analysis of trading signals in a different way than a regular backtest. It also highlights the polyline tool, one of my favorite drawing tools on the tradingview platform.
⯁ Statistics Methods
The script has 2 different modes of analyzing a trading signals strength/robustness. It will do that for 2 signals native to the script.
Upper breakout: first price breakout at top of box, before max bars (100 bars by default)
Lower breakout: first price breakout at bottom of box, before max bars
The analysis methods themselves are straightforward and it should be possible for tradingview community to expand this type of analysis to other trading signals. This script is a demo for this analysis, yet some might still find the native signals helpful in their trading, that's why the script includes alerts for the 2 native signals. I've also added a setting to disable any data gathering, which makes script run faster if you want to automate it.
For both of the analysis methods it uses the same data, just with different calculations and drawing methods. The data set is all past price action reactions to the signals saved in a matrix. Below a chart for explaining this visually.
⯁ Method 1: Averages Projection
The idea behind this is that just showing all price action that happened after signal does not give actionable insights. It's more a spaghetti jumble mess of price action lines. So instead the script averages the data out using 3 different approaches, all selectable in the settings menu.
Geometric Average: useful as it accurately reflects compound returns over time, smoothing out the impact of large gains or losses. Accounts for volatility drift.
Arithmetic Average: a standard average calculation, can be misleading in trading due to volatility drift. It is the most basic form of averaging so I included it.
Median: useful as any big volatility huge moves after a signal does not really impact the mean as it's just the middle value of all values.
These averages are the 2 lines you will find in the middle of the projection. Having a clear difference between a lower break average and upper break average price reaction can signal significance of the trading signal instead of pure chaos.
Outside of this I also included calculations for the maximum and minimum values in the dataset. This is useful for seeing price reactions range to the signal, showing extreme losses or wins are possible. For this range I also included 2 matrices of highs and lows data. This makes it possible to draw a band between the range based on closing price and the one using high/low data.
Below is a visualisation of how the averages data is shown on chart.
⯁ Method 2: Equity Simulation
This method will feel closer to home for traders as it more closely resembles a backtest. It does not include any commissions however and also is just a visualisation of price reaction to a signal. This method will simulate what would happen if you would buy at the breakout point and hold the trade for X amount of bars. With 0 being sell at same bar close. To test robustness I've given the option to visualise Equity simulation not just for 1 simulation but a bunch of simulations.
On default settings it will draw the simulations for 0 bars holding all the way to 10 bars holding. The idea behind it is to check how stable the effect is, to have further confirmation of the significance of the signal. If price simulation line moves up on average for 0 bars all the way to 10 bars holding time that means the signal is steady.
Below is a visualisation of the Equity Simulation.
⯁ Signal filtering
For the boxes themselves where breakouts come from I've included a simple filter based on the size of the box in ATR or %. This will filter out all the boxes that are larger top to bottom than the ATR or % value you setup.
⯁ Coloring of Script
The script includes 5 color themes. There are no color settings or other visual settings in the script, the script themes are simple and always have colors that work well together. Equity simulation uses a gradient based on lightness to color the different lines so it's easier to differentiate them while still upper breaks having a different color than lower breaks.
This script is not created to be used in conjunction with other scripts, it will force you into a background color that matches the theme. It's purpose is a research tool for systematic trading, to analyse signals in more depth.
Metaverse color theme:
⯁ Conclusion
I hope this script will help traders get a deeper understanding of how different assets react to their assets. It should be possible to convert this script into other signals if you know how to code on the platform. It is my intention to make more publications that include this type of analysis. It is especially useful when dealing with signals that do not happen often enough, so a regular backtest is not enough to test their significance.
TDPOWERSYS vs Market-Cap Weighted Peersfor QIC - UnCut Diamonds team..
to compare one company vs its peers bundled as basket.
editable..
Price Compression Scanner (Chartink Logic)Breakout above range high → BUY
🔹 Breakdown below range low → SELL
🔹 Best with volume expansion
🔹 Works well for swing trades & momentum breakouts
Highs
Highest High of last 10 days (ending 1 day agos) < Highest High of previous 10 days
Highest High of last 10 days < Highest High of earlier 10 days
➡️ Lower highs (falling resistance)
Lows
3. Lowest Low of last 10 days > Lowest Low of previous 10 days
4. Lowest Low of last 10 days > Lowest Low of earlier 10 days
Closed Source Strategy TesterAllows you to test an indicator that is closed source (you don't have access to the code). You will need to understand the exposed data elements of the indicator you are testing. This strategy is only looking for a buy, sell, exit long, or exit short to be signals that change from 0 to 1. The stop loss/take profit, if used, are expected to be price values.
I encourage you to copy this code and modify it to your needs for specific indicators.
Gold Pullback Precision ProGold Pullback Precision Pro
EMA slope + pullback strategy designed for gold scalping. Combines trend confirmation (slopes) with precise entries (pullbacks), filtered by HTF direction, volume, and RSI. Shows clear BUY/SELL signals with comprehensive dashboard.
EMA Slope + Pullback Pro IndicatorEMA Slope + Pullback Pro Indicator
Core: EMA trend analysis with automated pullback detection.
Key Features:
3-EMA Slope System (9,20,50) with trend signals
Smart Pullback Monitor with visual alerts
Complete Data Table showing all metrics
Multi-Filter System (timeframe + volume)
What It Does:
Shows EMA trends and strength
Detects price pullbacks to EMA levels
Gives entry signals at EMA support/resistance
Filters signals with higher timeframe trend
Visual:
EMA lines on chart
Pullback zones (colored)
Entry arrows
Data table with live metrics
For: Trend + pullback traders wanting automated EMA analysis.
My Custom IndexA small indicator to create custom index (Max 10 constituents)
This tool allows:
Define upto 10 instruments for creating custom index
Define % contribution for each
Activate / Disable constituents by merely tick/untick
Choose to skip adding weights per constituent, by selecting "Equi Weights"
Display a benchmark index (Selectable)
Normalise the plot so that proper inference can be made
This indicator automatically adjusts for the index plot as and when the constituents got listed on the exchange (or when the first data) is available. So there is a possibility of a "jump" in the graph, when a new constituent got listed. Whenever in time a new constituent is included, a "diamond" sign is placed below to indicate the same.
This code is based on the "Make Your Own Index!" by Stefan @Scheplick. Thanks to him.
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.






















