Let's talk
gold July 3, 2026 · 16 min read

Gold Rips to 4,188 on Jobs Miss — But Real Yields Aren't Cooperating

The soft-payrolls impulse hammered the dollar (DXY 100.80, -0.67%) and PAXG ripped +5.01% intraday from 3,972 to 4,188 — one of the largest single-session bounces of the quarter. But look one layer deeper: the 10y **real** yield actually ticked *up* a basis point to 2.26%, fed-funds futures still assign zero probability to a July cut, and the entire rally was fuelled by DXY weakness rather than a real-rate re-pricing. That means the rally sits on a soft floor. Managed money is already +181k net long into this pop, RSI is 72–74 on 1h/4h, and the daily is still trading *below* both EMA50 and EMA200. The lean is to fade strength into weekly R1, buy the golden pocket if the bid returns.


The soft-payrolls impulse hammered the dollar (DXY 100.80, -0.67%) and PAXG ripped +5.01% intraday from 3,972 to 4,188 — one of the largest single-session bounces of the quarter. But look one layer deeper: the 10y real yield actually ticked up a basis point to 2.26%, fed-funds futures still assign zero probability to a July cut, and the entire rally was fuelled by DXY weakness rather than a real-rate re-pricing. That means the rally sits on a soft floor. Managed money is already +181k net long into this pop, RSI is 72–74 on 1h/4h, and the daily is still trading below both EMA50 and EMA200. The lean is to fade strength into weekly R1, buy the golden pocket if the bid returns.

The session

Price is 4,173.78 as of 08:00 UTC, sitting just above daily R1 (4,165.50) after a violent 216-point session range (3,972.71 – 4,188.74). The high prints exactly at the 4,188 area that investing.com's own headline flagged — "Gold breaks double bottom at $4,187: Hourly levels" — so that level is now the pivot of the day: reject and you get mean-reversion, break and stop-runs open weekly R1 at 4,213.16.

The catalytic story per investing.com's wire: "Gold prices rise, set for positive week after soft jobs data cools rate hike bets" and "Dollar slides after jobs data, chipmakers weigh on stocks." That's consistent with the DXY collapse we're seeing on the tape (-0.67% intraday, RSI 38 on the hourly, MACD histogram flipping negative on 1h/4h). The COMEX GC=F front-month prints 4,188.50 — a $14.72 premium to PAXG spot, standard contango but on the wide end, which suggests futures desks are the ones leading this move rather than physical.

Multi-timeframe read

  • 15m — RSI 62.5, MACD histogram negative but rising, price +7 above EMA20 and +22 above EMA50. Consolidation just under the session high. Micro-bullish but exhausted.
  • 1h — RSI 72.0 (overbought), MACD histogram rolling over (0.60 and falling), price +33 above EMA20 and +74 above EMA50. Classic bearish-momentum-divergence set-up in the making — price at highs while MACD histogram declines.
  • 4h — RSI 73.8, MACD histogram 16.0 and falling, price stretched +84 above EMA20. This is the most stretched leg on the multi-TF read and the highest-probability mean-reversion venue.
  • 1d — RSI 50.1, MACD histogram 17.08 and rising. But the structural context is bearish: price is +39 above EMA20 yet -110 below EMA50 (4,284.16) and -276 below EMA200 (4,450.19). The daily says: this is a counter-trend bounce inside a broader downtrend.

Agreement: short-term momentum long, medium-term overbought and rolling. Divergence: the daily bias is still down while intraday is euphoric. That's a low-conviction environment for chase-longs and a higher-conviction one for tactical fades.

Note the disagreement with investing.com's automated aggregate — they flag daily Neutral but their MA panel prints Strong Buy (12/0) and both RSI/MACD read Buy. My read is more bearish than theirs on the short-term overbought, less bearish than the daily structure implies. The honest synthesis is a two-way tape into weekly R1.

Macro frame

