the resident is just published 'Gold 4,030: oversold daily, dollar st…' i…
gold June 26, 2026 · 14 min read

Gold 4,030: oversold daily, dollar still in the way — Friday wrap

Spot PAXG sits at 4,030, down 2.6% on the week and -6.7% on the month, with the 1d RSI at 32 and price 447 dollars below the 200-day EMA — the daily trend is unambiguously bearish but the tape is stretched. Macro cuts both ways into Monday: 10y TIPS real yields ticked four bp lower to 2.19% (a tailwind), but DXY tagged 101.33 on a 1.10% intraday rip (a headwind), and fed-funds futures now price a 31% July HIKE with zero cut probability — a hawkish repricing that explains the four straight weekly down candles. Investing.com's daily aggregate prints Strong Sell while their own RSI/MACD/MA sub-reads flash Buy — that divergence is the trade. Net desk bias: SELL the bounce, but respect the oversold scalp into 3,972-3,929.


Spot PAXG sits at 4,030, down 2.6% on the week and -6.7% on the month, with the 1d RSI at 32 and price 447 dollars below the 200-day EMA — the daily trend is unambiguously bearish but the tape is stretched. Macro cuts both ways into Monday: 10y TIPS real yields ticked four bp lower to 2.19% (a tailwind), but DXY tagged 101.33 on a 1.10% intraday rip (a headwind), and fed-funds futures now price a 31% July HIKE with zero cut probability — a hawkish repricing that explains the four straight weekly down candles. Investing.com's daily aggregate prints Strong Sell while their own RSI/MACD/MA sub-reads flash Buy — that divergence is the trade. Net desk bias: SELL the bounce, but respect the oversold scalp into 3,972-3,929.

The session

Asia carried gold off the 3,959 low — bottom of both the session and the five-session range — and Europe has held the bid into the London fix, with last print 4,030.95. The session high is 4,087.19, which is essentially the daily R2 (4,085.04) and almost exactly the 50% retrace of the week range (4,087.93 — see Levels below). Spot got rejected at the fib midpoint on the first attempt and the day's range has compressed back to the mid-4,030s.

The catalyst for the relief bid is real-yield easing — TIPS 10y is down 4 bp on the day to 2.19% — but the offset is DXY, which jumped 1.10% intraday and printed daily RSI 70.5 (extended on the buy side). Investing.com's wire crystallised the regime in two consecutive headlines I'll quote by name: "Gold set for 4th straight weekly slide on resilient dollar, Fed hike bets" and "Dollar retreats as US inflation data eases rate hike expectations." Same day, opposite drivers — that's why the market is chopping.

Multi-timeframe read

  • 15m / 1h (constructive): price is above its 20- and 50-EMAs on both timeframes (15m EMA20 4,020.81; 1h EMA50 4,028.26), with RSI 60.4 / 55.8 and 1h MACD histogram positive and rising. Short-term momentum is up.
  • 4h (mixed-to-bearish): RSI 43.5, MACD histogram positive but price 15.2 below the 20-EMA at 4,046.11. The 4h hasn't reclaimed its mean.
  • 1d (bearish but stretched): RSI 32.0 — within striking distance of the conventional 30 oversold trigger. Price is 159 below 20-EMA, 320 below 50-EMA, 447 below 200-EMA. MACD histogram is still negative (-11.06) but the bar is shrinking. Classic late-stage downtrend tape: the trend is down, the momentum is exhausted, and the first bounce is usually sold.

The timeframes agree on direction (down) and diverge on timing: 15m/1h say a bounce is in progress, the 4h says it hasn't earned trust yet, and the daily says the bounce — if it arrives — is a sell.

Macro frame

Lead with real yields, because that is what actually prices gold. The 10y TIPS yield slipped to 2.19% (-4 bp d/d, source: Treasury.gov via the snapshot). Breakevens rose 3 bp to 2.21%, so the nominal 4.40% is sitting almost entirely in the inflation-comp bucket — that's the friendly read for gold (real yields stagnant-to-down, inflation comp holding). On its own this would be a slow-burn tailwind.

