Let's talk
gold August 5, 2026 · 14 min read

Gold: $4,200 tag on a Hormuz Bid, But the Tape is Overbought

The Iran–US Hormuz de-escalation headline collapsed the dollar, trimmed the front-end hike premium, and squeezed gold into a fresh weekly high at 4,169.81 — spot COMEX printed north of 4,225. But the 1h RSI is at 78.5, price is +77 above its 1h EMA50, and we're pinned into the weekly R2 / daily R3 confluence with real yields still at 2.40%. The macro impulse is genuine; the entry is not. Desk is a fade-first, buy-the-dip second.


The Iran–US Hormuz de-escalation headline collapsed the dollar, trimmed the front-end hike premium, and squeezed gold into a fresh weekly high at 4,169.81 — spot COMEX printed north of 4,225. But the 1h RSI is at 78.5, price is +77 above its 1h EMA50, and we're pinned into the weekly R2 / daily R3 confluence with real yields still at 2.40%. The macro impulse is genuine; the entry is not. Desk is a fade-first, buy-the-dip second.

The session

Spot gold (PAXG proxy) prints 4,162.02 as of 08:00 UTC, +2.54% intraday and +2.81% on the week. The session range is a wide 4,021.00 to 4,169.81 — a full 148-dollar sweep that ran from below the daily pivot to a hair under the weekly R2 (4,168.93). Futures (GC front-month) are trading 4,225.20, a rich +1.52% basis over PAXG spot, consistent with futures leading a sharp intraday impulse and physical/ETF flows still catching up.

The catalyst is unambiguous. Per investing.com the headline is "Gold tops $4,200 as Hormuz deal hopes trim Fed hike bets, dollar slips" — the same tape that's got the FTSE bid on Iran-U.S. Hormuz de-escalation and the TSX at a record on easing Middle East tensions. Oil is soft (WTI $76.07, and investing.com notes crude extending a second straight day of slides), which is a curious set-up: falling oil normally reduces inflation risk and lowers gold's short-term appeal — but here gold has been pulled up by the dollar leg (DXY -1.47% to 99.83) and the safe-haven-hedge-then-square-up flow around Middle East event risk. When those things drop out of the tape, so does part of this move.

Multi-timeframe read

The trend is up on every horizon, but the shorter frames are stretched to the point of demanding a mean-reversion:

  • 15m — RSI 71.1, MACD histogram already rolling (-0.69, printing down-ticks). Price is +17.4 above EMA20 and +43.7 above EMA50. First-derivative sell signal.
  • 1h — RSI 78.5, price +51.1 over EMA20 and +77.4 over EMA50. MACD histogram positive but ticking lower. The most-overbought frame we watch.
  • 4h — RSI 72.2, MACD histogram still expanding (+11.04, up). Momentum genuine at this timeframe.
  • 1d — RSI a moderate 59.2, MACD building (+11.06, up). Crucially, price is still -181.9 dollars BELOW the daily EMA200 at 4,343.92. That is a substantial overhead magnet-cum-resistance and the reason the daily read is bullish-but-capped rather than trending.

Where they agree: trend is up, dip-buying regime intact. Where they diverge: 15m/1h say "stop chasing"; 4h/1d say "the higher-timeframe bid isn't done." That divergence is exactly what a fade at resistance / buy on the pullback expresses.

Investing.com's automated aggregate reads Strong Buy (12/0 across MA5–MA200). That's a lagging-MA snapshot; it does not disagree with our directional read but it does miss the RSI-78 exhaustion signal that a discretionary trader has to weight. Note the divergence: their algo says pile in, ours says pile in lower.

Macro frame

Real yields are the primary driver and they are the piece worth reading carefully. The 10y TIPS (real) yield is at 2.40%, down 3bp d/d, with the 10y breakeven at 2.23% (-4bp) and the 10y nominal at 4.63% (-7bp = 3bp real + 4bp breakeven). A drop in both real yield and breakeven inflation is the "growth-scare / geopolitics fades" combination — real rates fall because forward growth expectations soften, and breakevens fall because oil is sliding and the Hormuz-tail-risk premium is being unwound. Gold likes leg one, is neutral-to-slightly-negative on leg two, and net-net gets a tailwind. The 2.40% level itself is still historically restrictive, though, which is why the daily EMA200 up at 4,343 is a ceiling and not a runway.