Lead with real yields, because that's what actually moves gold.

  • US 10y REAL yield (TIPS): 2.26%, +1 bp d/d. Real yields rose on the same session gold ripped. That is not a normal gold-rally environment — it means the bid is coming from DXY-cross flow, not from a discount-rate re-pricing. Real yields at 2.26% remain historically restrictive for gold.
  • 10y breakeven inflation: 2.23%, flat. No inflation impulse in the tape.
  • 10y nominal: 4.49%, +1 bp. The whole move in nominal is real, none is inflation. That is a hawkish decomposition.
  • Fed odds (Jul 29 FOMC): cut 0%, hold 80%, hike 20%. Current upper bound 3.75%. Markets are not pricing dovishness — they're pricing a still-hawkish Fed with a 20% chance of another hike. Softer jobs prints have not (yet) shifted the policy path.
  • DXY: 100.80, -0.67% intraday, -0.55% week. The rolling 30-day DXY↔XAU correlation is -0.53 — meaningfully negative but not tight, so DXY is a driver, not the driver.

The macro contradiction: gold is rallying on DXY-flow while real yields sit unchanged and Fed odds stay hawkish. If DXY finds a floor into next week (RSI 38 on the hourly is getting stretched to the downside), the real-yield gravity reasserts and gold has no fundamental support to hold 4,188+.

Cross-asset:

  • VIX 15.84 (-1.9%) — equity risk is calm, no fear bid in gold.
  • GVZ 26.00 — moderate gold implied vol, market is not pricing a big continuation. Realised vol today already outran implied.
  • Gold/silver 66.0 — silver at $63.28 is participating, no defensive-only bid.
  • WTI $68.49 — flat, no inflation flare-up.
  • BTC $61,686 — the "digital gold" trade is not confirming the gold move; the safe-haven flow is asymmetric to bullion today.

ECB colour is broadly dovish-tilting — Bloomberg: "ECB Views Splinter on Next Rate Move as Inflation Sinks With Oil", and Stournaras seeing a smaller likelihood of a further hike. But Kaasik still calls one more hike reasonable. EUR-side dovishness would ordinarily lift DXY, but that has not been today's story.

Two scenarios

(Note: conviction figures below are qualitative confidence, not back-tested probabilities.)

Sell setup

  • Trigger: rejection wick / 15m close back under 4,165.50 (daily R1) after a re-test of 4,188.74 (session high) or 4,213.16 (weekly R1)
  • Invalidation: 4h close above 4,213.16 (weekly R1) — that opens 4,274 daily R3
  • Target: first 4,097.71 (daily pivot), then golden pocket 4,057–4,088
  • Conviction: 60%
  • Rationale: 1h RSI 72, 4h RSI 74, both MACD histograms rolling over, price +84 above 4h EMA20, daily still under EMA50/EMA200. Managed money at +181k net long is heavy positioning going into this pop. The macro decomp (real yields up, Fed odds hawkish) does not support extension.

Buy setup

  • Trigger: pullback into 4,097–4,138 (daily pivot to fib 0.236 of weekly range) that holds with a bullish 1h engulf
  • Invalidation: daily close below 4,056.52 (daily S1) — that voids the reclaim thesis and opens the weekly S1 at 3,955
  • Target: first 4,213.16 (weekly R1), stretch 4,274 (daily R3)
  • Conviction: 40%
  • Rationale: the daily MACD histogram is expanding positive and price has reclaimed EMA20 daily. If the DXY breakdown is real and continues (RSI 38 has room), the -0.53 correlation supports a second leg. Lower conviction because it's counter to the macro-decomposition read.