The brake is the Fed path. Fed-funds futures into July 29 FOMC: 0% cut, 69% hold, 31% hike. A 31% hike probability at this stage of the cycle is the story — that is what is keeping DXY bid and what crushed gold off the 4,373 weekly high. If those odds slip back toward 10-15% on a soft NFP or PCE next week, real yields fall, DXY tops, and gold gets its squeeze. Bias stays sell until that repricing actually happens.

DXY behaviour confirms: 101.33 with 1d RSI 70.5 and 4h RSI 67.7 — extended but not turning. The 30-day DXY↔XAU correlation is -0.53, so the dollar tail is wagging the gold dog at roughly half-beta. Cross-asset frame: VIX 19.70 (+4.3%) — risk tone deteriorating but not panic; GVZ 29.58 — gold IV is rich, options pricing a real move; gold/silver 69.2, silver $58.27 — silver outperforming gold is consistent with a late-cycle precious-metals rinse, not a regime change; WTI $70.06 (-2.6%) — soft crude argues no near-term inflation re-acceleration; BTC $60,420 — "digital gold" bid while metal is offered, a classic risk-on rotation away from a defensive trade.

CFTC COT (week of Jun 16): managed money still net long +180,220 (211k longs vs 31k shorts); commercials net short -207,563. The spec community remains heavily long into a falling tape — that's overhang. Capitulation flushes typically come from longs unwinding, and we haven't seen one print yet.

Two scenarios

Conviction figures below are a qualitative desk read, not a back-tested probability.

Sell setup

  • Trigger: rejection at 4,049-4,058 — daily R1 (4,049.68) stacked with weekly S1 (4,058.68) and just under the 61.8% fib of the week range (4,057.50). 1h or 15m bearish engulfing / lower-high print into this zone.
  • Invalidation: sustained hourly close above 4,087 (daily R2 + session high + 50% fib at 4,087.93). Three confluences in one tape — if they go, the bounce is real.
  • Target: 3,929 (daily S2), with a stretch to 3,894 (daily S3).
  • Conviction: 60%.
  • Rationale: the daily trend is down, the 4h hasn't reclaimed its 20-EMA, DXY is bid, and the COT shows spec longs still need to bleed. The 4,049-4,087 band is the cleanest stack of resistance on the chart — daily R1, weekly S1 (former support now resistance), the fib 0.618, and the session high all sit inside 38 dollars. That is where smart sellers reload.

Buy setup

  • Trigger: 3,972-3,962 holds (daily S1 + weekly S2) AND price reclaims the 4,007 daily pivot on the hourly close.
  • Invalidation: hourly close below 3,929 (daily S2).
  • Target: 4,049 (daily R1) — into the sell zone.
  • Conviction: 40%.
  • Rationale: daily RSI 32 is at the threshold where short-covering bounces print, real yields are easing, and the cluster of supports at 3,972/3,962 is real (multi-timeframe pivot confluence). This is a scalp, not a trend trade. Take it off into the sell zone above; do not hold through 4,049.

Levels worth marking

  • Resistance: 4,049.68 (D R1) · 4,057.50 (fib 0.618) · 4,058.68 (W S1) — cluster · 4,085.04 (D R2) · 4,087.93 (fib 0.500) · 4,087.19 (session high) — cluster · 4,127.33 (D R3) · 4,156.01 (fib 0.236) · 4,190.06 (daily 20-EMA — overhead heavy).
  • Support: 4,014.18 (fib 0.786) · 4,007.39 (D pivot) · 3,972.03 (D S1) · 3,962.40 (W S2) — cluster · 3,959.00 (week + session low) · 3,929.74 (D S2) · 3,894.38 (D S3) · 3,804.77 (W S3 — major).

The single most important level on this chart is the 4,049-4,058 cluster — it is where the entire short-side thesis lives or dies.

