Let's talk
gold August 12, 2026 · 14 min read

Gold at 4,405 into CPI: real yields glued, 4h overbought, one setup fades the pop

Spot gold sits at 4,405 having tagged a session high of 4,429 — a fresh two-month print — with the US 10y REAL yield stuck at 2.43% and Fed-funds implying zero cut / 47% hike odds into Sep 16. Nothing in rates has moved to justify the move; this is a positioning-and-geopolitics grind into today's US CPI. The 4h and daily RSI (68 and 70) are both extended, and the daily MACD histogram has rolled lower even as price prints higher — a bearish divergence sitting directly under the R1 4,413 / high 4,429 shelf. Two-way desk, but the asymmetry into an event is a fade, not a chase.


Spot gold sits at 4,405 having tagged a session high of 4,429 — a fresh two-month print — with the US 10y REAL yield stuck at 2.43% and Fed-funds implying zero cut / 47% hike odds into Sep 16. Nothing in rates has moved to justify the move; this is a positioning-and-geopolitics grind into today's US CPI. The 4h and daily RSI (68 and 70) are both extended, and the daily MACD histogram has rolled lower even as price prints higher — a bearish divergence sitting directly under the R1 4,413 / high 4,429 shelf. Two-way desk, but the asymmetry into an event is a fade, not a chase.

The session

Asia opened bid and Europe carried the tape from ~4,360 straight into 4,429, a clean +1.3% intraday and roughly +6.7% on the month. The proximate driver, per investing.com's own headline stream, is "Oil, gold prices rise as geopolitical tensions mount before CPI" — the US–Iran Hormuz standoff (also flagged in FTSE coverage: "Pakistan flags Iran-U.S. deal, oil rises") is bidding both crude ($83.91 WTI, +0.8%) and the gold vol premium. That mix — event-risk day + safe-haven flow + a wobble in the dollar earlier in the week — is doing the work.

But the tape into the London fix looks tired. On the 1h chart MACD histogram has flipped down (2.17 ↓) even as price sits +15 above EMA20 and +28 above EMA50 — classic post-thrust exhaustion. Volume didn't extend the last leg into 4,429. Front-month COMEX (GC=F) is quoted at 4,468, a 1.43% premium to PAXG spot — a wide basis that usually flags futures-led speculative buying rather than physical demand, and it tends to compress when the futures cohort de-risks.

Multi-timeframe read

  • 15m: RSI 61, MACD hist positive and rising; price above EMA20/50. Micro-trend up but the last impulse is small in amplitude — momentum is fading, not flipping.
  • 1h: RSI 61 with MACD histogram already turning DOWN. This is the first timeframe registering the divergence between price and momentum. Watch for a lower high under 4,429.
  • 4h: RSI 68, MACD histogram still negative but curling up — a bear-flag / mean-reversion off the last selloff. Price is +37 above EMA20; if 4h RSI tags 70+ under 4,464 (weekly R1), that's the textbook fade tell.
  • 1d: RSI 69.8 — technically NOT overbought yet, but knocking on the door with MACD histogram already rolling (32.46 ↓). Price is a full +184 above EMA20 and +60 above the 200d — extended.

Where they agree: trend is unequivocally UP across all four TFs (every EMA stack is positive, every close is above its EMA20). Where they diverge: 1h and daily momentum are cooling under a rising price — the setup for either a shallow flag OR a reversion to the daily pivot at 4,385 / rising EMA20 zone lower. investing.com's automated aggregate reads Strong Buy across MA5–MA200 (12 buy / 0 sell); that's a lagging-MA readout and it doesn't see the MACD roll I do. I'm noting the disagreement and weighting my own read higher into an event.

Macro frame

Real yields are the whole story and they haven't moved. US 10y TIPS sits at 2.43%, unchanged day-over-day. The nominal 10y is 4.70% (-2bp) and the breakeven is 2.27% (-2bp) — so the small dip in nominals came entirely out of inflation compensation, NOT out of the real leg. Translation: today's gold rally is NOT being financed by a lower discount rate. That is a fragile bid.

Fed-funds futures for Sep 16 price cut 0%, hold 53%, hike 47% — that's a MODAL HAWKISH path with a meaningful tail. In this regime, a hot CPI (forecast core m/m 0.2% vs prev 0.0%; core y/y 2.5% vs prev 2.6%) pushes real yields UP and gold DOWN; only a soft print materially reprices the path lower and gives gold a durable engine. Without that, the rally is running on geopolitics.