Levels worth marking

  • Weekly R1 4,213.16 — the line in the sand for the bearish read. Break-and-hold flips near-term bias.
  • Session high 4,188.74 — investing.com's flagged "double bottom break" level; intraday pivot.
  • Daily R1 4,165.50 — currently overhead-become-support; a break here is the first mean-reversion signal.
  • Daily pivot 4,097.71 — first magnet on any pullback; coincides with fib 0.382 of session range (4,106) — mild confluence.
  • Golden pocket 4,057–4,088 — 0.5–0.618 of the weekly swing (3,959–4,217). Highest-probability reaction zone. Also stacked with weekly pivot 4,086.08 and daily S1 4,056.52. Best long-entry venue.
  • Weekly S1 3,955.30 — full trend-reversal invalidation level.
  • Daily EMA50 4,284.16 / EMA200 4,450.19 — the daily structural ceiling. Nothing bullish structurally until 4,284 is reclaimed.

Calendar / catalysts

From the pre-fetched ForexFactory block, today (Fri Jul 3):

  • 11:00am · EUR · Medium · ECB President Lagarde Speaks — headline risk for EUR/USD → DXY → gold. Given the ECB-splinter narrative on wires, dovish Lagarde = EUR down = DXY up = gold headwind.
  • GBP · Medium · BOE Gov Bailey Speaks — secondary DXY driver.

The heavy US data (NFP, CPI) window that catalysed today's move has already printed earlier this week; nothing on the pre-fetched calendar carries US-high impact today. Weekend gap risk is elevated after a 216-point range session.

Sources cited

  • investing.com — headlines ("Gold breaks double bottom at $4,187", "Gold prices rise, set for positive week after soft jobs data") and technical aggregate (daily Neutral, MA Strong Buy)
  • Bloomberg — ECB coverage (Lagarde/Les Echos, Stournaras, Kaasik, ECB Views Splinter)
  • Treasury.gov — 10y TIPS real yield 2.26%, breakeven 2.23%, nominal 4.49%
  • CFTC COT (2026-06-23) — managed-money net +181,339
  • ForexFactory — Jul 3 Lagarde and Bailey speaker risk
  • onewordnews commodity sentiment aggregate — flat (+0.00)

Desk summary & bias

Gold ripped +5.01% intraday to 4,188 on a jobs-miss / DXY-collapse impulse, but the macro decomposition is not confirming: real yields ticked up, Fed odds still price 80% hold / 20% hike / 0% cut, and DXY↔XAU correlation of -0.53 means dollar-flow is helping but not the driver a real-rate re-pricing would be. Technically, 1h RSI 72 and 4h RSI 74 sit stretched into weekly R1 (4,213.16) while the daily is still below EMA50/EMA200 — a counter-trend bounce inside a broader downtrend. Managed-money net +181k long is heavy positioning to fade into. Watch the 4,188.74 / 4,213.16 rejection zone and the 4,057–4,088 golden pocket on any give-back.

# Bias Setup Trigger Entry zone Invalidation Target Conviction Why
1 SELL Overbought fade at weekly R1 15m rejection wick under 4,165.50 after tag of 4,188.74–4,213.16 4,188.74–4,213.16 4,213.16 (4h close above) 4,097.71, stretch 4,057 60% 1h/4h RSI 72–74, MACD rolling over, real yields not confirming, COT long-heavy
2 BUY Golden-pocket reclaim Bullish 1h engulf inside 4,097–4,138 4,097.71–4,138.00 4,056.52 (daily close) 4,213.16, stretch 4,274.48 40% Daily MACD hist expanding, EMA20 daily reclaimed, DXY oversold on hourly
3 SELL Trend continuation from weekly R1 breakdown 4h close below weekly pivot 4,086.08 after failed 4,213 test 4,086–4,097 (on retest) 4,138.00 3,955.30 (weekly S1) 45% Daily structure still under EMA50/EMA200 4,284/4,450, macro-decomp hawkish, GVZ 26 says market not pricing continuation

Net desk bias: SELL — with tactical willingness to buy the golden pocket. The 5% intraday rip is a DXY-flow event, not a real-yield event, and Fed-funds futures aren't validating the dovish read the tape is celebrating. On the multi-TF, 1h/4h are overbought into weekly R1 and the daily is still structurally bearish under EMA50/EMA200. I'm weighting the macro over the intraday momentum because real yields are the primary gold driver and they're moving the wrong way. Flip me bullish above 4,213.16 on a 4h close.

