Let's talk
gold July 20, 2026 · 15 min read

Gold at the Golden Pocket: Real Yields Bleed, but the Daily Trend Won't Die

Gold prints 4,018 into London — inside the daily pivot band, sitting *directly on* the 0.618 retracement of last week's 3,960→4,116 swing. The macro tape is pro-gold: US 10y real yields down 4 bp to 2.31%, DXY off 0.44%, VIX benign at 18. The technical tape is not: the daily is still below the 20/50/200 EMA stack and investing.com's aggregate reads Strong Sell. This is a fight between "real yields did the heavy lifting" and "the trend has not turned yet" — and the golden-pocket reaction over the next two sessions is the tiebreaker.


Gold prints 4,018 into London — inside the daily pivot band, sitting directly on the 0.618 retracement of last week's 3,960→4,116 swing. The macro tape is pro-gold: US 10y real yields down 4 bp to 2.31%, DXY off 0.44%, VIX benign at 18. The technical tape is not: the daily is still below the 20/50/200 EMA stack and investing.com's aggregate reads Strong Sell. This is a fight between "real yields did the heavy lifting" and "the trend has not turned yet" — and the golden-pocket reaction over the next two sessions is the tiebreaker.

The session

XAU (spot proxy PAXGUSDT) is +0.12% at 4,018.07, mid-way through a tight 3,982.03 – 4,025.00 Asian/early-London range. COMEX GC front-month sits at 4,021.70, a ~$3.60 premium to spot — normal contango, no dislocation. Price ticked up from the 3,982 S1 area overnight as DXY faded through 100.70 on softer intraday US yields; the 10y nominal is at 4.55%, down 2 bp, and the real-yield component did most of the work (–4 bp). Onewordnews commodity sentiment is a mild –0.07, i.e. neutral-negative with no shock headline. Investing.com's tape flags the twin overhangs everyone is trading around: "Gold steadies as investors weigh Fed outlook against escalating U.S.-Iran tensions" and "Gold Tests 8-Month Lows: Strong Support Level or Deeper Correction?". Middle East risk is bid but not panicked — WTI at $82.45 is essentially flat.

Multi-timeframe read

  • 15m / 1h: constructive. RSI 60/57, MACD histograms positive and rising, price is $8-9 above EMA20 and EMA50 (which are effectively glued together around 4,009). This is a market that has stopped falling on the fast timeframes.
  • 4h: RSI 42.1 but MACD histogram positive and turning up; price is $6 above the 4h EMA20 at 4,011.91. Classic transition candle — RSI still in the sellers' half of the range, but momentum is being taken back.
  • 1d: unchanged bear. Price 43 below EMA20 (4,061.86), 155 below EMA50 (4,173.34), and 374 below EMA200 (4,392.50). Daily MACD histogram is still negative (–0.58) though it has ticked higher. RSI 41.9 is not oversold and not turning.

Agreement: intraday momentum has flipped up. Divergence: the daily trend has not. That is the entire post in one line — bounces are tradable from the long side inside a still-bearish daily structure, and the golden pocket is where you find out which side is right.

Macro frame

Lead with real yields: 10y TIPS at 2.31%, down 4 bp day-over-day. That is the primary gold driver, and it is moving in gold's favour. Breakeven inflation is +2 bp to 2.24% (mild inflation-risk repricing on the back of oil), and the sum — 10y nominal at 4.55% — is –2 bp. So the composition of the yield move is bullish for gold: real component down (discount-rate relief), inflation component up (store-of-value bid). That is the cleanest macro backdrop bullion has had this month.

The Fed path corroborates. Fed-funds futures now price 84% hold, 16% hike, 0% cut for the Jul 29 FOMC — the hike tail is real but the modal outcome is a pause, which caps real yields from ripping further. A hold with the market already leaning into a hike tail is asymmetrically dovish if delivered.

DXY at 100.68 is –0.44% intraday, –0.60% on the week, with a 1h MACD flat-to-negative and daily RSI 50 — a dollar that is losing altitude but not falling. The 30d XAU↔DXY correlation is –0.63, so this incremental dollar weakness is directly worth ~40 bp of gold outperformance versus a flat-dollar counterfactual.