DXY at 99.86 is drifting — +0.06% today, +0.17% on the week, but still -1.07% on the month. The 30-day XAU↔DXY correlation is a modest -0.32 — the dollar is a HEADWIND but not the dominant one this week. Interestingly, DXY's 4h RSI is 43.9 and daily RSI 41: the dollar is soft-technically but sitting exactly on its EMA20. A CPI-driven dollar bid is the single fastest way to unglue gold from 4,400.

Cross-asset: VIX 15.3 — no equity fear. GVZ 25.99 — gold's own implied vol is elevated but not extreme; the options market is pricing a moderate CPI move, not a tail. Gold/silver 66.5 with silver at $66 is a healthy PM regime — silver hasn't diverged, which typically supports gold on real dips. BTC at $63.7k is not competing for haven flow. Nothing in this cross-asset frame screams "chase 4,430."

Two scenarios

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

Sell setup — fade the pop into CPI

  • Trigger: rejection wick / 1h close back under 4,413.67 (daily R1) after tagging 4,429–4,440
  • Invalidation: 1h close above 4,457.68 (daily R2)
  • Target: 4,385.40 (daily pivot) → 4,368.67 (fib 0.5) → 4,354.34 (fib 0.618, golden pocket top)
  • Conviction: 60%
  • Rationale: 4h/1d RSI both stretched, 1h MACD already rolled, front-month basis wide at +1.43%, real yields flat = no macro fuel, and CPI is the definitional headline risk for a rate-sensitive asset. The R1/session-high confluence is the natural place for the fade to fire.

Buy setup — pullback into the golden pocket

  • Trigger: 15m / 1h stabilisation between 4,354.34 and 4,368.67 (fib 0.618 → 0.5 of the 4,307.93–4,429.42 leg), ideally with 1h RSI cooling to ~45
  • Invalidation: 1h close below 4,341.39 (daily S1) — that breaks the intraday structure and opens 4,313
  • Target: 4,413.67 (R1) → 4,464.60 (weekly R1)
  • Conviction: 45%
  • Rationale: Trend is up on every TF, daily EMA20 is 184 points BELOW spot, and investing.com's aggregate is Strong Buy. On a soft CPI, real yields fall, DXY sells and gold accelerates through 4,464 into the vacuum above. Lower conviction because you're buying into event risk and against a rolled 1h MACD.

Levels worth marking

  • Daily pivot cluster: R2 4,457.68 · R1 4,413.67 · P 4,385.40 · S1 4,341.39 · S2 4,313.12
  • Weekly: R1 4,464.60 · P 4,242.80 · S1 4,122.67
  • Session HL: 4,429.42 / 4,313.81
  • Fibonacci (4,307.93 low → 4,429.42 high): 0.236 4,400.75 · 0.382 4,383.01 · 0.5 4,368.67 · 0.618 4,354.34 (golden pocket) · 0.786 4,333.93
  • EMA confluences: 1h EMA50 4,376.91 sits between the daily pivot 4,385 and the fib 0.382 4,383 — that's a THREE-WAY confluence acting as first support. Daily EMA20 4,221 is the trend-line-of-last-resort.
  • Futures basis: GC=F 4,468 vs PAXG 4,405 (+1.43%) — a compression here often precedes a spot pullback.

Calendar / catalysts

From ForexFactory (pre-fetched):

  • Wed Aug 12 · USD · High: Core CPI m/m (fcst 0.2% / prev 0.0%), Core CPI y/y (fcst 2.5% / prev 2.6%), CPI m/m (fcst 0.1% / prev -0.4%), CPI y/y (fcst 3.4% / prev 3.5%) — TODAY, the whole desk's day.
  • Tue Aug 11 · AUD · High: RBA held Cash Rate at 4.35% as expected; RBA MPS + Rate Statement + Press Conference already digested.

The specific release time wasn't in the pre-fetched calendar block — assume the standard 12:30 UTC / 08:30 ET window. Trade small into it.

Sources cited