The Fed-odds path is the interesting piece. Fed funds futures now price the September 16 meeting at 0% cut / 43% hold / 57% HIKE off the current 3.75% upper bound. That is a hawkish implied path — one that in isolation should be lifting real yields and capping gold. The fact that real yields fell today anyway tells you the Hormuz-driven risk repricing is dominating the rates tape, not the domestic hike signal. If that geopolitical bid unwinds (a deal signs, or falls apart cleanly rather than smouldering), the 57% hike probability re-asserts and gold's macro tailwind flips to a headwind fast. That is the single biggest risk to the long side of this trade.

DXY is at 99.83, off 1.47% intraday and now below its daily EMA20/EMA50 cluster (100.58/100.37) but still fractionally above its EMA200 (99.38). Daily RSI 36.7 is oversold on a one-day basis. The rolling 30-day DXY↔XAU return correlation is -0.43 — solidly negative and mechanically consistent with today's move — but not so tight that a DXY bounce off EMA200 mechanically kills gold. It would, however, remove today's tailwind.

Cross-asset: VIX at 16.00 (-3.0%) confirms the risk-on tone; there is no equity-market fear supporting the gold bid, so this is a dollar/rates/geopolitics story, not a haven-panic story. GVZ at 23.50 is elevated but not extreme — the options market is pricing more gold vol than usual (fair, given the 148-dollar session range) but is not screaming for a tail move. Gold/silver ratio at 67.1 with silver at $62.03 is a normal-regime PM reading — silver isn't sprinting ahead of gold, which is what you'd expect in a genuine reflation-trade breakout. Bitcoin at $64,123 (+1.0%) is doing its usual disconnected thing. Nothing in the cross-asset tape argues for chasing the highs.

Two scenarios

Reminder: conviction values below are the desk's honest qualitative confidence, not a back-tested probability.

Sell setup

  • Trigger: Rejection wick or 15m close back below 4,153.68 (daily R3) after tagging the 4,168.93 (weekly R2) / 4,169.81 (session high) supply shelf.
  • Invalidation: 1h close above 4,180.00 — that clears the shelf and opens weekly R3 at 4,224.86.
  • Target: 4,097.56 (daily R1) first, stretch to 4,070.33 (daily pivot) which also sits inside the fib golden pocket (4,077.85–4,095.40).
  • Conviction: 60%.
  • Rationale: 1h RSI 78.5 with a MACD histogram already rolling into a confluence of daily R3 + weekly R2 is a textbook mean-reversion set-up. The macro impulse is real but the entry has been paid for. Fade the tag, do not fade the trend.

Buy setup

  • Trigger: Reclaim of 4,070.33 (daily pivot) on a 1h close, ideally after a wick into the 4,077.85–4,095.40 golden pocket.
  • Invalidation: 1h close below 4,052.58 (weekly pivot) — losing the weekly pivot invalidates the "healthy pullback" thesis and opens weekly S1 3,992.16.
  • Target: 4,168.93 retest first, then 4,224.86 (weekly R3).
  • Conviction: 45%.
  • Rationale: Daily/4h trend is up, real yields are supportive, DXY is offered. A pullback into the fib golden pocket / daily pivot cluster is the natural continuation entry. Slightly lower conviction because a Hormuz-deal unwind or a hot ADP/ISM print (Wed calendar) could snap the bid.

Levels worth marking

Supply / above:

  • 4,153.68 — daily R3.
  • 4,168.93 / 4,169.81 — weekly R2 = session high; the shelf.
  • 4,180.00 — desk's line-in-sand for shorts.
  • 4,224.86 — weekly R3, the extension target.
  • 4,343.92 — daily EMA200, the higher-timeframe ceiling.