Cross-asset: VIX 18.44 (no equity fear), GVZ 25.60 (elevated gold implied vol — options desk is pricing a real move, not a drift), gold/silver ratio 70.2 with silver at $57 (precious-metals regime is silver-led, which historically favours the bull case for gold), BTC $64k and softer (no "digital gold" flight-to-hardness competition today). CFTC COT for 07/14 shows managed money still +186,682 net long — trend followers have not capitulated, which is a two-edged sword (support if the low holds, fuel if it doesn't).

Where investing.com's aggregate reads Strong Sell despite MA breadth being 8-buy / 4-sell, its RSI Neutral, its MACD Neutral — that "Strong Sell" is being driven by pivot/support classification, not momentum. My read: the aggregate is over-weighting the daily structural picture and under-weighting the real-yield inflection. Flagging the divergence.

Two scenarios

Note: convictions below are qualitative confidence, not back-tested probabilities.

Buy setup

  • Trigger: Hourly close above 4,027.55 (weekly pivot) with the 4h MACD histogram still positive. Prefer a reclaim after a shallow dip into 4,008 (daily R1 flip) or the 0.618 fib at 4,019.93.
  • Invalidation: Hourly close below 3,997.97 (daily P). Below there the golden pocket has failed and 3,973 opens.
  • Target: 4,056.62 (0.382 fib) first, then 4,094.57 (weekly R1) as swing extension.
  • Conviction: 55%
  • Rationale: Real yields are working for you, DXY is on the back foot, price is sitting inside the golden pocket of the week's swing, and intraday momentum has flipped. The setup is buying strength through the weekly pivot rather than blind dip-buying — you want the confirmation because the daily trend disagrees.

Sell setup

  • Trigger: Rejection wick + hourly close back below 4,008 after a probe of 4,027–4,038 (weekly pivot / 0.5 fib confluence). Ideally with daily RSI failing to reclaim 45.
  • Invalidation: Hourly close above 4,038.27 (0.5 fib) that holds for two candles; a clean daily close above the daily EMA20 at 4,061.86 fully kills it.
  • Target: 3,982.93 (daily S1) first, then 3,972.84 (daily S2) / 3,960.53 (last-5-session low, near weekly S1 3,939).
  • Conviction: 40%
  • Rationale: The daily is unambiguously below its 20/50/200 EMA stack; investing.com's aggregate is Strong Sell; managed-money longs are heavy and a break of 3,960 forces liquidation. But you are fighting the real-yield tape here, hence the lower conviction.

Levels worth marking

  • 4,094.57 — weekly R1, upside magnet if the golden pocket holds.
  • 4,061.86 — daily EMA20; must reclaim to flip the daily.
  • 4,056.62 — 0.382 fib of the weekly swing.
  • 4,038.27 — 0.5 fib, upper edge of the golden pocket and just above the weekly pivot 4,027.55.
  • 4,027.55 / 4,023.10 — weekly pivot & daily R2, dense confluence.
  • 4,019.93 — 0.618 fib, lower edge of the golden pocket, ~where price is trading now.
  • 4,008.06 / 3,997.97 — daily R1 flip / daily P; the intraday hinge.
  • 3,982.93 / 3,972.84 — daily S1 / S2, session low neighbourhood.
  • 3,960.53 / 3,939.08 — last-5-day low & weekly S1; capitulation zone.
  • 3,872.06 — weekly S2, the bear extension.

Calendar / catalysts

ForexFactory print for this window is thin on USD-direct events, so cross-currency flow drives DXY:

  • Mon Jul 20, 15:30 UTC — CAD CPI m/m (fcst –0.2% vs prev +1.0%) plus Median/Trimmed/Common CPI y/y (all High/Medium). A cool print pressures the CAD and mechanically bids DXY — modest headwind for gold on the print, but the effect is usually short-lived.
  • Tue Jul 21, 01:45 UTC — NZD CPI q/q (fcst 1.5% vs prev 0.9%) — hot NZ print is NZD-supportive and DXY-negative at the margin.
  • Tue Jul 21, 09:00 UTC — GBP Claimant Count + Average Earnings 3m/y (fcst 4.5%). A weak UK labour tape is GBP-negative → DXY tailwind. Watch the second-order XAU reaction.

No Tier-1 US data in the immediate window; the standalone gold event on the calendar is the Jul 29 FOMC, where the market has stopped pricing cuts entirely and pinned 84% hold / 16% hike. Middle East headlines remain the wild card — investing.com continues to lead with US-Iran tension coverage.

Sources cited

Pricing & pivots — internal snapshot (PAXGUSDT spot, GC=F front-month, DXY); real-yield decomposition — US Treasury / TIPS via snapshot; Fed-odds — fed-funds futures implied; COT — CFTC 2026-07-14 release; technical cross-check — investing.com aggregate; headlines — onewordnews aggregation (Economic Times, Kalkine, FXStreet, FXEmpire, GuruFocus, Invezz, HDFC Sky, NDTV Profit) and investing.com's own news feed; calendar — ForexFactory.

Desk summary & bias

Gold is trading the golden pocket of last week's 3,960→4,116 swing while the two macro pillars — real yields and the dollar — are quietly turning in bullion's favour. The 10y real yield at 2.31% is down 4 bp, DXY is –0.44% and losing structure, and the Fed has been priced fully off any cut for Jul 29 (84% hold) so there is asymmetric room for a dovish surprise. The technical picture is split: 15m/1h/4h momentum has flipped up, but the daily is still under all three of its main EMAs and investing.com's aggregate reads Strong Sell. The single most important thing to watch is a decisive break of the 4,019–4,038 golden pocket — hold and reclaim of the 4,027 weekly pivot argues for a run at 4,094; loss of 3,998 opens the 3,973 / 3,939 shelf.

# Bias Setup Trigger Entry zone Invalidation Target Conviction Why
1 BUY Golden-pocket reclaim 1h close above 4,027.55 weekly pivot 4,019.93 – 4,027.55 3,997.97 4,056.62 → 4,094.57 55% Real yields –4 bp, DXY –0.44%, price inside 0.618 fib, intraday momentum flipped
2 SELL Weekly-pivot rejection Rejection + 1h close back below 4,008 4,023.10 – 4,038.27 4,038.27 (h close, 2 candles) 3,982.93 → 3,972.84 40% Daily below EMA20/50/200, investing.com Strong Sell, heavy managed-money longs
3 BUY Trend-continuation swing 4h close above 4,094.57 weekly R1 4,094.57 – 4,100 4,056.62 4,173.34 (daily EMA50) 35% Second-leg long if the pocket holds and the daily EMA20 flip triggers systematic covering

Net desk bias: BUY (cautious). The real-yield line — TIPS at 2.31%, –4 bp d/d, with breakeven +2 bp — is the primary gold driver and it is unambiguously supportive; the Fed-odds path (0% cut / 84% hold / 16% hike) has stopped pricing cuts, which means the surprise skew is dovish rather than hawkish from here. DXY is soft and correlated –0.63 to XAU. The daily trend is bearish and I respect it, which is why the bias is cautious buy and both long ideas require confirmation (a weekly-pivot reclaim, not a knife-catch). If price loses 3,998 on an hourly close, macro loses the argument and idea #2 takes over.

(not financial advice)

//@version=5
indicator("Gold Desk 2026-07-20 — bias BUY (cautious)", 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=1)
plot(ema50,  "EMA50",  color=color.new(color.orange, 0), linewidth=1)
plot(ema200, "EMA200", color=color.new(color.red, 0),    linewidth=2)

// ── Swing anchors (last week's HLC-implied range) ─────────────────
swingHigh = 4116.02
swingLow  = 3960.53
rng       = swingHigh - swingLow

fib0236 = swingHigh - rng * 0.236
fib0382 = swingHigh - rng * 0.382
fib0500 = swingHigh - rng * 0.500
fib0618 = swingHigh - rng * 0.618
fib0786 = swingHigh - rng * 0.786

// ── Fibonacci ─────────────────────────────────────────────────────
hline(fib0236, "Fib 0.236", color=color.new(color.gray, 40), linestyle=hline.style_dotted)
hline(fib0382, "Fib 0.382", color=color.new(color.gray, 20), linestyle=hline.style_dotted)
hline(fib0500, "Fib 0.500", color=color.new(color.gray, 0),  linestyle=hline.style_dashed)
hline(fib0618, "Fib 0.618", color=color.new(color.gray, 0),  linestyle=hline.style_dashed)
hline(fib0786, "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 goldenPocket = na
if bar_index % 5 == 0
    box.delete(goldenPocket)
    goldenPocket := box.new(bar_index - 200, fib0500, bar_index + 20, fib0618, bgcolor=color.new(color.yellow, 82), border_color=color.new(color.yellow, 40), border_width=1)

// ── Supply / Demand zones ─────────────────────────────────────────
// Supply: 4,056 – 4,094 (0.382 fib → weekly R1)
var box supply1 = na
if bar_index % 5 == 0
    box.delete(supply1)
    supply1 := box.new(bar_index - 200, 4094.57, bar_index + 20, 4056.62, bgcolor=color.new(color.red, 85), border_color=color.new(color.red, 40))

// Demand: 3,973 – 3,997 (daily S2 → daily P)
var box demand1 = na
if bar_index % 5 == 0
    box.delete(demand1)
    demand1 := box.new(bar_index - 200, 3997.97, bar_index + 20, 3972.84, bgcolor=color.new(color.green, 85), border_color=color.new(color.green, 40))

// Capitulation demand: 3,939 – 3,960 (weekly S1 → 5-day low)
var box demand2 = na
if bar_index % 5 == 0
    box.delete(demand2)
    demand2 := box.new(bar_index - 200, 3960.53, bar_index + 20, 3939.08, bgcolor=color.new(color.green, 90), border_color=color.new(color.green, 60))

// ── Key pivots ────────────────────────────────────────────────────
hline(4094.57, "Weekly R1",   color=color.new(color.red, 20),   linestyle=hline.style_solid)
hline(4027.55, "Weekly Pivot", color=color.new(color.white, 20), linestyle=hline.style_solid)
hline(4023.10, "Daily R2",    color=color.new(color.red, 40),   linestyle=hline.style_dashed)
hline(4008.06, "Daily R1",    color=color.new(color.red, 60),   linestyle=hline.style_dotted)
hline(3997.97, "Daily P",     color=color.new(color.white, 40), linestyle=hline.style_dashed)
hline(3982.93, "Daily S1",    color=color.new(color.green, 60), linestyle=hline.style_dotted)
hline(3972.84, "Daily S2",    color=color.new(color.green, 40), linestyle=hline.style_dashed)
hline(3939.08, "Weekly S1",   color=color.new(color.green, 20), linestyle=hline.style_solid)

// ── Trade idea #1: BUY — golden-pocket reclaim ────────────────────
var box buy1_entry = na
var line buy1_inv  = na
var line buy1_tgt1 = na
var line buy1_tgt2 = na
if bar_index % 5 == 0
    box.delete(buy1_entry), line.delete(buy1_inv), line.delete(buy1_tgt1), line.delete(buy1_tgt2)
    buy1_entry := box.new(bar_index - 30, 4027.55, bar_index + 40, 4019.93, bgcolor=color.new(color.green, 70), border_color=color.new(color.green, 20))
    buy1_inv   := line.new(bar_index - 30, 3997.97, bar_index + 40, 3997.97, color=color.new(color.red, 0), style=line.style_dashed, width=2)
    buy1_tgt1  := line.new(bar_index - 30, 4056.62, bar_index + 40, 4056.62, color=color.new(color.lime, 0), style=line.style_solid, width=1)
    buy1_tgt2  := line.new(bar_index - 30, 4094.57, bar_index + 40, 4094.57, color=color.new(color.lime, 0), style=line.style_solid, width=2)

// ── Trade idea #2: SELL — weekly-pivot rejection ──────────────────
var box sell1_entry = na
var line sell1_inv  = na
var line sell1_tgt1 = na
var line sell1_tgt2 = na
if bar_index % 5 == 0
    box.delete(sell1_entry), line.delete(sell1_inv), line.delete(sell1_tgt1), line.delete(sell1_tgt2)
    sell1_entry := box.new(bar_index - 30, 4038.27, bar_index + 40, 4023.10, bgcolor=color.new(color.red, 70), border_color=color.new(color.red, 20))
    sell1_inv   := line.new(bar_index - 30, 4038.27, bar_index + 40, 4038.27, color=color.new(color.red, 0), style=line.style_dashed, width=2)
    sell1_tgt1  := line.new(bar_index - 30, 3982.93, bar_index + 40, 3982.93, color=color.new(color.orange, 0), style=line.style_solid, width=1)
    sell1_tgt2  := line.new(bar_index - 30, 3972.84, bar_index + 40, 3972.84, color=color.new(color.orange, 0), style=line.style_solid, width=2)

// ── Labels ────────────────────────────────────────────────────────
if barstate.islast
    label.new(bar_index + 40, 4027.55, "Weekly Pivot 4027.55 (buy trigger)", style=label.style_label_left, color=color.new(color.green, 40), textcolor=color.white, size=size.small)
    label.new(bar_index + 40, 4019.93, "0.618 fib 4019.93 (golden pocket lo)", style=label.style_label_left, color=color.new(color.yellow, 40), textcolor=color.black, size=size.small)
    label.new(bar_index + 40, 4038.27, "0.5 fib 4038.27 (sell zone / invalidation)", style=label.style_label_left, color=color.new(color.red, 40), textcolor=color.white, size=size.small)
    label.new(bar_index + 40, 3997.97, "Daily P 3997.97 (buy INV)", style=label.style_label_left, color=color.new(color.red, 20), textcolor=color.white, size=size.small)
    label.new(bar_index + 40, 4094.57, "Weekly R1 4094.57 (BUY T2)", style=label.style_label_left, color=color.new(color.lime, 20), textcolor=color.black, size=size.small)
    label.new(bar_index + 40, 3939.08, "Weekly S1 3939.08 (bear ext)", style=label.style_label_left, color=color.new(color.green, 20), textcolor=color.black, size=size.small)

// ── Net-bias banner ───────────────────────────────────────────────
var table biasTable = table.new(position.top_right, 2, 4, bgcolor=color.new(color.black, 20), border_width=1)
if barstate.islast
    table.cell(biasTable, 0, 0, "Gold Desk 2026-07-20", text_color=color.white, bgcolor=color.new(color.navy, 40))
    table.cell(biasTable, 1, 0, "BUY (cautious)",       text_color=color.lime,  bgcolor=color.new(color.navy, 40))
    table.cell(biasTable, 0, 1, "Real yield 10y",        text_color=color.white)
    table.cell(biasTable, 1, 1, "2.31%  -4 bp",          text_color=color.lime)
    table.cell(biasTable, 0, 2, "DXY",                   text_color=color.white)
    table.cell(biasTable, 1, 2, "100.68  -0.44%",        text_color=color.lime)
    table.cell(biasTable, 0, 3, "Fed Jul 29",            text_color=color.white)
    table.cell(biasTable, 1, 3, "0/84/16 (C/H/H)",       text_color=color.yellow)
{"bias": "BUY",
 "ideas": [
   {"bias": "BUY",  "label": "Golden-pocket reclaim",  "entry_low": 4019.93, "entry_high": 4027.55, "invalidation": 3997.97, "target": 4094.57, "conviction": 55},
   {"bias": "SELL", "label": "Weekly-pivot rejection", "entry_low": 4023.10, "entry_high": 4038.27, "invalidation": 4038.27, "target": 3972.84, "conviction": 40},
   {"bias": "BUY",  "label": "Trend-continuation swing","entry_low": 4094.57, "entry_high": 4100.00, "invalidation": 4056.62, "target": 4173.34, "conviction": 35}
 ]}

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-20 — bias BUY (cautious)", 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=1)
plot(ema50,  "EMA50",  color=color.new(color.orange, 0), linewidth=1)
plot(ema200, "EMA200", color=color.new(color.red, 0),    linewidth=2)

// ── Swing anchors (last week's HLC-implied range) ─────────────────
swingHigh = 4116.02
swingLow  = 3960.53
rng       = swingHigh - swingLow

fib0236 = swingHigh - rng * 0.236
fib0382 = swingHigh - rng * 0.382
fib0500 = swingHigh - rng * 0.500
fib0618 = swingHigh - rng * 0.618
fib0786 = swingHigh - rng * 0.786

// ── Fibonacci ─────────────────────────────────────────────────────
hline(fib0236, "Fib 0.236", color=color.new(color.gray, 40), linestyle=hline.style_dotted)
hline(fib0382, "Fib 0.382", color=color.new(color.gray, 20), linestyle=hline.style_dotted)
hline(fib0500, "Fib 0.500", color=color.new(color.gray, 0),  linestyle=hline.style_dashed)
hline(fib0618, "Fib 0.618", color=color.new(color.gray, 0),  linestyle=hline.style_dashed)
hline(fib0786, "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 goldenPocket = na
if bar_index % 5 == 0
    box.delete(goldenPocket)
    goldenPocket := box.new(bar_index - 200, fib0500, bar_index + 20, fib0618, bgcolor=color.new(color.yellow, 82), border_color=color.new(color.yellow, 40), border_width=1)

// ── Supply / Demand zones ─────────────────────────────────────────
// Supply: 4,056 – 4,094 (0.382 fib → weekly R1)
var box supply1 = na
if bar_index % 5 == 0
    box.delete(supply1)
    supply1 := box.new(bar_index - 200, 4094.57, bar_index + 20, 4056.62, bgcolor=color.new(color.red, 85), border_color=color.new(color.red, 40))

// Demand: 3,973 – 3,997 (daily S2 → daily P)
var box demand1 = na
if bar_index % 5 == 0
    box.delete(demand1)
    demand1 := box.new(bar_index - 200, 3997.97, bar_index + 20, 3972.84, bgcolor=color.new(color.green, 85), border_color=color.new(color.green, 40))

// Capitulation demand: 3,939 – 3,960 (weekly S1 → 5-day low)
var box demand2 = na
if bar_index % 5 == 0
    box.delete(demand2)
    demand2 := box.new(bar_index - 200, 3960.53, bar_index + 20, 3939.08, bgcolor=color.new(color.green, 90), border_color=color.new(color.green, 60))

// ── Key pivots ────────────────────────────────────────────────────
hline(4094.57, "Weekly R1",   color=color.new(color.red, 20),   linestyle=hline.style_solid)
hline(4027.55, "Weekly Pivot", color=color.new(color.white, 20), linestyle=hline.style_solid)
hline(4023.10, "Daily R2",    color=color.new(color.red, 40),   linestyle=hline.style_dashed)
hline(4008.06, "Daily R1",    color=color.new(color.red, 60),   linestyle=hline.style_dotted)
hline(3997.97, "Daily P",     color=color.new(color.white, 40), linestyle=hline.style_dashed)
hline(3982.93, "Daily S1",    color=color.new(color.green, 60), linestyle=hline.style_dotted)
hline(3972.84, "Daily S2",    color=color.new(color.green, 40), linestyle=hline.style_dashed)
hline(3939.08, "Weekly S1",   color=color.new(color.green, 20), linestyle=hline.style_solid)

// ── Trade idea #1: BUY — golden-pocket reclaim ────────────────────
var box buy1_entry = na
var line buy1_inv  = na
var line buy1_tgt1 = na
var line buy1_tgt2 = na
if bar_index % 5 == 0
    box.delete(buy1_entry), line.delete(buy1_inv), line.delete(buy1_tgt1), line.delete(buy1_tgt2)
    buy1_entry := box.new(bar_index - 30, 4027.55, bar_index + 40, 4019.93, bgcolor=color.new(color.green, 70), border_color=color.new(color.green, 20))
    buy1_inv   := line.new(bar_index - 30, 3997.97, bar_index + 40, 3997.97, color=color.new(color.red, 0), style=line.style_dashed, width=2)
    buy1_tgt1  := line.new(bar_index - 30, 4056.62, bar_index + 40, 4056.62, color=color.new(color.lime, 0), style=line.style_solid, width=1)
    buy1_tgt2  := line.new(bar_index - 30, 4094.57, bar_index + 40, 4094.57, color=color.new(color.lime, 0), style=line.style_solid, width=2)

// ── Trade idea #2: SELL — weekly-pivot rejection ──────────────────
var box sell1_entry = na
var line sell1_inv  = na
var line sell1_tgt1 = na
var line sell1_tgt2 = na
if bar_index % 5 == 0
    box.delete(sell1_entry), line.delete(sell1_inv), line.delete(sell1_tgt1), line.delete(sell1_tgt2)
    sell1_entry := box.new(bar_index - 30, 4038.27, bar_index + 40, 4023.10, bgcolor=color.new(color.red, 70), border_color=color.new(color.red, 20))
    sell1_inv   := line.new(bar_index - 30, 4038.27, bar_index + 40, 4038.27, color=color.new(color.red, 0), style=line.style_dashed, width=2)
    sell1_tgt1  := line.new(bar_index - 30, 3982.93, bar_index + 40, 3982.93, color=color.new(color.orange, 0), style=line.style_solid, width=1)
    sell1_tgt2  := line.new(bar_index - 30, 3972.84, bar_index + 40, 3972.84, color=color.new(color.orange, 0), style=line.style_solid, width=2)

// ── Labels ────────────────────────────────────────────────────────
if barstate.islast
    label.new(bar_index + 40, 4027.55, "Weekly Pivot 4027.55 (buy trigger)", style=label.style_label_left, color=color.new(color.green, 40), textcolor=color.white, size=size.small)
    label.new(bar_index + 40, 4019.93, "0.618 fib 4019.93 (golden pocket lo)", style=label.style_label_left, color=color.new(color.yellow, 40), textcolor=color.black, size=size.small)
    label.new(bar_index + 40, 4038.27, "0.5 fib 4038.27 (sell zone / invalidation)", style=label.style_label_left, color=color.new(color.red, 40), textcolor=color.white, size=size.small)
    label.new(bar_index + 40, 3997.97, "Daily P 3997.97 (buy INV)", style=label.style_label_left, color=color.new(color.red, 20), textcolor=color.white, size=size.small)
    label.new(bar_index + 40, 4094.57, "Weekly R1 4094.57 (BUY T2)", style=label.style_label_left, color=color.new(color.lime, 20), textcolor=color.black, size=size.small)
    label.new(bar_index + 40, 3939.08, "Weekly S1 3939.08 (bear ext)", style=label.style_label_left, color=color.new(color.green, 20), textcolor=color.black, size=size.small)

// ── Net-bias banner ───────────────────────────────────────────────
var table biasTable = table.new(position.top_right, 2, 4, bgcolor=color.new(color.black, 20), border_width=1)
if barstate.islast
    table.cell(biasTable, 0, 0, "Gold Desk 2026-07-20", text_color=color.white, bgcolor=color.new(color.navy, 40))
    table.cell(biasTable, 1, 0, "BUY (cautious)",       text_color=color.lime,  bgcolor=color.new(color.navy, 40))
    table.cell(biasTable, 0, 1, "Real yield 10y",        text_color=color.white)
    table.cell(biasTable, 1, 1, "2.31%  -4 bp",          text_color=color.lime)
    table.cell(biasTable, 0, 2, "DXY",                   text_color=color.white)
    table.cell(biasTable, 1, 2, "100.68  -0.44%",        text_color=color.lime)
    table.cell(biasTable, 0, 3, "Fed Jul 29",            text_color=color.white)
    table.cell(biasTable, 1, 3, "0/84/16 (C/H/H)",       text_color=color.yellow)
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

pocket holds or the pocket breaks — no middle