onewordnews (aggregate keyword sentiment on gold/DXY/yields/CPI), investing.com (Gold rises near $4,400; Oil, gold prices rise as geopolitical tensions mount; Gold overbought at $4,462 with MACD fading; Smart money flows into gold miners; automated technical aggregate = Strong Buy), Kitco (spot benchmarks, referenced only), DailyFX (referenced), US Treasury.gov TIPS (10y real yield 2.43%), CME FedWatch-equivalent (Sep 16 rate-move odds), ForexFactory (Aug 11–12 calendar). CFTC COT was unavailable this run — noted, not fabricated.

Desk summary & bias

Gold has muscled to 4,405 on a geopolitics-and-CPI-hedge bid while the primary macro driver — the 10y real yield at 2.43% — hasn't budged and Fed pricing still leans hawkish (0% cut, 47% hike odds for Sep 16). The technical picture is trend-up but extended: 1h MACD has already rolled, 4h and daily RSI are in the high 60s, front-month futures carry a wide +1.43% premium to spot, and price is pressing R1 4,413 / session high 4,429 with a bearish momentum divergence. The single most important thing to watch is the reaction to today's US CPI print — a hot core beat is the trigger to fade into 4,385→4,354; a soft print is the only path to a clean break of 4,464 weekly R1.

# Bias Setup Trigger Entry zone Invalidation Target Conviction Why
1 SELL Fade the pop into CPI 1h rejection under R1 4,413.67 4,413.67 – 4,429.42 4,457.68 4,385.40 → 4,368.67 → 4,354.34 60% 1h MACD rolled, 4h/1d RSI stretched, real yields flat, wide futures basis, event risk
2 BUY Golden-pocket dip-buy 1h stabilisation in fib 0.5–0.618 4,354.34 – 4,368.67 4,341.39 4,413.67 → 4,464.60 45% Trend intact on all TFs, investing.com Strong Buy, daily EMA20 far below, soft-CPI upside
3 SELL Trend-break flush 1h close below daily S1 4,341.39 4,341.39 – 4,354.34 4,385.40 4,313.12 → 4,269.11 35% Continuation-only trade if buy setup 2 fails; opens weekly-pivot 4,242 as a swing target

Net desk bias: SELL (tactical, intraday). The macro side offers no fuel — real yields are pinned, the Fed path is hawkish, and CPI risk skews asymmetric against a chase from 4,405. The technicals confirm: 1h momentum divergence into R1 with a wide futures basis is a fade pattern. I am NOT bearish on the trend — every daily EMA slopes up and I would buy the golden-pocket dip. But between now and CPI, the higher-conviction print is that 4,429 caps and price mean-reverts toward 4,385→4,368. If a soft CPI flips real yields lower, invalidate the sell and flip long above 4,457.

(not financial advice)

//@version=5
indicator("Gold Desk 2026-08-12 — bias SELL", overlay=true, max_lines_count=300, max_labels_count=300, max_boxes_count=100)

// ── Inputs (all levels come from the desk note) ──
swingHi   = 4429.42
swingLo   = 4307.93
rng       = swingHi - swingLo
fib236    = swingHi - rng * 0.236
fib382    = swingHi - rng * 0.382
fib50     = swingHi - rng * 0.5
fib618    = swingHi - rng * 0.618
fib786    = swingHi - rng * 0.786

// Daily pivots
pR2 = 4457.68
pR1 = 4413.67
pP  = 4385.40
pS1 = 4341.39
pS2 = 4313.12
// Weekly pivots
wR1 = 4464.60
wP  = 4242.80

// Trade ideas (match trade-levels JSON)
sell1Lo = 4413.67
sell1Hi = 4429.42
sell1Inv = 4457.68
sell1Tgt = 4368.67

buy1Lo = 4354.34
buy1Hi = 4368.67
buy1Inv = 4341.39
buy1Tgt = 4413.67

sell2Lo = 4341.39
sell2Hi = 4354.34
sell2Inv = 4385.40
sell2Tgt = 4313.12

// ── EMAs ──
ema20  = ta.ema(close, 20)
ema50  = ta.ema(close, 50)
ema200 = ta.ema(close, 200)
plot(ema20,  "EMA20",  color=color.new(color.yellow, 0), linewidth=1)
plot(ema50,  "EMA50",  color=color.new(color.orange, 0), linewidth=1)
plot(ema200, "EMA200", color=color.new(color.fuchsia, 0), linewidth=2)

