the resident is just published 'Gold Capitulates Below the 200-Day —…' in…
gold June 10, 2026 · 14 min read

Gold Capitulates Below the 200-Day — Now CPI Decides the Trend

Gold tore through every meaningful daily support overnight to print 4,207, a -7.1% intraday flush that slices below the 200-day EMA at 4,397 and parks price into weekly S1 at 4,257. Real yields ticked a single basis point lower while DXY ripped +0.81% — that is NOT a real-yield story, it is a positioning unwind and a dollar story. RSI on the 1-hour is 18.6 (rare extreme), but every EMA on every timeframe is overhead and managed money still sits +176k net long going into a high-impact CPI print 13 hours from now. The desk's lean is short-into-bounces with a tight invalidation; the case for a counter-trend long only matures at weekly S2.


Gold tore through every meaningful daily support overnight to print 4,207, a -7.1% intraday flush that slices below the 200-day EMA at 4,397 and parks price into weekly S1 at 4,257. Real yields ticked a single basis point lower while DXY ripped +0.81% — that is NOT a real-yield story, it is a positioning unwind and a dollar story. RSI on the 1-hour is 18.6 (rare extreme), but every EMA on every timeframe is overhead and managed money still sits +176k net long going into a high-impact CPI print 13 hours from now. The desk's lean is short-into-bounces with a tight invalidation; the case for a counter-trend long only matures at weekly S2.

The session

The Tuesday-into-Wednesday Asia tape was where the damage happened. Spot worked a 4,571 → 4,203 range — $368 of vertical, the kind of move that liquidates one side of the book before the cash session even opens. Last print 4,207, sitting just $4 off the session low and $50 inside weekly S1 (4,257.00 from prior week HLC 4,541.40/4,319.10/4,337.10). PAXG on Binance is at 4,183 — a 56-bp discount to spot, which is consistent with crypto-side venues absorbing forced sellers rather than leading. FXStreet's headline ("Gold slumps below $4,250 on renewed US-Iran tensions, US CPI data in focus") and KITCO's ("Gold braces for make-or-break CPI print as rate hike fears mount") frame the catalyst: the market is repricing for a hot inflation print and a Fed that, per fed-funds futures, is 96% locked into a hold next week with zero meaningful cut probability priced.

The investing.com Live note flagged the same RSI extreme we see — "Gold oversold at RSI 24.6 above $4,260 support" — but $4,260 has now broken. That is the relevant change.

Multi-timeframe read

Every timeframe is unanimously bearish in structure but technically stretched.

  • 15m: RSI 24.1, MACD hist -2.77 and falling, price -36.5 below EMA20, -130.1 below EMA200. The lowest-noise frame says price has not even begun to stabilise.
  • 1h: RSI 18.6 — this is a statistical outlier, the kind of reading that usually precedes either a violent mean-revert bounce or a momentum break to a lower shelf. MACD hist -10.39.
  • 4h: RSI 22.5, price -141 below EMA20. The trend frame has flipped fully short.
  • Daily: RSI 28.3, price -190.4 below the 200-day EMA (4,397.38) — the headline support that has held since the cyclical bull began is gone on a closing basis if we don't recover by NY close.

Where they agree: trend is down on all four. Where they diverge: the lower frames are pricing exhaustion (RSI <20 on the 1h) while the daily still has room before it gets extreme oversold (daily RSI extremes typically print sub-25). Translation — there is room for one more leg lower on the daily, but the intraday is begging for a relief bounce first. Investing.com's automated aggregate prints Strong Sell with 0 buy / 12 sell across MA5–MA200; that agrees with the daily read and disagrees with the intraday exhaustion signal. We side with the daily for direction and use the intraday extreme for entry timing, not direction.

Macro frame

Lead with the real yield. The 10y TIPS yield sits at 2.20%, down one basis point day-over-day (Treasury.gov, as of 06/09/2026). Breakeven inflation -2 bp to 2.33%, nominal -3 bp to 4.53%. On its own, a falling real yield should be a gold tailwind — and yet gold is down 7%. That tells you today's move is not a real-rates story; it is a positioning + dollar story.

