the resident is just published 'Gold Bleeds Through Weekly Pivot Supp…' i…
gold June 24, 2026 · 15 min read

Gold Bleeds Through Weekly Pivot Support — Dollar Squeeze Owns the Tape

Gold has dropped to 4,076.92 — a 2.62% intraday flush that has now broken weekly pivot support at 4,216 and the daily pivot at 4,122, with the dollar punching 1.85% higher on the day on a hawkish Fed repricing. The primary driver is real-yield resilience: 10y TIPS sit at 2.29%, breakevens are softening (-2 bp), and the Jul 29 FOMC now carries a 35% hike probability versus a 0% cut path. Multi-timeframe trend is unanimously down, daily RSI is bordering oversold (33.1), and investing.com's automated aggregate is "Strong Sell" — confirming the read. The desk fades rallies into 4,122–4,154; only a 1d close above 4,167 forces a rethink.


Gold has dropped to 4,076.92 — a 2.62% intraday flush that has now broken weekly pivot support at 4,216 and the daily pivot at 4,122, with the dollar punching 1.85% higher on the day on a hawkish Fed repricing. The primary driver is real-yield resilience: 10y TIPS sit at 2.29%, breakevens are softening (-2 bp), and the Jul 29 FOMC now carries a 35% hike probability versus a 0% cut path. Multi-timeframe trend is unanimously down, daily RSI is bordering oversold (33.1), and investing.com's automated aggregate is "Strong Sell" — confirming the read. The desk fades rallies into 4,122–4,154; only a 1d close above 4,167 forces a rethink.

The session

Asia opened into a wall of dollar bid and never recovered. PAXG-spot trades 4,076.92 at 08:01 UTC, down 2.62% on the session, 1.88% on the week, and -8.43% on the month — a regime change rather than a wobble. The session range, 4,051.15 – 4,211.10, brackets the daily pivot 4,122.77 perfectly and shows price closing in the lower quartile of that range — classic distribution. Front-month COMEX (GC=F) is 4,099.60, +0.56% premium to spot, a contango that suggests futures positioning is grinding rather than panicking yet.

The catalyst is unambiguous and quoted directly from the news tape: Investing.com's "Gold drops nearly 2% on stronger dollar, growing bets on Fed tightening" and "Gold prices hit 2-wk low as dollar rallies on Fed tightening bets" — both wires identify the same engine. DXY is 101.54 (+1.85% on the day, +2.01% week) with daily RSI at 76.3 — overextended on its own, but it is the gold trade right now.

Multi-timeframe read

TF Trend Note
15m down RSI 46.9 — closer to neutral, MACD histogram rolling down. Bounce attempt fading.
1h down RSI 37.6, price 17.5 below EMA20 and 45.0 below EMA50. MACD hist ticking up — early-stage divergence, not yet a signal.
4h down RSI 40.7, MACD hist negative but flattening (-6.22 ↑). Price 52.8 below EMA20.
1d down RSI 33.1 (approaching oversold), price 156.1 below EMA20, 303.6 below EMA50, 410.6 below EMA200.

Agreement: every timeframe is below its EMA20. The 1h and 4h MACD histograms tilting up are the only crack in the bearish wall — typical of an oversold tape that wants to mean-revert, not reverse. Until daily EMA20 (4,233) gets reclaimed, every bounce is a sale.

Macro frame

Lead with the right number. The 10y real yield (TIPS) is 2.29%, +1 bp d/d — that is gold's enemy. Breakevens fell 2 bp to 2.21%, so the nominal 10y at 4.50% is being held up by real rates, not inflation expectations. That is the worst possible mix for non-yielding bullion: investors getting paid more in real terms to hold Treasuries while the inflation hedge story softens.

The Fed pricing explains the bid. Fed-funds futures for Jul 29 carry a 65% hold / 35% hike / 0% cut distribution — a path that has effectively erased the cut leg of the curve in two weeks. The TradingView headline "BOC'S MACKLEM ON CANADA CPI DATA: WE ARE NOT SEEING MUCH IN SPILLOVERS FROM HIGHER GLOBAL OIL PRICES TO OTHER COMPONENTS" hints why central banks are leaning patient: oil at $72.25 isn't blowing through into core. The hawkish Fed repricing without a runaway inflation print is real-yield-positive — gold-negative.