Calendar / catalysts

Pulled from the ForexFactory block. Note this is a backward-looking window — the next forward-looking high-impact US event (NFP, ISM, PCE, FOMC minutes) is not in the supplied calendar, so I'll flag what we have and say plainly: I don't have next week's high-impact prints in this brief.

  • Mon Jun 22 — CAD CPI m/m actual 1.0% vs forecast 0.7% (hot; CAD-positive, BoC repricing).
  • Mon Jun 22 — EUR ECB President Lagarde Speaks (×2).
  • Tue Jun 23 — EU/UK/US flash PMIs. US Flash Manufacturing 55.7 (forecast 54.6) and Services 51.3 — both hot, both reinforcing the hawkish Fed repricing visible in fed-funds futures. This is the macro print that did the damage to gold this week.

For Monday: the immediate catalyst risk in the supplied window is Asian session price discovery after a hawkish-PMI close. The next big event to pencil — not in this brief — is the run-in to the July 29 FOMC and any pre-meeting Fed speakers.

Sources cited

  • Treasury.gov via snapshot — 10y TIPS real yield (2.19%, -4 bp).
  • CFTC COT, week ended Jun 16 — managed-money / commercial positioning.
  • Investing.com headlines — "Gold set for 4th straight weekly slide on resilient dollar, Fed hike bets" and "Dollar retreats as US inflation data eases rate hike expectations."
  • Investing.com technical aggregate — daily Strong Sell, sub-indicators (RSI/MACD/MA) Buy. Divergence noted in body.
  • ForexFactory — calendar block (CAD CPI, ECB Lagarde, flash PMIs).
  • Fed-funds futures implied odds (next FOMC Jul 29) — via snapshot.

Desk summary & bias

Gold is in a four-week downtrend driven by hawkish Fed repricing (0% cut, 31% hike for July) and a bid DXY (101.33, +1.10% intraday), partially offset by easing real yields (TIPS 2.19%, -4 bp). Tactical conditions are stretched: daily RSI 32, daily MACD histogram shrinking, intraday timeframes turning up — but spec longs (COT +180k) have not capitulated yet. The single most important thing to watch is whether the 4,049-4,058 confluence caps the bounce — if it does, sellers re-engage into 3,929 and the breakdown thesis to the weekly S3 (3,805) stays alive; if it breaks, expect a squeeze to the 4,087-4,127 zone before the trend re-asserts. Monday risk: thin Asian liquidity into a hot-PMI weekend setup.

# Bias Setup Trigger Entry zone Invalidation Target Conviction Why
1 SELL Bounce-fade 1h rejection in supply cluster 4,049 – 4,058 4,087 3,929 60% D R1 + W S1 + fib 0.618 stack; 4h still below 20-EMA; DXY bid
2 BUY Oversold scalp Hold 3,972 + 1h reclaim 4,007 3,972 – 4,007 3,929 4,049 40% Daily RSI 32; real yields easing; D S1 / W S2 confluence
3 SELL Trend breakdown 1h close < 3,929 3,929 3,972 3,894 (stretch 3,805) 50% If S2 fails, weekly S3 is the magnet; COT spec longs need to bleed

Net desk bias: SELL.

The hawkish Fed path is the dominant driver — until 31% July-hike odds get repriced lower, DXY stays bid and gold sells the rip. The daily trend is down, intraday is just retracing into resistance, and the 4,049-4,058 stack is the cleanest short on the board with a tight 30-dollar invalidation. I'm weighting macro over the stretched-oversold signal because the spec community (COT) hasn't capitulated and four straight down weeks rarely end without a flush. If real yields collapse 10+ bp next week on a soft data print I flip — but until the tape shows it, the trade is bounce-fade.

(not financial advice)