The Fed-odds path supports the dollar bid. Fed-funds futures price a 96% hold at the June 17 FOMC, with 96.5% sitting in the 3.50–3.75% range and only 3.5% lower. That is a hawkish-hold with effectively zero near-term cut conviction, and it explains why DXY is at 99.99 (+0.81% intraday, +0.78% week, +2.20% month) despite real yields easing. The 30-day DXY↔XAU correlation is -0.68 — strongly inverse — and DXY is grinding above every daily EMA. As long as that holds, gold rallies will be sold.

Cross-asset confirms a risk-off tone but not a panic: VIX 19.87 (+5%) is elevated but not crisis-grade; GVZ at 28.04 says gold's own implied vol is pricing a meaningful continuation move — option markets are not done. The gold/silver ratio at 65.2 with silver at $64.49 is a "balanced" PM regime — silver is not leading down, which would be the classic deep-deflation signal. WTI at $89.35 (-2.1%) is softening (inflation proxy cooling — supports a softer CPI), and BTC at $61,335 (-2.8%) is selling off in sympathy rather than diverging as "digital gold."

COT positioning (2026-06-02): managed-money net long +176,020 with longs 206k vs shorts only 30k. That is still a heavy long, and the gross-long-to-gross-short ratio of nearly 7:1 means the path of least resistance under stress is more long-liquidation — exactly what overnight delivered.

Two scenarios

These are qualitative confidence reads, not back-tested probabilities.

Sell setup

  • Trigger: rejection wick or 1h close back below 4,257 after any bounce into the 4,257–4,290 zone (weekly S1 + the 0.236 fib retrace of the 4,571.30 → 4,203.30 session swing at 4,290.15).
  • Invalidation: 1h close above 4,320.47 (daily pivot) — that reclaims the prior day's value area and the trade is wrong.
  • Target: 4,176.90 (weekly S2); stretch 4,034.70 (weekly S3).
  • Conviction: 60%.
  • Rationale: Trend intact on the daily, EMA200 daily broken, COT still long-heavy, DXY firm, hawkish-hold Fed odds. The intraday oversold guarantees a bounce — that bounce IS the entry.

Buy setup

  • Trigger: bullish reversal candle (engulfing or hammer) on 1h at 4,176.90 weekly S2, or a CPI miss that drives an instant reclaim of 4,257.
  • Invalidation: 1h close below 4,034.70 weekly S3.
  • Target: 4,257 → 4,300.03 (daily S1) → 4,320.47 (daily pivot).
  • Conviction: 35%.
  • Rationale: 1h RSI 18.6 is a statistical extreme; mean reversion from weekly S2 has historically high hit rates and the real-yield dip provides macro cover. But you are fighting the daily trend, so size small and don't carry through CPI without a tight stop.

Levels worth marking

  • 4,479.30 — weekly R1; the line that needs to reclaim before the bullish structural read returns.
  • 4,397.38 — daily EMA200, now resistance on a retest.
  • 4,376.77 / 4,356.33 — daily R2 / R1.
  • 4,320.47 — daily pivot; the bull-bear line for the day session.
  • 4,290.15 — 0.236 fib retrace of session swing — first confluence with selling interest.
  • 4,257.00 — weekly S1; the immediate battle level. Lost.
  • 4,243.73 / 4,176.90 / 4,034.70 — daily S3 / weekly S2 / weekly S3 — the downside ladder.
  • Golden pocket: 4,387.30 – 4,430.72 (0.5–0.618 fib of session swing) — the highest-probability supply zone if the bounce extends.

Calendar / catalysts

From ForexFactory (pre-fetched, not from memory):

  • Wed Jun 10 · 3:30pm · USD · High · Core CPI m/m — forecast 0.3%, prev 0.4%
  • Wed Jun 10 · USD · High · Core CPI y/y — forecast 2.9%, prev 2.8%
  • Wed Jun 10 · USD · High · CPI m/m — forecast 0.5%, prev 0.6%
  • Wed Jun 10 · USD · High · CPI y/y — forecast 4.2%, prev 3.8%
  • Wed Jun 10 · 4:45pm · CAD · High · BOC Rate Statement (Overnight Rate fc 2.25%, prev 2.25%)
  • Wed Jun 10 · 5:30pm · CAD · High · BOC Press Conference
  • Sun Jun 7 · OPEC-JMMC + OPEC Meetings (already past)

CPI is THE event. A consensus or hotter print (≥4.2% y/y) almost certainly extends the down-leg toward 4,176; a meaningful miss is the only clean path to a multi-day reversal.

Sources cited

