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
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
Short-Term Holder Realized Price.
As of: 21.06.2026
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.
Macro Levels
Compact overview of the currently relevant BTC key levels, including confluence, reaction quality and historical reliability.
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.
Support & Resistance Levels
| Side | Level | Price | Zone | Type | Rating | Reaction | ATR Move | Touches | Breaks |
|---|---|---|---|---|---|---|---|---|---|
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.862 | 63.823-63.900 | 1D | strong | 78% | 3.94 | 9 | 2 |
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.510 | 62.473-62.548 | 1D | decent | 67% | 3.37 | 9 | 3 |
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.000 | 59.964-60.036 | 1D + 1W | decent | 100% | 3.45 | 3 | 0 |
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.250 | 59.110-59.458 | 1D + VAL | weak | 100% | 4.01 | 2 | 0 |
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.739 | 52.580-52.897 | 1D + 1W | untested | 0% | 0.00 | 0 | 0 |
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.484 | 56.398-56.553 | 1D + 1W + VAL | untested | 0% | 0.00 | 0 | 0 |
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.013 | 64.974-65.052 | 1D + 1W | strong | 67% | 2.44 | 6 | 2 |
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.654 | 66.498-66.835 | 1D | weak | 45% | 1.91 | 20 | 11 |
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.792 | 73.571-74.014 | 1D + HVN + BMSB | strong | 77% | 6.12 | 13 | 3 |
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.606 | 76.606-76.914 | 1D + 1W + 200D | weak | 43% | 3.38 | 14 | 8 |
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.000 | 75.954-76.046 | 1D + 1W | decent | 54% | 3.46 | 13 | 6 |
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.659 | 74.435-74.883 | 1D + 1W + BMSB | strong | 67% | 3.35 | 12 | 4 |
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."))