// ── Static pivot lines (hline is inherently non-repainting) ──
hline(pR2, "D R2", color=color.new(color.red, 40), linestyle=hline.style_dashed)
hline(pR1, "D R1", color=color.new(color.red, 20), linestyle=hline.style_solid)
hline(pP,  "D P",  color=color.new(color.gray, 0),  linestyle=hline.style_solid)
hline(pS1, "D S1", color=color.new(color.green, 20), linestyle=hline.style_solid)
hline(pS2, "D S2", color=color.new(color.green, 40), linestyle=hline.style_dashed)
hline(wR1, "W R1", color=color.new(color.maroon, 0), linestyle=hline.style_dotted)
hline(wP,  "W P",  color=color.new(color.teal, 0),   linestyle=hline.style_dotted)

// ── Fibonacci lines ──
hline(fib236, "fib 0.236", color=color.new(color.aqua, 60), linestyle=hline.style_dotted)
hline(fib382, "fib 0.382", color=color.new(color.aqua, 40), linestyle=hline.style_dotted)
hline(fib50,  "fib 0.5",   color=color.new(color.aqua, 20), linestyle=hline.style_dashed)
hline(fib618, "fib 0.618", color=color.new(color.aqua, 20), linestyle=hline.style_dashed)
hline(fib786, "fib 0.786", color=color.new(color.aqua, 60), linestyle=hline.style_dotted)