(not financial advice)

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

// ── Inputs / constants (all levels sourced from the desk note) ──
sessHigh   = 4188.74
sessLow    = 3972.71
weekHigh   = 4216.86
weekLow    = 3959.00
dailyR3    = 4274.48
dailyR2    = 4206.69
dailyR1    = 4165.50
dailyPivot = 4097.71
dailyS1    = 4056.52
dailyS2    = 3988.73
weeklyR1   = 4213.16
weeklyP    = 4086.08
weeklyS1   = 3955.30
dEma50     = 4284.16
dEma200    = 4450.19

// ── 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=2)
plot(ema200, title="EMA200", color=color.new(color.red, 0),    linewidth=2)

// ── Fibonacci retracement of weekly swing 3959.00 → 4216.86 ──
range      = weekHigh - weekLow
fib236     = weekHigh - range * 0.236
fib382     = weekHigh - range * 0.382
fib500     = weekHigh - range * 0.500
fib618     = weekHigh - range * 0.618
fib786     = weekHigh - range * 0.786
hline(fib236, "Fib 0.236", color=color.new(color.gray, 30), linestyle=hline.style_dotted)
hline(fib382, "Fib 0.382", color=color.new(color.gray, 20), linestyle=hline.style_dotted)
hline(fib500, "Fib 0.500", color=color.new(color.gray, 10), linestyle=hline.style_dashed)
hline(fib618, "Fib 0.618", color=color.new(color.gray, 10), linestyle=hline.style_dashed)
hline(fib786, "Fib 0.786", color=color.new(color.gray, 30), linestyle=hline.style_dotted)

// ── Golden pocket (0.5 – 0.618) — shaded box ──
var box gpBox = na
if bar_index % 5 == 0
    box.delete(gpBox)
    gpBox := box.new(bar_index - 100, fib500, bar_index + 20, fib618, bgcolor=color.new(color.yellow, 80), border_color=color.new(color.yellow, 40), text="GOLDEN POCKET 4057-4088", text_color=color.yellow, text_size=size.small)

// ── Supply / resistance zones (reddish) ──
var box supply1 = na
if bar_index % 5 == 0
    box.delete(supply1)
    supply1 := box.new(bar_index - 100, weeklyR1, bar_index + 20, sessHigh, bgcolor=color.new(color.red, 82), border_color=color.new(color.red, 40), text="SUPPLY 4188.74 - 4213.16 (weekly R1)", text_color=color.red, text_size=size.small)

var box supply2 = na
if bar_index % 5 == 0
    box.delete(supply2)
    supply2 := box.new(bar_index - 100, dEma50 - 10, bar_index + 20, dEma50 + 10, bgcolor=color.new(color.maroon, 82), border_color=color.new(color.maroon, 40), text="DAILY EMA50 CEILING 4284", text_color=color.maroon, text_size=size.small)

// ── Demand / support zones (greenish) ──
var box demand1 = na
if bar_index % 5 == 0
    box.delete(demand1)
    demand1 := box.new(bar_index - 100, dailyPivot, bar_index + 20, dailyR1 - 27, bgcolor=color.new(color.green, 85), border_color=color.new(color.green, 40), text="DEMAND 4097 - 4138 (BUY entry)", text_color=color.green, text_size=size.small)

var box demand2 = na
if bar_index % 5 == 0
    box.delete(demand2)
    demand2 := box.new(bar_index - 100, weeklyS1, bar_index + 20, dailyS2, bgcolor=color.new(color.teal, 85), border_color=color.new(color.teal, 40), text="STRUCTURAL DEMAND 3955 - 3989", text_color=color.teal, text_size=size.small)

