SURE BTC Macro Key Levels

Key Support/Resistance Levels for Bitcoin

Automatically calculated higher-timeframe support and resistance levels for Bitcoin, based on higher market structure, volume-profile confluence and historical reaction quality.

Latest Data

Data As Of
21.06.2026, 18:00

Latest evaluated close: 21.06.2026, 18:00

Candle window: 21.06.2026, 14:00-21.06.2026, 18:00

Exported: 21.06.2026, 18:18

Next run: 22:15 Europe/Berlin

BTC Close
64.224
Close of the latest evaluated 4h candle.
STH Cost Basis
71.151

Short-Term Holder Realized Price.

As of: 21.06.2026

aggTrades
31.241.665
Number of real Binance aggTrades processed for the trade-by-price volume profile. Lookback: 30d.
Regime
Favorable 62

The current market regime has historically supported 24h reactions at these levels.

Score: 62/100. Above 58 = better than the historical baseline.

As of: 19.06.2026

Active Factors

Puell Multiple: falling for roughly 30 days

value 0,7154 · 46th pct · 30d -18.2% · 19.06.2026

Miner revenue relative to its historical average.

STH SOPR: near 1

value 0,9949 · 31th pct · 30d -0.1% · 19.06.2026

Short-term holder profit/loss around the cost basis.

Reserve Risk: falling for roughly 30 days

value 0,00051 · 5th pct · 30d -17.1% · 19.06.2026

Long-term valuation and holder risk.

MVRV: falling for roughly 30 days

value 1,2 · 10th pct · 30d -14.6% · 19.06.2026

Market value relative to realized value.

NUPL: falling for roughly 30 days

value 0,1669 · 10th pct · 30d -42.2% · 19.06.2026

Network-wide net unrealized profit/loss.

Strong Levels
4 of 12
Number of levels with historically strong reaction quality in the 4h test.
Tolerance
453
Adaptive price tolerance in USD used to merge nearby levels into one zone.

Macro Levels

Compact overview of the currently relevant BTC key levels, including confluence, reaction quality and historical reliability.

Info

Types

1D: horizontal structure level from daily pivots.

1W: horizontal structure level from weekly pivots.

POC/HVN/VAH/VAL: volume-profile confluence from candle profiles or Binance aggTrades.

BMSB: Bull Market Support Band from 20W SMA and 21W EMA.

200D: confluence with the 200-day SMA.

STH: Short-Term Holder realized price as on-chain cost basis.

2T/100k: psychological macro confluence around 100k and 2T market cap.

Range High: rolling 4H/daily range highs as watch context.

Zones

DZ: Decision zone when support and resistance are very close or their zones overlap.

Shadow R: subtle extra resistance above price, including Range High Watch. Not a main ranking level.

Rating

Rating measures only historical reaction quality in the 4h backtest. It uses touches, reaction rate and average favorable move in ATR.

Support strong: at least 5 touches, 68% reaction and 1.20 ATR.

Support decent: at least 3 touches, 55% reaction and 1.00 ATR.

Resistance strong: at least 5 touches, 62% reaction and 1.20 ATR.

Resistance decent: at least 3 touches, 50% reaction and 1.00 ATR.

Weak: tested, but the thresholds for `decent` or `strong` were not reached.

The Touches column shows the same backtest touches used in the rating.

Updated

Support & Resistance Levels

12 Levels
SideLevelPriceZoneTypeRatingReactionATR MoveTouchesBreaks
Support
S1

S1 Support · 63.862

Zone: 63.823-63.900

Context: Support Hold. Watch for hold or reaction.

Rating

strong: 78% reaction, 3.94 ATR, 9 Touches, 2 Breaks.

Confluence

1D: horizontal structure level from daily pivots.

63.86263.823-63.900
1D
strong
78%3.9492
Support
S2

S2 Support · 62.510

Zone: 62.473-62.548

Context: Support Hold. Watch for hold or reaction.

Rating

decent: 67% reaction, 3.37 ATR, 9 Touches, 3 Breaks.

Confluence

1D: horizontal structure level from daily pivots.

62.51062.473-62.548
1D
decent
67%3.3793
Support
S3

S3 Support · 60.000

Zone: 59.964-60.036

Context: Support Hold. Watch for hold or reaction.

Rating

decent: 100% reaction, 3.45 ATR, 3 Touches, 0 Breaks.