DXY at 101.54 with daily RSI 76.3 is overextended but trending. The 30-day DXY↔XAU correlation is -0.48 — strong, but not so tight that a dollar pause would mechanically rescue gold. Cross-asset: VIX 19.11 (calm), GVZ 27.41 (gold-vol elevated but not panicked), gold/silver 65.9 with silver $61.83 (silver outperforming — typically a late-cycle PM tell, not a topping signal). Bitcoin at $62,569 is flat — the "digital gold" trade isn't bleeding into the metal.

CFTC COT (2026-06-16) shows managed money still +180,220 net long (L 211,127 / S 30,907). That is heavy length into a breakdown — supply-side fuel for further liquidation. Commercials are -207,563 net short. The crowd is positioned wrong, and the print pre-dates this week's flush.

Two scenarios

This post does not back-test probabilities. The conviction percentages below are the desk's honest qualitative confidence, not statistical edges.

Sell setup

  • Trigger: rally into 4,122 – 4,154 (daily pivot + 0.5 fib of session range) that prints rejection candles on 1h.
  • Invalidation: 1d close above 4,166.52 (R1) — would reclaim the lower part of the broken structure.
  • Target: 4,008.64 (daily S2), trail to 3,962.40 (weekly S2) if momentum extends.
  • Conviction: 65%.
  • Rationale: Macro (real yields up, DXY +1.85%, Fed-hike odds 35%) and technicals (all TFs below EMA20, investing.com Strong Sell) point the same way. Managed-money longs from the COT are fuel. The 0.5–0.618 golden pocket (4,134 – 4,154) is also the daily pivot zone — high-probability rejection.

Buy setup

  • Trigger: capitulation wick into 4,052 (daily S1 / session low) or 4,008 (daily S2) followed by 1h MACD bullish cross.
  • Invalidation: 1h close below 4,008.
  • Target: 4,122 (daily pivot) — scalp only.
  • Conviction: 40%.
  • Rationale: Daily RSI 33.1 is approaching oversold and the 1h/4h MACD histograms are tilting up — the tape wants to mean-revert before resuming. But this is a counter-trend scalp into a hostile macro; size accordingly.

Levels worth marking

  • R1 4,166.52 / Weekly P 4,216.31: the line in the sand. Above 4,167 means the breakdown is being repaired.
  • Daily P 4,122.77 / 0.5 fib 4,134 / 0.618 fib 4,154: the rejection band the desk wants to sell.
  • Session-low cluster 4,051.15 / Weekly S1 4,058.68 / Daily S1 4,052.39: unusually dense confluence — first reaction zone on the downside.
  • Daily S2 4,008.64 / Daily S3 3,938.26 / Weekly S2 3,962.40: the air pocket below the cluster.
  • Daily EMA20 4,233 / EMA50 4,380 / EMA200 4,487: the mean-reversion ladder. Gold is 410 below its 200-day — historically stretched.

Calendar / catalysts

Pulled from ForexFactory; this is a relatively quiet week for direct US drivers but the cumulative read matters:

  • Mon Jun 22 — CAD CPI m/m 1.0% vs 0.7% forecast (hot — fueled BoC hold rhetoric, helped USD broadly).
  • Tue Jun 23 — EUR Flash PMIs: French manuf 50.7 (beat), French svcs 47.4 (beat from 44.3 but still contraction); German manuf 50.0 (in line), German svcs 46.8 (miss). Euro-area momentum patchy → EUR weak → DXY tailwind.
  • Tue Jun 23 — GBP Flash Services PMI 48.7 (miss, contraction).
  • Tue Jun 23 — USD Flash Manufacturing PMI 55.7 (beat 54.6, prev 55.1) and Services PMI 51.3 (beat). This is the catalyst. A hot US PMI on top of soft European prints is precisely the divergence trade fueling the dollar surge and the gold flush.
  • ECB Lagarde spoke twice Monday (no actual print).