// ── Pivots I actually care about ──
hline(dailyR1,    "Daily R1 4165.50",    color=color.new(color.red, 30), linestyle=hline.style_solid)
hline(dailyPivot, "Daily Pivot 4097.71", color=color.new(color.gray, 10), linestyle=hline.style_solid)
hline(dailyS1,    "Daily S1 4056.52",    color=color.new(color.green, 30), linestyle=hline.style_solid)
hline(weeklyR1,   "Weekly R1 4213.16",   color=color.new(color.red, 0), linestyle=hline.style_solid)
hline(weeklyP,    "Weekly Pivot 4086.08",color=color.new(color.gray, 0), linestyle=hline.style_solid)
hline(weeklyS1,   "Weekly S1 3955.30",   color=color.new(color.green, 0), linestyle=hline.style_solid)

// ── Trade idea 1: SELL — bounce-fade at weekly R1 ──
var box sellEntry = na
if bar_index % 5 == 0
    box.delete(sellEntry)
    sellEntry := box.new(bar_index - 30, sessHigh, bar_index + 30, weeklyR1, bgcolor=color.new(color.red, 70), border_color=color.new(color.red, 20), text="SELL 4188.74 - 4213.16 (60%)", text_color=color.white, text_size=size.small)
line.new(bar_index - 30, weeklyR1, bar_index + 30, weeklyR1, color=color.new(color.red, 0), style=line.style_solid, width=2)
line.new(bar_index - 30, dailyPivot, bar_index + 30, dailyPivot, color=color.new(color.lime, 0), style=line.style_dashed, width=1)
label.new(bar_index + 30, weeklyR1, "SELL invalidation 4213.16", color=color.new(color.red, 60), textcolor=color.white, style=label.style_label_left, size=size.small)
label.new(bar_index + 30, dailyPivot, "SELL target 4097.71", color=color.new(color.lime, 60), textcolor=color.black, style=label.style_label_left, size=size.small)

// ── Trade idea 2: BUY — golden-pocket reclaim ──
var box buyEntry = na
if bar_index % 5 == 0
    box.delete(buyEntry)
    buyEntry := box.new(bar_index - 30, dailyPivot, bar_index + 30, 4138.00, bgcolor=color.new(color.green, 70), border_color=color.new(color.green, 20), text="BUY 4097.71 - 4138.00 (40%)", text_color=color.white, text_size=size.small)
line.new(bar_index - 30, dailyS1, bar_index + 30, dailyS1, color=color.new(color.red, 0), style=line.style_dashed, width=1)
line.new(bar_index - 30, weeklyR1, bar_index + 30, weeklyR1, color=color.new(color.lime, 20), style=line.style_solid, width=1)
label.new(bar_index + 30, dailyS1, "BUY invalidation 4056.52", color=color.new(color.red, 60), textcolor=color.white, style=label.style_label_left, size=size.small)
label.new(bar_index + 30, weeklyR1 - 5, "BUY target 4213.16", color=color.new(color.lime, 60), textcolor=color.black, style=label.style_label_left, size=size.small)

// ── Trade idea 3: SELL continuation on weekly-pivot breakdown ──
line.new(bar_index - 30, weeklyP, bar_index + 30, weeklyP, color=color.new(color.orange, 0), style=line.style_dotted, width=2)
label.new(bar_index + 30, weeklyP, "TREND SELL trigger < 4086.08 → target 3955.30 (45%)", color=color.new(color.orange, 40), textcolor=color.white, style=label.style_label_left, size=size.small)