Support / below:

  • 4,126.45 — daily R2, first minor.
  • 4,108.51 — weekly R1.
  • 4,097.56 — daily R1.
  • 4,077.85–4,095.40 — fib golden pocket from the 4,021 → 4,169.81 session swing.
  • 4,070.33 — daily pivot.
  • 4,052.58 — weekly pivot, primary long invalidation.
  • 4,041.44 — daily S1.
  • 4,014.21 / 3,992.16 — daily S2 / weekly S1, "if it breaks, it breaks" zone.

Calendar / catalysts

From today's ForexFactory pull:

  • Wed Aug 5 · 3:15pm USD · ADP NFP Change (fcst 68K, prev 98K) — Medium. A hot print re-anchors the 57% Sept hike premium and pressures gold.
  • Wed Aug 5 · 5:00pm USD · ISM Services PMI (fcst 54.5, prev 54.0) — Medium, same rates channel. Monday's ISM Manufacturing already beat hard at 55.6 vs 54.0.
  • Wed Aug 5 · 11:30pm USD · President Trump Speaks — headline-risk window; expect thin liquidity.
  • Behind us: ISM Manufacturing 55.6 (hot), Prices Paid 71.1 (still sticky) — both were mildly USD-supportive and gold shrugged them off in favour of the Hormuz story. That tells you what's driving the tape.

Sources cited

Onewordnews / kitco excerpt (spot-desk snapshot); investing.com gold news (Hormuz-deal / $4,200 breakout headline, hourly-levels piece calling out RSI 72); Treasury.gov 10y TIPS (2.40% real yield as of 08/04); CFTC COT — unavailable this run; ForexFactory (ADP, ISM Services, Trump speaks); investing.com automated technical aggregate (Strong Buy); fed-funds futures implied Sept-FOMC odds.

Desk summary & bias

Gold ran 148 dollars in a session on a Hormuz-de-escalation bid that dropped DXY 1.47%, pulled the 10y real yield down 3bp to 2.40%, and tagged the weekly R2 / daily R3 shelf at 4,169.81. The dominant driver is that real-yield leg plus the DXY collapse — but the Fed-odds path still prices a net-hawkish Sept meeting (57% hike, 43% hold, 0% cut), so if the geopolitical bid unwinds, the macro tailwind flips fast. Technically the higher-timeframe trend is up but the 1h is at RSI 78.5 with MACD rolling into a resistance cluster. The single most important thing to watch is Wednesday's ADP + ISM Services — a hot pair reasserts the hike premium and pressures the long.

# Bias Setup Trigger Entry zone Invalidation Target Conviction Why
1 SELL Bounce-fade at W-R2/D-R3 shelf 15m rejection below 4,153.68 after tag of 4,168.93 4,153.68 – 4,180.00 4,180.00 4,070.33 60% 1h RSI 78.5 + MACD rolling into weekly R2 / daily R3 confluence; entry paid for.
2 BUY Golden-pocket dip-buy 1h reclaim of 4,070.33 after wick into pocket 4,070.33 – 4,095.40 4,052.58 4,168.93 45% Daily trend up, real yields down, DXY offered; fib 0.5–0.618 + daily pivot cluster is the natural continuation entry.
3 BUY Breakout continuation (position) Daily close above 4,180.00 4,180.00 – 4,190.00 4,126.45 4,224.86 30% Only for readers who want exposure to a clean weekly-R3 extension if Hormuz optimism holds through ISM. Lower conviction: chases the highs.

Net desk bias: SELL (tactical, 24–48h). The macro impulse is real but the entry is not — 1h RSI 78.5 into weekly R2 with a MACD rolling doesn't reward chasing. We're weighting technicals over macro here because the macro tailwind is precariously dependent on a single (Hormuz) headline whose base case is either quietly signing, quietly stalling, or violently unwinding — two of those three punish the long. If Wednesday's ADP/ISM run hot, that's the double-tap. The higher-timeframe trend keeps us in dip-buy mode on any pullback into the golden pocket, which is why the net stance is fade-first, buy-back-lower, not outright bearish.

(not financial advice)

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

// ── EMAs (trader's baseline) ──
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)

// ── Fixed levels from desk note (session swing 2026-08-05) ──
swing_high = 4169.81
swing_low  = 4021.00
d_r3 = 4153.68
d_r2 = 4126.45
d_r1 = 4097.56
d_p  = 4070.33
d_s1 = 4041.44
w_r3 = 4224.86
w_r2 = 4168.93
w_r1 = 4108.51
w_p  = 4052.58
ema200_daily_ref = 4343.92