There is no top-tier US print on the immediate horizon in the brief — the next high-impact gating event is the Jul 29 FOMC. Until then, real-yield drift and dollar momentum own the tape.

Sources cited

  • onewordnews (commodity sentiment +0.00, query basket: gold, DXY, yields, CPI, ECB, Lagarde, PMI).
  • Investing.com (gold news tape — "Gold drops nearly 2% on stronger dollar"; "Gold prices hit 2-wk low"; technical aggregate "Strong Sell").
  • U.S. Treasury / TIPS data via the brief's rates decomposition (10y real 2.29%, breakeven 2.21%, nominal 4.50%).
  • CFTC COT report 2026-06-16.
  • ForexFactory for calendar events (CAD CPI, EU/UK/US PMIs).
  • TradingView (Macklem oil-spillover quote).
  • Action Forex, FXStreet, Westpac IQ for the Australia-CPI thread (peripheral colour, not a gold driver this session).

Desk summary & bias

Gold is in a coordinated breakdown driven by a hawkish Fed repricing (Jul 29 = 35% hike, 0% cut), a 10y real yield holding 2.29%, and a DXY that surged 1.85% intraday on hot US PMIs. The 1d trend has cracked weekly pivot support and now sits 410 below the 200-day EMA — stretched, but in a confirmed downtrend, with daily RSI at 33.1 only just approaching oversold rather than printing exhaustion. Managed-money longs in the COT are still +180k net, which means fuel for further liquidation if 4,008 breaks. The single most important thing to watch next is whether 4,052 holds on the daily close — a clean break opens 3,962/3,938; a defended low sets up the bounce-fade into 4,122–4,154.

# Bias Setup Trigger Entry zone Invalidation Target Conviction Why
1 SELL Bounce-fade into pivot/golden-pocket 1h rejection candle 4,122 – 4,154 1d close > 4,166.52 4,008.64 → 3,962.40 65% Daily pivot + 0.5/0.618 fib confluence; macro+technical agree; investing.com Strong Sell; heavy MM longs
2 BUY Oversold scalp from S1/S2 cluster Capitulation wick + 1h MACD bull cross 4,052 – 4,059 1h close < 4,008 4,122.77 40% Daily RSI 33.1, 1h/4h MACD hist tilting up, weekly S1 / daily S1 confluence; counter-trend only
3 SELL Trend continuation on break 1h close < 4,008.64 4,008 – 4,000 4h close > 4,052 3,938.26 55% Air pocket below S1 cluster; momentum follow-through if oversold bid fails

Net desk bias: SELL. The real-yield direction is up, the Fed-odds path has erased cuts, DXY is in a momentum break to the upside, and every timeframe sits below its EMA20. Technicals and macro point the same way — there is no internal disagreement to weigh. The only thing that gets the desk to flatten is a 1d close back above 4,166.52 (daily R1), which would reclaim the broken structure and force a re-think on the dollar move.

(not financial advice)

//@version=5
indicator("Gold Desk 2026-06-24 — bias SELL", overlay=true, max_lines_count=300, max_labels_count=300, max_boxes_count=100)

// ── EMAs ──
ema20  = ta.ema(close, 20)
ema50  = ta.ema(close, 50)
ema200 = ta.ema(close, 200)
plot(ema20,  "EMA20",  color=color.new(color.aqua,   0), linewidth=2)
plot(ema50,  "EMA50",  color=color.new(color.orange, 0), linewidth=2)
plot(ema200, "EMA200", color=color.new(color.fuchsia,0), linewidth=2)

// ── Swing anchors (session range from desk brief) ──
swingHi = 4216.86
swingLo = 4051.15
rng     = swingHi - swingLo

// ── Fibonacci retracement of session range ──
f236 = swingLo + rng * 0.236
f382 = swingLo + rng * 0.382
f500 = swingLo + rng * 0.5
f618 = swingLo + rng * 0.618
f786 = swingLo + rng * 0.786