// ── Net-bias banner ──
var table biasBox = table.new(position.top_right, 2, 6, bgcolor=color.new(color.black, 20), border_width=1)
if barstate.islast
    table.cell(biasBox, 0, 0, "GOLD DESK", text_color=color.yellow, bgcolor=color.new(color.black, 10), text_size=size.normal)
    table.cell(biasBox, 1, 0, "2026-07-03", text_color=color.yellow, bgcolor=color.new(color.black, 10), text_size=size.normal)
    table.cell(biasBox, 0, 1, "Net bias", text_color=color.white, text_size=size.small)
    table.cell(biasBox, 1, 1, "SELL", text_color=color.red, bgcolor=color.new(color.red, 80), text_size=size.large)
    table.cell(biasBox, 0, 2, "Real yield", text_color=color.white, text_size=size.small)
    table.cell(biasBox, 1, 2, "2.26% +1bp", text_color=color.red, text_size=size.small)
    table.cell(biasBox, 0, 3, "DXY", text_color=color.white, text_size=size.small)
    table.cell(biasBox, 1, 3, "100.80 -0.67%", text_color=color.green, text_size=size.small)
    table.cell(biasBox, 0, 4, "Fed Jul29", text_color=color.white, text_size=size.small)
    table.cell(biasBox, 1, 4, "hold80 / hike20 / cut0", text_color=color.red, text_size=size.small)
    table.cell(biasBox, 0, 5, "4h RSI", text_color=color.white, text_size=size.small)
    table.cell(biasBox, 1, 5, "73.8 overbought", text_color=color.red, text_size=size.small)

// ── Key-level callouts on last bar ──
if barstate.islast
    label.new(bar_index, sessHigh, "SESSION HIGH 4188.74", color=color.new(color.red, 40), textcolor=color.white, style=label.style_label_down, size=size.small)
    label.new(bar_index, fib500, "Fib 0.500 = 4087.93", color=color.new(color.yellow, 60), textcolor=color.black, style=label.style_label_left, size=size.small)
    label.new(bar_index, fib618, "Fib 0.618 = 4057.50", color=color.new(color.yellow, 60), textcolor=color.black, style=label.style_label_left, size=size.small)
    label.new(bar_index, dEma200, "Daily EMA200 4450.19 (structural ceiling)", color=color.new(color.red, 60), textcolor=color.white, style=label.style_label_left, size=size.small)
{"bias": "SELL",
 "ideas": [
   {"bias": "SELL", "label": "Overbought fade at weekly R1", "entry_low": 4188.74, "entry_high": 4213.16,
    "invalidation": 4213.16, "target": 4097.71, "conviction": 60},
   {"bias": "BUY", "label": "Golden-pocket reclaim", "entry_low": 4097.71, "entry_high": 4138.00,
    "invalidation": 4056.52, "target": 4213.16, "conviction": 40},
   {"bias": "SELL", "label": "Trend continuation on weekly-pivot breakdown", "entry_low": 4086.08, "entry_high": 4097.71,
    "invalidation": 4138.00, "target": 3955.30, "conviction": 45}
 ]}

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

// ── Inputs / constants (all levels sourced from the desk note) ──
sessHigh   = 4188.74
sessLow    = 3972.71
weekHigh   = 4216.86
weekLow    = 3959.00
dailyR3    = 4274.48
dailyR2    = 4206.69
dailyR1    = 4165.50
dailyPivot = 4097.71
dailyS1    = 4056.52
dailyS2    = 3988.73
weeklyR1   = 4213.16
weeklyP    = 4086.08
weeklyS1   = 3955.30
dEma50     = 4284.16
dEma200    = 4450.19

// ── 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=2)
plot(ema200, title="EMA200", color=color.new(color.red, 0),    linewidth=2)

// ── Fibonacci retracement of weekly swing 3959.00 → 4216.86 ──
range      = weekHigh - weekLow
fib236     = weekHigh - range * 0.236
fib382     = weekHigh - range * 0.382
fib500     = weekHigh - range * 0.500
fib618     = weekHigh - range * 0.618
fib786     = weekHigh - range * 0.786
hline(fib236, "Fib 0.236", color=color.new(color.gray, 30), linestyle=hline.style_dotted)
hline(fib382, "Fib 0.382", color=color.new(color.gray, 20), linestyle=hline.style_dotted)
hline(fib500, "Fib 0.500", color=color.new(color.gray, 10), linestyle=hline.style_dashed)
hline(fib618, "Fib 0.618", color=color.new(color.gray, 10), linestyle=hline.style_dashed)
hline(fib786, "Fib 0.786", color=color.new(color.gray, 30), linestyle=hline.style_dotted)