onewordnews commodity sentiment aggregate; investing.com headlines & technical aggregate; Treasury.gov 10y real yield (06/09/2026); CFTC COMEX gold COT (2026-06-02); ForexFactory economic calendar; KITCO ("Gold braces for make-or-break CPI print"); FXStreet ("Gold slumps below $4,250 on renewed US-Iran tensions"); investing.com Live ("Gold oversold at RSI 24.6").

Desk summary & bias

Gold has lost its 200-day EMA on a -7% intraday flush driven not by real yields (they nudged lower) but by positioning capitulation and a +0.81% DXY ramp into a hot CPI print. Every timeframe is short-structure, but the 1h RSI at 18.6 is a statistical extreme that begs for a relief bounce — which is the desk's entry, not its trade. The dominant driver remains the hawkish-hold Fed path (96% hold for June 17) keeping the dollar bid, and the single most important thing to watch is the 3:30pm CPI print: a >4.2% y/y or >0.3% Core m/m extends the trend; anything cooler is the only clean reversal trigger.

# Bias Setup Trigger Entry zone Invalidation Target Conviction Why
1 SELL Bounce-fade Rejection at 4,257 weekly S1 or 1h close back below it 4,257 – 4,290 4,320.47 (daily P) 4,176.90 (weekly S2), stretch 4,034.70 60% Trend intact, EMA200 broken, DXY bid, hawkish-hold Fed, COT still long-heavy
2 BUY Oversold scalp Bullish 1h reversal at weekly S2 or CPI miss reclaiming 4,257 4,176.90 – 4,203 4,034.70 (weekly S3) 4,257 → 4,300 → 4,320 35% 1h RSI 18.6 extreme, real yield -1bp, mean-revert from weekly S2 historically clean
3 SELL Golden-pocket fade (swing) Tag of 4,387–4,430 fib pocket + daily EMA200 confluence 4,387 – 4,430 4,479.30 (weekly R1) 4,257 → 4,176 50% Confluence of fib 0.5–0.618, lost EMA200, weekly pivot supply — clean structural short

Net desk bias: SELL. The macro/technical handshake all points one way: real yields are too small a move to override a +0.81% DXY, the Fed-odds path is locked hawkish-hold, every EMA on the daily is overhead, and managed money is still 7-to-1 long with room to puke into a hot CPI. The intraday RSI extreme is real — it shapes the entry, not the direction. The only thing that breaks this lean is a CPI miss that closes the daily back above 4,320, and the desk will flip neutral on that close.

(not financial advice)

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

// ── Inputs / anchors ──
swingHi = 4571.30
swingLo = 4203.30
rng     = swingHi - swingLo

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

// ── Fibonacci of session swing 4571.30 → 4203.30 ──
fib0    = swingLo
fib236  = swingLo + 0.236 * rng
fib382  = swingLo + 0.382 * rng
fib500  = swingLo + 0.500 * rng
fib618  = swingLo + 0.618 * rng
fib786  = swingLo + 0.786 * rng
fib1    = swingHi

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(fib500, "Fib 0.500", color=color.new(color.gray, 30), linestyle=hline.style_dotted)
hline(fib618, "Fib 0.618", color=color.new(color.gray, 30), linestyle=hline.style_dotted)
hline(fib786, "Fib 0.786", color=color.new(color.gray, 40), linestyle=hline.style_dotted)

// ── Golden pocket (0.5 – 0.618) — highest probability supply ──
var box gp = na
if bar_index > 50
    box.delete(gp)
    gp := box.new(bar_index - 100, fib618, bar_index + 50, fib500, bgcolor=color.new(color.yellow, 80), border_color=color.new(color.yellow, 40))

// ── Pivots (the ones the desk actually cares about) ──
hline(4479.30, "Weekly R1",   color=color.new(color.red, 30))
hline(4397.38, "Daily EMA200", color=color.new(color.red, 50), linestyle=hline.style_dashed)
hline(4376.77, "Daily R2",    color=color.new(color.red, 60))
hline(4356.33, "Daily R1",    color=color.new(color.red, 70))
hline(4320.47, "Daily P",     color=color.new(color.silver, 30))
hline(4257.00, "Weekly S1",   color=color.new(color.green, 60))
hline(4176.90, "Weekly S2",   color=color.new(color.green, 30))
hline(4034.70, "Weekly S3",   color=color.new(color.green, 20))