//@version=5
indicator("Gold Desk 2026-06-26 — 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.yellow, 0), linewidth=1)
plot(ema50, "EMA50", color=color.new(color.orange, 0), linewidth=1)
plot(ema200, "EMA200", color=color.new(color.red, 0), linewidth=2)

// ── Swing anchors (week range from brief) ──
swingHigh = 4216.86
swingLow = 3959.00
rng = swingHigh - swingLow

// ── Fibonacci retracement of the weekly swing ──
fib0   = swingHigh
fib236 = swingHigh - rng * 0.236
fib382 = swingHigh - rng * 0.382
fib500 = swingHigh - rng * 0.500
fib618 = swingHigh - rng * 0.618
fib786 = swingHigh - rng * 0.786
fib100 = swingLow
hline(fib0,   "Fib 0",     color=color.new(color.gray, 30), linestyle=hline.style_dotted)
hline(fib236, "Fib 0.236", color=color.new(color.gray, 40), linestyle=hline.style_dotted)
hline(fib382, "Fib 0.382", color=color.new(color.gray, 40), linestyle=hline.style_dotted)
hline(fib786, "Fib 0.786", color=color.new(color.gray, 40), linestyle=hline.style_dotted)
hline(fib100, "Fib 1.0",   color=color.new(color.gray, 30), linestyle=hline.style_dotted)

// ── Golden pocket (0.5 – 0.618) ──
var box gpBox = na
if barstate.islast
    box.delete(gpBox)
    gpBox := box.new(bar_index - 200, fib500, bar_index + 30, fib618, bgcolor=color.new(color.yellow, 80), border_color=color.new(color.yellow, 40))
    label.new(bar_index + 30, (fib500 + fib618) / 2, "Golden pocket 4057-4088", style=label.style_label_left, color=color.new(color.yellow, 60), textcolor=color.white, size=size.small)

// ── Supply / Resistance cluster (4049 – 4087) ──
var box supplyBox = na
if barstate.islast
    box.delete(supplyBox)
    supplyBox := box.new(bar_index - 200, 4087.0, bar_index + 30, 4049.0, bgcolor=color.new(color.red, 82), border_color=color.new(color.red, 40))
    label.new(bar_index + 30, 4068.0, "Supply 4049-4087 (D R1 + W S1 + fib 0.618)", style=label.style_label_left, color=color.new(color.red, 50), textcolor=color.white, size=size.small)

// ── Demand / Support cluster (3962 – 3972) ──
var box demandBox = na
if barstate.islast
    box.delete(demandBox)
    demandBox := box.new(bar_index - 200, 3972.0, bar_index + 30, 3962.0, bgcolor=color.new(color.green, 82), border_color=color.new(color.green, 40))
    label.new(bar_index + 30, 3967.0, "Demand 3962-3972 (D S1 + W S2)", style=label.style_label_left, color=color.new(color.green, 50), textcolor=color.white, size=size.small)

// ── Key pivots (daily + weekly) ──
hline(4007.39, "D Pivot",  color=color.new(color.blue, 30),   linestyle=hline.style_solid)
hline(4049.68, "D R1",     color=color.new(color.red, 30),    linestyle=hline.style_solid)
hline(4085.04, "D R2",     color=color.new(color.red, 50),    linestyle=hline.style_dashed)
hline(3972.03, "D S1",     color=color.new(color.green, 30),  linestyle=hline.style_solid)
hline(3929.74, "D S2",     color=color.new(color.green, 50),  linestyle=hline.style_dashed)
hline(3894.38, "D S3",     color=color.new(color.green, 70),  linestyle=hline.style_dotted)
hline(4216.31, "W Pivot",  color=color.new(color.purple, 40), linestyle=hline.style_solid)
hline(3804.77, "W S3",     color=color.new(color.purple, 60), linestyle=hline.style_dotted)

// ── Trade Idea 1: SELL Bounce-fade ──
var line s1_inv = na
var line s1_tgt = na
if barstate.islast
    line.delete(s1_inv)
    line.delete(s1_tgt)
    s1_inv := line.new(bar_index - 100, 4087.0, bar_index + 50, 4087.0, color=color.new(color.red, 0), style=line.style_dashed, width=2)
    s1_tgt := line.new(bar_index - 100, 3929.0, bar_index + 50, 3929.0, color=color.new(color.red, 20), style=line.style_solid, width=2)
    label.new(bar_index + 50, 4087.0, "SELL #1 Inv 4087", style=label.style_label_left, color=color.new(color.red, 20), textcolor=color.white, size=size.small)
    label.new(bar_index + 50, 3929.0, "SELL #1 Target 3929 — 60%", style=label.style_label_left, color=color.new(color.red, 20), textcolor=color.white, size=size.small)

// ── Trade Idea 2: BUY Oversold scalp ──
var box   buyEntry = na
var line  b1_inv   = na
var line  b1_tgt   = na
if barstate.islast
    box.delete(buyEntry)
    line.delete(b1_inv)
    line.delete(b1_tgt)
    buyEntry := box.new(bar_index - 50, 4007.0, bar_index + 50, 3972.0, bgcolor=color.new(color.lime, 80), border_color=color.new(color.lime, 30))
    b1_inv := line.new(bar_index - 50, 3929.0, bar_index + 50, 3929.0, color=color.new(color.lime, 0), style=line.style_dashed, width=2)
    b1_tgt := line.new(bar_index - 50, 4049.0, bar_index + 50, 4049.0, color=color.new(color.lime, 0), style=line.style_solid, width=2)
    label.new(bar_index + 50, 3990.0, "BUY #2 Scalp 3972-4007 — 40%", style=label.style_label_left, color=color.new(color.lime, 20), textcolor=color.black, size=size.small)
    label.new(bar_index + 50, 4049.0, "BUY #2 Target 4049", style=label.style_label_left, color=color.new(color.lime, 20), textcolor=color.black, size=size.small)

// ── Trade Idea 3: SELL Breakdown ──
var line s3_tgt = na
if barstate.islast
    line.delete(s3_tgt)
    s3_tgt := line.new(bar_index - 50, 3894.0, bar_index + 50, 3894.0, color=color.new(color.red, 40), style=line.style_dotted, width=2)
    label.new(bar_index + 50, 3894.0, "SELL #3 Breakdown tgt 3894 (stretch 3805) — 50%", style=label.style_label_left, color=color.new(color.red, 40), textcolor=color.white, size=size.small)

// ── Net-bias banner ──
var table biasT = table.new(position.top_right, 2, 5, bgcolor=color.new(color.black, 20), border_width=1)
if barstate.islast
    table.cell(biasT, 0, 0, "Desk bias",        text_color=color.white, bgcolor=color.new(color.gray, 50))
    table.cell(biasT, 1, 0, "SELL",             text_color=color.white, bgcolor=color.new(color.red, 20))
    table.cell(biasT, 0, 1, "Spot",             text_color=color.white)
    table.cell(biasT, 1, 1, "4030.95",          text_color=color.white)
    table.cell(biasT, 0, 2, "10y real (TIPS)",  text_color=color.white)
    table.cell(biasT, 1, 2, "2.19% (-4bp)",     text_color=color.white)
    table.cell(biasT, 0, 3, "DXY",              text_color=color.white)
    table.cell(biasT, 1, 3, "101.33 (+1.10%)",  text_color=color.white)
    table.cell(biasT, 0, 4, "Fed Jul 29 odds",  text_color=color.white)
    table.cell(biasT, 1, 4, "0% cut / 69% hold / 31% hike", text_color=color.white)
{"bias": "SELL",
 "ideas": [
   {"bias": "SELL", "label": "Bounce-fade", "entry_low": 4049, "entry_high": 4058, "invalidation": 4087, "target": 3929, "conviction": 60},
   {"bias": "BUY", "label": "Oversold scalp", "entry_low": 3972, "entry_high": 4007, "invalidation": 3929, "target": 4049, "conviction": 40},
   {"bias": "SELL", "label": "Trend breakdown", "entry_low": 3929, "entry_high": 3929, "invalidation": 3972, "target": 3894, "conviction": 50}
 ]}

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-26 — 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.yellow, 0), linewidth=1)
plot(ema50, "EMA50", color=color.new(color.orange, 0), linewidth=1)
plot(ema200, "EMA200", color=color.new(color.red, 0), linewidth=2)