Confluence

1D: horizontal structure level from daily pivots.

1W: horizontal structure level from weekly pivots.

60.00059.964-60.036
1D + 1W
decent
100%3.4530
Support
S4

S4 Support · 59.250

Zone: 59.110-59.458

Context: Support Hold. Watch for hold or reaction.

Rating

weak: 100% reaction, 4.01 ATR, 2 Touches, 0 Breaks.

Confluence

1D: horizontal structure level from daily pivots.

VolProf: VAL from real Binance aggTrades (trade-by-price).

59.25059.110-59.458
1D + VAL
weak
100%4.0120
Support
S5

S5 Support · 52.739

Zone: 52.580-52.897

Context: Support Hold. Watch for hold or reaction.

Rating

untested: 0% reaction, 0.00 ATR, 0 Touches, 0 Breaks.

Confluence

1D: horizontal structure level from daily pivots.

1W: horizontal structure level from weekly pivots.

52.73952.580-52.897
1D + 1W
untested
0%0.0000
Support
S6

S6 Support · 56.484

Zone: 56.398-56.553

Context: Support Hold. Watch for hold or reaction.

Rating

untested: 0% reaction, 0.00 ATR, 0 Touches, 0 Breaks.

Confluence

1D VolProf: VAL from the daily candle volume profile.

1W: horizontal structure level from weekly pivots.

56.48456.398-56.553
1D + 1W + VAL
untested
0%0.0000
Resistance
R1

R1 Resistance · 65.013

Zone: 64.974-65.052

Context: Reject Watch. Rejection setup; acceptance invalidates.

Rating

strong: 67% reaction, 2.44 ATR, 6 Touches, 2 Breaks.

Confluence

1D: horizontal structure level from daily pivots.

1W: horizontal structure level from weekly pivots.

65.01364.974-65.052
1D + 1W
strong
67%2.4462
Resistance
R2

R2 Resistance · 66.654

Zone: 66.498-66.835

Context: Neutral. Neutral resistance context.

Rating

weak: 45% reaction, 1.91 ATR, 20 Touches, 11 Breaks.

Confluence

1D: horizontal structure level from daily pivots.

66.65466.498-66.835
1D
weak
45%1.912011
Resistance
R3

R3 Resistance · 73.792

Zone: 73.571-74.014

Context: Decision/Reclaim. Decision area; acceptance can flip it into support.

Rating

strong: 77% reaction, 6.12 ATR, 13 Touches, 3 Breaks.

Confluence

1D: horizontal structure level from daily pivots.

VolProf: HVN from real Binance aggTrades (trade-by-price).

BMSB: Bull Market Support Band from 20W SMA and 21W EMA.

73.79273.571-74.014
1D + HVN + BMSB
strong
77%6.12133
Resistance
R4

R4 Resistance · 76.606

Zone: 76.606-76.914

Context: Reject Watch. Rejection setup; acceptance invalidates.

Rating

weak: 43% reaction, 3.38 ATR, 14 Touches, 8 Breaks.

Confluence

1D: horizontal structure level from daily pivots.

1W: horizontal structure level from weekly pivots.

200D: confluence with the 200-day SMA.

76.60676.606-76.914
1D + 1W + 200D
weak
43%3.38148
Resistance
R5

R5 Resistance · 76.000

Zone: 75.954-76.046

Context: Reject Watch. Rejection setup; acceptance invalidates.

Rating

decent: 54% reaction, 3.46 ATR, 13 Touches, 6 Breaks.

Confluence

1D: horizontal structure level from daily pivots.

1W: horizontal structure level from weekly pivots.

76.00075.954-76.046
1D + 1W
decent
54%3.46136
Resistance
R6

R6 Resistance · 74.659

Zone: 74.435-74.883

Context: Decision/Reclaim. Decision area; acceptance can flip it into support.

Rating

strong: 67% reaction, 3.35 ATR, 12 Touches, 4 Breaks.

Confluence

1D: horizontal structure level from daily pivots.

1W: horizontal structure level from weekly pivots.

BMSB: Bull Market Support Band from 20W SMA and 21W EMA.

74.65974.435-74.883
1D + 1W + BMSB
strong
67%3.35124

Pine Script v6

//@version=6
indicator("SURE BTC Macro Key Levels", overlay=true, max_labels_count=220, max_lines_count=70, max_boxes_count=70)