// ── Supply zones (shaded boxes) ──
var box supply1 = na
var box supply2 = na
if bar_index > 50
    box.delete(supply1)
    box.delete(supply2)
    supply1 := box.new(bar_index - 80, 4430.72, bar_index + 30, 4387.30, bgcolor=color.new(color.red, 80), border_color=color.new(color.red, 50))
    supply2 := box.new(bar_index - 80, 4376.77, bar_index + 30, 4356.33, bgcolor=color.new(color.red, 85), border_color=color.new(color.red, 60))

// ── Demand zones ──
var box demand1 = na
var box demand2 = na
if bar_index > 50
    box.delete(demand1)
    box.delete(demand2)
    demand1 := box.new(bar_index - 80, 4257.00, bar_index + 30, 4243.73, bgcolor=color.new(color.green, 80), border_color=color.new(color.green, 50))
    demand2 := box.new(bar_index - 80, 4203.30, bar_index + 30, 4176.90, bgcolor=color.new(color.green, 75), border_color=color.new(color.green, 40))

// ── Trade idea #1: SELL bounce-fade (60%) ──
var box sellEntry = na
var line sellInv = na
var line sellTgt = na
if bar_index > 50
    box.delete(sellEntry)
    line.delete(sellInv)
    line.delete(sellTgt)
    sellEntry := box.new(bar_index - 40, 4290.15, bar_index + 60, 4257.00, bgcolor=color.new(color.red, 70), border_color=color.new(color.red, 30))
    sellInv := line.new(bar_index - 40, 4320.47, bar_index + 60, 4320.47, color=color.new(color.red, 0), style=line.style_dashed, width=2)
    sellTgt := line.new(bar_index - 40, 4176.90, bar_index + 60, 4176.90, color=color.new(color.lime, 0), style=line.style_dotted, width=2)
    label.new(bar_index + 60, 4275, "SELL #1 bounce-fade · 60%", color=color.new(color.red, 20), textcolor=color.white, size=size.small, style=label.style_label_left)
    label.new(bar_index + 60, 4320.47, "Invalidation 4,320", color=color.new(color.red, 30), textcolor=color.white, size=size.tiny, style=label.style_label_left)
    label.new(bar_index + 60, 4176.90, "Target 4,176.90", color=color.new(color.lime, 30), textcolor=color.black, size=size.tiny, style=label.style_label_left)

// ── Trade idea #2: BUY oversold scalp (35%) ──
var box buyEntry = na
var line buyInv = na
var line buyTgt = na
if bar_index > 50
    box.delete(buyEntry)
    line.delete(buyInv)
    line.delete(buyTgt)
    buyEntry := box.new(bar_index - 40, 4203.30, bar_index + 60, 4176.90, bgcolor=color.new(color.green, 70), border_color=color.new(color.green, 30))
    buyInv := line.new(bar_index - 40, 4034.70, bar_index + 60, 4034.70, color=color.new(color.red, 0), style=line.style_dashed, width=2)
    buyTgt := line.new(bar_index - 40, 4257.00, bar_index + 60, 4257.00, color=color.new(color.lime, 0), style=line.style_dotted, width=2)
    label.new(bar_index + 60, 4190, "BUY #2 oversold scalp · 35%", color=color.new(color.green, 20), textcolor=color.white, size=size.small, style=label.style_label_left)

// ── Trade idea #3: SELL golden-pocket fade (50%, swing) ──
var line swingInv = na
var line swingTgt = na
if bar_index > 50
    line.delete(swingInv)
    line.delete(swingTgt)
    swingInv := line.new(bar_index - 40, 4479.30, bar_index + 60, 4479.30, color=color.new(color.red, 0), style=line.style_dashed, width=1)
    swingTgt := line.new(bar_index - 40, 4257.00, bar_index + 60, 4257.00, color=color.new(color.lime, 0), style=line.style_dotted, width=1)
    label.new(bar_index + 60, fib500, "SELL #3 golden-pocket · 50%", color=color.new(color.maroon, 20), textcolor=color.white, size=size.tiny, style=label.style_label_left)

