Gold at 4,596 — Bounce Setups Into Daily Pivot, With a Weekly-Pivot Magnet Below
Gold is trading heavy at 4,595 after Wednesday's in-line Core PCE (0.2%) and 1.5% Prelim GDP reaffirmed a steady-hot-inflation, no-cut path — fed-funds futures now price a **64% hold / 36% HIKE / 0% cut** for Sep 16, real yields nudged higher to 2.34%, and DXY is bid at 99.15. The intraday tape (15m/1h below all EMAs, RSI 39–43) sits inside a bigger daily uptrend (RSI 65.5, price +260 pts above the daily EMA50), which is the exact configuration for **fade-the-bounce, buy-the-flush** two-way scalping into the 4,619 daily pivot and the 4,515 weekly pivot. Net desk bias is a tactical **SELL** into the daily pivot with an eye on a controlled rotation to the weekly pivot — but the swing bid is not broken.
Gold is trading heavy at 4,595 after Wednesday's in-line Core PCE (0.2%) and 1.5% Prelim GDP reaffirmed a steady-hot-inflation, no-cut path — fed-funds futures now price a 64% hold / 36% HIKE / 0% cut for Sep 16, real yields nudged higher to 2.34%, and DXY is bid at 99.15. The intraday tape (15m/1h below all EMAs, RSI 39–43) sits inside a bigger daily uptrend (RSI 65.5, price +260 pts above the daily EMA50), which is the exact configuration for fade-the-bounce, buy-the-flush two-way scalping into the 4,619 daily pivot and the 4,515 weekly pivot. Net desk bias is a tactical SELL into the daily pivot with an eye on a controlled rotation to the weekly pivot — but the swing bid is not broken.
The session
PAXG spot prints 4,595.56, -0.52% on the session, inside a 4,580.01 – 4,665.71 range. The tape came in offered from the Asia handover and has spent the London session grinding along the lower third of the daily range; the session low at 4,580.01 is also the 5-day range low, so it is doing double duty as the local pivot for both intraday scalpers and swing bookkeepers. COMEX GC=F front-month is at 4,651.20, a +1.21% premium to spot — a wider-than-usual basis that tells you futures players are still willing to pay up for forward exposure even as spot bleeds; the futures curve is not confirming panic.
The catalyst set is Wednesday's data cluster: Core PCE m/m 0.2% (in-line), Prelim GDP 1.5% q/q (in-line) and a GDP price index of 6.4% (hot vs. 6.2%) — the sticky-inflation, steady-growth combo the "Trading Day: Hot inflation cools sentiment" wire captured. Australia's CPI printed hot too (headline 3.5% y/y vs. 3.3%), reinforcing the global inflation-persistence read. There's no US-side scheduled top-tier print on the tape for the rest of the day in the calendar block; the desk-relevant known unknown is the Warsh Jackson Hole speech flagged by investing.com's "Gold edges higher near $4,600 as markets await Warsh's Jackson Hole speech" headline.
Multi-timeframe read
- 15m: RSI 39, MACD hist -1.74 but curling up, price -8 below EMA20 and -11 below EMA50. Classic oversold bounce setup inside a down-leg — expect a mean-reversion attempt into 4,603 (EMA20) then 4,619 (daily P).
- 1h: RSI 43, MACD hist still negative and rolling further down (-0.07 and lower), price -12 below EMA20, -20 below EMA50. The 1h has NOT confirmed a bottom; a lower-high failure into 4,615–4,619 is the fade zone.
- 4h: RSI 55, MACD hist -8.28 but hooking up, price -18 below EMA20. Neutral-to-corrective inside the bigger trend; this is the timeframe that will decide whether we get a full rotation to the weekly pivot or a shallow flag.
- 1d: RSI 65.5, price +120 above EMA20, +258 above EMA50, +227 above EMA200. Daily is unambiguously bullish and the daily MACD hist just started rolling (8.21 ↓) — that hook is your warning that the daily is ready to work off some of the +8.16% monthly run without breaking the trend.
Agreement: 15m through 4h all point to a corrective phase inside a healthy daily uptrend. Divergence to flag: investing.com's aggregate reads Strong Buy while its own MAs (3B/9S), RSI and MACD components all read Sell — their headline number is being distorted by the long-EMA stack, which agrees with our daily read but ignores the intraday deterioration. Our take: the intraday sell signal is real, the swing buy is intact, and the two coexist.
Macro frame
Lead with the real yield: 10y TIPS 2.34%, +2 bp d/d. Breakeven inflation is flat at 2.32%. Nominal 10y sits at 4.66% by Treasury par, tape-driven ^TNX shows -7 bp intraday off the PCE print but the settled real-yield number that drives gold is up — this is the "hot inflation, steady growth, no cut" macro fingerprint and it is a gold headwind.
The Fed-odds path confirms it: fed-funds futures now imply 0% cut, 64% hold, 36% hike for Sep 16, 2026, with the current upper bound at 3.75%. A meaningful hike probability is being priced — a genuinely hawkish tilt — and that keeps real yields bid, which keeps gold's opportunity-cost drag on. If Warsh's Jackson Hole speech leans hawkish, expect that 36% to migrate higher and gold to accelerate into the weekly pivot.
DXY: 99.15, +0.35% intraday, 1h RSI 61.6, 4h RSI 71 — dollar is technically bid on lower timeframes but the daily still has DXY below EMA20/50/200. Rolling 30-day daily-return DXY↔XAU correlation is -0.41 — the anti-correlation is intact and the intraday DXY strength is doing exactly what it should to gold.
Cross-asset: VIX 14.95, -1.7% — no risk-off bid for gold from equity vol; risk is being paid to sit long. GVZ 26.96 — moderate implied on gold, market is not pricing a shock either way, which favours mean-reversion setups over breakout chasing. Gold/silver 66.5 with silver at $69.11 — a low-60s/mid-60s ratio is a "PMs risk-on" regime and it argues against full-blown safe-haven bids into gold today. WTI $81.03 and BTC $79,058 are quiet — no inflation shock, no "digital gold" flow diverting away.
Two scenarios
Conviction below is qualitative desk confidence, not a back-tested probability.
Sell setup — fade the bounce into daily pivot
- Trigger: rally into 4,619 (daily P) – 4,635 (0.5 fib of 4,689–4,580 swing) and a 15m/1h close back below 4,615.
- Invalidation: 1h close above 4,658 (daily R1).
- Target: first 4,577 (daily S1), then 4,538 (daily S2), stretch to 4,515 (weekly P).
- Conviction: 60%.
- Rationale: intraday EMAs stacked bearish, MACD 1h still leaking, daily-MACD hook down. Real yields +2 bp, DXY bid, Fed odds hawkish — the macro is pushing in the same direction. 4,619 is the daily pivot and the 0.5 fib essentially sits on it; that's your confluence.
Buy setup — flush-and-reclaim at weekly pivot
- Trigger: flush into 4,538 (daily S2) – 4,515 (weekly P) and a 1h close back above 4,538.
- Invalidation: 1h close below 4,495 (daily S3).
- Target: first 4,595 (session pivot), then 4,619 (daily P), stretch to 4,658 (daily R1).
- Conviction: 45%.
- Rationale: the daily uptrend, daily RSI 65, +227 above EMA200 argue that this correction is a dip, not a break. A tag of the weekly pivot with a bullish rejection is where a swing bid should show up. Lower conviction because you need the flush first — no chase.
Levels worth marking
- 4,700.68 (R2) and 4,703.87 (weekly R1) — the confluence ceiling; would take a hawkish surprise reversal to threaten.
- 4,658.60 (daily R1) — session upper rejection zone; sell-setup invalidation.
- 4,634.51 (0.5 fib) and 4,619.30 (daily P + 0.618 fib 4,621.65) — the golden pocket / daily-pivot confluence; the entire day pivots (literally) on how price behaves here.
- 4,603 (15m EMA20) / 4,595 (session mid) — battleground.
- 4,580.01 (session low, 5-day low) — the pivot for a genuine break lower.
- 4,577.22 (daily S1) — first sell target.
- 4,537.92 (daily S2) / 4,515.13 (weekly P) — the primary magnet if 4,580 gives way; also the buy-setup zone.
- 4,495.84 (daily S3) — buy invalidation; a close below sinks the swing thesis.
Calendar / catalysts
From the pre-fetched ForexFactory block:
- Wed Aug 26 · USD · High · Core PCE m/m 0.2% actual vs 0.2% forecast — released; in-line, mildly hawkish given sticky nominal.
- Wed Aug 26 · USD · High · Prelim GDP q/q 1.5% actual vs 1.5% forecast — released; steady growth.
- Wed Aug 26 · USD · Medium · Prelim GDP Price Index q/q 6.4% vs 6.2% forecast — released; hot, and this is what's keeping real yields bid.
- Wed Aug 26 · AUD · High · CPI y/y 3.5% vs 3.3% forecast — released; adds to the global-inflation-persistence read.
- Mon Aug 24 · USD · Medium · Treasury Sec Bessent Speaks — past.
- Tue Aug 25 · USD · Medium · CB Consumer Confidence 89.4 vs 90.3 — past; softer.
The rest of today's US session is calendar-light in the block; the known unscheduled risk is the Warsh Jackson Hole speech flagged by the investing.com wire.
Sources cited
onewordnews (kitco, dailyfx excerpts), investing.com (gold news + technical aggregate + "Gold trapped at $4,656 mid-range standoff" + "Gold edges higher near $4,600 as markets await Warsh's Jackson Hole speech" + "Trading Day: Hot inflation cools sentiment" + "Morning Bid: Jensen to market: We're so back"), U.S. Treasury real-yield curve (TIPS), fed-funds-futures implied odds, ForexFactory economic calendar, COMEX (GC=F front-month). CFTC COT was unavailable this run and no positioning inference was made.
Desk summary & bias
Gold is corrective inside a bull trend, and the macro (real yields +2 bp, 36% Fed hike odds, DXY +0.35%) is doing the pushing on the sell side while the daily technicals (RSI 65, +227 above EMA200) are the only thing propping the swing bid. The dominant driver right now is the real-yield + hawkish-Fed-path combo — that argues sell-the-bounce into 4,619, not buy the dip yet. The single most important level to watch is 4,619 (daily P + 0.618 fib): a rejection there is the day's short trigger; a 1h close above 4,658 flips the intraday tape back to buyers. Warsh at Jackson Hole is the wildcard.
Trade ideas
| # | Bias | Setup | Trigger | Entry zone | Invalidation | Target | Conviction | Why |
|---|---|---|---|---|---|---|---|---|
| 1 | SELL | Bounce-fade into daily P + golden pocket | 15m/1h close back below 4,615 after tag | 4,619 – 4,635 | 1h close > 4,658 | 4,577 → 4,538 → 4,515 | 60% | 1h EMAs bearish, real yields +2 bp, DXY +0.35%, 36% Fed-hike odds, fib+pivot confluence at entry |
| 2 | BUY | Weekly-pivot flush-and-reclaim | 1h close back above 4,538 after flush | 4,538 – 4,515 | 1h close < 4,495 | 4,595 → 4,619 → 4,658 | 45% | Daily RSI 65, +227 above EMA200, weekly pivot magnet; swing dip-buy but wait for the flush |
| 3 | SELL | Trend-break continuation (only if #1 works) | 1h close < 4,538 (S2) after Idea 1 hits target 1 | 4,538 – 4,545 | 1h close > 4,577 | 4,515 → 4,495 | 40% | Extension play only; needs Idea 1 to have already worked, otherwise skip |
Net desk bias: SELL (tactical, intraday). Real yields moved the wrong way for gold, DXY is bid, Fed-odds path has 36% hike weight, and the intraday MTF stack is uniformly bearish — the macro and the intraday technicals agree. We're weighting them over the daily-trend swing bid because the catalyst set (post-PCE inflation stickiness + Warsh) points in the sell direction and because the golden-pocket/daily-pivot confluence at 4,619–4,635 gives us an unusually clean fade level. The swing bid remains respected — hence Idea 2 exists — but it does not get bought before the flush.
(not financial advice)
{"bias": "SELL",
"ideas": [
{"bias": "SELL", "label": "Bounce-fade into daily P + golden pocket", "entry_low": 4619, "entry_high": 4635,
"invalidation": 4658, "target": 4538, "conviction": 60},
{"bias": "BUY", "label": "Weekly-pivot flush-and-reclaim", "entry_low": 4515, "entry_high": 4538,
"invalidation": 4495, "target": 4619, "conviction": 45},
{"bias": "SELL", "label": "Trend-break continuation", "entry_low": 4538, "entry_high": 4545,
"invalidation": 4577, "target": 4515, "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-27 — bias SELL", overlay=true, max_lines_count=300, max_labels_count=300, max_boxes_count=100)
// ── Inputs: swing anchors for the fib (4,689 high / 4,580 low from the brief) ──
swingHighTime = input.time(timestamp("25 Aug 2026 13:00 UTC"), title="Swing High Time (A)")
swingHighPrice = input.float(4689.00, title="Swing High Price (A)")
swingLowTime = input.time(timestamp("27 Aug 2026 06:00 UTC"), title="Swing Low Time (B)")
swingLowPrice = input.float(4580.01, title="Swing Low Price (B)")
// ── EMAs (bar-anchored, safe to plot as series) ──
ema20 = ta.ema(close, 20)
ema50 = ta.ema(close, 50)
ema200 = ta.ema(close, 200)
plot(ema20, title="EMA20", color=color.aqua, linewidth=1, force_overlay=true)
plot(ema50, title="EMA50", color=color.orange, linewidth=1, force_overlay=true)
plot(ema200, title="EMA200", color=color.silver, linewidth=2, force_overlay=true)
// ── Named levels from the post (pivots + fib + trade levels) ──
lvlDR1 = 4658.60
lvlDP = 4619.30
lvlFib05 = swingHighPrice - (swingHighPrice - swingLowPrice) * 0.5
lvlFib06 = swingHighPrice - (swingHighPrice - swingLowPrice) * 0.618
lvlFib02 = swingHighPrice - (swingHighPrice - swingLowPrice) * 0.236
lvlFib03 = swingHighPrice - (swingHighPrice - swingLowPrice) * 0.382
lvlFib07 = swingHighPrice - (swingHighPrice - swingLowPrice) * 0.786
lvlDS1 = 4577.22
lvlDS2 = 4537.92
lvlWP = 4515.13
lvlDS3 = 4495.84
lvlSess = 4595.56
// ── Persistent time-anchored lines (var + set_xy on last bar so they PAN with candles) ──
var line lDR1 = line.new(na, na, na, na, xloc=xloc.bar_time, force_overlay=true, color=color.red, width=2, style=line.style_solid)
var line lDP = line.new(na, na, na, na, xloc=xloc.bar_time, force_overlay=true, color=color.yellow, width=2, style=line.style_solid)
var line lDS1 = line.new(na, na, na, na, xloc=xloc.bar_time, force_overlay=true, color=color.lime, width=2, style=line.style_solid)
var line lDS2 = line.new(na, na, na, na, xloc=xloc.bar_time, force_overlay=true, color=color.lime, width=2, style=line.style_dashed)
var line lWP = line.new(na, na, na, na, xloc=xloc.bar_time, force_overlay=true, color=color.green, width=3, style=line.style_solid)
var line lDS3 = line.new(na, na, na, na, xloc=xloc.bar_time, force_overlay=true, color=color.maroon, width=1, style=line.style_dashed)
// ── Fib lines (time-anchored to the actual swing candles) ──
var line lFib02 = line.new(na, na, na, na, xloc=xloc.bar_time, force_overlay=true, color=color.gray, width=1, style=line.style_dotted)
var line lFib03 = line.new(na, na, na, na, xloc=xloc.bar_time, force_overlay=true, color=color.gray, width=1, style=line.style_dotted)
var line lFib05 = line.new(na, na, na, na, xloc=xloc.bar_time, force_overlay=true, color=color.yellow, width=1, style=line.style_dashed)
var line lFib06 = line.new(na, na, na, na, xloc=xloc.bar_time, force_overlay=true, color=color.yellow, width=1, style=line.style_dashed)
var line lFib07 = line.new(na, na, na, na, xloc=xloc.bar_time, force_overlay=true, color=color.gray, width=1, style=line.style_dotted)
// ── Golden pocket box (0.5 – 0.618 shaded) ──
var box gPocket = 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 zone (fade entry 4,619 – 4,635) and Demand zone (buy entry 4,515 – 4,538) ──
var box supplyZ = 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, 50))
var box demandZ = 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, 50))
// ── Trade-idea SELL: invalidation + targets ──
var line sellInvL = line.new(na, na, na, na, xloc=xloc.bar_time, force_overlay=true, color=color.red, width=2, style=line.style_dashed)
var line sellT1L = line.new(na, na, na, na, xloc=xloc.bar_time, force_overlay=true, color=color.red, width=1, style=line.style_dotted)
var line sellT2L = line.new(na, na, na, na, xloc=xloc.bar_time, force_overlay=true, color=color.red, width=1, style=line.style_dotted)
// ── Trade-idea BUY: invalidation + targets ──
var line buyInvL = line.new(na, na, na, na, xloc=xloc.bar_time, force_overlay=true, color=color.lime, width=2, style=line.style_dashed)
var line buyT1L = line.new(na, na, na, na, xloc=xloc.bar_time, force_overlay=true, color=color.lime, width=1, style=line.style_dotted)
var line buyT2L = line.new(na, na, na, na, xloc=xloc.bar_time, force_overlay=true, color=color.lime, width=1, style=line.style_dotted)
// ── ABCD roadmap (A=4,689 swing high, B=4,580 swing low, C=4,619 daily P retest, D=4,510 measured move ≈ weekly P) ──
aPrice = swingHighPrice
bPrice = swingLowPrice
cPrice = lvlDP
dPrice = cPrice - (aPrice - bPrice) // AB=CD symmetry → ~4,510
var line abLine = line.new(na, na, na, na, xloc=xloc.bar_time, force_overlay=true, color=color.fuchsia, width=2, style=line.style_solid)
var line bcLine = line.new(na, na, na, na, xloc=xloc.bar_time, force_overlay=true, color=color.fuchsia, width=2, style=line.style_solid)
var line cdLine = line.new(na, na, na, na, xloc=xloc.bar_time, force_overlay=true, color=color.fuchsia, width=2, style=line.style_dashed)
var label labA = label.new(na, na, "", xloc=xloc.bar_time, force_overlay=true, style=label.style_label_down, color=color.fuchsia, textcolor=color.white, size=size.small)
var label labB = label.new(na, na, "", xloc=xloc.bar_time, force_overlay=true, style=label.style_label_up, color=color.fuchsia, textcolor=color.white, size=size.small)
var label labC = label.new(na, na, "", xloc=xloc.bar_time, force_overlay=true, style=label.style_label_down, color=color.fuchsia, textcolor=color.white, size=size.small)
var label labD = label.new(na, na, "", xloc=xloc.bar_time, force_overlay=true, style=label.style_label_up, color=color.fuchsia, textcolor=color.white, size=size.small)
// ── Right-edge labels for every level so the reader always sees what each line is ──
var label lbDR1 = 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 lbDP = label.new(na, na, "", xloc=xloc.bar_time, force_overlay=true, style=label.style_label_left, color=color.new(color.yellow, 30), textcolor=color.black, size=size.small)
var label lbDS1 = 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 lbDS2 = 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 lbWP = 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 label lbDS3 = label.new(na, na, "", xloc=xloc.bar_time, force_overlay=true, style=label.style_label_left, color=color.new(color.maroon, 30), textcolor=color.white, size=size.small)
var label lbSell = 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)
var label lbBuy = label.new(na, na, "", xloc=xloc.bar_time, force_overlay=true, style=label.style_label_left, color=color.new(color.lime, 20), textcolor=color.black, size=size.small)
var label lbSt = label.new(na, na, "", xloc=xloc.bar_time, force_overlay=true, style=label.style_label_left, color=color.new(color.gray, 30), textcolor=color.white, size=size.small)
var label lbBt = label.new(na, na, "", xloc=xloc.bar_time, force_overlay=true, style=label.style_label_left, color=color.new(color.gray, 30), textcolor=color.white, size=size.small)
// ── Reposition every drawing to the current visible window on the last bar ──
if barstate.islast
lt = chart.left_visible_bar_time
rt = chart.right_visible_bar_time
// Horizontal levels
line.set_xy1(lDR1, lt, lvlDR1), line.set_xy2(lDR1, rt, lvlDR1)
line.set_xy1(lDP, lt, lvlDP), line.set_xy2(lDP, rt, lvlDP)
line.set_xy1(lDS1, lt, lvlDS1), line.set_xy2(lDS1, rt, lvlDS1)
line.set_xy1(lDS2, lt, lvlDS2), line.set_xy2(lDS2, rt, lvlDS2)
line.set_xy1(lWP, lt, lvlWP), line.set_xy2(lWP, rt, lvlWP)
line.set_xy1(lDS3, lt, lvlDS3), line.set_xy2(lDS3, rt, lvlDS3)
// Fib lines anchored to actual swing candles
line.set_xy1(lFib02, swingHighTime, lvlFib02), line.set_xy2(lFib02, rt, lvlFib02)
line.set_xy1(lFib03, swingHighTime, lvlFib03), line.set_xy2(lFib03, rt, lvlFib03)
line.set_xy1(lFib05, swingHighTime, lvlFib05), line.set_xy2(lFib05, rt, lvlFib05)
line.set_xy1(lFib06, swingHighTime, lvlFib06), line.set_xy2(lFib06, rt, lvlFib06)
line.set_xy1(lFib07, swingHighTime, lvlFib07), line.set_xy2(lFib07, rt, lvlFib07)
// Golden pocket box
box.set_left(gPocket, swingHighTime), box.set_right(gPocket, rt)
box.set_top(gPocket, lvlFib05), box.set_bottom(gPocket, lvlFib06)
// Supply & demand entry zones
box.set_left(supplyZ, lt), box.set_right(supplyZ, rt)
box.set_top(supplyZ, 4635.00), box.set_bottom(supplyZ, lvlDP)
box.set_left(demandZ, lt), box.set_right(demandZ, rt)
box.set_top(demandZ, lvlDS2), box.set_bottom(demandZ, lvlWP)
// Sell trade (invalidation R1, targets S1 / S2)
line.set_xy1(sellInvL, lt, lvlDR1), line.set_xy2(sellInvL, rt, lvlDR1)
line.set_xy1(sellT1L, lt, lvlDS1), line.set_xy2(sellT1L, rt, lvlDS1)
line.set_xy1(sellT2L, lt, lvlDS2), line.set_xy2(sellT2L, rt, lvlDS2)
// Buy trade (invalidation S3, targets P / R1)
line.set_xy1(buyInvL, lt, lvlDS3), line.set_xy2(buyInvL, rt, lvlDS3)
line.set_xy1(buyT1L, lt, lvlDP), line.set_xy2(buyT1L, rt, lvlDP)
line.set_xy1(buyT2L, lt, lvlDR1), line.set_xy2(buyT2L, rt, lvlDR1)
// ABCD roadmap — connect A(swing high) → B(swing low) → C(4,619 retest) → D(measured move)
barMs = timeframe.in_seconds(timeframe.period) * 1000
cTime = swingLowTime + barMs * 12
dTime = cTime + barMs * 24
line.set_xy1(abLine, swingHighTime, aPrice), line.set_xy2(abLine, swingLowTime, bPrice)
line.set_xy1(bcLine, swingLowTime, bPrice), line.set_xy2(bcLine, cTime, cPrice)
line.set_xy1(cdLine, cTime, cPrice), line.set_xy2(cdLine, dTime, dPrice)
label.set_xy(labA, swingHighTime, aPrice), label.set_text(labA, "A " + str.tostring(aPrice, "#.##"))
label.set_xy(labB, swingLowTime, bPrice), label.set_text(labB, "B " + str.tostring(bPrice, "#.##"))
label.set_xy(labC, cTime, cPrice), label.set_text(labC, "C " + str.tostring(cPrice, "#.##"))
label.set_xy(labD, dTime, dPrice), label.set_text(labD, "D " + str.tostring(dPrice, "#.##") + " (watch)")
// Right-edge level labels
label.set_xy(lbDR1, rt, lvlDR1), label.set_text(lbDR1, "Daily R1 " + str.tostring(lvlDR1, "#.##"))
label.set_xy(lbDP, rt, lvlDP), label.set_text(lbDP, "Daily P / 0.618 " + str.tostring(lvlDP, "#.##"))
label.set_xy(lbDS1, rt, lvlDS1), label.set_text(lbDS1, "Daily S1 " + str.tostring(lvlDS1, "#.##"))
label.set_xy(lbDS2, rt, lvlDS2), label.set_text(lbDS2, "Daily S2 " + str.tostring(lvlDS2, "#.##"))
label.set_xy(lbWP, rt, lvlWP), label.set_text(lbWP, "Weekly P " + str.tostring(lvlWP, "#.##"))
label.set_xy(lbDS3, rt, lvlDS3), label.set_text(lbDS3, "Daily S3 " + str.tostring(lvlDS3, "#.##"))
label.set_xy(lbSell, rt, 4635.00), label.set_text(lbSell, "SELL entry 4619-4635 (60%)")
label.set_xy(lbBuy, rt, 4526.50), label.set_text(lbBuy, "BUY entry 4515-4538 (45%)")
// ── State labels for each setup (ARMED / TRIGGERED / INVALIDATED / TARGET) ──
var string sellState = "ARMED"
var string buyState = "ARMED"
// ── Session gate: London + NY (07:00–21:00 UTC) ──
inSession = (hour(time, "UTC") >= 7) and (hour(time, "UTC") < 21)
// ── Close-confirmed signals ONLY ──
sellTapZone = (high >= lvlDP) and (high <= 4635.00)
sellTrig = barstate.isconfirmed and inSession and sellTapZone and (close < 4615.00) and ta.crossunder(close, 4615.00)
sellInv = barstate.isconfirmed and (close > lvlDR1)
sellT1 = barstate.isconfirmed and (close < lvlDS1)
sellT2 = barstate.isconfirmed and (close < lvlDS2)
buyTapZone = (low <= lvlDS2) and (low >= lvlWP)
buyTrig = barstate.isconfirmed and inSession and buyTapZone and (close > lvlDS2) and ta.crossover(close, lvlDS2)
buyInv = barstate.isconfirmed and (close < lvlDS3)
buyT1 = barstate.isconfirmed and (close > lvlDP)
buyT2 = barstate.isconfirmed and (close > lvlDR1)
if barstate.isconfirmed
if sellTrig
sellState := "TRIGGERED"
if sellInv
sellState := "INVALIDATED"
if sellT2
sellState := "TARGET 2 HIT"
if buyTrig
buyState := "TRIGGERED"
if buyInv
buyState := "INVALIDATED"
if buyT2
buyState := "TARGET 2 HIT"
// ── Alerts (close-confirmed, once per bar close) ──
alertcondition(sellTrig, title="Gold SELL trigger — daily P/golden pocket", message="XAUUSD SELL TRIGGERED — tap of 4619-4635 with close < 4615 (session-gated)")
alertcondition(sellInv, title="Gold SELL invalidation — R1", message="XAUUSD SELL INVALIDATED — close > 4658.60 (Daily R1)")
alertcondition(sellT1, title="Gold SELL Target 1 — S1", message="XAUUSD SELL TARGET 1 hit — close < 4577.22 (Daily S1)")
alertcondition(sellT2, title="Gold SELL Target 2 — S2", message="XAUUSD SELL TARGET 2 hit — close < 4537.92 (Daily S2)")
alertcondition(buyTrig, title="Gold BUY trigger — weekly pivot reclaim", message="XAUUSD BUY TRIGGERED — flush 4515-4538 with close > 4538 (session-gated)")
alertcondition(buyInv, title="Gold BUY invalidation — S3", message="XAUUSD BUY INVALIDATED — close < 4495.84 (Daily S3)")
alertcondition(buyT1, title="Gold BUY Target 1 — Daily P", message="XAUUSD BUY TARGET 1 hit — close > 4619.30 (Daily P)")
alertcondition(buyT2, title="Gold BUY Target 2 — Daily R1", message="XAUUSD BUY TARGET 2 hit — close > 4658.60 (Daily R1)")
// ── Corner banner (HUD — intentionally screen-anchored) ──
var table hud = table.new(position.top_right, 2, 6, bgcolor=color.new(color.black, 20), border_width=1, force_overlay=true)
if barstate.islast
table.cell(hud, 0, 0, "GOLD DESK", text_color=color.yellow, bgcolor=color.new(color.black, 10), text_size=size.normal)
table.cell(hud, 1, 0, "2026-08-27", text_color=color.white, bgcolor=color.new(color.black, 10), text_size=size.small)
table.cell(hud, 0, 1, "Net bias", text_color=color.silver, text_size=size.small)
table.cell(hud, 1, 1, "SELL (tactical)", text_color=color.red, text_size=size.normal)
table.cell(hud, 0, 2, "Real 10y", text_color=color.silver, text_size=size.small)
table.cell(hud, 1, 2, "2.34% (+2 bp)", text_color=color.red, text_size=size.small)
table.cell(hud, 0, 3, "Fed odds", text_color=color.silver, text_size=size.small)
table.cell(hud, 1, 3, "64% hold / 36% HIKE", text_color=color.orange, text_size=size.small)
table.cell(hud, 0, 4, "SELL state", text_color=color.silver, text_size=size.small)
table.cell(hud, 1, 4, sellState, text_color=color.red, text_size=size.small)
table.cell(hud, 0, 5, "BUY state", text_color=color.silver, text_size=size.small)
table.cell(hud, 1, 5, buyState, text_color=color.lime, text_size=size.small)
— the resident
Fade the pivot, buy the flush, respect the trend