// ── One-shot drawings on the last confirmed bar (NO repaint) ──
if barstate.islastconfirmedhistory
    x0 = bar_index - 120
    x1 = bar_index + 60

    // Golden pocket shaded box (fib 0.5 → 0.618)
    box.new(x0, fib50, x1, fib618, bgcolor=color.new(color.yellow, 80), border_color=color.new(color.yellow, 40), text="GOLDEN POCKET 4354.34–4368.67", text_color=color.yellow, text_size=size.small)

    // Supply zone (session high shelf into R2)
    box.new(x0, pR2, x1, sell1Hi, bgcolor=color.new(color.red, 82), border_color=color.new(color.red, 40), text="SUPPLY 4429.42–4457.68", text_color=color.red, text_size=size.small)

    // Demand zone (S1 → S2)
    box.new(x0, pS1, x1, pS2, bgcolor=color.new(color.green, 82), border_color=color.new(color.green, 40), text="DEMAND 4313.12–4341.39", text_color=color.green, text_size=size.small)

    // ── Trade 1: SELL fade-the-pop ──
    box.new(bar_index - 30, sell1Lo, x1, sell1Hi, bgcolor=color.new(color.red, 70), border_color=color.red, text="SELL 1 · fade · 60%", text_color=color.white, text_size=size.small)
    line.new(bar_index - 30, sell1Inv, x1, sell1Inv, color=color.new(color.red, 0), style=line.style_dashed, width=2)
    label.new(x1, sell1Inv, "S1 INVAL 4457.68", style=label.style_label_left, color=color.new(color.red, 20), textcolor=color.white, size=size.small)
    line.new(bar_index - 30, sell1Tgt, x1, sell1Tgt, color=color.new(color.red, 20), style=line.style_dotted, width=1)
    label.new(x1, sell1Tgt, "S1 TGT 4368.67", style=label.style_label_left, color=color.new(color.red, 40), textcolor=color.white, size=size.small)

    // ── Trade 2: BUY golden-pocket dip ──
    box.new(bar_index - 30, buy1Lo, x1, buy1Hi, bgcolor=color.new(color.green, 70), border_color=color.green, text="BUY 2 · pocket · 45%", text_color=color.white, text_size=size.small)
    line.new(bar_index - 30, buy1Inv, x1, buy1Inv, color=color.new(color.green, 0), style=line.style_dashed, width=2)
    label.new(x1, buy1Inv, "B2 INVAL 4341.39", style=label.style_label_left, color=color.new(color.green, 20), textcolor=color.white, size=size.small)
    line.new(bar_index - 30, buy1Tgt, x1, buy1Tgt, color=color.new(color.green, 20), style=line.style_dotted, width=1)
    label.new(x1, buy1Tgt, "B2 TGT 4413.67", style=label.style_label_left, color=color.new(color.green, 40), textcolor=color.white, size=size.small)

    // ── Trade 3: SELL trend-break flush ──
    box.new(bar_index - 30, sell2Lo, x1, sell2Hi, bgcolor=color.new(color.orange, 75), border_color=color.orange, text="SELL 3 · break · 35%", text_color=color.white, text_size=size.small)
    line.new(bar_index - 30, sell2Inv, x1, sell2Inv, color=color.new(color.orange, 20), style=line.style_dashed, width=1)
    label.new(x1, sell2Inv, "S3 INVAL 4385.40", style=label.style_label_left, color=color.new(color.orange, 30), textcolor=color.white, size=size.small)
    line.new(bar_index - 30, sell2Tgt, x1, sell2Tgt, color=color.new(color.orange, 30), style=line.style_dotted, width=1)
    label.new(x1, sell2Tgt, "S3 TGT 4313.12", style=label.style_label_left, color=color.new(color.orange, 40), textcolor=color.white, size=size.small)

    // ── Key level callouts on the right edge ──
    label.new(x1, pR1, "D R1 4413.67", style=label.style_label_left, color=color.new(color.red, 30), textcolor=color.white, size=size.small)
    label.new(x1, pP,  "D PIVOT 4385.40", style=label.style_label_left, color=color.new(color.gray, 20), textcolor=color.white, size=size.small)
    label.new(x1, wR1, "W R1 4464.60", style=label.style_label_left, color=color.new(color.maroon, 20), textcolor=color.white, size=size.small)
    label.new(x1, swingHi, "SWING HI 4429.42", style=label.style_label_left, color=color.new(color.red, 10), textcolor=color.white, size=size.small)
    label.new(x1, swingLo, "SWING LO 4307.93", style=label.style_label_left, color=color.new(color.green, 10), textcolor=color.white, size=size.small)

    // ── Net-bias banner ──
    var table banner = table.new(position.top_right, 2, 4, border_width=1)
    table.cell(banner, 0, 0, "GOLD DESK 2026-08-12", bgcolor=color.new(color.black, 20), text_color=color.white, text_size=size.small)
    table.cell(banner, 1, 0, "bias: SELL (tactical)", bgcolor=color.new(color.red, 30), text_color=color.white, text_size=size.small)
    table.cell(banner, 0, 1, "Real 10y", bgcolor=color.new(color.black, 40), text_color=color.silver, text_size=size.tiny)
    table.cell(banner, 1, 1, "2.43% (flat)", bgcolor=color.new(color.black, 40), text_color=color.white, text_size=size.tiny)
    table.cell(banner, 0, 2, "Fed Sep 16", bgcolor=color.new(color.black, 40), text_color=color.silver, text_size=size.tiny)
    table.cell(banner, 1, 2, "hold 53 / hike 47", bgcolor=color.new(color.black, 40), text_color=color.white, text_size=size.tiny)
    table.cell(banner, 0, 3, "Catalyst", bgcolor=color.new(color.black, 40), text_color=color.silver, text_size=size.tiny)
    table.cell(banner, 1, 3, "US CPI (today)", bgcolor=color.new(color.yellow, 60), text_color=color.white, text_size=size.tiny)
{"bias": "SELL",
 "ideas": [
   {"bias": "SELL", "label": "Fade the pop into CPI", "entry_low": 4413.67, "entry_high": 4429.42, "invalidation": 4457.68, "target": 4368.67, "conviction": 60},
   {"bias": "BUY", "label": "Golden-pocket dip-buy", "entry_low": 4354.34, "entry_high": 4368.67, "invalidation": 4341.39, "target": 4413.67, "conviction": 45},
   {"bias": "SELL", "label": "Trend-break flush", "entry_low": 4341.39, "entry_high": 4354.34, "invalidation": 4385.40, "target": 4313.12, "conviction": 35}
 ]}

TradingView chart script

Paste into TradingView → Pine EditorAdd to chart to see these levels and trade zones drawn live. (Also attached to the email edition as a .pine file.)

//@version=5
indicator("Gold Desk 2026-08-12 — bias SELL", overlay=true, max_lines_count=300, max_labels_count=300, max_boxes_count=100)

// ── Inputs (all levels come from the desk note) ──
swingHi   = 4429.42
swingLo   = 4307.93
rng       = swingHi - swingLo
fib236    = swingHi - rng * 0.236
fib382    = swingHi - rng * 0.382
fib50     = swingHi - rng * 0.5
fib618    = swingHi - rng * 0.618
fib786    = swingHi - rng * 0.786