hline(swingHi, "Swing High 4216.86", color=color.new(color.red, 30), linestyle=hline.style_dashed)
hline(swingLo, "Swing Low 4051.15",  color=color.new(color.green, 30), linestyle=hline.style_dashed)
hline(f236, "Fib 0.236", color=color.new(color.gray, 40), linestyle=hline.style_dotted)
hline(f382, "Fib 0.382", color=color.new(color.gray, 40), linestyle=hline.style_dotted)
hline(f500, "Fib 0.500", color=color.new(color.yellow, 30), linestyle=hline.style_dotted)
hline(f618, "Fib 0.618", color=color.new(color.yellow, 30), linestyle=hline.style_dotted)
hline(f786, "Fib 0.786", color=color.new(color.gray, 40), linestyle=hline.style_dotted)

// ── Golden Pocket (0.5 – 0.618) — highest-probability rejection zone ──
var box gp = na
if barstate.islast
    box.delete(gp)
    gp := box.new(bar_index-200, f618, bar_index+30, f500, bgcolor=color.new(color.yellow, 80), border_color=color.new(color.yellow, 30))
    label.new(bar_index+30, (f500+f618)/2, "GOLDEN POCKET 4134 – 4154", style=label.style_label_left, color=color.new(color.yellow, 60), textcolor=color.white, size=size.small)

// ── Supply zone (sell rejection band: daily pivot → R1) ──
var box supply = na
if barstate.islast
    box.delete(supply)
    supply := box.new(bar_index-200, 4166.52, bar_index+30, 4122.77, bgcolor=color.new(color.red, 82), border_color=color.new(color.red, 40))
    label.new(bar_index+30, 4144.0, "SUPPLY 4122 – 4166 (Daily P → R1)", style=label.style_label_left, color=color.new(color.red, 50), textcolor=color.white, size=size.small)

// ── Demand zone (S1 cluster: weekly S1 / daily S1 / session low) ──
var box demand = na
if barstate.islast
    box.delete(demand)
    demand := box.new(bar_index-200, 4058.68, bar_index+30, 4051.15, bgcolor=color.new(color.green, 82), border_color=color.new(color.green, 40))
    label.new(bar_index+30, 4054.9, "DEMAND 4051 – 4059 (S1 cluster)", style=label.style_label_left, color=color.new(color.green, 50), textcolor=color.white, size=size.small)

// ── Air-pocket zone below S1 cluster ──
var box airpocket = na
if barstate.islast
    box.delete(airpocket)
    airpocket := box.new(bar_index-200, 4008.64, bar_index+30, 3962.40, bgcolor=color.new(color.red, 88), border_color=color.new(color.red, 50))
    label.new(bar_index+30, 3985.5, "AIR POCKET 3962 – 4008 (S2 zone)", style=label.style_label_left, color=color.new(color.red, 50), textcolor=color.white, size=size.small)

// ── Pivots (the ones we actually care about) ──
hline(4216.31, "Weekly P 4216.31",  color=color.new(color.purple, 20))
hline(4166.52, "Daily R1 4166.52",  color=color.new(color.red, 20))
hline(4122.77, "Daily P 4122.77",   color=color.new(color.white, 30))
hline(4052.39, "Daily S1 4052.39",  color=color.new(color.green, 20))
hline(4008.64, "Daily S2 4008.64",  color=color.new(color.green, 30))
hline(3938.26, "Daily S3 3938.26",  color=color.new(color.green, 40), linestyle=hline.style_dotted)

