Gold Desk 2026-08-26: Pre-PCE Compression, Fading the Bounce
Gold gave back 90 handles overnight from 4,689 and is grinding daily pivot 4,644 with 15m/1h momentum broken but the daily uptrend still fully intact — a classic pre-catalyst compression. Real yields dropped 6bp and DXY is -0.6%, both dovish tailwinds, but 36% Fed-HIKE odds heading into the 15:30 UTC PCE print mean the tape is coiled the wrong way if inflation runs hot. Weighting the imminent catalyst risk over the macro backdrop, the desk is fading rallies into the 4,654–4,691 supply band, with the counter-scalp reserved for a 4,600 reclaim close.
Gold gave back 90 handles overnight from 4,689 and is grinding daily pivot 4,644 with 15m/1h momentum broken but the daily uptrend still fully intact — a classic pre-catalyst compression. Real yields dropped 6bp and DXY is -0.6%, both dovish tailwinds, but 36% Fed-HIKE odds heading into the 15:30 UTC PCE print mean the tape is coiled the wrong way if inflation runs hot. Weighting the imminent catalyst risk over the macro backdrop, the desk is fading rallies into the 4,654–4,691 supply band, with the counter-scalp reserved for a 4,600 reclaim close.
The session
Spot (PAXG) prints 4,621.72, down 0.20% on the day but still +8.18% on the month — the pullback is small relative to the trend. The Asia-Europe session traced a full 91.7-point range (4,689.00 high → 4,597.31 low), rejecting hard off the daily R1 area (4,691.67) and washing straight through the Daily P (4,644.49) into S1 (4,599.98) before stabilising. COMEX front-month (GC=F) is 4,687.10, keeping a fat +1.41% basis to spot which typically reflects continued futures demand rather than distress. The catalyst for the fade wasn't a single headline — investing.com's own read ("Gold slips but stays near 3-month high as oil, yields ease inflation pressure") captures it: a mechanical drift lower as WTI drops 2.9% and yields ease, so the inflation-hedge bid comes out even while the disinflation trade props up the trend. Price is now pinned between S1 (4,599.98) and Daily P (4,644.49), waiting for PCE.
Multi-timeframe read
The four timeframes disagree, and that disagreement IS the setup:
- 15m — RSI 36.8, MACD histogram -0.72 and rolling, price 9.3 below EMA20 and 15.0 below EMA50. Cleanly bearish; sellers control the tape.
- 1h — RSI 42.7, MACD -3.04 still negative, price 14.7 below EMA20 and 11.5 below EMA50. Same story one frame up, no reversal signal yet.
- 4h — RSI 69.5 (still overbought from the run-up), MACD histogram -7.68 and turning DOWN, price 1.2 below EMA20. This is the pivotal frame: the trend that pushed 4h RSI to 70 is topping out and MACD is rolling. That's classic distribution before either a deeper retest or a range base.
- 1d — RSI 68.5, price +157.9 over EMA20, +294.2 over EMA50, +254.8 over EMA200. Daily is unambiguously bullish and nowhere near a structural break.
The convergence: sellers own the short frames, the primary trend owns the daily. That geometry only resolves two ways — a deep flush into daily support (4,515 weekly P / EMA20 daily at 4,463) that rebuys the trend, OR a shallow base and continuation. Both need PCE to pick a side.
The investing.com automated aggregate reads Strong Buy on the daily but flags Sell on MA5–MA200 (4 buy / 8 sell), Sell on RSI, and Sell on MACD. That's a headline-oscillator split that mirrors exactly what we see — trend up, momentum down. Their aggregate is trend-weighted; ours is momentum-weighted for the intraday. Say so plainly: we're leaning bearish for the session; they're bullish on the trend. Both can be right.
Macro frame
Lead with the driver: the US 10y real yield (TIPS) is 2.32%, down 6bp d/d. That's a meaningful dovish move — real yields are the direct opportunity cost of holding non-yielding bullion, and 6bp is enough to justify the +8% monthly move on its own. 10y breakeven inflation flat at 2.32%, so the entire nominal move (4.64%, -6bp) is real-yield-driven, not inflation-repricing-driven. That is textbook gold-bullish composition.
The Fed-odds path, however, does NOT match that: futures price 64% hold / 36% HIKE / 0% cut for the Sep 16 FOMC, with the current target at 3.75%. A 36% probability of an outright hike is not a benign backdrop — it's a live tail risk, and today's Core PCE (forecast 0.2% vs prev 0.1%) is exactly the print that either kills that tail or feeds it. If PCE prints ≥0.3%, expect hike odds to jump toward 50%, real yields to reprice higher, and gold to see a fast retest of 4,552 → 4,515. If it prints 0.1–0.2% as forecast, the dovish drift continues.
DXY at 98.96 (-0.63% intraday, -2.38% month) is soft, sitting BELOW its daily EMA20/50/200 with daily RSI at 34.5 — a struggling dollar keeps a bid under gold structurally. The 30-day DXY↔XAU return correlation is -0.38, meaningful but not dominant, so DXY is a supporting factor rather than a control variable.
Cross-asset: VIX 15.69 is a benign risk tape (no safe-haven bid). GVZ at 27.69 is elevated — the options market is pricing a big gold move over the coming weeks, which fits the "catalyst compression" read. Gold/silver ratio 67.2 with silver at $68.73 keeps us in a mid-cycle PM regime, no reversion signal. WTI -2.9% to $80 pulled inflation expectations lower today (consistent with the flat breakeven). Bitcoin at $78,887 (+0.4%) — the debasement trade cooled after its best week in three years per investing.com; if BTC keeps consolidating, some of the flow can rotate back into gold.
Two scenarios
(Conviction figures below are qualitative desk reads, not back-tested probabilities.)
Sell setup
- Trigger: Rally into 4,654–4,691 (0.618 fib of the session bounce + Daily R1) that CLOSES a 15m or 1h candle back below 4,689.
- Invalidation: Hourly close above 4,703.87 (weekly R1).
- Target: 4,599.98 first, then 4,552.80 (Daily S2). AB≈CD symmetry from the session drop projects into 4,562.
- Conviction: 55%
- Rationale: 15m and 1h are momentum-broken, 4h MACD has rolled from RSI-70, and the 4,689–4,703 zone is a fresh supply pocket. The setup is a supply retest into a known event; risk is defined tight at weekly R1. It is a lower-conviction FADE, not a trend trade — the daily is still up.
Buy setup
- Trigger: Dip to 4,597–4,610 (session low / Daily S1 zone) that CLOSES back above 4,610 on a 15m or 1h.
- Invalidation: Hourly close below 4,573.00 (5-day low).
- Target: 4,644.49 (Daily P) first, stretch to 4,691.67 (Daily R1).
- Conviction: 45%
- Rationale: Daily uptrend intact, real yields softening, DXY heavy — the macro says buy dips. But the intraday tape is bearish, so the counter-trade needs a close-confirmed reclaim, not a wick tag. Take it if PCE cools; abandon it if PCE runs hot.
Levels worth marking
- Overhead: 4,644.49 (Daily P, immediate resistance) · 4,653.97 (0.618 fib golden pocket top) · 4,689.00 (session high) · 4,691.67 (Daily R1) · 4,703.87 (weekly R1, hard sell-stop line) · 4,736.18 (Daily R2).
- Below: 4,616.94 (0.786 fib) · 4,599.98 (Daily S1) · 4,597.31 (session low) · 4,573.00 (5-day low, structural pivot) · 4,552.80 (Daily S2 / AB≈CD projected target) · 4,515.13 (Weekly P — the next major base) · 4,463.81 (Daily EMA20, macro trend line).
- Golden pocket (0.5–0.618 fib of the session bounce): 4,643.16 – 4,653.97 — the highest-probability reaction band for the sell setup and confluent with the Daily P.
Calendar / catalysts
Live from the ForexFactory feed for this session:
- Wed Aug 26 · 15:30 UTC · USD · High · Core PCE m/m — forecast 0.2%, prev 0.1%. The print of the week. A tick to 0.3%+ likely re-arms hike odds and hits gold; a 0.1% miss unlocks the trend.
- Wed Aug 26 · USD · High · Prelim GDP q/q — forecast 1.5%, prev 1.5%. Same release window, same reaction function.
- Wed Aug 26 · USD · Medium · Prelim GDP Price Index q/q — forecast 6.2%. Secondary inflation read; confirming signal only.
- Already in the tape: AU CPI m/m 1.0% (fcst 0.9%) and y/y 3.5% (fcst 3.3%) — hot Aussie print keeps AUD bid and reminds the market inflation is not fully tamed. Trimmed mean also above forecast. Marginally gold-supportive via the "sticky inflation → hedge bid" thread, but not enough to move the US-real-yield needle on its own.
- CB Consumer Confidence yesterday: 89.4 vs 90.3 forecast — soft, quietly gold-supportive.
Sources cited
Onewordnews (kitco, dailyfx excerpts); investing.com (headlines + automated technical aggregate + "Gold tests $4,692 as bull flag meets MACD warning"); Treasury.gov (10y real yield, breakeven); CFTC (COT — unavailable this run, noted); ForexFactory (economic calendar); CME fed-funds futures for FOMC odds.
Desk summary & bias
Gold is trapped in a pre-catalyst compression: the daily trend is fully intact and the macro (real yields -6bp, DXY -0.6%) is dovish, but the 15m/1h are cleanly bearish and Fed-hike odds sit at an uncomfortable 36% into the 15:30 UTC Core PCE. The 4h has RSI at 69 with a rolling MACD — that's a top being made, not a breakout. The single most important thing to watch is the PCE reaction candle on the 1h: a close back above 4,644.49 (Daily P) reopens the trend; a close below 4,597.31 (session low) opens 4,552 → 4,515 fast.
| # | Bias | Setup | Trigger | Entry zone | Invalidation | Target | Conviction | Why |
|---|---|---|---|---|---|---|---|---|
| 1 | SELL | Golden-pocket bounce fade | 15m/1h close back below 4,689 after tagging supply | 4,654 – 4,691 | 4,703.87 (Wkly R1) | 4,552.80 (Daily S2) | 55% | 4h MACD rolling from RSI-70, fresh supply at R1, tight risk vs a known event catalyst |
| 2 | BUY | S1 reclaim scalp | 15m/1h close back above 4,610 after dip to S1 | 4,597 – 4,610 | 4,573.00 (5d low) | 4,644.49 (Daily P) | 45% | Daily trend intact, real yields softening, DXY heavy — dovish macro rewards dip buyers if PCE cools |
| 3 | BUY | Deep-discount swing at Weekly P | Daily close reclaim above 4,552.80 after tag of 4,515 | 4,507 – 4,525 | Daily close below 4,463 (D-EMA20) | 4,644 → 4,691 | 40% | Only triggers on a PCE-driven flush; buys the primary uptrend at the daily EMA20 confluence — the location the trend re-loads at |
Net desk bias: SELL (tactical, intraday).
The real-yield drop and soft DXY are unambiguously bullish for gold structurally, and we RESPECT that — hence a 40% swing-BUY reserved for a flush into weekly P. But between now and 15:30 UTC the intraday tape is momentum-broken across 15m/1h, 4h MACD is rolling from an overbought reading, and 36% hike odds mean the catalyst risk is asymmetric to the downside. We are weighting the tactical setup (short frames + event risk) over the macro trend for the session only. If the 4,703.87 line goes on a close, we flip and buy the reclaim of 4,644 — the desk is short-term bearish, not structurally bearish.
(not financial advice)
{"bias": "SELL",
"ideas": [
{"bias": "SELL", "label": "Golden-pocket bounce fade", "entry_low": 4654, "entry_high": 4691,
"invalidation": 4703.87, "target": 4552.80, "conviction": 55},
{"bias": "BUY", "label": "S1 reclaim scalp", "entry_low": 4597, "entry_high": 4610,
"invalidation": 4573.00, "target": 4644.49, "conviction": 45},
{"bias": "BUY", "label": "Weekly-P deep-discount swing", "entry_low": 4507, "entry_high": 4525,
"invalidation": 4463, "target": 4644.49, "conviction": 40}
]}
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-26 — bias SELL", overlay=true, max_lines_count=300, max_labels_count=300, max_boxes_count=100)
// ── Inputs: swing anchors (default to the session A/B in the post) ──
swingHighTime = input.time(timestamp("25 Aug 2026 15:00 UTC"), title="Swing High Time (A)")
swingLowTime = input.time(timestamp("26 Aug 2026 05:00 UTC"), title="Swing Low Time (B)")
swingHigh = input.float(4689.00, title="Swing High Price (A)")
swingLow = input.float(4597.31, title="Swing Low Price (B)")
// ── EMAs (trend spine) ──
ema20 = ta.ema(close, 20)
ema50 = ta.ema(close, 50)
ema200 = ta.ema(close, 200)
plot(ema20, title="EMA20", color=color.yellow, linewidth=1, force_overlay=true)
plot(ema50, title="EMA50", color=color.orange, linewidth=1, force_overlay=true)
plot(ema200, title="EMA200", color=color.aqua, linewidth=2, force_overlay=true)
// ── Fibonacci retracement (bounce fib of the A→B drop) ──
fibRange = swingHigh - swingLow
f236 = swingLow + fibRange * 0.236
f382 = swingLow + fibRange * 0.382
f500 = swingLow + fibRange * 0.500
f618 = swingLow + fibRange * 0.618
f786 = swingLow + fibRange * 0.786
var line lF236 = line.new(na, na, na, na, xloc=xloc.bar_time, force_overlay=true, color=color.gray, style=line.style_dashed)
var line lF382 = line.new(na, na, na, na, xloc=xloc.bar_time, force_overlay=true, color=color.gray, style=line.style_dashed)
var line lF500 = line.new(na, na, na, na, xloc=xloc.bar_time, force_overlay=true, color=color.yellow, width=1)
var line lF618 = line.new(na, na, na, na, xloc=xloc.bar_time, force_overlay=true, color=color.yellow, width=1)
var line lF786 = line.new(na, na, na, na, xloc=xloc.bar_time, force_overlay=true, color=color.gray, style=line.style_dashed)
// ── Golden pocket (0.5 – 0.618) — the highest-probability reaction band ──
var box goldenPocket = box.new(na, na, na, na, xloc=xloc.bar_time, force_overlay=true, bgcolor=color.new(color.yellow, 80), border_color=color.new(color.yellow, 40))
// ── Supply / Demand zones ──
var box supplyZone = box.new(na, na, na, na, xloc=xloc.bar_time, force_overlay=true, bgcolor=color.new(color.red, 80), 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, 80), border_color=color.new(color.lime, 50))
// ── Pivots (Daily + Weekly) ──
var line lDP = line.new(na, na, na, na, xloc=xloc.bar_time, force_overlay=true, color=color.aqua, width=2)
var line lDR1 = line.new(na, na, na, na, xloc=xloc.bar_time, force_overlay=true, color=color.red, width=1)
var line lDS1 = line.new(na, na, na, na, xloc=xloc.bar_time, force_overlay=true, color=color.green, width=1)
var line lDS2 = line.new(na, na, na, na, xloc=xloc.bar_time, force_overlay=true, color=color.green, width=1, style=line.style_dashed)
var line lWR1 = line.new(na, na, na, na, xloc=xloc.bar_time, force_overlay=true, color=color.maroon, width=2)
var line lWP = line.new(na, na, na, na, xloc=xloc.bar_time, force_overlay=true, color=color.purple, width=2, style=line.style_dashed)
// ── Trade #1: SELL fade into supply (4,654–4,691) ──
var box sellEntry = box.new(na, na, na, na, xloc=xloc.bar_time, force_overlay=true, bgcolor=color.new(color.red, 75), border_color=color.new(color.red, 30))
var line sellInv = line.new(na, na, na, na, xloc=xloc.bar_time, force_overlay=true, color=color.red, style=line.style_dashed, width=2)
var line sellTgt = line.new(na, na, na, na, xloc=xloc.bar_time, force_overlay=true, color=color.maroon, style=line.style_dotted, width=2)
// ── Trade #2: BUY scalp off S1 (4,597–4,610) ──
var box buyEntry = box.new(na, na, na, na, xloc=xloc.bar_time, force_overlay=true, bgcolor=color.new(color.lime, 75), border_color=color.new(color.lime, 30))
var line buyInv = line.new(na, na, na, na, xloc=xloc.bar_time, force_overlay=true, color=color.green, style=line.style_dashed, width=2)
var line buyTgt = line.new(na, na, na, na, xloc=xloc.bar_time, force_overlay=true, color=color.teal, style=line.style_dotted, width=2)
// ── ABCD roadmap (A high → B low → C bounce → D post-PCE target) ──
tA = timestamp("25 Aug 2026 15:00 UTC")
tB = timestamp("26 Aug 2026 05:00 UTC")
tC = timestamp("26 Aug 2026 13:00 UTC")
tD = timestamp("26 Aug 2026 18:00 UTC")
pA = 4689.00
pB = 4597.31
pC = 4653.97
pD = 4552.80
var line lAB = line.new(na, na, na, na, xloc=xloc.bar_time, force_overlay=true, color=color.white, width=2)
var line lBC = line.new(na, na, na, na, xloc=xloc.bar_time, force_overlay=true, color=color.white, width=2)
var line lCD = line.new(na, na, na, na, xloc=xloc.bar_time, force_overlay=true, color=color.fuchsia, width=2, style=line.style_dashed)
var label lblA = label.new(na, na, "", xloc=xloc.bar_time, force_overlay=true, style=label.style_label_down, color=color.red, textcolor=color.white)
var label lblB = label.new(na, na, "", xloc=xloc.bar_time, force_overlay=true, style=label.style_label_up, color=color.green, textcolor=color.white)
var label lblC = label.new(na, na, "", xloc=xloc.bar_time, force_overlay=true, style=label.style_label_down, color=color.orange, textcolor=color.white)
var label lblD = label.new(na, na, "", xloc=xloc.bar_time, force_overlay=true, style=label.style_label_up, color=color.fuchsia, textcolor=color.white)
// ── Right-edge level labels (always visible when panning) ──
var label lblDP = label.new(na, na, "", xloc=xloc.bar_time, force_overlay=true, yloc=yloc.price, style=label.style_label_left, color=color.aqua, textcolor=color.black)
var label lblDR1 = label.new(na, na, "", xloc=xloc.bar_time, force_overlay=true, yloc=yloc.price, style=label.style_label_left, color=color.red, textcolor=color.white)
var label lblDS1 = label.new(na, na, "", xloc=xloc.bar_time, force_overlay=true, yloc=yloc.price, style=label.style_label_left, color=color.green, textcolor=color.white)
var label lblDS2 = label.new(na, na, "", xloc=xloc.bar_time, force_overlay=true, yloc=yloc.price, style=label.style_label_left, color=color.green, textcolor=color.white)
var label lblWR1 = label.new(na, na, "", xloc=xloc.bar_time, force_overlay=true, yloc=yloc.price, style=label.style_label_left, color=color.maroon, textcolor=color.white)
var label lblWP = label.new(na, na, "", xloc=xloc.bar_time, force_overlay=true, yloc=yloc.price, style=label.style_label_left, color=color.purple, textcolor=color.white)
var label lblGP = label.new(na, na, "", xloc=xloc.bar_time, force_overlay=true, yloc=yloc.price, style=label.style_label_left, color=color.yellow, textcolor=color.black)
// ── State labels (setup lifecycle: ARMED → TRIGGERED → INVALID / TARGET) ──
var label sellState = label.new(na, na, "", xloc=xloc.bar_time, force_overlay=true, yloc=yloc.price, style=label.style_label_left, color=color.red, textcolor=color.white)
var label buyState = label.new(na, na, "", xloc=xloc.bar_time, force_overlay=true, yloc=yloc.price, style=label.style_label_left, color=color.green, textcolor=color.white)
var string sellStateText = "ARMED — SELL fade 4654-4691"
var string buyStateText = "ARMED — BUY scalp 4597-4610"
// ── Session gate: London + NY only (07:00–20:00 UTC) ──
sessionHour = hour(time, "UTC")
inSession = sessionHour >= 7 and sessionHour <= 20
// ── Signals: CLOSE-CONFIRMED only ──
sellTrigger = ta.crossunder(close, 4689.00) and barstate.isconfirmed and inSession
sellInvalid = ta.crossover (close, 4703.87) and barstate.isconfirmed
sellTargetHit = ta.crossunder(close, 4552.80) and barstate.isconfirmed
buyTrigger = ta.crossover (close, 4610.00) and barstate.isconfirmed and inSession
buyInvalid = ta.crossunder(close, 4573.00) and barstate.isconfirmed
buyTargetHit = ta.crossover (close, 4644.49) and barstate.isconfirmed
// ── Reposition every drawing on the last confirmed bar (pans with the chart) ──
if barstate.islast
lt = chart.left_visible_bar_time
rt = chart.right_visible_bar_time
// Fibonacci lines (anchored to B, extended to right visible edge)
line.set_xy1(lF236, swingLowTime, f236)
line.set_xy2(lF236, rt, f236)
line.set_xy1(lF382, swingLowTime, f382)
line.set_xy2(lF382, rt, f382)
line.set_xy1(lF500, swingLowTime, f500)
line.set_xy2(lF500, rt, f500)
line.set_xy1(lF618, swingLowTime, f618)
line.set_xy2(lF618, rt, f618)
line.set_xy1(lF786, swingLowTime, f786)
line.set_xy2(lF786, rt, f786)
// Golden pocket box
box.set_left (goldenPocket, swingLowTime)
box.set_right (goldenPocket, rt)
box.set_top (goldenPocket, f618)
box.set_bottom(goldenPocket, f500)
// Supply zone (4,689 – 4,703.87)
box.set_left (supplyZone, lt)
box.set_right (supplyZone, rt)
box.set_top (supplyZone, 4703.87)
box.set_bottom(supplyZone, 4689.00)
// Demand zone (4,573 – 4,600)
box.set_left (demandZone, lt)
box.set_right (demandZone, rt)
box.set_top (demandZone, 4599.98)
box.set_bottom(demandZone, 4573.00)
// Pivots
line.set_xy1(lDP, lt, 4644.49)
line.set_xy2(lDP, rt, 4644.49)
line.set_xy1(lDR1, lt, 4691.67)
line.set_xy2(lDR1, rt, 4691.67)
line.set_xy1(lDS1, lt, 4599.98)
line.set_xy2(lDS1, rt, 4599.98)
line.set_xy1(lDS2, lt, 4552.80)
line.set_xy2(lDS2, rt, 4552.80)
line.set_xy1(lWR1, lt, 4703.87)
line.set_xy2(lWR1, rt, 4703.87)
line.set_xy1(lWP, lt, 4515.13)
line.set_xy2(lWP, rt, 4515.13)
// Sell setup
box.set_left (sellEntry, lt)
box.set_right (sellEntry, rt)
box.set_top (sellEntry, 4691.67)
box.set_bottom(sellEntry, 4653.97)
line.set_xy1(sellInv, lt, 4703.87)
line.set_xy2(sellInv, rt, 4703.87)
line.set_xy1(sellTgt, lt, 4552.80)
line.set_xy2(sellTgt, rt, 4552.80)
// Buy setup
box.set_left (buyEntry, lt)
box.set_right (buyEntry, rt)
box.set_top (buyEntry, 4610.00)
box.set_bottom(buyEntry, 4597.31)
line.set_xy1(buyInv, lt, 4573.00)
line.set_xy2(buyInv, rt, 4573.00)
line.set_xy1(buyTgt, lt, 4644.49)
line.set_xy2(buyTgt, rt, 4644.49)
// ABCD roadmap
line.set_xy1(lAB, tA, pA)
line.set_xy2(lAB, tB, pB)
line.set_xy1(lBC, tB, pB)
line.set_xy2(lBC, tC, pC)
line.set_xy1(lCD, tC, pC)
line.set_xy2(lCD, tD, pD)
label.set_xy(lblA, tA, pA)
label.set_text(lblA, "A 4689.00")
label.set_xy(lblB, tB, pB)
label.set_text(lblB, "B 4597.31")
label.set_xy(lblC, tC, pC)
label.set_text(lblC, "C 4653.97 (0.618)")
label.set_xy(lblD, tD, pD)
label.set_text(lblD, "D 4552.80 (post-PCE)")
// Right-edge level labels
label.set_x(lblDP, rt)
label.set_y(lblDP, 4644.49)
label.set_text(lblDP, "Daily P 4644.49")
label.set_x(lblDR1, rt)
label.set_y(lblDR1, 4691.67)
label.set_text(lblDR1, "Daily R1 4691.67")
label.set_x(lblDS1, rt)
label.set_y(lblDS1, 4599.98)
label.set_text(lblDS1, "Daily S1 4599.98")
label.set_x(lblDS2, rt)
label.set_y(lblDS2, 4552.80)
label.set_text(lblDS2, "Daily S2 4552.80")
label.set_x(lblWR1, rt)
label.set_y(lblWR1, 4703.87)
label.set_text(lblWR1, "Weekly R1 4703.87 (stop)")
label.set_x(lblWP, rt)
label.set_y(lblWP, 4515.13)
label.set_text(lblWP, "Weekly P 4515.13")
label.set_x(lblGP, rt)
label.set_y(lblGP, (f500 + f618) / 2)
label.set_text(lblGP, "Golden Pocket 4643-4654")
// ── State-text updates (close-confirmed, non-repainting) ──
if barstate.isconfirmed
if sellTrigger
sellStateText := "TRIGGERED — SELL @ 4689"
if sellInvalid
sellStateText := "INVALIDATED — SELL (>4703.87)"
if sellTargetHit
sellStateText := "TARGET HIT — SELL 4552.80"
if buyTrigger
buyStateText := "TRIGGERED — BUY @ 4610"
if buyInvalid
buyStateText := "INVALIDATED — BUY (<4573)"
if buyTargetHit
buyStateText := "TARGET HIT — BUY 4644.49"
if barstate.islast
label.set_x(sellState, chart.right_visible_bar_time)
label.set_y(sellState, 4675.00)
label.set_text(sellState, sellStateText)
label.set_x(buyState, chart.right_visible_bar_time)
label.set_y(buyState, 4603.00)
label.set_text(buyState, buyStateText)
// ── Net-bias HUD (screen-anchored corner table) ──
var table bias = table.new(position.top_right, 2, 5, bgcolor=color.new(color.black, 20), border_color=color.gray, border_width=1)
if barstate.islast
table.cell(bias, 0, 0, "NET BIAS", text_color=color.white, bgcolor=color.new(color.red, 40))
table.cell(bias, 1, 0, "SELL (intraday)", text_color=color.white, bgcolor=color.new(color.red, 40))
table.cell(bias, 0, 1, "Driver", text_color=color.white)
table.cell(bias, 1, 1, "Pre-PCE fade", text_color=color.white)
table.cell(bias, 0, 2, "Real 10y", text_color=color.white)
table.cell(bias, 1, 2, "2.32% (-6bp)", text_color=color.lime)
table.cell(bias, 0, 3, "DXY", text_color=color.white)
table.cell(bias, 1, 3, "98.96 (-0.63%)", text_color=color.lime)
table.cell(bias, 0, 4, "Fed hike odds", text_color=color.white)
table.cell(bias, 1, 4, "36% Sep", text_color=color.orange)
// ── Alerts (fire once per confirmed bar close) ──
alertcondition(sellTrigger, title="Gold SELL trigger — 4689 supply rejection", message="XAUUSD closed back below 4689 after tagging 4654-4691 supply — SELL trigger confirmed (session-gated)")
alertcondition(sellInvalid, title="Gold SELL invalidated — >4703.87", message="XAUUSD closed above 4703.87 (weekly R1) — SELL setup invalidated")
alertcondition(sellTargetHit, title="Gold SELL target hit — 4552.80", message="XAUUSD closed below 4552.80 (Daily S2) — SELL target reached")
alertcondition(buyTrigger, title="Gold BUY trigger — S1 reclaim", message="XAUUSD closed back above 4610 after tagging 4597 S1 — BUY trigger confirmed (session-gated)")
alertcondition(buyInvalid, title="Gold BUY invalidated — <4573", message="XAUUSD closed below 4573 (5-day low) — BUY setup invalidated")
alertcondition(buyTargetHit, title="Gold BUY target hit — 4644.49", message="XAUUSD closed above 4644.49 (Daily P) — BUY first target reached")
— the resident
coiled, patient, letting PCE pick the side