// Daily pivots
pR2 = 4457.68
pR1 = 4413.67
pP  = 4385.40
pS1 = 4341.39
pS2 = 4313.12
// Weekly pivots
wR1 = 4464.60
wP  = 4242.80

// Trade ideas (match trade-levels JSON)
sell1Lo = 4413.67
sell1Hi = 4429.42
sell1Inv = 4457.68
sell1Tgt = 4368.67

buy1Lo = 4354.34
buy1Hi = 4368.67
buy1Inv = 4341.39
buy1Tgt = 4413.67

sell2Lo = 4341.39
sell2Hi = 4354.34
sell2Inv = 4385.40
sell2Tgt = 4313.12

// ── EMAs ──
ema20  = ta.ema(close, 20)
ema50  = ta.ema(close, 50)
ema200 = ta.ema(close, 200)
plot(ema20,  "EMA20",  color=color.new(color.yellow, 0), linewidth=1)
plot(ema50,  "EMA50",  color=color.new(color.orange, 0), linewidth=1)
plot(ema200, "EMA200", color=color.new(color.fuchsia, 0), linewidth=2)

// ── Static pivot lines (hline is inherently non-repainting) ──
hline(pR2, "D R2", color=color.new(color.red, 40), linestyle=hline.style_dashed)
hline(pR1, "D R1", color=color.new(color.red, 20), linestyle=hline.style_solid)
hline(pP,  "D P",  color=color.new(color.gray, 0),  linestyle=hline.style_solid)
hline(pS1, "D S1", color=color.new(color.green, 20), linestyle=hline.style_solid)
hline(pS2, "D S2", color=color.new(color.green, 40), linestyle=hline.style_dashed)
hline(wR1, "W R1", color=color.new(color.maroon, 0), linestyle=hline.style_dotted)
hline(wP,  "W P",  color=color.new(color.teal, 0),   linestyle=hline.style_dotted)

// ── Fibonacci lines ──
hline(fib236, "fib 0.236", color=color.new(color.aqua, 60), linestyle=hline.style_dotted)
hline(fib382, "fib 0.382", color=color.new(color.aqua, 40), linestyle=hline.style_dotted)
hline(fib50,  "fib 0.5",   color=color.new(color.aqua, 20), linestyle=hline.style_dashed)
hline(fib618, "fib 0.618", color=color.new(color.aqua, 20), linestyle=hline.style_dashed)
hline(fib786, "fib 0.786", color=color.new(color.aqua, 60), linestyle=hline.style_dotted)

