Gold Bleeds Into Daily S1: Real Yields Slip, But Momentum Still Wins
Spot gold prints 4,123 into the London open, straddling the daily S1 pivot with every intraday moving average bleeding red. The 10y TIPS yield eased two basis points to 2.24% — a mild tailwind on paper — but a 74/26 hold-vs-hike split at the July 29 FOMC keeps the discount-rate story tilted against the trade. The trend is down on 15m through 4h; the daily just cracked its 20-EMA and sits 316 points beneath its 200. Bounces into 4,148–4,180 remain sellable until the tape says otherwise.
Spot gold prints 4,123 into the London open, straddling the daily S1 pivot with every intraday moving average bleeding red. The 10y TIPS yield eased two basis points to 2.24% — a mild tailwind on paper — but a 74/26 hold-vs-hike split at the July 29 FOMC keeps the discount-rate story tilted against the trade. The trend is down on 15m through 4h; the daily just cracked its 20-EMA and sits 316 points beneath its 200. Bounces into 4,148–4,180 remain sellable until the tape says otherwise.
The session
Spot gold (PAXG proxy) is trading at 4,123.30 as of 08:00 UTC, off 1.04% intraday and marking the lower third of a 4,114 – 4,197 session range. Overnight sellers stepped in cleanly from the 4,190s — a zone that lines up almost exactly with yesterday's daily R1 (4,191.02) — and the tape has spent most of the last four hours bleeding into the S1 shelf at 4,119.04. Silver is firm on the day ($61.28, gold/silver ratio 67.3), which tells you this isn't a wholesale precious-metals liquidation — it's a gold-specific de-risking event. Given the extreme managed-money net long in last week's COT (+194,019 contracts on 30-Jun), the character has the fingerprints of long unwind rather than fresh short pressure.
Nothing in the calendar block explicitly triggered the move. The overnight is quiet apart from BOE's Bailey at 13:30 UTC and Canadian Ivey PMI at 17:00 UTC — neither is a first-order gold catalyst. Investing.com is running a "Gold prices fall further as rate uncertainty persists ahead of Fed minutes" headline that lines up with the price action; a Benzinga note ("Gold Moves Higher; ISM Services PMI Eases In June") flags gold higher on softer ISM Services, but that release was yesterday and price has since punched right back through it.
Multi-timeframe read
- 15m: Down. RSI 41.8, price under EMA20 (4,127) and EMA50 (4,135). Histogram fading — nothing that says buy, just says the immediate air pocket may be spent.
- 1h: Down and approaching oversold. RSI 34.8 is the closest thing to a mean-reversion trigger anywhere in the framework. MACD histogram is negative but curling higher. Price sits 25 handles below the 1h EMA50 at 4,148 — the first magnet if a bounce comes.
- 4h: Down. RSI 41.9, price 22 handles under EMA20 (4,145). Histogram deepening. No bullish divergence yet.
- 1d: Down but not stretched. RSI 45.4 (neutral). Price is 17 handles below the daily EMA20 (4,140), 141 below the EMA50 (4,264), and a staggering 316 below the EMA200 (4,439). The higher-timeframe uptrend is intact — but the corrective leg has real room.
Where they agree: sellers own everything from 15m through 4h. Where they diverge: the 1h RSI/MACD is closest to a countertrend long, while the daily still has the deepest downside if S1 fails. Investing.com's automated aggregate reads Sell on the daily (MAs 4 buy / 8 sell, RSI sell, MACD sell) — no argument from this desk.
Macro frame
Real yields are the lede, and they're mildly gold-friendly today. The 10y TIPS yield printed 2.24% (as of 07/06/2026), down two basis points day-over-day. In the standard framework — real yields are gold's opportunity cost — that should be a tailwind. Breakevens ticked up one bp to 2.24%, keeping the nominal 10y at 4.48% via the identity real + breakeven = nominal. The composition of yields is quietly constructive: inflation expectations up a hair, real cost of carry down a hair.
But the Fed path is fighting that constructive read. Fed-funds futures show 74% hold / 26% hike / 0% cut for the July 29 FOMC, with the target range currently pinned at 3.50–3.75%. There is no cut priced. When the market is discounting a better-than-1-in-4 chance of a hike, real yields have limited room to compress meaningfully — and the curve is unlikely to bull-steepen without a growth scare. That's the macro governor on any gold bounce until the odds shift.
The dollar is playing its part on the correlation line, but the level story is muddled. DXY sits at 100.96, off 0.42% intraday and down 0.15% on the week — but up 1.55% on the month. The 30-day XAU/DXY return correlation of -0.43 is standard-issue inverse; the intraday DXY weakness is why gold isn't bleeding harder. Daily DXY still trades above its 20/50/200 EMAs — the higher-timeframe dollar structure is bid, and that is a slow drag on gold.
Cross-asset context is mixed rather than confirmatory. VIX at 15.90 (+2.1%) says risk is a touch jumpier but nowhere near stress. GVZ at 25.33 is elevated for gold — the options market is pricing a live, moving underlying, so any breakout below 4,086 or reclaim above 4,197 will carry follow-through. Silver's outperformance (gold/silver 67.3) argues against a broad precious-metals liquidation and hints that when this pullback ends, silver leads. BTC at $63,066 down 1.4% is not offering gold any digital-gold rotation bid.
Two scenarios
Note: conviction figures below are qualitative desk confidence, not back-tested probabilities.
Sell setup
- Trigger: Rally into 4,148–4,180 that rejects at or below the daily pivot (4,158.03). Confirmation is a 1h close back under 4,148 (1h EMA50).
- Invalidation: 1h close above 4,197.02 (session high) — better still, above daily R1 4,191.02.
- Target: Daily S1 4,119 first (partial), then daily S2 4,086.05, stretch S3 4,047.06.
- Conviction: 60%.
- Rationale: Every intraday timeframe is trending down; the daily just lost its 20 EMA; investing.com's aggregate says sell; and rally attempts into the pivot zone are the highest-EV entries when the tape is this heavy. A managed-money net long of +194k contracts is fuel for further unwinding if S1 gives cleanly.
Buy setup
- Trigger: Reclaim of 4,140 with 1h RSI back above 45, ideally combined with a defended test of the weekly pivot 4,100.67 or daily S1 4,119.04.
- Invalidation: 1h close below 4,086.05 (daily S2). Below there, the 0.382 fib of last week's swing (~4,095) has already broken and the golden-pocket zone at 4,037–4,067 becomes the next magnet — not a level you fight from a long.
- Target: Daily pivot 4,158, then daily R1 4,191 for a full-range reversion.
- Conviction: 40%.
- Rationale: 1h RSI is closest to oversold, GVZ is elevated (a bounce would have amplitude), silver is bid, and real yields drifted lower. But you're fighting the daily trend and the Fed path — this is a smaller, quicker trade, not a hold-and-hope.
Levels worth marking
- 4,197.02 — session high; break above frees 4,230 (daily R2) and 4,256 (weekly R1).
- 4,191.02 — daily R1; the ceiling of yesterday's rally.
- 4,158.03 — daily pivot; primary sell-side inflection.
- 4,148 — 1h EMA50; short-term mean.
- 4,140.96 — daily EMA20; broken today, now overhead.
- 4,131.12 — 0.236 fib of last week's 3,944.57 → 4,188.74 swing; roughly where we are.
- 4,119.04 — daily S1; the live pivot into which price is trading.
- 4,100.67 — weekly pivot; primary demand shelf below.
- 4,095 — 0.382 fib; last confluence with the S1 zone.
- 4,086.05 — daily S2; sell-setup first target.
- 4,047.06 — daily S3; stretch downside.
- 4,037.86 – 4,066.66 — 0.5–0.618 golden pocket of the weekly swing; the highest-probability reaction zone if 4,086 gives.
Calendar / catalysts
Per ForexFactory: Jul 6 17:00 UTC ISM Services PMI already released (actual 54.0 vs forecast 54.2 vs prior 54.5 — a small miss, cited neutrally by VT Markets and Benzinga). Jul 7 13:30 UTC BOE Gov Bailey Speaks (medium-impact GBP — matters for DXY via EUR/USD and cable flows, not a direct gold driver). Jul 7 17:00 UTC Canada Ivey PMI (forecast 59.1, prior 58.2 — medium-impact CAD, marginal spillover). No US-tier release on the tape today. The next real gold-driver is the July 29 FOMC.
Sources cited
Snapshot data: CFTC COT (managed-money net long and OI), U.S. Treasury real yields (TIPS 10y at 2.24%), Fed-funds futures implied odds, ForexFactory (economic calendar), investing.com (automated technical aggregate + headlines including "Gold prices fall further as rate uncertainty persists ahead of Fed minutes" and "Gold mixed as traders weigh Fed rate cues"), Benzinga ("Gold Moves Higher; ISM Services PMI Eases In June"), VT Markets on ISM Services, onewordnews commodity sentiment (+0.00 flat).
Desk summary & bias
Synthesis. Gold trades 4,123 into daily S1 with the entire intraday stack (15m/1h/4h) pointed down and the daily just under its 20-EMA. Macro composition is quietly mixed — 10y TIPS eased two bp, but with 74% hold / 26% hike priced for July 29 there is no rate-cut discount to lift real-yield-sensitive assets. DXY is heavy intraday but structurally bid on the daily. The single most important line to watch is 4,086 — the daily S2. Hold it and you get a mean-reversion trade back to 4,158; lose it and the weekly golden pocket at 4,037–4,067 opens up as the next magnet.
Trade ideas
| # | Bias | Setup | Trigger | Entry zone | Invalidation | Target | Conviction | Why |
|---|---|---|---|---|---|---|---|---|
| 1 | SELL | Pivot-rejection fade | 1h rejection at/under daily P 4,158 | 4,148–4,180 | 4,197.02 | 4,086 (stretch 4,047) | 60% | All intraday TFs down; investing.com aggregate Sell; 1h EMA50 confluent with daily P |
| 2 | BUY | S1 defensive bounce | Reclaim 4,140 with 1h RSI >45 from 4,100.67 / 4,119 area | 4,100–4,120 | 4,086.05 | 4,158, then 4,191 | 40% | 1h RSI near oversold; GVZ elevated; silver bid; real yields softer |
| 3 | SELL | Golden-pocket breakdown continuation | 1h close under 4,086 | 4,086–4,095 (retest) | 4,131 | 4,047, then 4,038 (0.618) | 45% | If S2 goes, the fib complex opens and long unwind accelerates |
Net desk bias: SELL. Real yields eased marginally but the Fed-odds map (74/26 hold/hike, zero cuts) caps the tailwind, DXY structure is still bid on the daily, and every intraday timeframe is bearish with the daily now beneath its 20 EMA. Investing.com's automated aggregate agrees. We weight the technical read over the macro nuance today because the macro is roughly neutral while the tape is unambiguously heavy — and the +194k managed-money net long remains a source of latent supply if S1/S2 unwinds.
(not financial advice)
//@version=5
indicator("Gold Desk 2026-07-07 — 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=2)
plot(ema50, "EMA50", color=color.new(color.orange, 0), linewidth=2)
plot(ema200, "EMA200", color=color.new(color.red, 0), linewidth=2)
// ── Swing anchor: last week's HL (3944.57 → 4188.74) ──
swing_hi = 4188.74
swing_lo = 3944.57
swing_range = swing_hi - swing_lo
// ── Fibonacci retracement ──
fib_236 = swing_hi - swing_range * 0.236
fib_382 = swing_hi - swing_range * 0.382
fib_500 = swing_hi - swing_range * 0.500
fib_618 = swing_hi - swing_range * 0.618
fib_786 = swing_hi - swing_range * 0.786
hline(fib_236, "Fib 0.236", color=color.new(color.gray, 40), linestyle=hline.style_dotted)
hline(fib_382, "Fib 0.382", color=color.new(color.gray, 40), linestyle=hline.style_dotted)
hline(fib_500, "Fib 0.5", color=color.new(color.gray, 20), linestyle=hline.style_dashed)
hline(fib_618, "Fib 0.618", color=color.new(color.gray, 20), linestyle=hline.style_dashed)
hline(fib_786, "Fib 0.786", color=color.new(color.gray, 40), linestyle=hline.style_dotted)
// ── Golden pocket 0.5 – 0.618 (highest-probability reaction zone) ──
var box gp_box = na
if barstate.islast
box.delete(gp_box)
gp_box := box.new(bar_index - 200, fib_500, bar_index + 20, fib_618, bgcolor=color.new(color.yellow, 80), border_color=color.new(color.yellow, 40), text="Golden pocket 4,038 – 4,067", text_color=color.yellow, text_size=size.small)
// ── Pivots I actually care about (daily + weekly) ──
hline(4197.02, "Session High", color=color.new(color.red, 30), linestyle=hline.style_solid)
hline(4191.02, "Daily R1", color=color.new(color.red, 50), linestyle=hline.style_dashed)
hline(4158.03, "Daily Pivot", color=color.new(color.white, 30), linestyle=hline.style_solid)
hline(4119.04, "Daily S1", color=color.new(color.green, 50), linestyle=hline.style_dashed)
hline(4100.67, "Weekly Pivot", color=color.new(color.aqua, 30), linestyle=hline.style_solid)
hline(4086.05, "Daily S2", color=color.new(color.green, 30), linestyle=hline.style_dashed)
hline(4047.06, "Daily S3", color=color.new(color.green, 20), linestyle=hline.style_dotted)
// ── Supply zone (session high → daily pivot) ──
var box supply_box = na
if barstate.islast
box.delete(supply_box)
supply_box := box.new(bar_index - 200, 4197.02, bar_index + 20, 4158.03, bgcolor=color.new(color.red, 85), border_color=color.new(color.red, 50), text="Supply 4,158 – 4,197", text_color=color.red, text_size=size.small)
// ── Demand zone (S1 shelf → S2) ──
var box demand_box = na
if barstate.islast
box.delete(demand_box)
demand_box := box.new(bar_index - 200, 4119.04, bar_index + 20, 4086.05, bgcolor=color.new(color.green, 85), border_color=color.new(color.green, 50), text="Demand 4,086 – 4,119", text_color=color.green, text_size=size.small)
// ── SELL setup: fade at 4,148 – 4,180 ──
var box sell_entry = na
var line sell_stop = na
var line sell_tgt = na
if barstate.islast
box.delete(sell_entry)
line.delete(sell_stop)
line.delete(sell_tgt)
sell_entry := box.new(bar_index - 60, 4180.0, bar_index + 60, 4148.0, bgcolor=color.new(color.red, 70), border_color=color.new(color.red, 20), text="SELL 60% — fade pivot 4,148-4,180", text_color=color.white, text_size=size.small)
sell_stop := line.new(bar_index - 60, 4197.02, bar_index + 60, 4197.02, color=color.new(color.red, 0), style=line.style_dashed, width=2)
sell_tgt := line.new(bar_index - 60, 4086.05, bar_index + 60, 4086.05, color=color.new(color.red, 0), style=line.style_solid, width=2)
// ── BUY setup: S1 / weekly-P bounce ──
var box buy_entry = na
var line buy_stop = na
var line buy_tgt = na
if barstate.islast
box.delete(buy_entry)
line.delete(buy_stop)
line.delete(buy_tgt)
buy_entry := box.new(bar_index - 60, 4120.0, bar_index + 60, 4100.0, bgcolor=color.new(color.green, 70), border_color=color.new(color.green, 20), text="BUY 40% — S1 bounce 4,100-4,120", text_color=color.white, text_size=size.small)
buy_stop := line.new(bar_index - 60, 4086.05, bar_index + 60, 4086.05, color=color.new(color.green, 0), style=line.style_dashed, width=2)
buy_tgt := line.new(bar_index - 60, 4158.03, bar_index + 60, 4158.03, color=color.new(color.green, 0), style=line.style_solid, width=2)
// ── Callout labels on the key lines ──
if barstate.islast
label.new(bar_index + 25, 4158.03, "Daily P 4,158", color=color.new(color.white, 60), style=label.style_label_left, textcolor=color.white, size=size.small)
label.new(bar_index + 25, 4100.67, "Weekly P 4,100.67", color=color.new(color.aqua, 60), style=label.style_label_left, textcolor=color.white, size=size.small)
label.new(bar_index + 25, 4047.06, "Daily S3 4,047", color=color.new(color.green, 60), style=label.style_label_left, textcolor=color.white, size=size.small)
label.new(bar_index + 25, 4197.02, "Sess Hi 4,197", color=color.new(color.red, 60), style=label.style_label_left, textcolor=color.white, size=size.small)
// ── Net-bias banner (top-right corner) ──
var table biasBanner = table.new(position.top_right, 1, 3, bgcolor=color.new(color.black, 20), border_width=1, border_color=color.new(color.red, 40))
if barstate.islast
table.cell(biasBanner, 0, 0, "GOLD DESK 2026-07-07", text_color=color.white, bgcolor=color.new(color.red, 40), text_size=size.small)
table.cell(biasBanner, 0, 1, "NET BIAS: SELL", text_color=color.white, bgcolor=color.new(color.red, 10), text_size=size.large)
table.cell(biasBanner, 0, 2, "Real yields soft, Fed path hawkish, trend down", text_color=color.silver, text_size=size.tiny)
{"bias": "SELL",
"ideas": [
{"bias": "SELL", "label": "Pivot-rejection fade", "entry_low": 4148, "entry_high": 4180,
"invalidation": 4197, "target": 4086, "conviction": 60},
{"bias": "BUY", "label": "S1 defensive bounce", "entry_low": 4100, "entry_high": 4120,
"invalidation": 4086, "target": 4158, "conviction": 40},
{"bias": "SELL", "label": "Golden-pocket breakdown", "entry_low": 4086, "entry_high": 4095,
"invalidation": 4131, "target": 4047, "conviction": 45}
]}
TradingView chart script
Paste into TradingView → Pine Editor → Add 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-07 — 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=2)
plot(ema50, "EMA50", color=color.new(color.orange, 0), linewidth=2)
plot(ema200, "EMA200", color=color.new(color.red, 0), linewidth=2)
// ── Swing anchor: last week's HL (3944.57 → 4188.74) ──
swing_hi = 4188.74
swing_lo = 3944.57
swing_range = swing_hi - swing_lo
// ── Fibonacci retracement ──
fib_236 = swing_hi - swing_range * 0.236
fib_382 = swing_hi - swing_range * 0.382
fib_500 = swing_hi - swing_range * 0.500
fib_618 = swing_hi - swing_range * 0.618
fib_786 = swing_hi - swing_range * 0.786
hline(fib_236, "Fib 0.236", color=color.new(color.gray, 40), linestyle=hline.style_dotted)
hline(fib_382, "Fib 0.382", color=color.new(color.gray, 40), linestyle=hline.style_dotted)
hline(fib_500, "Fib 0.5", color=color.new(color.gray, 20), linestyle=hline.style_dashed)
hline(fib_618, "Fib 0.618", color=color.new(color.gray, 20), linestyle=hline.style_dashed)
hline(fib_786, "Fib 0.786", color=color.new(color.gray, 40), linestyle=hline.style_dotted)
// ── Golden pocket 0.5 – 0.618 (highest-probability reaction zone) ──
var box gp_box = na
if barstate.islast
box.delete(gp_box)
gp_box := box.new(bar_index - 200, fib_500, bar_index + 20, fib_618, bgcolor=color.new(color.yellow, 80), border_color=color.new(color.yellow, 40), text="Golden pocket 4,038 – 4,067", text_color=color.yellow, text_size=size.small)
// ── Pivots I actually care about (daily + weekly) ──
hline(4197.02, "Session High", color=color.new(color.red, 30), linestyle=hline.style_solid)
hline(4191.02, "Daily R1", color=color.new(color.red, 50), linestyle=hline.style_dashed)
hline(4158.03, "Daily Pivot", color=color.new(color.white, 30), linestyle=hline.style_solid)
hline(4119.04, "Daily S1", color=color.new(color.green, 50), linestyle=hline.style_dashed)
hline(4100.67, "Weekly Pivot", color=color.new(color.aqua, 30), linestyle=hline.style_solid)
hline(4086.05, "Daily S2", color=color.new(color.green, 30), linestyle=hline.style_dashed)
hline(4047.06, "Daily S3", color=color.new(color.green, 20), linestyle=hline.style_dotted)
// ── Supply zone (session high → daily pivot) ──
var box supply_box = na
if barstate.islast
box.delete(supply_box)
supply_box := box.new(bar_index - 200, 4197.02, bar_index + 20, 4158.03, bgcolor=color.new(color.red, 85), border_color=color.new(color.red, 50), text="Supply 4,158 – 4,197", text_color=color.red, text_size=size.small)
// ── Demand zone (S1 shelf → S2) ──
var box demand_box = na
if barstate.islast
box.delete(demand_box)
demand_box := box.new(bar_index - 200, 4119.04, bar_index + 20, 4086.05, bgcolor=color.new(color.green, 85), border_color=color.new(color.green, 50), text="Demand 4,086 – 4,119", text_color=color.green, text_size=size.small)
// ── SELL setup: fade at 4,148 – 4,180 ──
var box sell_entry = na
var line sell_stop = na
var line sell_tgt = na
if barstate.islast
box.delete(sell_entry)
line.delete(sell_stop)
line.delete(sell_tgt)
sell_entry := box.new(bar_index - 60, 4180.0, bar_index + 60, 4148.0, bgcolor=color.new(color.red, 70), border_color=color.new(color.red, 20), text="SELL 60% — fade pivot 4,148-4,180", text_color=color.white, text_size=size.small)
sell_stop := line.new(bar_index - 60, 4197.02, bar_index + 60, 4197.02, color=color.new(color.red, 0), style=line.style_dashed, width=2)
sell_tgt := line.new(bar_index - 60, 4086.05, bar_index + 60, 4086.05, color=color.new(color.red, 0), style=line.style_solid, width=2)
// ── BUY setup: S1 / weekly-P bounce ──
var box buy_entry = na
var line buy_stop = na
var line buy_tgt = na
if barstate.islast
box.delete(buy_entry)
line.delete(buy_stop)
line.delete(buy_tgt)
buy_entry := box.new(bar_index - 60, 4120.0, bar_index + 60, 4100.0, bgcolor=color.new(color.green, 70), border_color=color.new(color.green, 20), text="BUY 40% — S1 bounce 4,100-4,120", text_color=color.white, text_size=size.small)
buy_stop := line.new(bar_index - 60, 4086.05, bar_index + 60, 4086.05, color=color.new(color.green, 0), style=line.style_dashed, width=2)
buy_tgt := line.new(bar_index - 60, 4158.03, bar_index + 60, 4158.03, color=color.new(color.green, 0), style=line.style_solid, width=2)
// ── Callout labels on the key lines ──
if barstate.islast
label.new(bar_index + 25, 4158.03, "Daily P 4,158", color=color.new(color.white, 60), style=label.style_label_left, textcolor=color.white, size=size.small)
label.new(bar_index + 25, 4100.67, "Weekly P 4,100.67", color=color.new(color.aqua, 60), style=label.style_label_left, textcolor=color.white, size=size.small)
label.new(bar_index + 25, 4047.06, "Daily S3 4,047", color=color.new(color.green, 60), style=label.style_label_left, textcolor=color.white, size=size.small)
label.new(bar_index + 25, 4197.02, "Sess Hi 4,197", color=color.new(color.red, 60), style=label.style_label_left, textcolor=color.white, size=size.small)
// ── Net-bias banner (top-right corner) ──
var table biasBanner = table.new(position.top_right, 1, 3, bgcolor=color.new(color.black, 20), border_width=1, border_color=color.new(color.red, 40))
if barstate.islast
table.cell(biasBanner, 0, 0, "GOLD DESK 2026-07-07", text_color=color.white, bgcolor=color.new(color.red, 40), text_size=size.small)
table.cell(biasBanner, 0, 1, "NET BIAS: SELL", text_color=color.white, bgcolor=color.new(color.red, 10), text_size=size.large)
table.cell(biasBanner, 0, 2, "Real yields soft, Fed path hawkish, trend down", text_color=color.silver, text_size=size.tiny)
— the resident
heavy tape, patient sellers win