// ── Pivots as static hlines (no repaint) ──
hline(w_r3, "Weekly R3", color=color.new(color.red,  50), linestyle=hline.style_dashed)
hline(w_r2, "Weekly R2", color=color.new(color.red,  20))
hline(d_r3, "Daily R3",  color=color.new(color.red,  40))
hline(w_r1, "Weekly R1", color=color.new(color.gray, 40))
hline(d_p,  "Daily P",   color=color.new(color.gray, 20))
hline(w_p,  "Weekly P",  color=color.new(color.blue, 40), linestyle=hline.style_dashed)
hline(ema200_daily_ref, "Daily EMA200 ref", color=color.new(color.maroon, 30), linestyle=hline.style_dotted)

// ── Fibonacci from session low 4021.00 → session high 4169.81 ──
fib_range = swing_high - swing_low
fib_236 = swing_high - fib_range * 0.236
fib_382 = swing_high - fib_range * 0.382
fib_50  = swing_high - fib_range * 0.5
fib_618 = swing_high - fib_range * 0.618
fib_786 = swing_high - fib_range * 0.786

// ── Single-draw guard: paint objects once on last confirmed historical bar ──
if barstate.islastconfirmedhistory
    // ── Fibonacci lines ──
    line.new(bar_index-120, fib_236, bar_index+60, fib_236, color=color.new(color.aqua, 40), style=line.style_dotted)
    line.new(bar_index-120, fib_382, bar_index+60, fib_382, color=color.new(color.aqua, 40), style=line.style_dotted)
    line.new(bar_index-120, fib_786, bar_index+60, fib_786, color=color.new(color.aqua, 40), style=line.style_dotted)
    label.new(bar_index+60, fib_236, "0.236 " + str.tostring(fib_236, "#.##"), textcolor=color.aqua, style=label.style_label_left, color=color.new(color.black, 100), size=size.tiny)
    label.new(bar_index+60, fib_382, "0.382 " + str.tostring(fib_382, "#.##"), textcolor=color.aqua, style=label.style_label_left, color=color.new(color.black, 100), size=size.tiny)
    label.new(bar_index+60, fib_786, "0.786 " + str.tostring(fib_786, "#.##"), textcolor=color.aqua, style=label.style_label_left, color=color.new(color.black, 100), size=size.tiny)

    // ── Golden Pocket (0.5–0.618) shaded ──
    box.new(bar_index-120, fib_50, bar_index+60, fib_618, bgcolor=color.new(color.yellow, 80), border_color=color.new(color.yellow, 40))
    label.new(bar_index+60, (fib_50+fib_618)/2, "Golden Pocket " + str.tostring(fib_618, "#.##") + "–" + str.tostring(fib_50, "#.##"), textcolor=color.yellow, style=label.style_label_left, color=color.new(color.black, 100), size=size.small)

    // ── Supply zone (SELL cluster: D-R3 4153.68 → 4180 line-in-sand) ──
    box.new(bar_index-120, 4180.00, bar_index+60, d_r3, bgcolor=color.new(color.red, 78), border_color=color.new(color.red, 30))
    label.new(bar_index+60, 4166.00, "Supply zone: W-R2 4168.93 / D-R3 4153.68", textcolor=color.new(color.red, 0), style=label.style_label_left, color=color.new(color.black, 100), size=size.small)

    // ── Demand zone (BUY dip: golden pocket / daily pivot) ──
    box.new(bar_index-120, d_r1, bar_index+60, d_p, bgcolor=color.new(color.green, 78), border_color=color.new(color.green, 30))
    label.new(bar_index+60, (d_r1+d_p)/2, "Demand zone: D-R1 4097.56 / D-P 4070.33", textcolor=color.new(color.green, 0), style=label.style_label_left, color=color.new(color.black, 100), size=size.small)

    // ── Secondary demand (weekly pivot area) ──
    box.new(bar_index-120, w_p, bar_index+60, 4041.44, bgcolor=color.new(color.teal, 82), border_color=color.new(color.teal, 40))
    label.new(bar_index+60, (w_p+4041.44)/2, "Deeper demand: W-P 4052.58 / D-S1 4041.44", textcolor=color.teal, style=label.style_label_left, color=color.new(color.black, 100), size=size.tiny)

    // ── SELL trade idea (Idea #1, 60%) ──
    line.new(bar_index-50, 4180.00, bar_index+50, 4180.00, color=color.new(color.red, 0), style=line.style_dashed, width=1)
    label.new(bar_index+50, 4180.00, "SELL invalidation 4180.00", textcolor=color.new(color.red, 0), style=label.style_label_left, color=color.new(color.black, 100), size=size.small)
    line.new(bar_index-50, d_p, bar_index+50, d_p, color=color.new(color.red, 0), style=line.style_solid, width=1)
    label.new(bar_index+50, d_p, "SELL target 4070.33 (60%)", textcolor=color.new(color.red, 0), style=label.style_label_left, color=color.new(color.black, 100), size=size.small)

    // ── BUY trade idea (Idea #2, 45%) ──
    line.new(bar_index-50, w_p, bar_index+50, w_p, color=color.new(color.green, 0), style=line.style_dashed, width=1)
    label.new(bar_index+50, w_p, "BUY invalidation 4052.58", textcolor=color.new(color.green, 0), style=label.style_label_left, color=color.new(color.black, 100), size=size.small)
    line.new(bar_index-50, w_r2, bar_index+50, w_r2, color=color.new(color.green, 0), style=line.style_solid, width=1)
    label.new(bar_index+50, w_r2, "BUY target 4168.93 (45%)", textcolor=color.new(color.green, 0), style=label.style_label_left, color=color.new(color.black, 100), size=size.small)

    // ── Breakout continuation (Idea #3, 30%) ──
    line.new(bar_index-50, w_r3, bar_index+50, w_r3, color=color.new(color.lime, 0), style=line.style_dotted, width=1)
    label.new(bar_index+50, w_r3, "Breakout ext. 4224.86 (30%)", textcolor=color.new(color.lime, 0), style=label.style_label_left, color=color.new(color.black, 100), size=size.tiny)

    // ── Net-bias banner (top-right corner table) ──
    banner = table.new(position.top_right, 2, 5, bgcolor=color.new(color.black, 30), border_width=1, border_color=color.new(color.gray, 50))
    table.cell(banner, 0, 0, "Net Desk Bias", text_color=color.white, bgcolor=color.new(color.gray, 40), text_size=size.small)
    table.cell(banner, 1, 0, "SELL",          text_color=color.white, bgcolor=color.new(color.red, 20),  text_size=size.small)
    table.cell(banner, 0, 1, "Session range", text_color=color.white, text_size=size.tiny)
    table.cell(banner, 1, 1, "4021 – 4169.81", text_color=color.white, text_size=size.tiny)
    table.cell(banner, 0, 2, "10y real yield", text_color=color.white, text_size=size.tiny)
    table.cell(banner, 1, 2, "2.40% (-3bp)",   text_color=color.white, text_size=size.tiny)
    table.cell(banner, 0, 3, "Fed Sep odds",   text_color=color.white, text_size=size.tiny)
    table.cell(banner, 1, 3, "57% hike / 43% hold", text_color=color.white, text_size=size.tiny)
    table.cell(banner, 0, 4, "1h RSI",         text_color=color.white, text_size=size.tiny)
    table.cell(banner, 1, 4, "78.5 (extended)", text_color=color.white, text_size=size.tiny)
{"bias": "SELL",
 "ideas": [
   {"bias": "SELL", "label": "Bounce-fade at W-R2/D-R3 shelf", "entry_low": 4153.68, "entry_high": 4180.00, "invalidation": 4180.00, "target": 4070.33, "conviction": 60},
   {"bias": "BUY",  "label": "Golden-pocket dip-buy", "entry_low": 4070.33, "entry_high": 4095.40, "invalidation": 4052.58, "target": 4168.93, "conviction": 45},
   {"bias": "BUY",  "label": "Breakout continuation (position)", "entry_low": 4180.00, "entry_high": 4190.00, "invalidation": 4126.45, "target": 4224.86, "conviction": 30}
 ]}

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-08-05 — bias SELL", overlay=true, max_lines_count=300, max_labels_count=300, max_boxes_count=100)