// Higher-timeframe macro key levels
// Developed by faint/idea (2026)
// Symbol: BTCUSDT
// Generated from 1W/1D structure + HTF volume profile + 4h confirmation
// As of: 2026-06-21T12:00:00+00:00
// Display window: trailing 24 months for visual relevance

show_labels = input.bool(true, "Show labels")
show_weak_levels = input.bool(true, "Show weak levels")
show_decision_zones = input.bool(true, "Show decision zones")
show_shadow_resistances = input.bool(true, "Show shadow resistances")
show_liquidity_watch = input.bool(false, "Show liquidity watch zones")
label_offset = input.int(12, "Label offset (bars)", minval=1, maxval=120)
support_strong_fill = input.color(color.rgb(43, 82, 48), "Support strong zone")
support_strong_line = input.color(color.rgb(82, 139, 88), "Support strong line")
support_strong_label_bg = input.color(color.rgb(8, 20, 8), "Support strong label")
support_strong_text = input.color(color.rgb(112, 219, 125), "Support strong text")
support_decent_fill = input.color(color.rgb(17, 63, 24), "Support decent zone")
support_decent_line = input.color(color.rgb(53, 116, 62), "Support decent line")
support_decent_label_bg = input.color(color.rgb(8, 20, 8), "Support decent label")
support_decent_text = input.color(color.rgb(76, 175, 80), "Support decent text")
support_weak_fill = input.color(color.rgb(3, 20, 8), "Support weak zone")
support_weak_line = input.color(color.rgb(25, 82, 36), "Support weak line")
support_weak_label_bg = input.color(color.rgb(8, 20, 8), "Support weak label")
support_weak_text = input.color(color.rgb(57, 130, 66), "Support weak text")
resistance_strong_fill = input.color(color.rgb(91, 42, 45), "Resistance strong zone")
resistance_strong_line = input.color(color.rgb(145, 88, 91), "Resistance strong line")
resistance_strong_label_bg = input.color(color.rgb(28, 8, 10), "Resistance strong label")
resistance_strong_text = input.color(color.rgb(250, 161, 164), "Resistance strong text")
resistance_decent_fill = input.color(color.rgb(66, 10, 14), "Resistance decent zone")
resistance_decent_line = input.color(color.rgb(118, 54, 59), "Resistance decent line")
resistance_decent_label_bg = input.color(color.rgb(28, 8, 10), "Resistance decent label")
resistance_decent_text = input.color(color.rgb(236, 103, 110), "Resistance decent text")
resistance_weak_fill = input.color(color.rgb(14, 3, 4), "Resistance weak zone")
resistance_weak_line = input.color(color.rgb(80, 39, 42), "Resistance weak line")
resistance_weak_label_bg = input.color(color.rgb(28, 8, 10), "Resistance weak label")
resistance_weak_text = input.color(color.rgb(170, 84, 90), "Resistance weak text")
decision_zone_color = input.color(color.new(color.yellow, 0), "Decision zone color")
shadow_resistance_color = input.color(color.new(color.orange, 0), "Shadow resistance color")
shadow_label_bg = input.color(color.rgb(44, 28, 5), "Shadow label")
shadow_text = input.color(color.rgb(250, 220, 155), "Shadow text")
liquidity_bsl_color = input.color(color.rgb(224, 168, 74), "Buy-side liquidity zone")
liquidity_bsl_label_bg = input.color(color.rgb(34, 24, 8), "Buy-side liquidity label")
liquidity_bsl_text = input.color(color.rgb(250, 211, 142), "Buy-side liquidity text")
liquidity_ssl_color = input.color(color.rgb(75, 176, 200), "Sell-side liquidity zone")
liquidity_ssl_label_bg = input.color(color.rgb(5, 24, 30), "Sell-side liquidity label")
liquidity_ssl_text = input.color(color.rgb(143, 231, 247), "Sell-side liquidity text")
data_box_bg = input.color(color.rgb(7, 13, 24), "Data box background")
data_box_text = input.color(color.rgb(190, 207, 226), "Data box text")
macro_lookback_days = 730
macro_lookback_ms = macro_lookback_days * 24 * 60 * 60 * 1000
line_start_time = int(math.max(time - macro_lookback_ms, 0))
is_btc_chart = syminfo.basecurrency == "BTC"
var table data_table = table.new(position.bottom_right, 1, 1, bgcolor=color.new(data_box_bg, 8), frame_color=color.new(data_box_text, 74), frame_width=1)