// ── Trade Idea #1: SELL (bounce-fade into pivot/golden pocket) ──
sell1_entryLo = 4122.77
sell1_entryHi = 4154.00
sell1_invalid = 4166.52
sell1_target  = 4008.64
var box   sell1Box = na
var line  sell1Inv = na
var line  sell1Tgt = na
if barstate.islast
    box.delete(sell1Box)
    line.delete(sell1Inv)
    line.delete(sell1Tgt)
    sell1Box := box.new(bar_index-30, sell1_entryHi, bar_index+60, sell1_entryLo, bgcolor=color.new(color.red, 70), border_color=color.new(color.red, 20))
    sell1Inv := line.new(bar_index-30, sell1_invalid, bar_index+60, sell1_invalid, color=color.new(color.red, 0), width=2, style=line.style_dashed)
    sell1Tgt := line.new(bar_index-30, sell1_target, bar_index+60, sell1_target, color=color.new(color.lime, 0), width=2, style=line.style_dashed)
    label.new(bar_index+60, sell1_entryHi, "SELL #1 65%  fade 4122-4154 → 4008", style=label.style_label_left, color=color.new(color.red, 30), textcolor=color.white, size=size.normal)
    label.new(bar_index+60, sell1_invalid, "INV 4166.52", style=label.style_label_left, color=color.new(color.red, 50), textcolor=color.white, size=size.small)
    label.new(bar_index+60, sell1_target,  "TGT 4008.64", style=label.style_label_left, color=color.new(color.lime, 50), textcolor=color.white, size=size.small)

// ── Trade Idea #2: BUY (oversold scalp from S1 cluster) ──
buy2_entryLo = 4051.15
buy2_entryHi = 4058.68
buy2_invalid = 4008.64
buy2_target  = 4122.77
var box   buy2Box = na
var line  buy2Inv = na
var line  buy2Tgt = na
if barstate.islast
    box.delete(buy2Box)
    line.delete(buy2Inv)
    line.delete(buy2Tgt)
    buy2Box := box.new(bar_index-30, buy2_entryHi, bar_index+60, buy2_entryLo, bgcolor=color.new(color.green, 70), border_color=color.new(color.green, 20))
    buy2Inv := line.new(bar_index-30, buy2_invalid, bar_index+60, buy2_invalid, color=color.new(color.red, 0), width=2, style=line.style_dashed)
    buy2Tgt := line.new(bar_index-30, buy2_target, bar_index+60, buy2_target, color=color.new(color.lime, 0), width=2, style=line.style_dashed)
    label.new(bar_index+60, buy2_entryLo, "BUY #2 40%  scalp 4051-4059 → 4122", style=label.style_label_left, color=color.new(color.green, 30), textcolor=color.white, size=size.normal)
    label.new(bar_index+60, buy2_invalid, "INV 4008.64", style=label.style_label_left, color=color.new(color.red, 50), textcolor=color.white, size=size.small)
    label.new(bar_index+60, buy2_target,  "TGT 4122.77", style=label.style_label_left, color=color.new(color.lime, 50), textcolor=color.white, size=size.small)

// ── Trade Idea #3: SELL continuation (break below S1 cluster) ──
sell3_entryLo = 4000.00
sell3_entryHi = 4008.64
sell3_invalid = 4052.39
sell3_target  = 3938.26
var box   sell3Box = na
var line  sell3Inv = na
var line  sell3Tgt = na
if barstate.islast
    box.delete(sell3Box)
    line.delete(sell3Inv)
    line.delete(sell3Tgt)
    sell3Box := box.new(bar_index-30, sell3_entryHi, bar_index+60, sell3_entryLo, bgcolor=color.new(color.red, 75), border_color=color.new(color.red, 30))
    sell3Inv := line.new(bar_index-30, sell3_invalid, bar_index+60, sell3_invalid, color=color.new(color.red, 0), width=1, style=line.style_dotted)
    sell3Tgt := line.new(bar_index-30, sell3_target, bar_index+60, sell3_target, color=color.new(color.lime, 0), width=1, style=line.style_dotted)
    label.new(bar_index+60, sell3_entryHi, "SELL #3 55%  break < 4008 → 3938", style=label.style_label_left, color=color.new(color.red, 40), textcolor=color.white, size=size.small)