// ── Swing anchors (week range from brief) ──
swingHigh = 4216.86
swingLow = 3959.00
rng = swingHigh - swingLow

// ── Fibonacci retracement of the weekly swing ──
fib0   = swingHigh
fib236 = swingHigh - rng * 0.236
fib382 = swingHigh - rng * 0.382
fib500 = swingHigh - rng * 0.500
fib618 = swingHigh - rng * 0.618
fib786 = swingHigh - rng * 0.786
fib100 = swingLow
hline(fib0,   "Fib 0",     color=color.new(color.gray, 30), linestyle=hline.style_dotted)
hline(fib236, "Fib 0.236", color=color.new(color.gray, 40), linestyle=hline.style_dotted)
hline(fib382, "Fib 0.382", color=color.new(color.gray, 40), linestyle=hline.style_dotted)
hline(fib786, "Fib 0.786", color=color.new(color.gray, 40), linestyle=hline.style_dotted)
hline(fib100, "Fib 1.0",   color=color.new(color.gray, 30), linestyle=hline.style_dotted)

// ── Golden pocket (0.5 – 0.618) ──
var box gpBox = na
if barstate.islast
    box.delete(gpBox)
    gpBox := box.new(bar_index - 200, fib500, bar_index + 30, fib618, bgcolor=color.new(color.yellow, 80), border_color=color.new(color.yellow, 40))
    label.new(bar_index + 30, (fib500 + fib618) / 2, "Golden pocket 4057-4088", style=label.style_label_left, color=color.new(color.yellow, 60), textcolor=color.white, size=size.small)