// ── Golden pocket (0.5 – 0.618) — shaded box ──
var box gpBox = na
if bar_index % 5 == 0
    box.delete(gpBox)
    gpBox := box.new(bar_index - 100, fib500, bar_index + 20, fib618, bgcolor=color.new(color.yellow, 80), border_color=color.new(color.yellow, 40), text="GOLDEN POCKET 4057-4088", text_color=color.yellow, text_size=size.small)

// ── Supply / resistance zones (reddish) ──
var box supply1 = na
if bar_index % 5 == 0
    box.delete(supply1)
    supply1 := box.new(bar_index - 100, weeklyR1, bar_index + 20, sessHigh, bgcolor=color.new(color.red, 82), border_color=color.new(color.red, 40), text="SUPPLY 4188.74 - 4213.16 (weekly R1)", text_color=color.red, text_size=size.small)

var box supply2 = na
if bar_index % 5 == 0
    box.delete(supply2)
    supply2 := box.new(bar_index - 100, dEma50 - 10, bar_index + 20, dEma50 + 10, bgcolor=color.new(color.maroon, 82), border_color=color.new(color.maroon, 40), text="DAILY EMA50 CEILING 4284", text_color=color.maroon, text_size=size.small)

// ── Demand / support zones (greenish) ──
var box demand1 = na
if bar_index % 5 == 0
    box.delete(demand1)
    demand1 := box.new(bar_index - 100, dailyPivot, bar_index + 20, dailyR1 - 27, bgcolor=color.new(color.green, 85), border_color=color.new(color.green, 40), text="DEMAND 4097 - 4138 (BUY entry)", text_color=color.green, text_size=size.small)

var box demand2 = na
if bar_index % 5 == 0
    box.delete(demand2)
    demand2 := box.new(bar_index - 100, weeklyS1, bar_index + 20, dailyS2, bgcolor=color.new(color.teal, 85), border_color=color.new(color.teal, 40), text="STRUCTURAL DEMAND 3955 - 3989", text_color=color.teal, text_size=size.small)

// ── Pivots I actually care about ──
hline(dailyR1,    "Daily R1 4165.50",    color=color.new(color.red, 30), linestyle=hline.style_solid)
hline(dailyPivot, "Daily Pivot 4097.71", color=color.new(color.gray, 10), linestyle=hline.style_solid)
hline(dailyS1,    "Daily S1 4056.52",    color=color.new(color.green, 30), linestyle=hline.style_solid)
hline(weeklyR1,   "Weekly R1 4213.16",   color=color.new(color.red, 0), linestyle=hline.style_solid)
hline(weeklyP,    "Weekly Pivot 4086.08",color=color.new(color.gray, 0), linestyle=hline.style_solid)
hline(weeklyS1,   "Weekly S1 3955.30",   color=color.new(color.green, 0), linestyle=hline.style_solid)

// ── Trade idea 1: SELL — bounce-fade at weekly R1 ──
var box sellEntry = na
if bar_index % 5 == 0
    box.delete(sellEntry)
    sellEntry := box.new(bar_index - 30, sessHigh, bar_index + 30, weeklyR1, bgcolor=color.new(color.red, 70), border_color=color.new(color.red, 20), text="SELL 4188.74 - 4213.16 (60%)", text_color=color.white, text_size=size.small)
line.new(bar_index - 30, weeklyR1, bar_index + 30, weeklyR1, color=color.new(color.red, 0), style=line.style_solid, width=2)
line.new(bar_index - 30, dailyPivot, bar_index + 30, dailyPivot, color=color.new(color.lime, 0), style=line.style_dashed, width=1)
label.new(bar_index + 30, weeklyR1, "SELL invalidation 4213.16", color=color.new(color.red, 60), textcolor=color.white, style=label.style_label_left, size=size.small)
label.new(bar_index + 30, dailyPivot, "SELL target 4097.71", color=color.new(color.lime, 60), textcolor=color.black, style=label.style_label_left, size=size.small)