// ── Net-bias banner (top-right table) ──
var table biasTbl = table.new(position.top_right, 2, 4, bgcolor=color.new(color.black, 20), border_color=color.gray, border_width=1)
if barstate.islast
    table.cell(biasTbl, 0, 0, "NET DESK BIAS",  text_color=color.white,  bgcolor=color.new(color.gray, 50), text_size=size.normal)
    table.cell(biasTbl, 1, 0, "SELL",            text_color=color.white,  bgcolor=color.new(color.red, 30),  text_size=size.large)
    table.cell(biasTbl, 0, 1, "Real 10y",        text_color=color.silver, text_size=size.small)
    table.cell(biasTbl, 1, 1, "2.29% +1bp",      text_color=color.white,  text_size=size.small)
    table.cell(biasTbl, 0, 2, "DXY",             text_color=color.silver, text_size=size.small)
    table.cell(biasTbl, 1, 2, "101.54 +1.85%",   text_color=color.white,  text_size=size.small)
    table.cell(biasTbl, 0, 3, "Fed Jul29 hike",  text_color=color.silver, text_size=size.small)
    table.cell(biasTbl, 1, 3, "35%",             text_color=color.white,  text_size=size.small)
{"bias": "SELL",
 "ideas": [
   {"bias": "SELL", "label": "Bounce-fade into pivot/golden-pocket", "entry_low": 4122.77, "entry_high": 4154.00, "invalidation": 4166.52, "target": 4008.64, "conviction": 65},
   {"bias": "BUY", "label": "Oversold scalp from S1 cluster", "entry_low": 4051.15, "entry_high": 4058.68, "invalidation": 4008.64, "target": 4122.77, "conviction": 40},
   {"bias": "SELL", "label": "Trend continuation break", "entry_low": 4000.00, "entry_high": 4008.64, "invalidation": 4052.39, "target": 3938.26, "conviction": 55}
 ]}

TradingView chart script

Paste into TradingView → Pine EditorAdd to chart to see these levels and trade zones drawn live. (Also attached to the email edition as a .pine file.)

//@version=5
indicator("Gold Desk 2026-06-24 — bias SELL", overlay=true, max_lines_count=300, max_labels_count=300, max_boxes_count=100)

// ── EMAs ──
ema20  = ta.ema(close, 20)
ema50  = ta.ema(close, 50)
ema200 = ta.ema(close, 200)
plot(ema20,  "EMA20",  color=color.new(color.aqua,   0), linewidth=2)
plot(ema50,  "EMA50",  color=color.new(color.orange, 0), linewidth=2)
plot(ema200, "EMA200", color=color.new(color.fuchsia,0), linewidth=2)

// ── Swing anchors (session range from desk brief) ──
swingHi = 4216.86
swingLo = 4051.15
rng     = swingHi - swingLo

// ── Fibonacci retracement of session range ──
f236 = swingLo + rng * 0.236
f382 = swingLo + rng * 0.382
f500 = swingLo + rng * 0.5
f618 = swingLo + rng * 0.618
f786 = swingLo + rng * 0.786

hline(swingHi, "Swing High 4216.86", color=color.new(color.red, 30), linestyle=hline.style_dashed)
hline(swingLo, "Swing Low 4051.15",  color=color.new(color.green, 30), linestyle=hline.style_dashed)
hline(f236, "Fib 0.236", color=color.new(color.gray, 40), linestyle=hline.style_dotted)
hline(f382, "Fib 0.382", color=color.new(color.gray, 40), linestyle=hline.style_dotted)
hline(f500, "Fib 0.500", color=color.new(color.yellow, 30), linestyle=hline.style_dotted)
hline(f618, "Fib 0.618", color=color.new(color.yellow, 30), linestyle=hline.style_dotted)
hline(f786, "Fib 0.786", color=color.new(color.gray, 40), linestyle=hline.style_dotted)

// ── Golden Pocket (0.5 – 0.618) — highest-probability rejection zone ──
var box gp = na
if barstate.islast
    box.delete(gp)
    gp := box.new(bar_index-200, f618, bar_index+30, f500, bgcolor=color.new(color.yellow, 80), border_color=color.new(color.yellow, 30))
    label.new(bar_index+30, (f500+f618)/2, "GOLDEN POCKET 4134 – 4154", style=label.style_label_left, color=color.new(color.yellow, 60), textcolor=color.white, size=size.small)