macro_s1_level = 63861.76
macro_s1_zone_low = 63823.44
macro_s1_zone_high = 63900.08
macro_s2_level = 62510.28
macro_s2_zone_low = 62472.77
macro_s2_zone_high = 62547.79
macro_s3_level = 60000.00
macro_s3_zone_low = 59964.00
macro_s3_zone_high = 60036.00
macro_s4_level = 59249.76
macro_s4_zone_low = 59110.15
macro_s4_zone_high = 59457.89
macro_s5_level = 52738.52
macro_s5_zone_low = 52580.30
macro_s5_zone_high = 52896.74
macro_s6_level = 56484.25
macro_s6_zone_low = 56398.30
macro_s6_zone_high = 56552.82

macro_r1_level = 65012.79
macro_r1_zone_low = 64973.78
macro_r1_zone_high = 65051.80
macro_r2_level = 66653.75
macro_r2_zone_low = 66498.00
macro_r2_zone_high = 66835.00
macro_r3_level = 73792.13
macro_r3_zone_low = 73570.75
macro_r3_zone_high = 74013.51
macro_r4_level = 76606.00
macro_r4_zone_low = 76606.00
macro_r4_zone_high = 76914.47
macro_r5_level = 76000.00
macro_r5_zone_low = 75954.40
macro_r5_zone_high = 76045.60
macro_r6_level = 74658.56
macro_r6_zone_low = 74434.58
macro_r6_zone_high = 74882.54

shadow_r1_level = 65896.15
shadow_r1_zone_low = 65856.61
shadow_r1_zone_high = 65935.69
shadow_r2_level = 67292.15
shadow_r2_zone_low = 66992.00
shadow_r2_zone_high = 67292.15

liq_z1_level = 78204.33
liq_z1_zone_low = 77969.72
liq_z1_zone_high = 78438.95
liq_z1_start_time = 1780084800000