// ── Trade idea 2: BUY — golden-pocket reclaim ──
var box buyEntry = na
if bar_index % 5 == 0
    box.delete(buyEntry)
    buyEntry := box.new(bar_index - 30, dailyPivot, bar_index + 30, 4138.00, bgcolor=color.new(color.green, 70), border_color=color.new(color.green, 20), text="BUY 4097.71 - 4138.00 (40%)", text_color=color.white, text_size=size.small)
line.new(bar_index - 30, dailyS1, bar_index + 30, dailyS1, color=color.new(color.red, 0), style=line.style_dashed, width=1)
line.new(bar_index - 30, weeklyR1, bar_index + 30, weeklyR1, color=color.new(color.lime, 20), style=line.style_solid, width=1)
label.new(bar_index + 30, dailyS1, "BUY invalidation 4056.52", color=color.new(color.red, 60), textcolor=color.white, style=label.style_label_left, size=size.small)
label.new(bar_index + 30, weeklyR1 - 5, "BUY target 4213.16", color=color.new(color.lime, 60), textcolor=color.black, style=label.style_label_left, size=size.small)

// ── Trade idea 3: SELL continuation on weekly-pivot breakdown ──
line.new(bar_index - 30, weeklyP, bar_index + 30, weeklyP, color=color.new(color.orange, 0), style=line.style_dotted, width=2)
label.new(bar_index + 30, weeklyP, "TREND SELL trigger < 4086.08 → target 3955.30 (45%)", color=color.new(color.orange, 40), textcolor=color.white, style=label.style_label_left, size=size.small)

// ── Net-bias banner ──
var table biasBox = table.new(position.top_right, 2, 6, bgcolor=color.new(color.black, 20), border_width=1)
if barstate.islast
    table.cell(biasBox, 0, 0, "GOLD DESK", text_color=color.yellow, bgcolor=color.new(color.black, 10), text_size=size.normal)
    table.cell(biasBox, 1, 0, "2026-07-03", text_color=color.yellow, bgcolor=color.new(color.black, 10), text_size=size.normal)
    table.cell(biasBox, 0, 1, "Net bias", text_color=color.white, text_size=size.small)
    table.cell(biasBox, 1, 1, "SELL", text_color=color.red, bgcolor=color.new(color.red, 80), text_size=size.large)
    table.cell(biasBox, 0, 2, "Real yield", text_color=color.white, text_size=size.small)
    table.cell(biasBox, 1, 2, "2.26% +1bp", text_color=color.red, text_size=size.small)
    table.cell(biasBox, 0, 3, "DXY", text_color=color.white, text_size=size.small)
    table.cell(biasBox, 1, 3, "100.80 -0.67%", text_color=color.green, text_size=size.small)
    table.cell(biasBox, 0, 4, "Fed Jul29", text_color=color.white, text_size=size.small)
    table.cell(biasBox, 1, 4, "hold80 / hike20 / cut0", text_color=color.red, text_size=size.small)
    table.cell(biasBox, 0, 5, "4h RSI", text_color=color.white, text_size=size.small)
    table.cell(biasBox, 1, 5, "73.8 overbought", text_color=color.red, text_size=size.small)

// ── Key-level callouts on last bar ──
if barstate.islast
    label.new(bar_index, sessHigh, "SESSION HIGH 4188.74", color=color.new(color.red, 40), textcolor=color.white, style=label.style_label_down, size=size.small)
    label.new(bar_index, fib500, "Fib 0.500 = 4087.93", color=color.new(color.yellow, 60), textcolor=color.black, style=label.style_label_left, size=size.small)
    label.new(bar_index, fib618, "Fib 0.618 = 4057.50", color=color.new(color.yellow, 60), textcolor=color.black, style=label.style_label_left, size=size.small)
    label.new(bar_index, dEma200, "Daily EMA200 4450.19 (structural ceiling)", color=color.new(color.red, 60), textcolor=color.white, style=label.style_label_left, 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

Dollar cracked, real yields didn't blink