// ── EMAs (trader's baseline) ──
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)

// ── Fixed levels from desk note (session swing 2026-08-05) ──
swing_high = 4169.81
swing_low  = 4021.00
d_r3 = 4153.68
d_r2 = 4126.45
d_r1 = 4097.56
d_p  = 4070.33
d_s1 = 4041.44
w_r3 = 4224.86
w_r2 = 4168.93
w_r1 = 4108.51
w_p  = 4052.58
ema200_daily_ref = 4343.92

// ── Pivots as static hlines (no repaint) ──
hline(w_r3, "Weekly R3", color=color.new(color.red,  50), linestyle=hline.style_dashed)
hline(w_r2, "Weekly R2", color=color.new(color.red,  20))
hline(d_r3, "Daily R3",  color=color.new(color.red,  40))
hline(w_r1, "Weekly R1", color=color.new(color.gray, 40))
hline(d_p,  "Daily P",   color=color.new(color.gray, 20))
hline(w_p,  "Weekly P",  color=color.new(color.blue, 40), linestyle=hline.style_dashed)
hline(ema200_daily_ref, "Daily EMA200 ref", color=color.new(color.maroon, 30), linestyle=hline.style_dotted)

// ── Fibonacci from session low 4021.00 → session high 4169.81 ──
fib_range = swing_high - swing_low
fib_236 = swing_high - fib_range * 0.236
fib_382 = swing_high - fib_range * 0.382
fib_50  = swing_high - fib_range * 0.5
fib_618 = swing_high - fib_range * 0.618
fib_786 = swing_high - fib_range * 0.786

