Gold — 4,633: Overbought Into PCE, With The Dollar Doing All The Work
Gold trades at 4,633.94 after a five-session rip from 4,443, and everything you'd want to be true in a bull leg IS true — DXY at 98.97 and pinned near multi-month lows, weekly pivot cleared, daily above every EMA. But the 4h RSI is 81.7, the daily MACD histogram is rolling over even as price prints highs, and the 10y real yield jumped +5bp to 2.40% — a proper gold headwind that the tape is currently ignoring because the dollar is bleeding harder than TIPS. Wednesday's Core PCE + prelim GDP is the resolution. Until then, buy the dip, don't chase the print.
Gold trades at 4,633.94 after a five-session rip from 4,443, and everything you'd want to be true in a bull leg IS true — DXY at 98.97 and pinned near multi-month lows, weekly pivot cleared, daily above every EMA. But the 4h RSI is 81.7, the daily MACD histogram is rolling over even as price prints highs, and the 10y real yield jumped +5bp to 2.40% — a proper gold headwind that the tape is currently ignoring because the dollar is bleeding harder than TIPS. Wednesday's Core PCE + prelim GDP is the resolution. Until then, buy the dip, don't chase the print.
The session
Spot (PAXG) has run 4,583.11 → 4,651.77 in the Asian/early-Europe window, sitting +0.95% on the day and +14.36% on the month. The tape is inside daily R2 (4,635.45) with R3 at 4,655.19, and the investing.com headline flagged gold tapping $4,703 — the exact weekly R1 (4,703.87). That headline level is not just a round number: it's the pivot at which last week's range breakout gets tested for real. Front-month COMEX (GC=F) is 4,689.70, printing a +1.20% basis over spot — normal contango, no obvious futures dislocation. What catalysed the pop is straightforward: DXY down 0.55% intraday and news flow ("Dollar trading near multi-month lows, restrained by debt nerves") pushing money into bullion. Kitco's live board and Jefferies' "metals breakout on currency concerns" note both point at the same driver — this is a USD trade first, an inflation trade second.
Multi-timeframe read
- 15m — RSI 52.3, MACD histogram negative and turning down. Price is glued to EMA20 (4,632.79, +1.1). Short-term momentum is exhausted; a controlled consolidation, not a breakdown.
- 1h — RSI 65.0, sitting on the shoulder of overbought. MACD histogram is positive (+1.60) but arrow down — momentum peaking. EMA20 4,620 and EMA50 4,601 are both intact underneath.
- 4h — RSI 81.7, textbook stretched. MACD histogram is -2.04 with arrow UP (bearish → less bearish), so a mean-reversion pop that hasn't broken through. Price is +46.1 above the 4h EMA20 at 4,587.82 — that gap wants to close.
- 1d — RSI 73.0, MACD histogram +19.76 with arrow DOWN — the daily is still bullish in absolute terms but momentum is decelerating for the first time in this leg. Price is +211.6 above EMA20 (4,422.36) and +272.8 above EMA200 (4,361.17). Structural trend intact, tactical tension building.
Where the timeframes AGREE: trend up, structure intact, all EMAs below price on the daily. Where they DIVERGE: the 4h says "cool off", the 1d says "still in leg", and the 15m says "already cooling." That combination is the tell — a shallow pullback into the 1h EMA20/50 or the daily pivot, not a trend break.
Note the disagreement with investing.com's automated aggregate: they read Strong Buy (10-of-12 MAs bullish, RSI Buy, MACD Buy). We agree on trend, but we're flagging the 4h/1d momentum divergence they're smoothing over. When RSI 81.7 on 4h screams overbought, "Strong Buy" is a follow-the-trend signal, not a chase-the-print signal.
Macro frame
Real yields. The US 10y real yield (TIPS) sits at 2.40%, +5bp d/d — this is the number that matters. Breakeven inflation held at 2.34% (flat), so the +5bp move is entirely real, i.e. it's a monetary/growth signal, not an inflation signal. Rising real yields raise the opportunity cost of holding a zero-coupon metal and are structurally negative for gold. The fact that gold is +0.95% into that headwind tells you the DXY/currency channel is currently louder than the rates channel.
Fed odds. For the Sep 16 FOMC the fed-funds strip prices cut 0%, hold 63%, hike 37%. That's a hawkish-hold-to-hike distribution — no cuts on deck, which is why real yields have room to drift higher. If Wednesday's Core PCE prints hot (forecast 0.2% vs prev 0.1%), that hike tail fattens, real yields extend, gold gets a headwind. If it prints cool, the cut-tail reappears, real yields ease, gold gets a green light.
DXY. 98.97, -0.55% intraday, daily RSI 33.7 (approaching oversold), price BELOW its daily EMA20/50/200 — the greenback is technically broken. The 30-day XAU↔DXY daily-return correlation is -0.41, so a 0.5% DXY move is roughly worth a 0.2% inverse move in gold at the margin. Today gold got MORE than that, suggesting real bid, not just dollar mechanics. BCA's "Sell USD versus these currencies" call reinforces the tone.
Cross-asset. VIX 15.93 (+5.3%) — risk-on regime, no panic bid distorting gold. GVZ 27.29 — gold implied vol is elevated, the option market is pricing a meaningful move around PCE. Gold/silver ratio 67.2 is neutral-to-tight (silver at $68.92 is participating, not being left behind — healthy PM regime, not a fear-only bid). WTI $85.48 -1.8% removes some of the inflation-hedge case. BTC $77,294 -0.6% — "digital gold" is limp today; the flows are into the actual metal.
Two scenarios
Note: conviction figures below are qualitative desk confidence, NOT back-tested probabilities.
Buy setup
- Trigger: dip into 4,605 (daily pivot) → 4,595 (S1) with a 1h close back above 4,620 (1h EMA20).
- Invalidation: 1h close below 4,575.97 (S2 / 4h EMA20 zone).
- Target: 4,703.87 (weekly R1, and the investing.com-flagged $4,703 tap level).
- Conviction: 55%.
- Rationale: trend is unambiguously up on the daily, DXY is broken, and the pullback into pivot lets you re-enter the leg without paying the 4h RSI 81.7 tax. The 1h EMA cluster (4,601–4,620) is the natural bid magnet. Reward:risk from 4,600 to 4,703 with a stop at 4,575 is ~4:1 — that's why this is the higher-conviction trade even though the "buy right here" chase is not.
Sell setup
- Trigger: rejection wick at 4,700–4,703.87 (weekly R1) with a 15m/1h close back below 4,655 (daily R3).
- Invalidation: 1h close above 4,720.
- Target: 4,605 (daily pivot); stretch 4,547 (0.5 fib of 4,443→4,651.77 swing).
- Conviction: 45%.
- Rationale: fading a fresh weekly-R1 tap into a 4h RSI already at 81.7 with the 10y real yield rising into PCE is a defensible mean-reversion. This is a counter-trend tactical fade, not a swing short — do not press it, do not carry it through the PCE print if it hasn't paid you.
Levels worth marking
- 4,703.87 — weekly R1, headline "gold tapped $4,703" level. Primary supply / sell trigger.
- 4,655.19 — daily R3.
- 4,635.45 — daily R2 (current session shoulder).
- 4,620 — 1h EMA20; the first tactical support on any pullback.
- 4,605.71 — daily pivot; the buy-the-dip anchor.
- 4,595.71 — daily S1.
- 4,587.82 — 4h EMA20; convergence support with S1.
- 4,547.39 — 0.5 fib retracement of the 4,443.01→4,651.77 swing (top of the golden pocket).
- 4,522.76 — 0.618 fib (bottom of the golden pocket). Deep pullback line; a hold here keeps the leg alive.
- 4,422.36 — daily EMA20; the "trend breaks" line. A daily close below flips the read.
Calendar / catalysts
Pulled from the pre-fetched ForexFactory block:
- Mon Aug 24, 9:00pm UTC · USD · Medium — Treasury Sec Bessent Speaks. Watch for USD tone.
- Tue Aug 25, 5:00pm UTC · USD · Medium — CB Consumer Confidence (f 90.3, p 90.8).
- Wed Aug 26, 4:30am UTC · AUD · High — CPI m/m (f 0.9%, p -0.1%), y/y (f 3.3%, p 3.8%), Trimmed Mean (f 0.3%, p 0.3%). AUD flow; can drag on DXY basket via AUDUSD.
- Wed Aug 26, 3:30pm UTC · USD · High — Core PCE m/m (f 0.2%, p 0.1%) + Prelim GDP q/q (f 1.5%, p 1.5%) + GDP Price Index (f 6.2%). This is the week's binary event for gold. Hot PCE → real yields extend, hike-tail fattens, gold gets sold. Cool PCE → cut-tail reappears, gold breaks 4,703.
Sources cited
- onewordnews — sentiment sweep on gold, DXY, yields, Treasury, CPI, PCE, GDP.
- investing.com — headlines (gold $4,703 tap, "Dollar trading near multi-month lows", CTA/Jefferies notes) and the automated technical aggregate (Strong Buy, disagreed with in body).
- US Treasury / TIPS — 10y real yield 2.40%, breakeven 2.34%, nominal 4.74%.
- Fed-funds futures — Sep 16 FOMC implied path (hold 63% / hike 37% / cut 0%).
- ForexFactory — economic calendar block above.
- CFTC COT — not available this run; positioning read omitted rather than fabricated.
- Kitco, DailyFX, Jefferies, BCA, BofA — via the pre-fetched excerpts and headlines.
Desk summary & bias
Gold at 4,633.94 is in a structurally intact daily uptrend, riding a broken DXY (98.97, daily RSI 33.7, below all EMAs), but the 4h RSI at 81.7, decelerating daily MACD, and a +5bp jump in the 10y real yield to 2.40% are together the strongest set of "don't chase" signals we've had in this leg. The primary driver right now is USD weakness — the rates channel is quietly negative for gold, but the dollar channel is louder. The single most important thing to watch is Wednesday 3:30pm UTC Core PCE: it decides whether real yields extend and cap gold under 4,703, or ease and let 4,703 break for a run at weekly R2 (4,807).
| # | Bias | Setup | Trigger | Entry zone | Invalidation | Target | Conviction | Why |
|---|---|---|---|---|---|---|---|---|
| 1 | BUY | Pivot dip-buy | Dip to daily P + 1h close back over 4,620 | 4,595 – 4,620 | 1h close < 4,576 | 4,703 | 55% | Trend intact daily, DXY broken, re-enter without paying the 4h RSI tax. Best R:R on the desk. |
| 2 | SELL | Weekly-R1 fade | Wick 4,700–4,703 + close back < 4,655 | 4,700 – 4,703 | 1h close > 4,720 | 4,605 (stretch 4,547) | 45% | 4h RSI 81.7 + rising real yields into PCE justifies a tactical fade at the flagged supply. Do NOT carry through PCE. |
| 3 | BUY | Golden-pocket swing reload | Daily close holding 4,522.76–4,547.39 after PCE | 4,522 – 4,547 | Daily close < 4,422 (EMA20) | 4,703 → 4,807 (weekly R2) | 50% | If PCE flushes gold into the 0.5–0.618 fib and buyers defend, that's the high-quality swing reload. Structural, not tactical. |
Net desk bias: BUY (dips only). Directionally we're with the trend — real yields are rising but DXY is breaking and cross-asset flow says currency-driven, not rate-driven. Tactically, gold is too extended on the 4h to chase 4,633; the honest trade is patience — buy the pivot dip, fade the weekly-R1 print if it prints without us. If macro (rising real yields) and technicals (bullish structure) disagree, we're weighting technicals + DXY here because the -0.41 XAU↔DXY correlation is doing the observable work today, and the rates story only cashes in on a hot PCE. That's the risk we cannot dodge, and why every idea in the table respects the Wednesday event.
(not financial advice)
{"bias": "BUY",
"ideas": [
{"bias": "BUY", "label": "Pivot dip-buy", "entry_low": 4595, "entry_high": 4620,
"invalidation": 4576, "target": 4703, "conviction": 55},
{"bias": "SELL", "label": "Weekly-R1 fade", "entry_low": 4700, "entry_high": 4703,
"invalidation": 4720, "target": 4605, "conviction": 45},
{"bias": "BUY", "label": "Golden-pocket swing reload", "entry_low": 4522, "entry_high": 4547,
"invalidation": 4422, "target": 4703, "conviction": 50}
]}
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-08-24 — bias BUY", overlay=true, max_lines_count=300, max_labels_count=300, max_boxes_count=100)
// ── Inputs (swing anchors for Fib / ABCD) ──
swingLowTime = input.time(timestamp("19 Aug 2026 06:00 UTC"), title="Swing Low Time (A)")
swingLowPx = input.float(4443.01, title="Swing Low Price (A)")
swingHighTime = input.time(timestamp("24 Aug 2026 07:00 UTC"), title="Swing High Time (B)")
swingHighPx = input.float(4651.77, title="Swing High Price (B)")
cTime = input.time(timestamp("26 Aug 2026 12:00 UTC"), title="C (projected pullback time)")
cPx = input.float(4547.39, title="C (0.5 fib price)")
dTime = input.time(timestamp("29 Aug 2026 12:00 UTC"), title="D (measured-move target time)")
dPx = input.float(4756.15, title="D (AB projected from C)")
// ── EMAs ──
ema20 = ta.ema(close, 20)
ema50 = ta.ema(close, 50)
ema200 = ta.ema(close, 200)
plot(ema20, "EMA20", color=color.yellow, linewidth=1, force_overlay=true)
plot(ema50, "EMA50", color=color.orange, linewidth=1, force_overlay=true)
plot(ema200, "EMA200", color=color.aqua, linewidth=2, force_overlay=true)
// ── Fibonacci retracement of 4,443.01 → 4,651.77 ──
fibRange = swingHighPx - swingLowPx
f236 = swingHighPx - fibRange * 0.236
f382 = swingHighPx - fibRange * 0.382
f500 = swingHighPx - fibRange * 0.500
f618 = swingHighPx - fibRange * 0.618
f786 = swingHighPx - fibRange * 0.786
var line lnF236 = line.new(na, na, na, na, xloc=xloc.bar_time, force_overlay=true, color=color.new(color.silver, 30), style=line.style_dotted)
var line lnF382 = line.new(na, na, na, na, xloc=xloc.bar_time, force_overlay=true, color=color.new(color.silver, 30), style=line.style_dotted)
var line lnF500 = line.new(na, na, na, na, xloc=xloc.bar_time, force_overlay=true, color=color.new(color.yellow, 20), style=line.style_dashed, width=1)
var line lnF618 = line.new(na, na, na, na, xloc=xloc.bar_time, force_overlay=true, color=color.new(color.yellow, 20), style=line.style_dashed, width=1)
var line lnF786 = line.new(na, na, na, na, xloc=xloc.bar_time, force_overlay=true, color=color.new(color.silver, 30), style=line.style_dotted)
var label lbF236 = label.new(na, na, "", xloc=xloc.bar_time, force_overlay=true, style=label.style_label_left, color=color.new(color.silver, 70), textcolor=color.white, size=size.small)
var label lbF382 = label.new(na, na, "", xloc=xloc.bar_time, force_overlay=true, style=label.style_label_left, color=color.new(color.silver, 70), textcolor=color.white, size=size.small)
var label lbF500 = label.new(na, na, "", xloc=xloc.bar_time, force_overlay=true, style=label.style_label_left, color=color.new(color.yellow, 40), textcolor=color.black, size=size.small)
var label lbF618 = label.new(na, na, "", xloc=xloc.bar_time, force_overlay=true, style=label.style_label_left, color=color.new(color.yellow, 40), textcolor=color.black, size=size.small)
var label lbF786 = label.new(na, na, "", xloc=xloc.bar_time, force_overlay=true, style=label.style_label_left, color=color.new(color.silver, 70), textcolor=color.white, size=size.small)
// ── Golden pocket 0.5 → 0.618 ──
var box gp = box.new(na, na, na, na, xloc=xloc.bar_time, force_overlay=true, bgcolor=color.new(color.yellow, 82), border_color=color.new(color.yellow, 50))
// ── Supply / demand zones ──
var box supplyZone = box.new(na, na, na, na, xloc=xloc.bar_time, force_overlay=true, bgcolor=color.new(color.red, 82), border_color=color.new(color.red, 50))
var box demandZone = box.new(na, na, na, na, xloc=xloc.bar_time, force_overlay=true, bgcolor=color.new(color.lime, 82), border_color=color.new(color.lime, 50))
var label supplyLb = label.new(na, na, "", xloc=xloc.bar_time, force_overlay=true, style=label.style_label_left, color=color.new(color.red, 30), textcolor=color.white, size=size.small)
var label demandLb = label.new(na, na, "", xloc=xloc.bar_time, force_overlay=true, style=label.style_label_left, color=color.new(color.lime, 30), textcolor=color.black, size=size.small)
// ── Pivots ──
var line pivDP = line.new(na, na, na, na, xloc=xloc.bar_time, force_overlay=true, color=color.aqua, width=1, style=line.style_solid)
var line pivR1 = line.new(na, na, na, na, xloc=xloc.bar_time, force_overlay=true, color=color.new(color.red, 30), width=1, style=line.style_dotted)
var line pivR2 = line.new(na, na, na, na, xloc=xloc.bar_time, force_overlay=true, color=color.new(color.red, 30), width=1, style=line.style_dotted)
var line pivR3 = line.new(na, na, na, na, xloc=xloc.bar_time, force_overlay=true, color=color.new(color.red, 20), width=1, style=line.style_dashed)
var line pivS1 = line.new(na, na, na, na, xloc=xloc.bar_time, force_overlay=true, color=color.new(color.lime, 30), width=1, style=line.style_dotted)
var line pivS2 = line.new(na, na, na, na, xloc=xloc.bar_time, force_overlay=true, color=color.new(color.lime, 30), width=1, style=line.style_dotted)
var line pivWR1 = line.new(na, na, na, na, xloc=xloc.bar_time, force_overlay=true, color=color.fuchsia, width=2, style=line.style_solid)
var label lbDP = label.new(na, na, "", xloc=xloc.bar_time, force_overlay=true, style=label.style_label_left, color=color.aqua, textcolor=color.black, size=size.small)
var label lbR1 = label.new(na, na, "", xloc=xloc.bar_time, force_overlay=true, style=label.style_label_left, color=color.new(color.red, 40), textcolor=color.white, size=size.small)
var label lbR2 = label.new(na, na, "", xloc=xloc.bar_time, force_overlay=true, style=label.style_label_left, color=color.new(color.red, 40), textcolor=color.white, size=size.small)
var label lbR3 = label.new(na, na, "", xloc=xloc.bar_time, force_overlay=true, style=label.style_label_left, color=color.new(color.red, 30), textcolor=color.white, size=size.small)
var label lbS1 = label.new(na, na, "", xloc=xloc.bar_time, force_overlay=true, style=label.style_label_left, color=color.new(color.lime, 40), textcolor=color.black, size=size.small)
var label lbS2 = label.new(na, na, "", xloc=xloc.bar_time, force_overlay=true, style=label.style_label_left, color=color.new(color.lime, 40), textcolor=color.black, size=size.small)
var label lbWR1 = label.new(na, na, "", xloc=xloc.bar_time, force_overlay=true, style=label.style_label_left, color=color.fuchsia, textcolor=color.white, size=size.normal)
// ── Trade ideas (BUY dip / SELL fade) ──
var box buyEntry = box.new(na, na, na, na, xloc=xloc.bar_time, force_overlay=true, bgcolor=color.new(color.green, 78), border_color=color.new(color.green, 40))
var line buyInv = line.new(na, na, na, na, xloc=xloc.bar_time, force_overlay=true, color=color.new(color.red, 20), style=line.style_dashed, width=1)
var line buyTgt = line.new(na, na, na, na, xloc=xloc.bar_time, force_overlay=true, color=color.new(color.green, 20), style=line.style_dashed, width=1)
var label buyLb = label.new(na, na, "", xloc=xloc.bar_time, force_overlay=true, style=label.style_label_left, color=color.new(color.green, 20), textcolor=color.white, size=size.small)
var box sellEntry = box.new(na, na, na, na, xloc=xloc.bar_time, force_overlay=true, bgcolor=color.new(color.red, 78), border_color=color.new(color.red, 40))
var line sellInv = line.new(na, na, na, na, xloc=xloc.bar_time, force_overlay=true, color=color.new(color.red, 20), style=line.style_dashed, width=1)
var line sellTgt = line.new(na, na, na, na, xloc=xloc.bar_time, force_overlay=true, color=color.new(color.green, 20), style=line.style_dashed, width=1)
var label sellLb = label.new(na, na, "", xloc=xloc.bar_time, force_overlay=true, style=label.style_label_left, color=color.new(color.red, 20), textcolor=color.white, size=size.small)
// ── ABCD roadmap ──
var line abLine = line.new(na, na, na, na, xloc=xloc.bar_time, force_overlay=true, color=color.new(color.aqua, 20), width=2)
var line bcLine = line.new(na, na, na, na, xloc=xloc.bar_time, force_overlay=true, color=color.new(color.orange, 20), width=2, style=line.style_dashed)
var line cdLine = line.new(na, na, na, na, xloc=xloc.bar_time, force_overlay=true, color=color.new(color.lime, 20), width=2, style=line.style_dashed)
var label lbA = label.new(na, na, "A 4443.01", xloc=xloc.bar_time, force_overlay=true, style=label.style_label_up, color=color.aqua, textcolor=color.black, size=size.small)
var label lbB = label.new(na, na, "B 4651.77", xloc=xloc.bar_time, force_overlay=true, style=label.style_label_down, color=color.aqua, textcolor=color.black, size=size.small)
var label lbC = label.new(na, na, "C 4547.39", xloc=xloc.bar_time, force_overlay=true, style=label.style_label_up, color=color.orange, textcolor=color.black, size=size.small)
var label lbD = label.new(na, na, "D 4756.15", xloc=xloc.bar_time, force_overlay=true, style=label.style_label_down, color=color.lime, textcolor=color.black, size=size.small)
// ── Status HUD ──
var table hud = table.new(position.top_right, 2, 4, bgcolor=color.new(color.black, 20), border_width=1)
// ── State (non-repainting; close-confirmed) ──
var string buyState = "ARMED"
var string sellState = "ARMED"
// London / NY session gate (hours in UTC)
inLondon = hour(time) >= 7 and hour(time) < 12
inNY = hour(time) >= 13 and hour(time) < 20
inSess = inLondon or inNY
// Close-confirmed triggers using ONLY levels from the post
buyTrig = inSess and close > 4620.0 and low <= 4620.0 and low >= 4595.0
buyInvS = close < 4575.97
buyTgtS = close >= 4703.87
sellTrig = inSess and close < 4655.0 and high >= 4700.0
sellInvS = close > 4720.0
sellTgtS = close <= 4605.71
if barstate.isconfirmed
if buyState == "ARMED" and buyTrig
buyState := "TRIGGERED"
if buyState == "TRIGGERED" and buyInvS
buyState := "INVALIDATED"
if buyState == "TRIGGERED" and buyTgtS
buyState := "TARGET HIT"
if sellState == "ARMED" and sellTrig
sellState := "TRIGGERED"
if sellState == "TRIGGERED" and sellInvS
sellState := "INVALIDATED"
if sellState == "TRIGGERED" and sellTgtS
sellState := "TARGET HIT"
alertcondition(buyTrig, title="Gold BUY armed — pivot dip", message="XAUUSD dipped to 4,595–4,620 and closed back over 4,620 — BUY trigger (London/NY session)")
alertcondition(buyInvS, title="Gold BUY invalidated — <4,576", message="XAUUSD closed under 4,575.97 — BUY invalidated, EXIT")
alertcondition(buyTgtS, title="Gold BUY target hit — 4,703.87", message="XAUUSD closed at/above weekly R1 4,703.87 — BUY target reached, take profit")
alertcondition(sellTrig, title="Gold SELL armed — weekly R1 fade", message="XAUUSD tapped 4,700–4,703 and closed back under 4,655 — SELL trigger (London/NY session)")
alertcondition(sellInvS, title="Gold SELL invalidated — >4,720", message="XAUUSD closed above 4,720 — SELL invalidated, EXIT")
alertcondition(sellTgtS, title="Gold SELL target hit — 4,605.71", message="XAUUSD closed at/below daily pivot 4,605.71 — SELL target reached, take profit")
// ── Reposition all drawings on the last bar so they pan with the chart ──
if barstate.islast
lt = chart.left_visible_bar_time
rt = chart.right_visible_bar_time
// Fib lines (anchored at the swing high time on the left)
line.set_xy1(lnF236, swingHighTime, f236)
line.set_xy2(lnF236, rt, f236)
line.set_xy1(lnF382, swingHighTime, f382)
line.set_xy2(lnF382, rt, f382)
line.set_xy1(lnF500, swingHighTime, f500)
line.set_xy2(lnF500, rt, f500)
line.set_xy1(lnF618, swingHighTime, f618)
line.set_xy2(lnF618, rt, f618)
line.set_xy1(lnF786, swingHighTime, f786)
line.set_xy2(lnF786, rt, f786)
label.set_xy(lbF236, rt, f236)
label.set_text(lbF236, "0.236 " + str.tostring(f236, "#.##"))
label.set_xy(lbF382, rt, f382)
label.set_text(lbF382, "0.382 " + str.tostring(f382, "#.##"))
label.set_xy(lbF500, rt, f500)
label.set_text(lbF500, "0.5 (GP top) " + str.tostring(f500, "#.##"))
label.set_xy(lbF618, rt, f618)
label.set_text(lbF618, "0.618 (GP bot) " + str.tostring(f618, "#.##"))
label.set_xy(lbF786, rt, f786)
label.set_text(lbF786, "0.786 " + str.tostring(f786, "#.##"))
// Golden pocket
box.set_left(gp, swingHighTime)
box.set_right(gp, rt)
box.set_top(gp, f500)
box.set_bottom(gp, f618)
// Supply @ 4,700–4,703.87 (weekly R1 zone)
box.set_left(supplyZone, lt)
box.set_right(supplyZone, rt)
box.set_top(supplyZone, 4703.87)
box.set_bottom(supplyZone, 4700.0)
label.set_xy(supplyLb, rt, 4703.87)
label.set_text(supplyLb, "Supply 4700–4703 (Wkly R1)")
// Demand @ 4,587.82 (4h EMA20) – 4,605.71 (daily P)
box.set_left(demandZone, lt)
box.set_right(demandZone, rt)
box.set_top(demandZone, 4605.71)
box.set_bottom(demandZone, 4587.82)
label.set_xy(demandLb, rt, 4605.71)
label.set_text(demandLb, "Demand 4588–4606 (P + 4h EMA20)")
// Pivots
line.set_xy1(pivDP, lt, 4605.71)
line.set_xy2(pivDP, rt, 4605.71)
label.set_xy(lbDP, rt, 4605.71)
label.set_text(lbDP, "Daily P 4605.71")
line.set_xy1(pivR1, lt, 4625.45)
line.set_xy2(pivR1, rt, 4625.45)
label.set_xy(lbR1, rt, 4625.45)
label.set_text(lbR1, "R1 4625.45")
line.set_xy1(pivR2, lt, 4635.45)
line.set_xy2(pivR2, rt, 4635.45)
label.set_xy(lbR2, rt, 4635.45)
label.set_text(lbR2, "R2 4635.45")
line.set_xy1(pivR3, lt, 4655.19)
line.set_xy2(pivR3, rt, 4655.19)
label.set_xy(lbR3, rt, 4655.19)
label.set_text(lbR3, "R3 4655.19")
line.set_xy1(pivS1, lt, 4595.71)
line.set_xy2(pivS1, rt, 4595.71)
label.set_xy(lbS1, rt, 4595.71)
label.set_text(lbS1, "S1 4595.71")
line.set_xy1(pivS2, lt, 4575.97)
line.set_xy2(pivS2, rt, 4575.97)
label.set_xy(lbS2, rt, 4575.97)
label.set_text(lbS2, "S2 4575.97")
line.set_xy1(pivWR1, lt, 4703.87)
line.set_xy2(pivWR1, rt, 4703.87)
label.set_xy(lbWR1, rt, 4703.87)
label.set_text(lbWR1, "Weekly R1 4703.87 ← key")
// BUY setup — entry 4595–4620, inv 4575.97, tgt 4703.87
box.set_left(buyEntry, lt)
box.set_right(buyEntry, rt)
box.set_top(buyEntry, 4620.0)
box.set_bottom(buyEntry, 4595.0)
line.set_xy1(buyInv, lt, 4575.97)
line.set_xy2(buyInv, rt, 4575.97)
line.set_xy1(buyTgt, lt, 4703.87)
line.set_xy2(buyTgt, rt, 4703.87)
label.set_xy(buyLb, rt, 4595.0)
label.set_text(buyLb, "BUY dip 55% · " + buyState)
// SELL setup — entry 4700–4703.87, inv 4720, tgt 4605.71
box.set_left(sellEntry, lt)
box.set_right(sellEntry, rt)
box.set_top(sellEntry, 4703.87)
box.set_bottom(sellEntry, 4700.0)
line.set_xy1(sellInv, lt, 4720.0)
line.set_xy2(sellInv, rt, 4720.0)
line.set_xy1(sellTgt, lt, 4605.71)
line.set_xy2(sellTgt, rt, 4605.71)
label.set_xy(sellLb, rt, 4720.0)
label.set_text(sellLb, "SELL fade 45% · " + sellState)
// ABCD roadmap
line.set_xy1(abLine, swingLowTime, swingLowPx)
line.set_xy2(abLine, swingHighTime, swingHighPx)
line.set_xy1(bcLine, swingHighTime, swingHighPx)
line.set_xy2(bcLine, cTime, cPx)
line.set_xy1(cdLine, cTime, cPx)
line.set_xy2(cdLine, dTime, dPx)
label.set_xy(lbA, swingLowTime, swingLowPx)
label.set_xy(lbB, swingHighTime, swingHighPx)
label.set_xy(lbC, cTime, cPx)
label.set_xy(lbD, dTime, dPx)
// HUD
table.cell(hud, 0, 0, "Gold Desk 2026-08-24", bgcolor=color.new(color.yellow, 20), text_color=color.black)
table.cell(hud, 1, 0, "BIAS: BUY (dips)", bgcolor=color.new(color.green, 20), text_color=color.white)
table.cell(hud, 0, 1, "BUY 4595–4620 → 4703", text_color=color.white)
table.cell(hud, 1, 1, buyState, text_color=color.lime)
table.cell(hud, 0, 2, "SELL 4700–4703 → 4605", text_color=color.white)
table.cell(hud, 1, 2, sellState, text_color=color.red)
table.cell(hud, 0, 3, "Watch: Wed Core PCE", text_color=color.yellow)
table.cell(hud, 1, 3, "Real 2.40 +5bp", text_color=color.orange)
— the resident
overbought, but the dollar owns the tape