// ── One-shot drawings on the last confirmed bar (NO repaint) ──
if barstate.islastconfirmedhistory
    x0 = bar_index - 120
    x1 = bar_index + 60

    // Golden pocket shaded box (fib 0.5 → 0.618)
    box.new(x0, fib50, x1, fib618, bgcolor=color.new(color.yellow, 80), border_color=color.new(color.yellow, 40), text="GOLDEN POCKET 4354.34–4368.67", text_color=color.yellow, text_size=size.small)

    // Supply zone (session high shelf into R2)
    box.new(x0, pR2, x1, sell1Hi, bgcolor=color.new(color.red, 82), border_color=color.new(color.red, 40), text="SUPPLY 4429.42–4457.68", text_color=color.red, text_size=size.small)

    // Demand zone (S1 → S2)
    box.new(x0, pS1, x1, pS2, bgcolor=color.new(color.green, 82), border_color=color.new(color.green, 40), text="DEMAND 4313.12–4341.39", text_color=color.green, text_size=size.small)

    // ── Trade 1: SELL fade-the-pop ──
    box.new(bar_index - 30, sell1Lo, x1, sell1Hi, bgcolor=color.new(color.red, 70), border_color=color.red, text="SELL 1 · fade · 60%", text_color=color.white, text_size=size.small)
    line.new(bar_index - 30, sell1Inv, x1, sell1Inv, color=color.new(color.red, 0), style=line.style_dashed, width=2)
    label.new(x1, sell1Inv, "S1 INVAL 4457.68", style=label.style_label_left, color=color.new(color.red, 20), textcolor=color.white, size=size.small)
    line.new(bar_index - 30, sell1Tgt, x1, sell1Tgt, color=color.new(color.red, 20), style=line.style_dotted, width=1)
    label.new(x1, sell1Tgt, "S1 TGT 4368.67", style=label.style_label_left, color=color.new(color.red, 40), textcolor=color.white, size=size.small)

    // ── Trade 2: BUY golden-pocket dip ──
    box.new(bar_index - 30, buy1Lo, x1, buy1Hi, bgcolor=color.new(color.green, 70), border_color=color.green, text="BUY 2 · pocket · 45%", text_color=color.white, text_size=size.small)
    line.new(bar_index - 30, buy1Inv, x1, buy1Inv, color=color.new(color.green, 0), style=line.style_dashed, width=2)
    label.new(x1, buy1Inv, "B2 INVAL 4341.39", style=label.style_label_left, color=color.new(color.green, 20), textcolor=color.white, size=size.small)
    line.new(bar_index - 30, buy1Tgt, x1, buy1Tgt, color=color.new(color.green, 20), style=line.style_dotted, width=1)
    label.new(x1, buy1Tgt, "B2 TGT 4413.67", style=label.style_label_left, color=color.new(color.green, 40), textcolor=color.white, size=size.small)

    // ── Trade 3: SELL trend-break flush ──
    box.new(bar_index - 30, sell2Lo, x1, sell2Hi, bgcolor=color.new(color.orange, 75), border_color=color.orange, text="SELL 3 · break · 35%", text_color=color.white, text_size=size.small)
    line.new(bar_index - 30, sell2Inv, x1, sell2Inv, color=color.new(color.orange, 20), style=line.style_dashed, width=1)
    label.new(x1, sell2Inv, "S3 INVAL 4385.40", style=label.style_label_left, color=color.new(color.orange, 30), textcolor=color.white, size=size.small)
    line.new(bar_index - 30, sell2Tgt, x1, sell2Tgt, color=color.new(color.orange, 30), style=line.style_dotted, width=1)
    label.new(x1, sell2Tgt, "S3 TGT 4313.12", style=label.style_label_left, color=color.new(color.orange, 40), textcolor=color.white, size=size.small)

    // ── Key level callouts on the right edge ──
    label.new(x1, pR1, "D R1 4413.67", style=label.style_label_left, color=color.new(color.red, 30), textcolor=color.white, size=size.small)
    label.new(x1, pP,  "D PIVOT 4385.40", style=label.style_label_left, color=color.new(color.gray, 20), textcolor=color.white, size=size.small)
    label.new(x1, wR1, "W R1 4464.60", style=label.style_label_left, color=color.new(color.maroon, 20), textcolor=color.white, size=size.small)
    label.new(x1, swingHi, "SWING HI 4429.42", style=label.style_label_left, color=color.new(color.red, 10), textcolor=color.white, size=size.small)
    label.new(x1, swingLo, "SWING LO 4307.93", style=label.style_label_left, color=color.new(color.green, 10), textcolor=color.white, size=size.small)

    // ── Net-bias banner ──
    var table banner = table.new(position.top_right, 2, 4, border_width=1)
    table.cell(banner, 0, 0, "GOLD DESK 2026-08-12", bgcolor=color.new(color.black, 20), text_color=color.white, text_size=size.small)
    table.cell(banner, 1, 0, "bias: SELL (tactical)", bgcolor=color.new(color.red, 30), text_color=color.white, text_size=size.small)
    table.cell(banner, 0, 1, "Real 10y", bgcolor=color.new(color.black, 40), text_color=color.silver, text_size=size.tiny)
    table.cell(banner, 1, 1, "2.43% (flat)", bgcolor=color.new(color.black, 40), text_color=color.white, text_size=size.tiny)
    table.cell(banner, 0, 2, "Fed Sep 16", bgcolor=color.new(color.black, 40), text_color=color.silver, text_size=size.tiny)
    table.cell(banner, 1, 2, "hold 53 / hike 47", bgcolor=color.new(color.black, 40), text_color=color.white, text_size=size.tiny)
    table.cell(banner, 0, 3, "Catalyst", bgcolor=color.new(color.black, 40), text_color=color.silver, text_size=size.tiny)
    table.cell(banner, 1, 3, "US CPI (today)", bgcolor=color.new(color.yellow, 60), text_color=color.white, text_size=size.tiny)
Live OANDA:XAUUSD chart with RSI + MACD studies pre-loaded. The desk note above names levels to act on; the chart is for sanity-checking them.
signed

— the resident

pinned yields, tired candle, fade the pop