Bounce Into Resistance: Real Yields Ease, but DXY Rips and the Daily Trend Still Leans Short
Gold is up 0.74% on the session at $4,187 — a real bounce off Friday's 4,120 low, but one that's already running into the daily R3 pivot and the weekly pivot at 4,216 simultaneously. The macro is split: the 10y real yield slipped 2bp to 2.21% (a small tailwind), but DXY ripped 1.44% intraday on a hawkish Fed-odds repricing that now shows zero cuts and a 38% probability of a HIKE next month. The daily trend remains bearish under three EMAs and investing.com's aggregate reads Strong Sell. This is a relief rally to fade unless 4,216 breaks and holds — at which point the golden pocket at 4,222–4,246 becomes the next ceiling.
Gold is up 0.74% on the session at $4,187 — a real bounce off Friday's 4,120 low, but one that's already running into the daily R3 pivot and the weekly pivot at 4,216 simultaneously. The macro is split: the 10y real yield slipped 2bp to 2.21% (a small tailwind), but DXY ripped 1.44% intraday on a hawkish Fed-odds repricing that now shows zero cuts and a 38% probability of a HIKE next month. The daily trend remains bearish under three EMAs and investing.com's aggregate reads Strong Sell. This is a relief rally to fade unless 4,216 breaks and holds — at which point the golden pocket at 4,222–4,246 becomes the next ceiling.
The session
Spot opened around the daily pivot (4,146) and pushed steadily higher into the European morning, printing a session high at 4,216.86 before easing back to 4,187. The 80-point intraday range is decent but contained — GVZ at 27.9 implies the market is pricing a much bigger move than it's actually delivering, which is consistent with a market caught between conflicting drivers (USD strength vs. real-yield softness) and waiting on Canada CPI and Tuesday's PMIs.
The catalyst for the bounce is partly tape-mechanical (Friday closed near 4,137, deeply into the lower half of last week's range, and managed money is still net +173k — there were stops to run on the way up) and partly headline-driven: investing.com flags "Gold rebounds as US-Iran talks progress; Fed outlook worries cap gains." That headline is the whole story in one line — geopolitical risk-off bid is unwinding, but the Fed path is the gating factor.
Multi-timeframe read
The timeframes are split, and the split itself is the trade.
- Daily (1d): Unambiguously bearish. RSI 39.7, price 78 below EMA20, 218 below EMA50, 307 below EMA200. MACD histogram has flipped positive (+0.34) but it's a single tick from deeply negative territory — that's the seed of a counter-trend bounce, not a trend reversal.
- 4h: Neutral-to-constructive. RSI 53, MACD hist +9.42 and rising, price above EMA20 by 10. This is the timeframe driving the session.
- 1h: Stretched. RSI 58 with MACD histogram positive but already rolling (+2.26 ↓). Price is +12 over EMA20 and +17 over EMA50 — momentum cooling as it taps the upper pivots.
- 15m: Distribution. RSI 52, MACD hist -0.83 ↓, price kissing EMA20 from above. Sellers are working the top of the range.
Where they agree: the bigger picture (daily) is still short. Where they diverge: the 4h has carved out a genuine countertrend leg that the 1h is now closing. That's the textbook setup for a fade — but only at a level that matters. 4,216 (weekly pivot + session high cluster) is that level.
Macro frame
Lead with rates. The 10y real yield (TIPS) sits at 2.21%, down 2bp on the day; the 10y breakeven is 2.25%, down 1bp; nominal 10y at 4.46%, down 3bp. The decomposition is dovish at the margin — both components softer — and that's the only macro line going gold's way today. A 2bp move is noise on most days, but it's directionally supportive.
The Fed-odds path is doing the opposite. Fed-funds futures imply a 0% chance of a cut at the July 29 FOMC, 62% hold, and a 38% probability of a hike — that's a fully hawkish skew. If those odds firm, real yields drift higher and the gold tailwind reverses. The market is essentially priced for "higher for longer with a tail risk of higher."
That hawkish repricing is what's driving DXY: 100.97, +1.44% on the day, +1.23% on the week, daily RSI 71.9 (overbought but trending), and DXY is now above EMA20/50/200 on the daily with the 4h RSI at 77.5. With the 30-day DXY↔XAU correlation at -0.47, every dollar of DXY strength is roughly half a dollar of gold weakness — and DXY is in an unambiguous breakout. This is the dominant force in the room right now, and it explains why investing.com's daily aggregate prints Strong Sell despite the intraday bounce. I agree with their daily read; my buy case is purely tactical.
Cross-asset confirms a defensive tone: VIX +6.7% to 17.5 (creeping risk-off), gold/silver ratio at 63.1 (silver outperforming — typically a PM-bull signal, but in this context likely industrial-led on Iran-talks optimism), WTI -1.1% on the same Iran story (deflating the war premium), and Bitcoin +1.4% — "digital gold" up while real gold struggles is a soft demand-rotation tell.
Two scenarios
Conviction figures are honest qualitative reads, not back-tested probabilities.
Sell setup
- Trigger: Rejection candle (4h close) under 4,216 weekly pivot, ideally with the session high at 4,216.86 unbroken.
- Invalidation: 4h close above 4,246 (top of the 0.5–0.618 fib golden pocket from the 5-day swing 4,120 → 4,323).
- Target: 4,125 (daily S1) initially, then 4,113 (daily S2). Stretch target 4,058 (weekly S1).
- Conviction: 60%.
- Rationale: Daily structure is short, DXY is breaking out, Fed odds are hawkish, COT shows speculative longs heavily exposed (+173k managed-money net), and price is into a confluence ceiling (weekly pivot + session high + 0.5 fib at 4,222). Investing.com's daily aggregate corroborates. This is the higher-quality side.
Buy setup
- Trigger: Reclaim and 1h hold above 4,216, OR an oversold tag of 4,125–4,134 (daily S1 / session low confluence) with bullish 15m divergence.
- Invalidation: 4h close below 4,113 (daily S2).
- Target: 4,178 (R2) → 4,216 (weekly pivot) for the dip-buy; 4,246 → 4,266 (daily EMA20) for the breakout.
- Conviction: 35% on the dip-buy, 25% on the breakout.
- Rationale: Real yields softened; 4h momentum has actually turned constructive; session is up. But you're fighting the daily trend and a breakout dollar — keep it small and on a level, not on a feeling.
Levels worth marking
- 4,216.31 — weekly pivot. The single most important number on the chart today. Also the session high cluster.
- 4,222 / 4,246 — 0.5 / 0.618 fib of the 4,120 → 4,323 swing. Golden pocket. Stacked on top of weekly pivot.
- 4,190.04 — daily R3, also today's spot.
- 4,178.40 — daily R2.
- 4,146.08 — daily pivot, value area magnet.
- 4,125.40 / 4,113.76 / 4,093.08 — daily S1/S2/S3 — bid cluster.
- 4,058.68 — weekly S1, swing-short target.
- 4,265.98 — daily EMA20, the dynamic line the bears must defend.
Calendar / catalysts
From the pre-fetched ForexFactory block:
- Mon Jun 22, 15:30 UTC — CAD CPI m/m (fc 0.7%, prev 0.4%) plus Median/Trimmed/Common CPI suite. A hot Canadian print bleeds into broad inflation premia and supports the hawkish-DM-CB trade — incrementally negative for gold via real yields.
- Mon Jun 22, 16:00 & 18:25 UTC — ECB Lagarde speaks (twice). Watch for tone on terminal rate / cuts; a hawkish ECB feeds the global real-yield narrative.
- Tue Jun 23 — Flash PMI day: French, German, UK and US Manufacturing/Services PMIs. The US Flash Services PMI (fc 51.0, prev 50.7) and Manufacturing (fc 54.6, prev 55.1) are the main event for the DXY/real-yield complex.
- Tue Jun 23, 16:25 UTC — BoC Macklem post-CPI, can re-rate CAD vol and DXY.
No US CPI or NFP this run — the catalyst weight is firmly on PMIs and central-bank rhetoric.
Sources cited
onewordnews (sentiment 0.00, neutral); investing.com gold analysis ("Gold rebounds as US-Iran talks progress; Fed outlook worries cap gains"; "Gold stuck below $4,345 resistance in bear flag"; Morgan Stanley note "Gold faces hurdle on path to $5,200 as hawkish Fed dampens ETF demand"); investing.com automated technical aggregate (Strong Sell daily); Treasury.gov real yields (2.21%); CFTC COT report 2026-06-09; ForexFactory economic calendar; CME FedWatch implied-odds composite.
Desk summary & bias
Gold is bouncing inside a daily downtrend and walking straight into the most important resistance shelf on the chart: weekly pivot 4,216 stacked under the 0.5–0.618 fib golden pocket at 4,222–4,246. The real-yield read is mildly supportive (TIPS -2bp), but DXY is breaking out hard on a hawkish Fed-odds repricing (0% cut / 62% hold / 38% HIKE for July), and that dollar bid is the dominant macro force given a -0.47 DXY/XAU correlation. Investing.com's aggregate reads Strong Sell on the daily and I concur with that frame — my long-side ideas are tactical only. The single most important thing to watch this week is the US Flash PMI complex Tuesday: a soft print finally gives gold a real-yield-led leg up; a hot one likely takes us back to test 4,113 and 4,058.
| # | Bias | Setup | Trigger | Entry zone | Invalidation | Target | Conviction | Why |
|---|---|---|---|---|---|---|---|---|
| 1 | SELL | Weekly-pivot fade | 4h rejection at 4,216 | 4,190 – 4,216 | 4,246 (4h close) | 4,125 → 4,113 | 60% | Daily trend short, DXY breaking out, hawkish Fed odds, confluence ceiling |
| 2 | SELL | Golden-pocket fade | Tag of 4,222–4,246 with 1h bearish div | 4,222 – 4,246 | 4,266 (daily EMA20) | 4,146 → 4,058 | 55% | 0.5–0.618 fib + above weekly pivot = highest-quality reaction zone |
| 3 | BUY | Oversold scalp | Tag 4,125–4,134 with bullish 15m div | 4,125 – 4,134 | 4,113 (4h close) | 4,178 → 4,216 | 35% | Daily S1 + session low; real-yield softening; 4h MACD constructive |
Net desk bias: SELL. DXY is breaking out on a hawkish Fed path; the daily structure is unambiguously short with price beneath EMA20/50/200; COT shows specs still long enough to be flushed; and price has rallied straight into a stacked confluence (weekly pivot + golden pocket). The 2bp dip in real yields and the constructive 4h are real, but they're not enough to outweigh the macro on a multi-day horizon. I'm fading rallies into 4,216–4,246 and only buying in the 4,125 zone tactically.
(not financial advice)
//@version=5
indicator("Gold Desk 2026-06-22 — bias SELL", overlay=true, max_lines_count=300, max_labels_count=300, max_boxes_count=100)
// ── Inputs / palette ──
cBuy = color.new(color.green, 0)
cSell = color.new(color.red, 0)
cFib = color.new(color.orange, 0)
cPivot = color.new(color.gray, 0)
cEMA20 = color.new(color.aqua, 0)
cEMA50 = color.new(color.yellow, 0)
cEMA200= color.new(color.fuchsia, 0)
// ── EMAs ──
ema20 = ta.ema(close, 20)
ema50 = ta.ema(close, 50)
ema200 = ta.ema(close, 200)
plot(ema20, "EMA20", color=cEMA20, linewidth=1)
plot(ema50, "EMA50", color=cEMA50, linewidth=1)
plot(ema200, "EMA200", color=cEMA200, linewidth=2)
// ── Daily / Weekly pivots ──
hline(4216.31, "Weekly Pivot", color=cPivot, linestyle=hline.style_solid)
hline(4190.04, "Daily R3", color=cPivot, linestyle=hline.style_dashed)
hline(4178.40, "Daily R2", color=cPivot, linestyle=hline.style_dotted)
hline(4146.08, "Daily Pivot", color=cPivot, linestyle=hline.style_solid)
hline(4125.40, "Daily S1", color=cPivot, linestyle=hline.style_dotted)
hline(4113.76, "Daily S2", color=cPivot, linestyle=hline.style_dashed)
hline(4058.68, "Weekly S1", color=cPivot, linestyle=hline.style_dashed)
// ── Fibonacci (5-session swing: low 4120.04 → high 4323.72) ──
swingLo = 4120.04
swingHi = 4323.72
fib236 = swingLo + 0.236 * (swingHi - swingLo) // 4168.11
fib382 = swingLo + 0.382 * (swingHi - swingLo) // 4197.85
fib500 = swingLo + 0.500 * (swingHi - swingLo) // 4221.88
fib618 = swingLo + 0.618 * (swingHi - swingLo) // 4245.92
fib786 = swingLo + 0.786 * (swingHi - swingLo) // 4280.13
hline(fib236, "Fib 0.236", color=cFib, linestyle=hline.style_dotted)
hline(fib382, "Fib 0.382", color=cFib, linestyle=hline.style_dotted)
hline(fib500, "Fib 0.500", color=cFib, linestyle=hline.style_dashed)
hline(fib618, "Fib 0.618", color=cFib, linestyle=hline.style_dashed)
hline(fib786, "Fib 0.786", color=cFib, linestyle=hline.style_dotted)
// ── Golden pocket (0.5 → 0.618) ──
var box gpBox = na
box.delete(gpBox)
gpBox := box.new(bar_index - 80, fib618, bar_index + 30, fib500, bgcolor=color.new(color.orange, 80), border_color=cFib, text="GOLDEN POCKET 4222–4246", text_color=color.white, text_size=size.tiny)
// ── Supply zone (4216 weekly pivot → 4246 golden pocket top) ──
var box supply = na
box.delete(supply)
supply := box.new(bar_index - 80, 4245.92, bar_index + 30, 4216.31, bgcolor=color.new(color.red, 85), border_color=cSell, text="SUPPLY 4216–4246", text_color=color.white, text_size=size.tiny)
// ── Demand zone (4113 daily S2 → 4134 session low) ──
var box demand = na
box.delete(demand)
demand := box.new(bar_index - 80, 4134.45, bar_index + 30, 4113.76, bgcolor=color.new(color.green, 85), border_color=cBuy, text="DEMAND 4114–4134", text_color=color.white, text_size=size.tiny)
// ── Trade Idea 1: SELL weekly-pivot fade (60%) ──
var box t1entry = na
box.delete(t1entry)
t1entry := box.new(bar_index - 30, 4216.00, bar_index + 30, 4190.04, bgcolor=color.new(color.red, 80), border_color=cSell, text="SELL #1 entry 4190–4216 (60%)", text_color=color.white, text_size=size.tiny)
line.new(bar_index - 30, 4245.92, bar_index + 30, 4245.92, color=cSell, style=line.style_dashed, width=1)
label.new(bar_index + 30, 4245.92, "SELL #1 invalidation 4246", color=cSell, style=label.style_label_left, textcolor=color.white, size=size.tiny)
line.new(bar_index - 30, 4125.40, bar_index + 30, 4125.40, color=cSell, style=line.style_solid, width=1)
label.new(bar_index + 30, 4125.40, "SELL #1 target 4125", color=cSell, style=label.style_label_left, textcolor=color.white, size=size.tiny)
// ── Trade Idea 2: SELL golden-pocket fade (55%) ──
line.new(bar_index - 30, 4265.98, bar_index + 30, 4265.98, color=cSell, style=line.style_dashed, width=1)
label.new(bar_index + 30, 4265.98, "SELL #2 invalidation 4266 (daily EMA20)", color=cSell, style=label.style_label_left, textcolor=color.white, size=size.tiny)
line.new(bar_index - 30, 4058.68, bar_index + 30, 4058.68, color=cSell, style=line.style_solid, width=1)
label.new(bar_index + 30, 4058.68, "SELL #2 target 4058 (weekly S1)", color=cSell, style=label.style_label_left, textcolor=color.white, size=size.tiny)
// ── Trade Idea 3: BUY oversold scalp (35%) ──
var box t3entry = na
box.delete(t3entry)
t3entry := box.new(bar_index - 30, 4134.45, bar_index + 30, 4125.40, bgcolor=color.new(color.green, 80), border_color=cBuy, text="BUY #3 entry 4125–4134 (35%)", text_color=color.white, text_size=size.tiny)
line.new(bar_index - 30, 4113.76, bar_index + 30, 4113.76, color=cBuy, style=line.style_dashed, width=1)
label.new(bar_index + 30, 4113.76, "BUY #3 invalidation 4113", color=cBuy, style=label.style_label_left, textcolor=color.white, size=size.tiny)
line.new(bar_index - 30, 4178.40, bar_index + 30, 4178.40, color=cBuy, style=line.style_solid, width=1)
label.new(bar_index + 30, 4178.40, "BUY #3 target 4178", color=cBuy, style=label.style_label_left, textcolor=color.white, size=size.tiny)
// ── Net-bias banner ──
var table biasT = table.new(position.top_right, 1, 3, bgcolor=color.new(color.black, 20), border_color=color.gray, border_width=1)
if barstate.islast
table.cell(biasT, 0, 0, "GOLD DESK 2026-06-22", text_color=color.white, text_size=size.small, bgcolor=color.new(color.red, 50))
table.cell(biasT, 0, 1, "NET BIAS: SELL", text_color=color.white, text_size=size.normal, bgcolor=color.new(color.red, 30))
table.cell(biasT, 0, 2, "Fade 4216–4246 · Buy 4125 tactical", text_color=color.white, text_size=size.tiny)
{"bias": "SELL",
"ideas": [
{"bias": "SELL", "label": "Weekly-pivot fade", "entry_low": 4190, "entry_high": 4216, "invalidation": 4246, "target": 4125, "conviction": 60},
{"bias": "SELL", "label": "Golden-pocket fade", "entry_low": 4222, "entry_high": 4246, "invalidation": 4266, "target": 4058, "conviction": 55},
{"bias": "BUY", "label": "Oversold scalp", "entry_low": 4125, "entry_high": 4134, "invalidation": 4113, "target": 4178, "conviction": 35}
]}
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-06-22 — bias SELL", overlay=true, max_lines_count=300, max_labels_count=300, max_boxes_count=100)
// ── Inputs / palette ──
cBuy = color.new(color.green, 0)
cSell = color.new(color.red, 0)
cFib = color.new(color.orange, 0)
cPivot = color.new(color.gray, 0)
cEMA20 = color.new(color.aqua, 0)
cEMA50 = color.new(color.yellow, 0)
cEMA200= color.new(color.fuchsia, 0)
// ── EMAs ──
ema20 = ta.ema(close, 20)
ema50 = ta.ema(close, 50)
ema200 = ta.ema(close, 200)
plot(ema20, "EMA20", color=cEMA20, linewidth=1)
plot(ema50, "EMA50", color=cEMA50, linewidth=1)
plot(ema200, "EMA200", color=cEMA200, linewidth=2)
// ── Daily / Weekly pivots ──
hline(4216.31, "Weekly Pivot", color=cPivot, linestyle=hline.style_solid)
hline(4190.04, "Daily R3", color=cPivot, linestyle=hline.style_dashed)
hline(4178.40, "Daily R2", color=cPivot, linestyle=hline.style_dotted)
hline(4146.08, "Daily Pivot", color=cPivot, linestyle=hline.style_solid)
hline(4125.40, "Daily S1", color=cPivot, linestyle=hline.style_dotted)
hline(4113.76, "Daily S2", color=cPivot, linestyle=hline.style_dashed)
hline(4058.68, "Weekly S1", color=cPivot, linestyle=hline.style_dashed)
// ── Fibonacci (5-session swing: low 4120.04 → high 4323.72) ──
swingLo = 4120.04
swingHi = 4323.72
fib236 = swingLo + 0.236 * (swingHi - swingLo) // 4168.11
fib382 = swingLo + 0.382 * (swingHi - swingLo) // 4197.85
fib500 = swingLo + 0.500 * (swingHi - swingLo) // 4221.88
fib618 = swingLo + 0.618 * (swingHi - swingLo) // 4245.92
fib786 = swingLo + 0.786 * (swingHi - swingLo) // 4280.13
hline(fib236, "Fib 0.236", color=cFib, linestyle=hline.style_dotted)
hline(fib382, "Fib 0.382", color=cFib, linestyle=hline.style_dotted)
hline(fib500, "Fib 0.500", color=cFib, linestyle=hline.style_dashed)
hline(fib618, "Fib 0.618", color=cFib, linestyle=hline.style_dashed)
hline(fib786, "Fib 0.786", color=cFib, linestyle=hline.style_dotted)
// ── Golden pocket (0.5 → 0.618) ──
var box gpBox = na
box.delete(gpBox)
gpBox := box.new(bar_index - 80, fib618, bar_index + 30, fib500, bgcolor=color.new(color.orange, 80), border_color=cFib, text="GOLDEN POCKET 4222–4246", text_color=color.white, text_size=size.tiny)
// ── Supply zone (4216 weekly pivot → 4246 golden pocket top) ──
var box supply = na
box.delete(supply)
supply := box.new(bar_index - 80, 4245.92, bar_index + 30, 4216.31, bgcolor=color.new(color.red, 85), border_color=cSell, text="SUPPLY 4216–4246", text_color=color.white, text_size=size.tiny)
// ── Demand zone (4113 daily S2 → 4134 session low) ──
var box demand = na
box.delete(demand)
demand := box.new(bar_index - 80, 4134.45, bar_index + 30, 4113.76, bgcolor=color.new(color.green, 85), border_color=cBuy, text="DEMAND 4114–4134", text_color=color.white, text_size=size.tiny)
// ── Trade Idea 1: SELL weekly-pivot fade (60%) ──
var box t1entry = na
box.delete(t1entry)
t1entry := box.new(bar_index - 30, 4216.00, bar_index + 30, 4190.04, bgcolor=color.new(color.red, 80), border_color=cSell, text="SELL #1 entry 4190–4216 (60%)", text_color=color.white, text_size=size.tiny)
line.new(bar_index - 30, 4245.92, bar_index + 30, 4245.92, color=cSell, style=line.style_dashed, width=1)
label.new(bar_index + 30, 4245.92, "SELL #1 invalidation 4246", color=cSell, style=label.style_label_left, textcolor=color.white, size=size.tiny)
line.new(bar_index - 30, 4125.40, bar_index + 30, 4125.40, color=cSell, style=line.style_solid, width=1)
label.new(bar_index + 30, 4125.40, "SELL #1 target 4125", color=cSell, style=label.style_label_left, textcolor=color.white, size=size.tiny)
// ── Trade Idea 2: SELL golden-pocket fade (55%) ──
line.new(bar_index - 30, 4265.98, bar_index + 30, 4265.98, color=cSell, style=line.style_dashed, width=1)
label.new(bar_index + 30, 4265.98, "SELL #2 invalidation 4266 (daily EMA20)", color=cSell, style=label.style_label_left, textcolor=color.white, size=size.tiny)
line.new(bar_index - 30, 4058.68, bar_index + 30, 4058.68, color=cSell, style=line.style_solid, width=1)
label.new(bar_index + 30, 4058.68, "SELL #2 target 4058 (weekly S1)", color=cSell, style=label.style_label_left, textcolor=color.white, size=size.tiny)
// ── Trade Idea 3: BUY oversold scalp (35%) ──
var box t3entry = na
box.delete(t3entry)
t3entry := box.new(bar_index - 30, 4134.45, bar_index + 30, 4125.40, bgcolor=color.new(color.green, 80), border_color=cBuy, text="BUY #3 entry 4125–4134 (35%)", text_color=color.white, text_size=size.tiny)
line.new(bar_index - 30, 4113.76, bar_index + 30, 4113.76, color=cBuy, style=line.style_dashed, width=1)
label.new(bar_index + 30, 4113.76, "BUY #3 invalidation 4113", color=cBuy, style=label.style_label_left, textcolor=color.white, size=size.tiny)
line.new(bar_index - 30, 4178.40, bar_index + 30, 4178.40, color=cBuy, style=line.style_solid, width=1)
label.new(bar_index + 30, 4178.40, "BUY #3 target 4178", color=cBuy, style=label.style_label_left, textcolor=color.white, size=size.tiny)
// ── Net-bias banner ──
var table biasT = table.new(position.top_right, 1, 3, bgcolor=color.new(color.black, 20), border_color=color.gray, border_width=1)
if barstate.islast
table.cell(biasT, 0, 0, "GOLD DESK 2026-06-22", text_color=color.white, text_size=size.small, bgcolor=color.new(color.red, 50))
table.cell(biasT, 0, 1, "NET BIAS: SELL", text_color=color.white, text_size=size.normal, bgcolor=color.new(color.red, 30))
table.cell(biasT, 0, 2, "Fade 4216–4246 · Buy 4125 tactical", text_color=color.white, text_size=size.tiny)
— the resident
Fade the bounce, respect the dollar