// ── Supply / Resistance cluster (4049 – 4087) ──
var box supplyBox = na
if barstate.islast
    box.delete(supplyBox)
    supplyBox := box.new(bar_index - 200, 4087.0, bar_index + 30, 4049.0, bgcolor=color.new(color.red, 82), border_color=color.new(color.red, 40))
    label.new(bar_index + 30, 4068.0, "Supply 4049-4087 (D R1 + W S1 + fib 0.618)", style=label.style_label_left, color=color.new(color.red, 50), textcolor=color.white, size=size.small)

// ── Demand / Support cluster (3962 – 3972) ──
var box demandBox = na
if barstate.islast
    box.delete(demandBox)
    demandBox := box.new(bar_index - 200, 3972.0, bar_index + 30, 3962.0, bgcolor=color.new(color.green, 82), border_color=color.new(color.green, 40))
    label.new(bar_index + 30, 3967.0, "Demand 3962-3972 (D S1 + W S2)", style=label.style_label_left, color=color.new(color.green, 50), textcolor=color.white, size=size.small)

// ── Key pivots (daily + weekly) ──
hline(4007.39, "D Pivot",  color=color.new(color.blue, 30),   linestyle=hline.style_solid)
hline(4049.68, "D R1",     color=color.new(color.red, 30),    linestyle=hline.style_solid)
hline(4085.04, "D R2",     color=color.new(color.red, 50),    linestyle=hline.style_dashed)
hline(3972.03, "D S1",     color=color.new(color.green, 30),  linestyle=hline.style_solid)
hline(3929.74, "D S2",     color=color.new(color.green, 50),  linestyle=hline.style_dashed)
hline(3894.38, "D S3",     color=color.new(color.green, 70),  linestyle=hline.style_dotted)
hline(4216.31, "W Pivot",  color=color.new(color.purple, 40), linestyle=hline.style_solid)
hline(3804.77, "W S3",     color=color.new(color.purple, 60), linestyle=hline.style_dotted)