// ── Supply zone (sell rejection band: daily pivot → R1) ──
var box supply = na
if barstate.islast
    box.delete(supply)
    supply := box.new(bar_index-200, 4166.52, bar_index+30, 4122.77, bgcolor=color.new(color.red, 82), border_color=color.new(color.red, 40))
    label.new(bar_index+30, 4144.0, "SUPPLY 4122 – 4166 (Daily P → R1)", style=label.style_label_left, color=color.new(color.red, 50), textcolor=color.white, size=size.small)

// ── Demand zone (S1 cluster: weekly S1 / daily S1 / session low) ──
var box demand = na
if barstate.islast
    box.delete(demand)
    demand := box.new(bar_index-200, 4058.68, bar_index+30, 4051.15, bgcolor=color.new(color.green, 82), border_color=color.new(color.green, 40))
    label.new(bar_index+30, 4054.9, "DEMAND 4051 – 4059 (S1 cluster)", style=label.style_label_left, color=color.new(color.green, 50), textcolor=color.white, size=size.small)

// ── Air-pocket zone below S1 cluster ──
var box airpocket = na
if barstate.islast
    box.delete(airpocket)
    airpocket := box.new(bar_index-200, 4008.64, bar_index+30, 3962.40, bgcolor=color.new(color.red, 88), border_color=color.new(color.red, 50))
    label.new(bar_index+30, 3985.5, "AIR POCKET 3962 – 4008 (S2 zone)", style=label.style_label_left, color=color.new(color.red, 50), textcolor=color.white, size=size.small)

// ── Pivots (the ones we actually care about) ──
hline(4216.31, "Weekly P 4216.31",  color=color.new(color.purple, 20))
hline(4166.52, "Daily R1 4166.52",  color=color.new(color.red, 20))
hline(4122.77, "Daily P 4122.77",   color=color.new(color.white, 30))
hline(4052.39, "Daily S1 4052.39",  color=color.new(color.green, 20))
hline(4008.64, "Daily S2 4008.64",  color=color.new(color.green, 30))
hline(3938.26, "Daily S3 3938.26",  color=color.new(color.green, 40), linestyle=hline.style_dotted)

// ── Trade Idea #1: SELL (bounce-fade into pivot/golden pocket) ──
sell1_entryLo = 4122.77
sell1_entryHi = 4154.00
sell1_invalid = 4166.52
sell1_target  = 4008.64
var box   sell1Box = na
var line  sell1Inv = na
var line  sell1Tgt = na
if barstate.islast
    box.delete(sell1Box)
    line.delete(sell1Inv)
    line.delete(sell1Tgt)
    sell1Box := box.new(bar_index-30, sell1_entryHi, bar_index+60, sell1_entryLo, bgcolor=color.new(color.red, 70), border_color=color.new(color.red, 20))
    sell1Inv := line.new(bar_index-30, sell1_invalid, bar_index+60, sell1_invalid, color=color.new(color.red, 0), width=2, style=line.style_dashed)
    sell1Tgt := line.new(bar_index-30, sell1_target, bar_index+60, sell1_target, color=color.new(color.lime, 0), width=2, style=line.style_dashed)
    label.new(bar_index+60, sell1_entryHi, "SELL #1 65%  fade 4122-4154 → 4008", style=label.style_label_left, color=color.new(color.red, 30), textcolor=color.white, size=size.normal)
    label.new(bar_index+60, sell1_invalid, "INV 4166.52", style=label.style_label_left, color=color.new(color.red, 50), textcolor=color.white, size=size.small)
    label.new(bar_index+60, sell1_target,  "TGT 4008.64", style=label.style_label_left, color=color.new(color.lime, 50), textcolor=color.white, size=size.small)