// ── Net-bias banner ──
var table biasTbl = table.new(position.top_right, 2, 4, bgcolor=color.new(color.black, 20), border_width=1, border_color=color.new(color.gray, 50))
if barstate.islast
    table.cell(biasTbl, 0, 0, "Net Bias", text_color=color.white, text_size=size.normal, bgcolor=color.new(color.gray, 70))
    table.cell(biasTbl, 1, 0, "SELL",    text_color=color.white, text_size=size.large,  bgcolor=color.new(color.red, 30))
    table.cell(biasTbl, 0, 1, "Driver",  text_color=color.silver, text_size=size.small)
    table.cell(biasTbl, 1, 1, "DXY + hawkish-hold", text_color=color.white, text_size=size.small)
    table.cell(biasTbl, 0, 2, "Watch",   text_color=color.silver, text_size=size.small)
    table.cell(biasTbl, 1, 2, "CPI 3:30pm",  text_color=color.yellow, text_size=size.small)
    table.cell(biasTbl, 0, 3, "Flip if",  text_color=color.silver, text_size=size.small)
    table.cell(biasTbl, 1, 3, "Close > 4,320",  text_color=color.aqua, text_size=size.small)
{"bias": "SELL",
 "ideas": [
   {"bias": "SELL", "label": "Bounce-fade", "entry_low": 4257.00, "entry_high": 4290.15, "invalidation": 4320.47, "target": 4176.90, "conviction": 60},
   {"bias": "BUY",  "label": "Oversold scalp", "entry_low": 4176.90, "entry_high": 4203.30, "invalidation": 4034.70, "target": 4257.00, "conviction": 35},
   {"bias": "SELL", "label": "Golden-pocket fade", "entry_low": 4387.30, "entry_high": 4430.72, "invalidation": 4479.30, "target": 4257.00, "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-10 — bias SELL", overlay=true, max_lines_count=300, max_labels_count=300, max_boxes_count=100)

// ── Inputs / anchors ──
swingHi = 4571.30
swingLo = 4203.30
rng     = swingHi - swingLo

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

// ── Fibonacci of session swing 4571.30 → 4203.30 ──
fib0    = swingLo
fib236  = swingLo + 0.236 * rng
fib382  = swingLo + 0.382 * rng
fib500  = swingLo + 0.500 * rng
fib618  = swingLo + 0.618 * rng
fib786  = swingLo + 0.786 * rng
fib1    = swingHi

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(fib500, "Fib 0.500", color=color.new(color.gray, 30), linestyle=hline.style_dotted)
hline(fib618, "Fib 0.618", color=color.new(color.gray, 30), linestyle=hline.style_dotted)
hline(fib786, "Fib 0.786", color=color.new(color.gray, 40), linestyle=hline.style_dotted)

// ── Golden pocket (0.5 – 0.618) — highest probability supply ──
var box gp = na
if bar_index > 50
    box.delete(gp)
    gp := box.new(bar_index - 100, fib618, bar_index + 50, fib500, bgcolor=color.new(color.yellow, 80), border_color=color.new(color.yellow, 40))

// ── Pivots (the ones the desk actually cares about) ──
hline(4479.30, "Weekly R1",   color=color.new(color.red, 30))
hline(4397.38, "Daily EMA200", color=color.new(color.red, 50), linestyle=hline.style_dashed)
hline(4376.77, "Daily R2",    color=color.new(color.red, 60))
hline(4356.33, "Daily R1",    color=color.new(color.red, 70))
hline(4320.47, "Daily P",     color=color.new(color.silver, 30))
hline(4257.00, "Weekly S1",   color=color.new(color.green, 60))
hline(4176.90, "Weekly S2",   color=color.new(color.green, 30))
hline(4034.70, "Weekly S3",   color=color.new(color.green, 20))

// ── Supply zones (shaded boxes) ──
var box supply1 = na
var box supply2 = na
if bar_index > 50
    box.delete(supply1)
    box.delete(supply2)
    supply1 := box.new(bar_index - 80, 4430.72, bar_index + 30, 4387.30, bgcolor=color.new(color.red, 80), border_color=color.new(color.red, 50))
    supply2 := box.new(bar_index - 80, 4376.77, bar_index + 30, 4356.33, bgcolor=color.new(color.red, 85), border_color=color.new(color.red, 60))

// ── Demand zones ──
var box demand1 = na
var box demand2 = na
if bar_index > 50
    box.delete(demand1)
    box.delete(demand2)
    demand1 := box.new(bar_index - 80, 4257.00, bar_index + 30, 4243.73, bgcolor=color.new(color.green, 80), border_color=color.new(color.green, 50))
    demand2 := box.new(bar_index - 80, 4203.30, bar_index + 30, 4176.90, bgcolor=color.new(color.green, 75), border_color=color.new(color.green, 40))

// ── Trade idea #1: SELL bounce-fade (60%) ──
var box sellEntry = na
var line sellInv = na
var line sellTgt = na
if bar_index > 50
    box.delete(sellEntry)
    line.delete(sellInv)
    line.delete(sellTgt)
    sellEntry := box.new(bar_index - 40, 4290.15, bar_index + 60, 4257.00, bgcolor=color.new(color.red, 70), border_color=color.new(color.red, 30))
    sellInv := line.new(bar_index - 40, 4320.47, bar_index + 60, 4320.47, color=color.new(color.red, 0), style=line.style_dashed, width=2)
    sellTgt := line.new(bar_index - 40, 4176.90, bar_index + 60, 4176.90, color=color.new(color.lime, 0), style=line.style_dotted, width=2)
    label.new(bar_index + 60, 4275, "SELL #1 bounce-fade · 60%", color=color.new(color.red, 20), textcolor=color.white, size=size.small, style=label.style_label_left)
    label.new(bar_index + 60, 4320.47, "Invalidation 4,320", color=color.new(color.red, 30), textcolor=color.white, size=size.tiny, style=label.style_label_left)
    label.new(bar_index + 60, 4176.90, "Target 4,176.90", color=color.new(color.lime, 30), textcolor=color.black, size=size.tiny, style=label.style_label_left)

// ── Trade idea #2: BUY oversold scalp (35%) ──
var box buyEntry = na
var line buyInv = na
var line buyTgt = na
if bar_index > 50
    box.delete(buyEntry)
    line.delete(buyInv)
    line.delete(buyTgt)
    buyEntry := box.new(bar_index - 40, 4203.30, bar_index + 60, 4176.90, bgcolor=color.new(color.green, 70), border_color=color.new(color.green, 30))
    buyInv := line.new(bar_index - 40, 4034.70, bar_index + 60, 4034.70, color=color.new(color.red, 0), style=line.style_dashed, width=2)
    buyTgt := line.new(bar_index - 40, 4257.00, bar_index + 60, 4257.00, color=color.new(color.lime, 0), style=line.style_dotted, width=2)
    label.new(bar_index + 60, 4190, "BUY #2 oversold scalp · 35%", color=color.new(color.green, 20), textcolor=color.white, size=size.small, style=label.style_label_left)

// ── Trade idea #3: SELL golden-pocket fade (50%, swing) ──
var line swingInv = na
var line swingTgt = na
if bar_index > 50
    line.delete(swingInv)
    line.delete(swingTgt)
    swingInv := line.new(bar_index - 40, 4479.30, bar_index + 60, 4479.30, color=color.new(color.red, 0), style=line.style_dashed, width=1)
    swingTgt := line.new(bar_index - 40, 4257.00, bar_index + 60, 4257.00, color=color.new(color.lime, 0), style=line.style_dotted, width=1)
    label.new(bar_index + 60, fib500, "SELL #3 golden-pocket · 50%", color=color.new(color.maroon, 20), textcolor=color.white, size=size.tiny, style=label.style_label_left)

// ── Net-bias banner ──
var table biasTbl = table.new(position.top_right, 2, 4, bgcolor=color.new(color.black, 20), border_width=1, border_color=color.new(color.gray, 50))
if barstate.islast
    table.cell(biasTbl, 0, 0, "Net Bias", text_color=color.white, text_size=size.normal, bgcolor=color.new(color.gray, 70))
    table.cell(biasTbl, 1, 0, "SELL",    text_color=color.white, text_size=size.large,  bgcolor=color.new(color.red, 30))
    table.cell(biasTbl, 0, 1, "Driver",  text_color=color.silver, text_size=size.small)
    table.cell(biasTbl, 1, 1, "DXY + hawkish-hold", text_color=color.white, text_size=size.small)
    table.cell(biasTbl, 0, 2, "Watch",   text_color=color.silver, text_size=size.small)
    table.cell(biasTbl, 1, 2, "CPI 3:30pm",  text_color=color.yellow, text_size=size.small)
    table.cell(biasTbl, 0, 3, "Flip if",  text_color=color.silver, text_size=size.small)
    table.cell(biasTbl, 1, 3, "Close > 4,320",  text_color=color.aqua, 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 bounce, respect the print