// ── Trade Idea 1: SELL Bounce-fade ──
var line s1_inv = na
var line s1_tgt = na
if barstate.islast
    line.delete(s1_inv)
    line.delete(s1_tgt)
    s1_inv := line.new(bar_index - 100, 4087.0, bar_index + 50, 4087.0, color=color.new(color.red, 0), style=line.style_dashed, width=2)
    s1_tgt := line.new(bar_index - 100, 3929.0, bar_index + 50, 3929.0, color=color.new(color.red, 20), style=line.style_solid, width=2)
    label.new(bar_index + 50, 4087.0, "SELL #1 Inv 4087", style=label.style_label_left, color=color.new(color.red, 20), textcolor=color.white, size=size.small)
    label.new(bar_index + 50, 3929.0, "SELL #1 Target 3929 — 60%", style=label.style_label_left, color=color.new(color.red, 20), textcolor=color.white, size=size.small)

// ── Trade Idea 2: BUY Oversold scalp ──
var box   buyEntry = na
var line  b1_inv   = na
var line  b1_tgt   = na
if barstate.islast
    box.delete(buyEntry)
    line.delete(b1_inv)
    line.delete(b1_tgt)
    buyEntry := box.new(bar_index - 50, 4007.0, bar_index + 50, 3972.0, bgcolor=color.new(color.lime, 80), border_color=color.new(color.lime, 30))
    b1_inv := line.new(bar_index - 50, 3929.0, bar_index + 50, 3929.0, color=color.new(color.lime, 0), style=line.style_dashed, width=2)
    b1_tgt := line.new(bar_index - 50, 4049.0, bar_index + 50, 4049.0, color=color.new(color.lime, 0), style=line.style_solid, width=2)
    label.new(bar_index + 50, 3990.0, "BUY #2 Scalp 3972-4007 — 40%", style=label.style_label_left, color=color.new(color.lime, 20), textcolor=color.black, size=size.small)
    label.new(bar_index + 50, 4049.0, "BUY #2 Target 4049", style=label.style_label_left, color=color.new(color.lime, 20), textcolor=color.black, size=size.small)

// ── Trade Idea 3: SELL Breakdown ──
var line s3_tgt = na
if barstate.islast
    line.delete(s3_tgt)
    s3_tgt := line.new(bar_index - 50, 3894.0, bar_index + 50, 3894.0, color=color.new(color.red, 40), style=line.style_dotted, width=2)
    label.new(bar_index + 50, 3894.0, "SELL #3 Breakdown tgt 3894 (stretch 3805) — 50%", style=label.style_label_left, color=color.new(color.red, 40), textcolor=color.white, size=size.small)

// ── Net-bias banner ──
var table biasT = table.new(position.top_right, 2, 5, bgcolor=color.new(color.black, 20), border_width=1)
if barstate.islast
    table.cell(biasT, 0, 0, "Desk bias",        text_color=color.white, bgcolor=color.new(color.gray, 50))
    table.cell(biasT, 1, 0, "SELL",             text_color=color.white, bgcolor=color.new(color.red, 20))
    table.cell(biasT, 0, 1, "Spot",             text_color=color.white)
    table.cell(biasT, 1, 1, "4030.95",          text_color=color.white)
    table.cell(biasT, 0, 2, "10y real (TIPS)",  text_color=color.white)
    table.cell(biasT, 1, 2, "2.19% (-4bp)",     text_color=color.white)
    table.cell(biasT, 0, 3, "DXY",              text_color=color.white)
    table.cell(biasT, 1, 3, "101.33 (+1.10%)",  text_color=color.white)
    table.cell(biasT, 0, 4, "Fed Jul 29 odds",  text_color=color.white)
    table.cell(biasT, 1, 4, "0% cut / 69% hold / 31% hike", text_color=color.white)
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

dollar bid, longs not done bleeding