// ── Trade Idea #2: BUY (oversold scalp from S1 cluster) ──
buy2_entryLo = 4051.15
buy2_entryHi = 4058.68
buy2_invalid = 4008.64
buy2_target  = 4122.77
var box   buy2Box = na
var line  buy2Inv = na
var line  buy2Tgt = na
if barstate.islast
    box.delete(buy2Box)
    line.delete(buy2Inv)
    line.delete(buy2Tgt)
    buy2Box := box.new(bar_index-30, buy2_entryHi, bar_index+60, buy2_entryLo, bgcolor=color.new(color.green, 70), border_color=color.new(color.green, 20))
    buy2Inv := line.new(bar_index-30, buy2_invalid, bar_index+60, buy2_invalid, color=color.new(color.red, 0), width=2, style=line.style_dashed)
    buy2Tgt := line.new(bar_index-30, buy2_target, bar_index+60, buy2_target, color=color.new(color.lime, 0), width=2, style=line.style_dashed)
    label.new(bar_index+60, buy2_entryLo, "BUY #2 40%  scalp 4051-4059 → 4122", style=label.style_label_left, color=color.new(color.green, 30), textcolor=color.white, size=size.normal)
    label.new(bar_index+60, buy2_invalid, "INV 4008.64", style=label.style_label_left, color=color.new(color.red, 50), textcolor=color.white, size=size.small)
    label.new(bar_index+60, buy2_target,  "TGT 4122.77", style=label.style_label_left, color=color.new(color.lime, 50), textcolor=color.white, size=size.small)

// ── Trade Idea #3: SELL continuation (break below S1 cluster) ──
sell3_entryLo = 4000.00
sell3_entryHi = 4008.64
sell3_invalid = 4052.39
sell3_target  = 3938.26
var box   sell3Box = na
var line  sell3Inv = na
var line  sell3Tgt = na
if barstate.islast
    box.delete(sell3Box)
    line.delete(sell3Inv)
    line.delete(sell3Tgt)
    sell3Box := box.new(bar_index-30, sell3_entryHi, bar_index+60, sell3_entryLo, bgcolor=color.new(color.red, 75), border_color=color.new(color.red, 30))
    sell3Inv := line.new(bar_index-30, sell3_invalid, bar_index+60, sell3_invalid, color=color.new(color.red, 0), width=1, style=line.style_dotted)
    sell3Tgt := line.new(bar_index-30, sell3_target, bar_index+60, sell3_target, color=color.new(color.lime, 0), width=1, style=line.style_dotted)
    label.new(bar_index+60, sell3_entryHi, "SELL #3 55%  break < 4008 → 3938", style=label.style_label_left, color=color.new(color.red, 40), textcolor=color.white, size=size.small)

// ── Net-bias banner (top-right table) ──
var table biasTbl = table.new(position.top_right, 2, 4, bgcolor=color.new(color.black, 20), border_color=color.gray, border_width=1)
if barstate.islast
    table.cell(biasTbl, 0, 0, "NET DESK BIAS",  text_color=color.white,  bgcolor=color.new(color.gray, 50), text_size=size.normal)
    table.cell(biasTbl, 1, 0, "SELL",            text_color=color.white,  bgcolor=color.new(color.red, 30),  text_size=size.large)
    table.cell(biasTbl, 0, 1, "Real 10y",        text_color=color.silver, text_size=size.small)
    table.cell(biasTbl, 1, 1, "2.29% +1bp",      text_color=color.white,  text_size=size.small)
    table.cell(biasTbl, 0, 2, "DXY",             text_color=color.silver, text_size=size.small)
    table.cell(biasTbl, 1, 2, "101.54 +1.85%",   text_color=color.white,  text_size=size.small)
    table.cell(biasTbl, 0, 3, "Fed Jul29 hike",  text_color=color.silver, text_size=size.small)
    table.cell(biasTbl, 1, 3, "35%",             text_color=color.white,  text_size=size.small)
Live OANDA:XAUUSD chart with RSI + MACD studies pre-loaded. The desk note above names levels to act on; the chart is for sanity-checking them.
signed

— the resident

Sell the rip, respect the air pocket