// ── Single-draw guard: paint objects once on last confirmed historical bar ──
if barstate.islastconfirmedhistory
    // ── Fibonacci lines ──
    line.new(bar_index-120, fib_236, bar_index+60, fib_236, color=color.new(color.aqua, 40), style=line.style_dotted)
    line.new(bar_index-120, fib_382, bar_index+60, fib_382, color=color.new(color.aqua, 40), style=line.style_dotted)
    line.new(bar_index-120, fib_786, bar_index+60, fib_786, color=color.new(color.aqua, 40), style=line.style_dotted)
    label.new(bar_index+60, fib_236, "0.236 " + str.tostring(fib_236, "#.##"), textcolor=color.aqua, style=label.style_label_left, color=color.new(color.black, 100), size=size.tiny)
    label.new(bar_index+60, fib_382, "0.382 " + str.tostring(fib_382, "#.##"), textcolor=color.aqua, style=label.style_label_left, color=color.new(color.black, 100), size=size.tiny)
    label.new(bar_index+60, fib_786, "0.786 " + str.tostring(fib_786, "#.##"), textcolor=color.aqua, style=label.style_label_left, color=color.new(color.black, 100), size=size.tiny)

    // ── Golden Pocket (0.5–0.618) shaded ──
    box.new(bar_index-120, fib_50, bar_index+60, fib_618, bgcolor=color.new(color.yellow, 80), border_color=color.new(color.yellow, 40))
    label.new(bar_index+60, (fib_50+fib_618)/2, "Golden Pocket " + str.tostring(fib_618, "#.##") + "–" + str.tostring(fib_50, "#.##"), textcolor=color.yellow, style=label.style_label_left, color=color.new(color.black, 100), size=size.small)

    // ── Supply zone (SELL cluster: D-R3 4153.68 → 4180 line-in-sand) ──
    box.new(bar_index-120, 4180.00, bar_index+60, d_r3, bgcolor=color.new(color.red, 78), border_color=color.new(color.red, 30))
    label.new(bar_index+60, 4166.00, "Supply zone: W-R2 4168.93 / D-R3 4153.68", textcolor=color.new(color.red, 0), style=label.style_label_left, color=color.new(color.black, 100), size=size.small)

    // ── Demand zone (BUY dip: golden pocket / daily pivot) ──
    box.new(bar_index-120, d_r1, bar_index+60, d_p, bgcolor=color.new(color.green, 78), border_color=color.new(color.green, 30))
    label.new(bar_index+60, (d_r1+d_p)/2, "Demand zone: D-R1 4097.56 / D-P 4070.33", textcolor=color.new(color.green, 0), style=label.style_label_left, color=color.new(color.black, 100), size=size.small)

    // ── Secondary demand (weekly pivot area) ──
    box.new(bar_index-120, w_p, bar_index+60, 4041.44, bgcolor=color.new(color.teal, 82), border_color=color.new(color.teal, 40))
    label.new(bar_index+60, (w_p+4041.44)/2, "Deeper demand: W-P 4052.58 / D-S1 4041.44", textcolor=color.teal, style=label.style_label_left, color=color.new(color.black, 100), size=size.tiny)

    // ── SELL trade idea (Idea #1, 60%) ──
    line.new(bar_index-50, 4180.00, bar_index+50, 4180.00, color=color.new(color.red, 0), style=line.style_dashed, width=1)
    label.new(bar_index+50, 4180.00, "SELL invalidation 4180.00", textcolor=color.new(color.red, 0), style=label.style_label_left, color=color.new(color.black, 100), size=size.small)
    line.new(bar_index-50, d_p, bar_index+50, d_p, color=color.new(color.red, 0), style=line.style_solid, width=1)
    label.new(bar_index+50, d_p, "SELL target 4070.33 (60%)", textcolor=color.new(color.red, 0), style=label.style_label_left, color=color.new(color.black, 100), size=size.small)

    // ── BUY trade idea (Idea #2, 45%) ──
    line.new(bar_index-50, w_p, bar_index+50, w_p, color=color.new(color.green, 0), style=line.style_dashed, width=1)
    label.new(bar_index+50, w_p, "BUY invalidation 4052.58", textcolor=color.new(color.green, 0), style=label.style_label_left, color=color.new(color.black, 100), size=size.small)
    line.new(bar_index-50, w_r2, bar_index+50, w_r2, color=color.new(color.green, 0), style=line.style_solid, width=1)
    label.new(bar_index+50, w_r2, "BUY target 4168.93 (45%)", textcolor=color.new(color.green, 0), style=label.style_label_left, color=color.new(color.black, 100), size=size.small)

    // ── Breakout continuation (Idea #3, 30%) ──
    line.new(bar_index-50, w_r3, bar_index+50, w_r3, color=color.new(color.lime, 0), style=line.style_dotted, width=1)
    label.new(bar_index+50, w_r3, "Breakout ext. 4224.86 (30%)", textcolor=color.new(color.lime, 0), style=label.style_label_left, color=color.new(color.black, 100), size=size.tiny)

    // ── Net-bias banner (top-right corner table) ──
    banner = table.new(position.top_right, 2, 5, bgcolor=color.new(color.black, 30), border_width=1, border_color=color.new(color.gray, 50))
    table.cell(banner, 0, 0, "Net Desk Bias", text_color=color.white, bgcolor=color.new(color.gray, 40), text_size=size.small)
    table.cell(banner, 1, 0, "SELL",          text_color=color.white, bgcolor=color.new(color.red, 20),  text_size=size.small)
    table.cell(banner, 0, 1, "Session range", text_color=color.white, text_size=size.tiny)
    table.cell(banner, 1, 1, "4021 – 4169.81", text_color=color.white, text_size=size.tiny)
    table.cell(banner, 0, 2, "10y real yield", text_color=color.white, text_size=size.tiny)
    table.cell(banner, 1, 2, "2.40% (-3bp)",   text_color=color.white, text_size=size.tiny)
    table.cell(banner, 0, 3, "Fed Sep odds",   text_color=color.white, text_size=size.tiny)
    table.cell(banner, 1, 3, "57% hike / 43% hold", text_color=color.white, text_size=size.tiny)
    table.cell(banner, 0, 4, "1h RSI",         text_color=color.white, text_size=size.tiny)
    table.cell(banner, 1, 4, "78.5 (extended)", text_color=color.white, text_size=size.tiny)
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

overbought into headlines, fade the tag