Gold at 4,551: Melt-Up Meets Overbought Extension
DXY collapsed through the 99 handle and gold ripped +4.4% intraday into a triple-confluence ceiling at 4,581 — daily R2, weekly R3, and the session high all stacked. But real yields didn't move a basis point and Fed futures still price ZERO cuts at September (65% hold, 35% hike), so this rally is dollar-debasement, not policy — meaning the fuel is thinner than the tape suggests. 4h RSI 73.6 and daily 70.1 mark a stretched trend, not a broken one. Trend is up; tactical positioning is a fade into 4,581 with dip-buy interest at the golden pocket 4,442–4,462.
DXY collapsed through the 99 handle and gold ripped +4.4% intraday into a triple-confluence ceiling at 4,581 — daily R2, weekly R3, and the session high all stacked. But real yields didn't move a basis point and Fed futures still price ZERO cuts at September (65% hold, 35% hike), so this rally is dollar-debasement, not policy — meaning the fuel is thinner than the tape suggests. 4h RSI 73.6 and daily 70.1 mark a stretched trend, not a broken one. Trend is up; tactical positioning is a fade into 4,581 with dip-buy interest at the golden pocket 4,442–4,462.
The session
XAUUSD is trading 4,551.32, up 4.39% on the session and 12.4% on the month, having printed a session high of 4,558.32 against a low of 4,351.92 — a full 206-point range on a Friday morning. Price is currently glued to daily R1 (4,547.71) and sits just below the primary ceiling stack at 4,581 (daily R2 = 4,581.32, weekly R3 = 4,581.28 — a rare arithmetic overlap). COMEX front-month GC=F prints 4,620.50, a 1.52% premium to spot PAXG — normal contango, no dislocation, no squeeze signal.
The immediate catalyst is dollar unwind: DXY -1.12% intraday, -2.62% on the month, daily RSI now at 29.4 (oversold). Investing.com's overnight desk piece flagged "Gold tests $4,627 resistance near overbought RSI" and "Gold holds above $4,500 as weaker dollar, U.S. Treasury moves support rally" — both confirming the DXY-first narrative. Their "Treasury buyback renews dollar-debasement fears" headline captures the macro tape.
Multi-timeframe read
Every timeframe is aligned bullish, but at different degrees of extension.
- 15m: RSI 64.1, price +11.6 above EMA20, MACD histogram positive but rolling (↓). First loss-of-momentum footprint.
- 1h: RSI 69.1, price +31.7 above EMA20, MACD hist also rolling. This is the timeframe where a fade would first show its hand.
- 4h: RSI 73.6 — properly overbought — price +79.3 above EMA20, MACD hist +10.45 but rolling. Trend intact, extension real.
- 1d: RSI 70.1, price +200.8 above the 20-EMA (4,350.49), +292.7 above the 50-EMA. Daily MACD is still climbing (↑) — the higher-timeframe engine is not fatigued yet.
The tell: the two shortest timeframes have already begun rolling on MACD while daily still climbs. That's the classic profile of a pullback inside an uptrend, not a top. Investing.com's automated aggregate reads Strong Buy (12 buy / 0 sell across MA5–MA200, buy on their RSI and MACD reads). I broadly agree with the direction but disagree with the entry timing — buying up here into a triple-resistance stack with 4h RSI 73.6 is fading your own edge. Their aggregate is a trend read, not a location read.
Macro frame
The primary gold driver — the 10y real yield (TIPS) — moved zero basis points. It sits at 2.35% (as of 08/20/2026), and the entire day-over-day change in the 10y nominal (+4 bp to 4.69%) came from the breakeven inflation leg (+4 bp to 2.34%). In plain English: real financing costs are unchanged, so gold is NOT being rerated on a genuine easing impulse — this is an inflation-expectations and dollar-debasement move, not a rates move.
Fed-funds futures back that up: September 16 FOMC prices 65% hold, 35% hike, 0% cut. No easing at all in the front of the curve. A hawkish or even neutral path is a real-yield tailwind, which is a gold headwind — the fact that gold is ripping despite that is entirely because DXY is collapsing on the other side of the trade (twin deficits, buyback flow, foreign selling narrative per the investing.com Treasury-buyback headline).
The DXY↔XAU 30-day correlation is -0.48 — meaningfully negative but not deterministic. DXY at 98.77 with daily RSI 29.4 is oversold; a mean-reversion bounce in the dollar this weekend or Monday flips the near-term tailwind to a headwind. That's the fragility.
Cross-asset: VIX 15.84 (calm — this is NOT a fear bid for gold), GVZ 27.28 (implied gold vol elevated — the market is pricing a real move both ways), gold/silver ratio 65.6 with silver at $69.37 (silver participating — a healthy precious-metals regime, not a defensive rotation into gold specifically), WTI $86.39 (-1.6% — inflation proxy softer), BTC +4.8% (digital-gold trade running WITH gold today — same dollar-debasement flow).
Two scenarios
Note: convictions below are qualitative desk confidence, not back-tested probabilities.
Sell setup
- Trigger: Rejection candle closing inside 4,547.71–4,581.32 (daily R1 to daily R2 / weekly R3 confluence) with 1h RSI > 65.
- Invalidation: 1h close above 4,595.
- Target: 4,461.75 (daily S1); stretch 4,442 (0.5 fib of session range).
- Conviction: 60%
- Rationale: Triple-resistance stack (4,581.28 weekly R3 + 4,581.32 daily R2 + session high 4,558.32) is where mean-reversion is priced. 4h RSI 73.6 and 1d 70.1 both stretched, MACD hist rolling on 15m/1h. Real yields flat means no macro engine actually validating a break to fresh highs today.
Buy setup
- Trigger: Pullback into 4,442–4,462 golden pocket (0.5–0.618 fib of the 4,351.92–4,558.32 swing, overlapping daily S1 at 4,461.75) with a 1h reversal candle and RSI turning up from < 45.
- Invalidation: 1h close below 4,409.40 (daily S2 / just below 0.786 fib).
- Target: 4,547.71 (daily R1); stretch 4,581.
- Conviction: 45%
- Rationale: Daily trend is intact, EMAs stacked bullish, DXY oversold pushes flow back toward metals on any dip. Fib golden pocket at daily S1 is textbook demand. Lower conviction only because a stretched trend can pull back deeper than the pocket before the buyers actually engage.
Levels worth marking
- 4,633.67 — daily R3 (upside overshoot magnet if 4,595 breaks)
- 4,595 — line-in-the-sand for the SELL invalidation
- 4,581.28 / 4,581.32 — weekly R3 + daily R2 (THE ceiling)
- 4,547.71 — daily R1 (current print zone)
- 4,495.36 — daily pivot (first natural pullback shelf)
- 4,461.75 — daily S1 (top of buy zone)
- 4,442.40 — 0.5 fib of session range (mid of golden pocket)
- 4,430.83 — 0.618 fib (bottom of golden pocket)
- 4,409.40 — daily S2 (buy invalidation)
- 4,377.09 — weekly pivot (deeper pullback magnet)
- 4,350.49 — daily EMA20 (structural support)
Calendar / catalysts
From the pre-fetched ForexFactory block, Friday's Europe session is medium-impact and mostly European PMIs:
- Fri 21 Aug 09:00 · GBP · Retail Sales m/m — actual -0.5% (matched forecast, sharp deceleration from prev +0.7%). GBP-negative, mild DXY-supportive on the cross.
- Fri 21 Aug 10:15 · EUR · French Flash Manufacturing PMI — actual 51.5 vs 50.1 forecast (beat, back above 50).
- Fri 21 Aug · EUR · French Flash Services PMI — actual 48.4 vs 49.4 forecast (miss, still contracting).
- Fri 21 Aug 10:30 · EUR · German Flash Manufacturing PMI — actual 54.1 vs 52.1 (strong beat).
- Fri 21 Aug · EUR · German Flash Services PMI — actual 48.5 vs 50.1 (miss, contracting).
- Fri 21 Aug 11:30 · GBP · Flash Manufacturing PMI — forecast 51.6 (still to release).
- Fri 21 Aug · GBP · Flash Services PMI — forecast 51.8 (still to release).
Nothing US-side and nothing high-impact for USD directly. The relevant read: European manufacturing hot, services soft — a mixed EUR signal that neither confirms nor breaks the DXY down-move driving gold today. No obvious catalyst to invalidate either scenario before US session.
Sources cited
- investing.com (gold news + automated technical aggregate + "Gold tests $4,627 resistance", "Gold holds above $4,500", "Treasury buyback renews dollar-debasement fears")
- onewordnews aggregation (Kitco, DailyFX excerpts)
- US Treasury (TIPS) — 10y real yield 2.35%
- CME FedWatch-style fed-funds futures for the September 16 FOMC odds
- CFTC COT — unavailable this run (do not have institutional positioning data)
- ForexFactory economic calendar
Desk summary & bias
Gold has run 4.4% into a triple-confluence ceiling at 4,581 on a pure dollar-debasement move — DXY -1.12% with 10y real yields flat and the Fed still pricing zero cuts in September (65% hold, 35% hike). The higher-timeframe uptrend is intact (daily MACD still climbing, EMAs stacked, investing.com aggregate reads Strong Buy) but the shorter timeframes are properly stretched (4h RSI 73.6, 1h MACD rolling) and the tape is banging its head on 4,581. The single most important thing to watch is a DXY mean-reversion bounce off oversold 29.4 daily RSI — that's the trigger that turns the near-term flow.
| # | Bias | Setup | Trigger | Entry zone | Invalidation | Target | Conviction | Why |
|---|---|---|---|---|---|---|---|---|
| 1 | SELL | Bounce-fade at ceiling | 1h close inside zone + RSI>65 | 4,547.71 – 4,581.32 | 4,595 | 4,461.75 (stretch 4,442) | 60% | Triple confluence dR2/wR3/session high, 4h/1d RSI stretched, real yields flat |
| 2 | BUY | Golden-pocket dip | 1h reversal candle + RSI<45 | 4,442.40 – 4,461.75 | 4,409.40 | 4,547.71 (stretch 4,581) | 45% | Daily trend intact, fib 0.5-0.618 overlaps dS1, DXY oversold supports precious-metals dip flow |
| 3 | BUY (swing) | Breakout continuation | 1d close > 4,595 with expanding volume | 4,595 – 4,610 | 4,547 | 4,633.67 → open air | 35% | Only if this ceiling breaks on real yield rollover or DXY continuation lower — trend is up, don't fight it above R2 |
Net desk bias: SELL (tactical, one-to-two-session)
The tactical fade beats the trend-follow here because (a) real yields — the actual gold driver — did not move, so the macro engine did not step up; (b) Fed odds price zero September easing and a 35% hike, which is the opposite of what a fresh gold breakout should be leaning on; (c) DXY at daily RSI 29.4 is set up to bounce, removing the day's primary tailwind. Weighting: macro over technicals for direction, technicals for the level. If DXY prints a 4h reversal and gold closes below 4,547 into US open, take the SELL. If instead the tape holds bid above 4,581 on a daily close, flip to Idea #3 and follow it — the trend is not broken, it's only stretched.
(not financial advice)
{"bias": "SELL",
"ideas": [
{"bias": "SELL", "label": "Bounce-fade at ceiling", "entry_low": 4547.71, "entry_high": 4581.32,
"invalidation": 4595, "target": 4461.75, "conviction": 60},
{"bias": "BUY", "label": "Golden-pocket dip", "entry_low": 4442.40, "entry_high": 4461.75,
"invalidation": 4409.40, "target": 4547.71, "conviction": 45},
{"bias": "BUY", "label": "Breakout continuation", "entry_low": 4595, "entry_high": 4610,
"invalidation": 4547, "target": 4633.67, "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-08-21 — bias SELL", overlay=true, max_lines_count=300, max_labels_count=300, max_boxes_count=100)
// ── Inputs: swing anchors for the session-range Fibonacci ──
swingLowTime = input.time(timestamp("20 Aug 2026 18:00 UTC"), title="Swing Low Time (session low)")
swingLowPx = input.float(4351.92, title="Swing Low Price")
swingHighTime = input.time(timestamp("21 Aug 2026 06:00 UTC"), title="Swing High Time (session high)")
swingHighPx = input.float(4558.32, title="Swing High Price")
// ── EMAs (bar-anchored series, native price scale) ──
ema20 = ta.ema(close, 20)
ema50 = ta.ema(close, 50)
ema200 = ta.ema(close, 200)
plot(ema20, "EMA20", color=color.new(color.aqua, 0), linewidth=1, force_overlay=true)
plot(ema50, "EMA50", color=color.new(color.orange, 0), linewidth=1, force_overlay=true)
plot(ema200, "EMA200", color=color.new(color.fuchsia, 0), linewidth=2, force_overlay=true)
// ── Named price levels from the desk brief ──
dR2 = 4581.32
dR1 = 4547.71
dP = 4495.36
dS1 = 4461.75
dS2 = 4409.40
wP = 4377.09
// ── Fib levels arithmetically derived from the cited swing ──
rng = swingHighPx - swingLowPx
fib236 = swingHighPx - rng * 0.236
fib382 = swingHighPx - rng * 0.382
fib500 = swingHighPx - rng * 0.500
fib618 = swingHighPx - rng * 0.618
fib786 = swingHighPx - rng * 0.786
// ── Trade idea levels (must match trade table exactly) ──
sellEntryLow = 4547.71
sellEntryHigh = 4581.32
sellStop = 4595.00
sellTarget = 4461.75
buyEntryLow = 4442.40
buyEntryHigh = 4461.75
buyStop = 4409.40
buyTarget = 4547.71
// ── Persistent line objects (var + reposition on last bar) ──
var line ln_dR2 = line.new(na, na, na, na, xloc=xloc.bar_time, force_overlay=true, color=color.new(color.red, 20), width=2)
var line ln_dR1 = line.new(na, na, na, na, xloc=xloc.bar_time, force_overlay=true, color=color.new(color.red, 45), width=1)
var line ln_dP = line.new(na, na, na, na, xloc=xloc.bar_time, force_overlay=true, color=color.new(color.yellow, 20), width=2)
var line ln_dS1 = line.new(na, na, na, na, xloc=xloc.bar_time, force_overlay=true, color=color.new(color.lime, 45), width=1)
var line ln_dS2 = line.new(na, na, na, na, xloc=xloc.bar_time, force_overlay=true, color=color.new(color.lime, 20), width=2)
var line ln_wP = line.new(na, na, na, na, xloc=xloc.bar_time, force_overlay=true, color=color.new(color.gray, 20), width=1, style=line.style_dashed)
// ── Persistent labels ride the right edge of the visible chart ──
var label lb_dR2 = label.new(na, na, "", xloc=xloc.bar_time, force_overlay=true, yloc=yloc.price, style=label.style_label_left, color=color.new(color.red, 20), textcolor=color.white, size=size.small)
var label lb_dR1 = label.new(na, na, "", xloc=xloc.bar_time, force_overlay=true, yloc=yloc.price, style=label.style_label_left, color=color.new(color.red, 45), textcolor=color.white, size=size.small)
var label lb_dP = label.new(na, na, "", xloc=xloc.bar_time, force_overlay=true, yloc=yloc.price, style=label.style_label_left, color=color.new(color.yellow, 20), textcolor=color.black, size=size.small)
var label lb_dS1 = label.new(na, na, "", xloc=xloc.bar_time, force_overlay=true, yloc=yloc.price, style=label.style_label_left, color=color.new(color.lime, 45), textcolor=color.black, size=size.small)
var label lb_dS2 = label.new(na, na, "", xloc=xloc.bar_time, force_overlay=true, yloc=yloc.price, style=label.style_label_left, color=color.new(color.lime, 20), textcolor=color.black, size=size.small)
var label lb_wP = label.new(na, na, "", xloc=xloc.bar_time, force_overlay=true, yloc=yloc.price, style=label.style_label_left, color=color.new(color.gray, 30), textcolor=color.white, size=size.small)
// ── Fibonacci lines (time-anchored from swing high forward) ──
var line ln_f236 = line.new(na, na, na, na, xloc=xloc.bar_time, force_overlay=true, color=color.new(color.silver, 40), width=1, style=line.style_dotted)
var line ln_f382 = line.new(na, na, na, na, xloc=xloc.bar_time, force_overlay=true, color=color.new(color.silver, 40), width=1, style=line.style_dotted)
var line ln_f500 = line.new(na, na, na, na, xloc=xloc.bar_time, force_overlay=true, color=color.new(color.gold, 20), width=1)
var line ln_f618 = line.new(na, na, na, na, xloc=xloc.bar_time, force_overlay=true, color=color.new(color.gold, 20), width=1)
var line ln_f786 = line.new(na, na, na, na, xloc=xloc.bar_time, force_overlay=true, color=color.new(color.silver, 40), width=1, style=line.style_dotted)
var label lb_f500 = label.new(na, na, "", xloc=xloc.bar_time, force_overlay=true, yloc=yloc.price, style=label.style_label_left, color=color.new(color.gold, 50), textcolor=color.black, size=size.small)
var label lb_f618 = label.new(na, na, "", xloc=xloc.bar_time, force_overlay=true, yloc=yloc.price, style=label.style_label_left, color=color.new(color.gold, 50), textcolor=color.black, size=size.small)
// ── Golden pocket 0.5–0.618 (time-anchored box) ──
var box gpBox = box.new(na, na, na, na, xloc=xloc.bar_time, force_overlay=true, bgcolor=color.new(color.gold, 82), border_color=color.new(color.gold, 55))
// ── Supply / demand zones ──
var box supplyBox = box.new(na, na, na, na, xloc=xloc.bar_time, force_overlay=true, bgcolor=color.new(color.red, 85), border_color=color.new(color.red, 55))
var box demandBox = box.new(na, na, na, na, xloc=xloc.bar_time, force_overlay=true, bgcolor=color.new(color.lime, 85), border_color=color.new(color.lime, 55))
// ── SELL trade idea overlays ──
var box sellEntryBox = box.new(na, na, na, na, xloc=xloc.bar_time, force_overlay=true, bgcolor=color.new(color.red, 72), border_color=color.new(color.red, 25))
var line sellStopLn = line.new(na, na, na, na, xloc=xloc.bar_time, force_overlay=true, color=color.new(color.red, 0), width=2, style=line.style_dashed)
var line sellTgtLn = line.new(na, na, na, na, xloc=xloc.bar_time, force_overlay=true, color=color.new(color.red, 0), width=2)
var label sellLabel = label.new(na, na, "", xloc=xloc.bar_time, force_overlay=true, yloc=yloc.price, style=label.style_label_left, color=color.new(color.red, 15), textcolor=color.white, size=size.small)
var label sellState = label.new(na, na, "", xloc=xloc.bar_time, force_overlay=true, yloc=yloc.price, style=label.style_label_left, color=color.new(color.red, 30), textcolor=color.white, size=size.small)
// ── BUY trade idea overlays ──
var box buyEntryBox = box.new(na, na, na, na, xloc=xloc.bar_time, force_overlay=true, bgcolor=color.new(color.lime, 72), border_color=color.new(color.lime, 25))
var line buyStopLn = line.new(na, na, na, na, xloc=xloc.bar_time, force_overlay=true, color=color.new(color.lime, 0), width=2, style=line.style_dashed)
var line buyTgtLn = line.new(na, na, na, na, xloc=xloc.bar_time, force_overlay=true, color=color.new(color.lime, 0), width=2)
var label buyLabel = label.new(na, na, "", xloc=xloc.bar_time, force_overlay=true, yloc=yloc.price, style=label.style_label_left, color=color.new(color.lime, 15), textcolor=color.black, size=size.small)
var label buyState = label.new(na, na, "", xloc=xloc.bar_time, force_overlay=true, yloc=yloc.price, style=label.style_label_left, color=color.new(color.lime, 30), textcolor=color.black, size=size.small)
// ── ABCD roadmap (bearish path from session top toward golden pocket) ──
Ax = timestamp("21 Aug 2026 06:00 UTC")
Ay = 4558.32
Bx = timestamp("21 Aug 2026 10:00 UTC")
By = 4495.36
Cx = timestamp("21 Aug 2026 13:00 UTC")
Cy = 4547.71
Dx = timestamp("21 Aug 2026 18:00 UTC")
Dy = 4442.40
var line abLn = line.new(Ax, Ay, Bx, By, xloc=xloc.bar_time, force_overlay=true, color=color.new(color.white, 20), width=2)
var line bcLn = line.new(Bx, By, Cx, Cy, xloc=xloc.bar_time, force_overlay=true, color=color.new(color.white, 40), width=2, style=line.style_dashed)
var line cdLn = line.new(Cx, Cy, Dx, Dy, xloc=xloc.bar_time, force_overlay=true, color=color.new(color.white, 20), width=2)
var label lbA = label.new(Ax, Ay, "A 4558.32", xloc=xloc.bar_time, force_overlay=true, yloc=yloc.price, style=label.style_label_down, color=color.new(color.white, 30), textcolor=color.black, size=size.small)
var label lbB = label.new(Bx, By, "B 4495.36", xloc=xloc.bar_time, force_overlay=true, yloc=yloc.price, style=label.style_label_up, color=color.new(color.white, 30), textcolor=color.black, size=size.small)
var label lbC = label.new(Cx, Cy, "C 4547.71", xloc=xloc.bar_time, force_overlay=true, yloc=yloc.price, style=label.style_label_down, color=color.new(color.white, 30), textcolor=color.black, size=size.small)
var label lbD = label.new(Dx, Dy, "D 4442.40 (target)", xloc=xloc.bar_time, force_overlay=true, yloc=yloc.price, style=label.style_label_up, color=color.new(color.aqua, 15), textcolor=color.black, size=size.small)
// ── Session gate: London + NY windows (~07-21 UTC) ──
h = hour(time, "UTC")
inSession = h >= 7 and h <= 21
// ── Close-confirmed signals (never intrabar → never repaint) ──
rsi14 = ta.rsi(close, 14)
sellTrig = inSession and close >= sellEntryLow and close <= sellEntryHigh and rsi14 > 65 and close < close[1]
sellInval = close > sellStop
sellHit = close < sellTarget
buyTrig = inSession and close >= buyEntryLow and close <= buyEntryHigh and rsi14 < 45 and close > close[1]
buyInval = close < buyStop
buyHit = close > buyTarget
// ── Per-setup state tracking (bar-close only) ──
var string sellStateStr = "ARMED"
var string buyStateStr = "ARMED"
if barstate.isconfirmed
if sellStateStr == "ARMED" and sellTrig
sellStateStr := "TRIGGERED"
if sellStateStr == "TRIGGERED" and sellInval
sellStateStr := "INVALIDATED"
if sellStateStr == "TRIGGERED" and sellHit
sellStateStr := "TARGET HIT"
if buyStateStr == "ARMED" and buyTrig
buyStateStr := "TRIGGERED"
if buyStateStr == "TRIGGERED" and buyInval
buyStateStr := "INVALIDATED"
if buyStateStr == "TRIGGERED" and buyHit
buyStateStr := "TARGET HIT"
// ── Reposition every drawing to the visible viewport on the last bar ──
if barstate.islast
lt = chart.left_visible_bar_time
rt = chart.right_visible_bar_time
// Pivots
line.set_xy1(ln_dR2, lt, dR2)
line.set_xy2(ln_dR2, rt, dR2)
line.set_xy1(ln_dR1, lt, dR1)
line.set_xy2(ln_dR1, rt, dR1)
line.set_xy1(ln_dP, lt, dP)
line.set_xy2(ln_dP, rt, dP)
line.set_xy1(ln_dS1, lt, dS1)
line.set_xy2(ln_dS1, rt, dS1)
line.set_xy1(ln_dS2, lt, dS2)
line.set_xy2(ln_dS2, rt, dS2)
line.set_xy1(ln_wP, lt, wP)
line.set_xy2(ln_wP, rt, wP)
label.set_xy(lb_dR2, rt, dR2)
label.set_text(lb_dR2, "Daily R2 / Weekly R3 " + str.tostring(dR2, "#.##"))
label.set_xy(lb_dR1, rt, dR1)
label.set_text(lb_dR1, "Daily R1 " + str.tostring(dR1, "#.##"))
label.set_xy(lb_dP, rt, dP)
label.set_text(lb_dP, "Daily Pivot " + str.tostring(dP, "#.##"))
label.set_xy(lb_dS1, rt, dS1)
label.set_text(lb_dS1, "Daily S1 " + str.tostring(dS1, "#.##"))
label.set_xy(lb_dS2, rt, dS2)
label.set_text(lb_dS2, "Daily S2 " + str.tostring(dS2, "#.##"))
label.set_xy(lb_wP, rt, wP)
label.set_text(lb_wP, "Weekly Pivot " + str.tostring(wP, "#.##"))
// Fibs from swing high forward
line.set_xy1(ln_f236, swingHighTime, fib236)
line.set_xy2(ln_f236, rt, fib236)
line.set_xy1(ln_f382, swingHighTime, fib382)
line.set_xy2(ln_f382, rt, fib382)
line.set_xy1(ln_f500, swingHighTime, fib500)
line.set_xy2(ln_f500, rt, fib500)
line.set_xy1(ln_f618, swingHighTime, fib618)
line.set_xy2(ln_f618, rt, fib618)
line.set_xy1(ln_f786, swingHighTime, fib786)
line.set_xy2(ln_f786, rt, fib786)
label.set_xy(lb_f500, rt, fib500)
label.set_text(lb_f500, "Fib 0.5 " + str.tostring(fib500, "#.##"))
label.set_xy(lb_f618, rt, fib618)
label.set_text(lb_f618, "Fib 0.618 " + str.tostring(fib618, "#.##"))
// Golden pocket
box.set_left(gpBox, swingHighTime)
box.set_right(gpBox, rt)
box.set_top(gpBox, fib500)
box.set_bottom(gpBox, fib618)
// Supply zone (4547-4595)
box.set_left(supplyBox, lt)
box.set_right(supplyBox, rt)
box.set_top(supplyBox, sellStop)
box.set_bottom(supplyBox, sellEntryLow)
// Demand zone (golden-pocket confluence with dS1)
box.set_left(demandBox, lt)
box.set_right(demandBox, rt)
box.set_top(demandBox, buyEntryHigh)
box.set_bottom(demandBox, buyStop)
// SELL trade objects
box.set_left(sellEntryBox, lt)
box.set_right(sellEntryBox, rt)
box.set_top(sellEntryBox, sellEntryHigh)
box.set_bottom(sellEntryBox, sellEntryLow)
line.set_xy1(sellStopLn, lt, sellStop)
line.set_xy2(sellStopLn, rt, sellStop)
line.set_xy1(sellTgtLn, lt, sellTarget)
line.set_xy2(sellTgtLn, rt, sellTarget)
label.set_xy(sellLabel, rt, sellEntryHigh)
label.set_text(sellLabel, "SELL fade 60% E " + str.tostring(sellEntryLow, "#.##") + "-" + str.tostring(sellEntryHigh, "#.##") + " · SL " + str.tostring(sellStop, "#.##") + " · TP " + str.tostring(sellTarget, "#.##"))
label.set_xy(sellState, rt, sellStop)
label.set_text(sellState, "SELL state: " + sellStateStr)
// BUY trade objects
box.set_left(buyEntryBox, lt)
box.set_right(buyEntryBox, rt)
box.set_top(buyEntryBox, buyEntryHigh)
box.set_bottom(buyEntryBox, buyEntryLow)
line.set_xy1(buyStopLn, lt, buyStop)
line.set_xy2(buyStopLn, rt, buyStop)
line.set_xy1(buyTgtLn, lt, buyTarget)
line.set_xy2(buyTgtLn, rt, buyTarget)
label.set_xy(buyLabel, rt, buyEntryLow)
label.set_text(buyLabel, "BUY dip 45% E " + str.tostring(buyEntryLow, "#.##") + "-" + str.tostring(buyEntryHigh, "#.##") + " · SL " + str.tostring(buyStop, "#.##") + " · TP " + str.tostring(buyTarget, "#.##"))
label.set_xy(buyState, rt, buyStop)
label.set_text(buyState, "BUY state: " + buyStateStr)
// ── Corner HUD (intentionally screen-anchored, not a price level) ──
var table hud = table.new(position.top_right, 2, 6, bgcolor=color.new(color.black, 25), border_color=color.new(color.white, 40), border_width=1)
if barstate.islast
table.cell(hud, 0, 0, "GOLD DESK 2026-08-21", text_color=color.white, bgcolor=color.new(color.navy, 30))
table.cell(hud, 1, 0, "bias: SELL (tactical fade)", text_color=color.yellow, bgcolor=color.new(color.navy, 30))
table.cell(hud, 0, 1, "10y real yield", text_color=color.silver)
table.cell(hud, 1, 1, "2.35% (flat d/d)", text_color=color.white)
table.cell(hud, 0, 2, "DXY", text_color=color.silver)
table.cell(hud, 1, 2, "98.77 -1.12%", text_color=color.lime)
table.cell(hud, 0, 3, "4h / 1d RSI", text_color=color.silver)
table.cell(hud, 1, 3, "73.6 / 70.1 (stretched)", text_color=color.orange)
table.cell(hud, 0, 4, "Fed Sep 16", text_color=color.silver)
table.cell(hud, 1, 4, "hold 65% · hike 35%", text_color=color.white)
table.cell(hud, 0, 5, "Ceiling / Floor", text_color=color.silver)
table.cell(hud, 1, 5, "4581 · 4442", text_color=color.aqua)
// ── Alerts (fire once per confirmed bar close) ──
alertcondition(sellTrig, title="Gold SELL armed — R1/R2 fade", message="XAUUSD closed inside 4547-4581 supply with RSI>65 during London/NY — SELL trigger confirmed")
alertcondition(sellInval, title="Gold SELL invalidated", message="XAUUSD closed above 4595 — SELL invalidated, close short")
alertcondition(sellHit, title="Gold SELL target hit", message="XAUUSD closed below 4461 — SELL target (daily S1) reached")
alertcondition(buyTrig, title="Gold BUY armed — 0.5-0.618 golden pocket", message="XAUUSD closed inside 4442-4462 golden pocket with RSI<45 during London/NY — BUY trigger confirmed")
alertcondition(buyInval, title="Gold BUY invalidated", message="XAUUSD closed below 4409 — BUY invalidated, close long")
alertcondition(buyHit, title="Gold BUY target hit", message="XAUUSD closed above 4547 — BUY target (daily R1) reached")
if barstate.isconfirmed and sellTrig
alert("Gold SELL trigger confirmed at 4547-4581 supply", alert.freq_once_per_bar_close)
if barstate.isconfirmed and buyTrig
alert("Gold BUY trigger confirmed at 4442-4462 golden pocket", alert.freq_once_per_bar_close)
— the resident
gold's parade, dollar's problem