var line[] macro_lines = array.new_line()
var box[] macro_boxes = array.new_box()
var label[] macro_labels = array.new_label()
if barstate.islast
    if array.size(macro_boxes) > 0
        for idx = 0 to array.size(macro_boxes) - 1
            box.delete(array.get(macro_boxes, idx))
    array.clear(macro_boxes)
    if array.size(macro_lines) > 0
        for idx = 0 to array.size(macro_lines) - 1
            line.delete(array.get(macro_lines, idx))
    array.clear(macro_lines)
    if array.size(macro_labels) > 0
        for idx = 0 to array.size(macro_labels) - 1
            label.delete(array.get(macro_labels, idx))
    array.clear(macro_labels)

    if is_btc_chart
        table.cell(data_table, 0, 0, "SURE Data as of 21.06.2026, 18:00 CEST", text_color=data_box_text, text_size=size.small)
        array.push(macro_boxes, box.new(line_start_time, macro_s1_zone_high, time, macro_s1_zone_low, xloc=xloc.bar_time, border_color=color.new(support_strong_line, 100), border_width=0, bgcolor=color.new(support_strong_fill, 16)))
        array.push(macro_boxes, box.new(line_start_time, macro_s2_zone_high, time, macro_s2_zone_low, xloc=xloc.bar_time, border_color=color.new(support_decent_line, 100), border_width=0, bgcolor=color.new(support_decent_fill, 26)))
        array.push(macro_boxes, box.new(line_start_time, macro_s3_zone_high, time, macro_s3_zone_low, xloc=xloc.bar_time, border_color=color.new(support_decent_line, 100), border_width=0, bgcolor=color.new(support_decent_fill, 26)))
        if show_weak_levels
            array.push(macro_boxes, box.new(line_start_time, macro_s4_zone_high, time, macro_s4_zone_low, xloc=xloc.bar_time, border_color=color.new(support_weak_line, 100), border_width=0, bgcolor=color.new(support_weak_fill, 42)))
        if show_weak_levels
            array.push(macro_boxes, box.new(line_start_time, macro_s5_zone_high, time, macro_s5_zone_low, xloc=xloc.bar_time, border_color=color.new(support_weak_line, 100), border_width=0, bgcolor=color.new(support_weak_fill, 42)))
        if show_weak_levels
            array.push(macro_boxes, box.new(line_start_time, macro_s6_zone_high, time, macro_s6_zone_low, xloc=xloc.bar_time, border_color=color.new(support_weak_line, 100), border_width=0, bgcolor=color.new(support_weak_fill, 42)))
        array.push(macro_boxes, box.new(line_start_time, macro_r1_zone_high, time, macro_r1_zone_low, xloc=xloc.bar_time, border_color=color.new(resistance_strong_line, 100), border_width=0, bgcolor=color.new(resistance_strong_fill, 16)))
        if show_weak_levels
            array.push(macro_boxes, box.new(line_start_time, macro_r2_zone_high, time, macro_r2_zone_low, xloc=xloc.bar_time, border_color=color.new(resistance_weak_line, 100), border_width=0, bgcolor=color.new(resistance_weak_fill, 42)))
        array.push(macro_boxes, box.new(line_start_time, macro_r3_zone_high, time, macro_r3_zone_low, xloc=xloc.bar_time, border_color=color.new(resistance_strong_line, 100), border_width=0, bgcolor=color.new(resistance_strong_fill, 16)))
        if show_weak_levels
            array.push(macro_boxes, box.new(line_start_time, macro_r4_zone_high, time, macro_r4_zone_low, xloc=xloc.bar_time, border_color=color.new(resistance_weak_line, 100), border_width=0, bgcolor=color.new(resistance_weak_fill, 42)))
        array.push(macro_boxes, box.new(line_start_time, macro_r5_zone_high, time, macro_r5_zone_low, xloc=xloc.bar_time, border_color=color.new(resistance_decent_line, 100), border_width=0, bgcolor=color.new(resistance_decent_fill, 26)))
        array.push(macro_boxes, box.new(line_start_time, macro_r6_zone_high, time, macro_r6_zone_low, xloc=xloc.bar_time, border_color=color.new(resistance_strong_line, 100), border_width=0, bgcolor=color.new(resistance_strong_fill, 16)))
        if show_shadow_resistances
            array.push(macro_boxes, box.new(line_start_time, shadow_r1_zone_high, time, shadow_r1_zone_low, xloc=xloc.bar_time, border_color=color.new(shadow_resistance_color, 100), border_width=0, bgcolor=color.new(shadow_resistance_color, 88)))
        if show_shadow_resistances
            array.push(macro_boxes, box.new(line_start_time, shadow_r2_zone_high, time, shadow_r2_zone_low, xloc=xloc.bar_time, border_color=color.new(shadow_resistance_color, 100), border_width=0, bgcolor=color.new(shadow_resistance_color, 88)))
        if show_liquidity_watch
            array.push(macro_boxes, box.new(int(math.max(liq_z1_start_time, line_start_time)), liq_z1_zone_high, time, liq_z1_zone_low, xloc=xloc.bar_time, border_color=color.new(liquidity_bsl_color, 88), border_width=1, bgcolor=color.new(liquidity_bsl_color, 91)))

        array.push(macro_lines, line.new(line_start_time, macro_s1_level, time, macro_s1_level, xloc=xloc.bar_time, extend=extend.none, color=support_strong_line, width=1, style=line.style_solid))
        array.push(macro_lines, line.new(line_start_time, macro_s2_level, time, macro_s2_level, xloc=xloc.bar_time, extend=extend.none, color=support_decent_line, width=1, style=line.style_solid))
        array.push(macro_lines, line.new(line_start_time, macro_s3_level, time, macro_s3_level, xloc=xloc.bar_time, extend=extend.none, color=support_decent_line, width=1, style=line.style_solid))
        if show_weak_levels
            array.push(macro_lines, line.new(line_start_time, macro_s4_level, time, macro_s4_level, xloc=xloc.bar_time, extend=extend.none, color=support_weak_line, width=1, style=line.style_solid))
        if show_weak_levels
            array.push(macro_lines, line.new(line_start_time, macro_s5_level, time, macro_s5_level, xloc=xloc.bar_time, extend=extend.none, color=support_weak_line, width=1, style=line.style_solid))
        if show_weak_levels
            array.push(macro_lines, line.new(line_start_time, macro_s6_level, time, macro_s6_level, xloc=xloc.bar_time, extend=extend.none, color=support_weak_line, width=1, style=line.style_solid))
        array.push(macro_lines, line.new(line_start_time, macro_r1_level, time, macro_r1_level, xloc=xloc.bar_time, extend=extend.none, color=resistance_strong_line, width=1, style=line.style_solid))
        if show_weak_levels
            array.push(macro_lines, line.new(line_start_time, macro_r2_level, time, macro_r2_level, xloc=xloc.bar_time, extend=extend.none, color=resistance_weak_line, width=1, style=line.style_solid))
        array.push(macro_lines, line.new(line_start_time, macro_r3_level, time, macro_r3_level, xloc=xloc.bar_time, extend=extend.none, color=resistance_strong_line, width=1, style=line.style_solid))
        if show_weak_levels
            array.push(macro_lines, line.new(line_start_time, macro_r4_level, time, macro_r4_level, xloc=xloc.bar_time, extend=extend.none, color=resistance_weak_line, width=1, style=line.style_solid))
        array.push(macro_lines, line.new(line_start_time, macro_r5_level, time, macro_r5_level, xloc=xloc.bar_time, extend=extend.none, color=resistance_decent_line, width=1, style=line.style_solid))
        array.push(macro_lines, line.new(line_start_time, macro_r6_level, time, macro_r6_level, xloc=xloc.bar_time, extend=extend.none, color=resistance_strong_line, width=1, style=line.style_solid))
        if show_shadow_resistances
            array.push(macro_lines, line.new(line_start_time, shadow_r1_level, time, shadow_r1_level, xloc=xloc.bar_time, extend=extend.none, color=color.new(shadow_resistance_color, 42), width=1, style=line.style_dotted))
        if show_shadow_resistances
            array.push(macro_lines, line.new(line_start_time, shadow_r2_level, time, shadow_r2_level, xloc=xloc.bar_time, extend=extend.none, color=color.new(shadow_resistance_color, 42), width=1, style=line.style_dotted))
        if show_liquidity_watch
            array.push(macro_lines, line.new(int(math.max(liq_z1_start_time, line_start_time)), liq_z1_level, time, liq_z1_level, xloc=xloc.bar_time, extend=extend.none, color=color.new(liquidity_bsl_color, 48), width=1, style=line.style_dashed))

        if show_labels
            array.push(macro_labels, label.new(bar_index + label_offset, macro_s1_level, "  S1 STRONG  ·  1D  ", xloc=xloc.bar_index, style=label.style_label_left, textcolor=support_strong_text, color=support_strong_label_bg, size=size.normal, tooltip="Price: 63.862\nZone: 63.823-63.900\nContext: Support Hold. Watch for hold or reaction."))
            array.push(macro_labels, label.new(bar_index + label_offset, macro_s2_level, "  S2 DECENT  ·  1D  ", xloc=xloc.bar_index, style=label.style_label_left, textcolor=support_decent_text, color=support_decent_label_bg, size=size.normal, tooltip="Price: 62.510\nZone: 62.473-62.548\nContext: Support Hold. Watch for hold or reaction."))
            array.push(macro_labels, label.new(bar_index + label_offset, macro_s3_level, "  S3 DECENT  ·  1D + 1W  ", xloc=xloc.bar_index, style=label.style_label_left, textcolor=support_decent_text, color=support_decent_label_bg, size=size.normal, tooltip="Price: 60.000\nZone: 59.964-60.036\nContext: Support Hold. Watch for hold or reaction."))
            if show_weak_levels
                array.push(macro_labels, label.new(bar_index + label_offset, macro_s4_level, "  S4 WEAK  ·  1D + VAL  ", xloc=xloc.bar_index, style=label.style_label_left, textcolor=support_weak_text, color=support_weak_label_bg, size=size.normal, tooltip="Price: 59.250\nZone: 59.110-59.458\nContext: Support Hold. Watch for hold or reaction."))
            if show_weak_levels
                array.push(macro_labels, label.new(bar_index + label_offset, macro_s5_level, "  S5 UNTESTED  ·  1D + 1W  ", xloc=xloc.bar_index, style=label.style_label_left, textcolor=support_weak_text, color=support_weak_label_bg, size=size.normal, tooltip="Price: 52.739\nZone: 52.580-52.897\nContext: Support Hold. Watch for hold or reaction."))
            if show_weak_levels
                array.push(macro_labels, label.new(bar_index + label_offset, macro_s6_level, "  S6 UNTESTED  ·  1D + 1W + VAL  ", xloc=xloc.bar_index, style=label.style_label_left, textcolor=support_weak_text, color=support_weak_label_bg, size=size.normal, tooltip="Price: 56.484\nZone: 56.398-56.553\nContext: Support Hold. Watch for hold or reaction."))
            array.push(macro_labels, label.new(bar_index + label_offset, macro_r1_level, "  R1 STRONG  ·  1D + 1W  ", xloc=xloc.bar_index, style=label.style_label_left, textcolor=resistance_strong_text, color=resistance_strong_label_bg, size=size.normal, tooltip="Price: 65.013\nZone: 64.974-65.052\nContext: Reject Watch. Rejection setup; acceptance invalidates."))
            if show_weak_levels
                array.push(macro_labels, label.new(bar_index + label_offset, macro_r2_level, "  R2 WEAK  ·  1D  ", xloc=xloc.bar_index, style=label.style_label_left, textcolor=resistance_weak_text, color=resistance_weak_label_bg, size=size.normal, tooltip="Price: 66.654\nZone: 66.498-66.835\nContext: Neutral. Neutral resistance context."))
            array.push(macro_labels, label.new(bar_index + label_offset, macro_r3_level, "  R3 STRONG  ·  1D + HVN + BMSB  ", xloc=xloc.bar_index, style=label.style_label_left, textcolor=resistance_strong_text, color=resistance_strong_label_bg, size=size.normal, tooltip="Price: 73.792\nZone: 73.571-74.014\nContext: Decision/Reclaim. Decision area; acceptance can flip it into support."))
            if show_weak_levels
                array.push(macro_labels, label.new(bar_index + label_offset, macro_r4_level, "  R4 WEAK  ·  1D + 1W + 200D  ", xloc=xloc.bar_index, style=label.style_label_left, textcolor=resistance_weak_text, color=resistance_weak_label_bg, size=size.normal, tooltip="Price: 76.606\nZone: 76.606-76.914\nContext: Reject Watch. Rejection setup; acceptance invalidates."))
            array.push(macro_labels, label.new(bar_index + label_offset, macro_r5_level, "  R5 DECENT  ·  1D + 1W  ", xloc=xloc.bar_index, style=label.style_label_left, textcolor=resistance_decent_text, color=resistance_decent_label_bg, size=size.normal, tooltip="Price: 76.000\nZone: 75.954-76.046\nContext: Reject Watch. Rejection setup; acceptance invalidates."))
            array.push(macro_labels, label.new(bar_index + label_offset, macro_r6_level, "  R6 STRONG  ·  1D + 1W + BMSB  ", xloc=xloc.bar_index, style=label.style_label_left, textcolor=resistance_strong_text, color=resistance_strong_label_bg, size=size.normal, tooltip="Price: 74.659\nZone: 74.435-74.883\nContext: Decision/Reclaim. Decision area; acceptance can flip it into support."))

            if show_shadow_resistances
                array.push(macro_labels, label.new(bar_index + label_offset, shadow_r1_level, "  SHADOW R1  ·  1W  ", xloc=xloc.bar_index, style=label.style_label_left, textcolor=shadow_text, color=shadow_label_bg, size=size.small, tooltip="Price: 65.896\nContext: Neutral. Neutral resistance context.\nWatchlist-level, not a main ranking level"))
            if show_shadow_resistances
                array.push(macro_labels, label.new(bar_index + label_offset, shadow_r2_level, "  SHADOW R2  ·  1D + Range High  ", xloc=xloc.bar_index, style=label.style_label_left, textcolor=shadow_text, color=shadow_label_bg, size=size.small, tooltip="Price: 67.292\nContext: Neutral. Neutral resistance context.\nWatchlist-level, not a main ranking level"))
            if show_liquidity_watch
                array.push(macro_labels, label.new(bar_index + label_offset, liq_z1_level, "  BSL WATCH 1  ", xloc=xloc.bar_index, style=label.style_label_left, textcolor=liquidity_bsl_text, color=liquidity_bsl_label_bg, size=size.small, tooltip="Zone: 77.970-78.439\nTouches: 3\nBuy-side liquidity: unswept equal-high area above spot. Sweep/magnet watch, not a SURE key level."))