Gold Desk — Real Yields Bite, the Tape Sells the Bounce
Real yields punched +9bp to 2.23% on a hawkish Fed re-pricing while Fed-funds futures showed *zero* cut probability and 33% odds of a hike — the macro stack just shifted hard against gold and the price is showing it. Spot sits at $4,282, pinned below every EMA on every timeframe and a hair under the 4,288 daily pivot, with COMEX still in $32 contango. The 15m tape is already washed (RSI 37.7) but the path of least resistance is to fade rips into the 4,295–4,314 fib/EMA cluster toward the 4,202 daily-S1 shelf. Investing.com's automated daily aggregate reads Strong Sell, and for once we agree with the robots.
Real yields punched +9bp to 2.23% on a hawkish Fed re-pricing while Fed-funds futures showed zero cut probability and 33% odds of a hike — the macro stack just shifted hard against gold and the price is showing it. Spot sits at $4,282, pinned below every EMA on every timeframe and a hair under the 4,288 daily pivot, with COMEX still in $32 contango. The 15m tape is already washed (RSI 37.7) but the path of least resistance is to fade rips into the 4,295–4,314 fib/EMA cluster toward the 4,202 daily-S1 shelf. Investing.com's automated daily aggregate reads Strong Sell, and for once we agree with the robots.
The session
Gold is trading 4,282.61, down 1.11% on the session and -4.57% on the month, with a 24-hour range of 4,216.86–4,373.95 — a $157 excursion that resolved decisively lower. The catalyst isn't subtle. The US 10y TIPS yield ripped +9bp d/d to 2.23%, which is the kind of single-session move in the gold-relevant rate that the metal historically struggles to digest. DXY is bid at 100.28 (+0.32%), and COMEX GC=F front-month is printing 4,314.40 — a +0.74% premium to PAXG spot, consistent with a tape where futures hands are still leaning long against a softening cash market.
The proximate news is twofold. Per investing.com's wire: "Stocks drop, bond yields rise; Fed keeps rates steady but projects hike for later this year" — that's the dot-plot turn that re-rated the front of the curve. And Citigroup pushed its first Fed cut to October, with follow-ups in December and January — gone are the summer cuts the metal had been priced for. The Iran-peace headline that lifted Asian equities also clipped WTI -3.1% to $74.40, which is helping the 10y breakeven drift -3bp to 2.26%. So the rates move under gold is real-yield-driven, not inflation-driven — and that distinction matters, because it's the worst kind of yield move for the metal.
Multi-timeframe read
The trend is one-directional across every lens.
- 15m: RSI 37.7, MACD histogram -2.95 and rolling down, price $15 below EMA20 (4,297.74) and $17 below EMA50 (4,299.26). Stretched, but stretched with the trend.
- 1h: RSI 43.3, MACD histogram barely positive but rolling, price $17 below EMA20 (4,299.51) and $23 below EMA50 (4,305.76). The 1h EMA cluster at 4,297–4,306 is the textbook mean-reversion magnet and the textbook fade zone.
- 4h: RSI 50.6, MACD histogram -10.74 but ticking up, price $11 below EMA20 (4,293.53). The least bearish picture on the board — this is where a counter-trend bounce would first show.
- 1d: RSI 43.2, MACD histogram +11.35 (a leftover from last week's bounce), but price now -$45 to EMA20, -$169 to EMA50, -$226 to EMA200. The daily structure has rolled and is trading well below a sloping EMA stack.
Every timeframe agrees on directional bias (price < every EMA shown). They disagree on momentum: 15m/1h say stretched-short, 4h says rebuilding for a leg, daily says the higher-degree trend has flipped. That mix is textbook "sell-the-rip," not "buy-the-dip," because every rally hits a supply ledge before it gets paid.
Macro frame
Lead with the rate that matters. The 10y real (TIPS) yield jumped +9bp d/d to 2.23% (Treasury.gov, 06/17). The decomposition is clean: nominal 4.49% (+6bp) = real 2.23% (+9bp) + breakeven 2.26% (-3bp). Inflation expectations softened slightly, real rates ripped — this is a pure real-yield event, the variety that hits gold hardest.
The Fed path is now consistent with that. CME FedWatch shows the next FOMC at 0% cut / 67% hold / 33% HIKE, with the upper bound currently 3.75%. There is no cut priced. Risk distribution is asymmetric toward the rates side, which is precisely the regime where TIPS yields keep grinding higher and gold's opportunity-cost penalty keeps widening. Until the curve starts pricing in cuts again, the macro bid under gold is a Treasury-buyer's bid, not a discount-rate bid — structurally a weaker hand.
DXY confirms. 100.28 (+0.32% intraday, +0.42% week, +0.99% month), with 1h RSI 65.3 and 4h RSI 68.1 — momentum-extended but not yet exhausted, sitting above every EMA on every TF. The 30-day daily-return XAU↔DXY correlation is -0.46 — meaningful enough to respect; dollar up, gold down is the default trade in this regime, and the dollar is up.
Cross-asset texture fits. VIX 17.13 (-7.1%) — no risk-off bid for gold from equities. GVZ 28.45 — gold's own implied vol is elevated, the options market is pricing real movement, which favours directional positioning over gamma-scalping. Gold/silver 62.3 with silver $68.75 — a low-ratio, "industrial-precious" regime, not the panic-bid setup where gold leads. BTC flat at $64,394 — the "digital gold" alternative isn't catching a bid either, so there's no rotation story to lean on. WTI -3.1% reinforces the disinflationary tilt that is letting real yields climb.
ECB cross-flow is hawkish to the point of being noisy. Simkus (Reuters/FXStreet) sees "at least one more rate hike"; Sleijpen says a 2022-style inflation repeat is "less likely but not excluded"; Bloomberg flags Lagarde warning that AI is a "huge risk for financial stability" and ECB officials saying peace in Iran "isn't enough to fix the energy shock." A hawkish ECB doesn't directly help gold (EUR↑, DXY↓ is the usual transmission), but it doesn't fight today's USD strength either, because the US real-yield move dominates the cross. CFTC COT (06/09): managed money is still long +173,837 contracts against commercials net -201,036 — that is positioning overhang, not support. If real yields stay here, those longs become the sellers.
Two scenarios
(Conviction figures below are honest qualitative reads, not back-tested probabilities.)
Sell setup
- Trigger: Rally tags 4,295–4,314 — the 0.5–0.618 fib pocket of the 4,216.86→4,373.95 down-leg, sitting on top of the 15m/1h EMA20/50 cluster at 4,297–4,306 and just above the 4,288.09 daily pivot — and prints a 15m rejection candle.
- Invalidation: Hourly close above 4,359.31 (daily R1). That's where the bounce escapes the EMA gravity and the fade is dead.
- Target: 4,202.22 (daily S1), runner toward the 4,197.80 weekly pivot.
- Conviction: 65%
- Rationale: This is the trade the macro is paying you for. Real yields +9bp, Fed odds tilted hawkish, DXY pressing momentum highs, COT longs still loaded. The 15m oversold reading means you wait for the bounce rather than chasing the lows; the trigger is the textbook mean-reversion magnet.
Buy setup
- Trigger: 4,202.22 (daily S1) holds on a 15m wick + reclaim, or price prints into 4,197.80 (weekly pivot) and immediately rejects.
- Invalidation: Hourly close below 4,180 (clean break of both daily S1 and weekly pivot).
- Target: 4,288.09 daily pivot for first take-off; runners only if 4,313.94 fib 0.618 gives way.
- Conviction: 35%
- Rationale: Counter-trend; only get it on a flush. 15m RSI 37.7 leaves room for another ~1.5% lower before truly oversold, but daily S1 + weekly pivot is a real confluence shelf, and GVZ 28.45 implies enough vol for a one-leg rebound. Trade light — this is a fade-of-the-flush, not a trend trade.
Levels worth marking
- Resistance above: 4,288.09 (daily P) · 4,295.41 / 4,313.94 (fib 0.5 / 0.618 golden pocket) · 4,327.77 (daily EMA20) · 4,340.33 (fib 0.786) · 4,359.31 (daily R1) · 4,369.13 (weekly R1) · 4,445.18 (daily R2) · 4,451.78 (daily EMA50)
- Support below: 4,276.87 (fib 0.382) · 4,253.93 (fib 0.236) · 4,216.86 (session low) · 4,202.22 (daily S1) · 4,197.80 (weekly P) · 4,131.00 (daily S2) · 4,045.13 (daily S3)
- Tail map: weekly S2 3,869.70 and S3 3,712.93 — off the immediate radar but worth keeping flagged as the multi-week tail risk if the real-yield move extends.
Calendar / catalysts
The pre-fetched ForexFactory pull is thin for today (Jun 18). The week's tier-1 events were front-loaded:
- Mon Jun 15, 10:30 UTC — ECB President Lagarde Speaks (EUR, Medium)
- Tue Jun 16, 06:19 UTC — BOJ Policy Rate, actual <1.00% vs prev <0.75% (JPY, High)
- Tue Jun 16 — BOJ Monetary Policy Statement (JPY, High)
- Tue Jun 16, 07:30 UTC — RBA Cash Rate 4.35% hold (AUD, High)
- Tue Jun 16 — RBA Rate Statement (AUD, High)
- Tue Jun 16, 08:30 UTC — RBA Press Conference (AUD, High)
- Tue Jun 16, 09:30 UTC — BOJ Press Conference (JPY, High)
No tier-1 US data is on the block for today in the feed; the dominant catalyst remains yesterday's FOMC and the Citi cut-timing pushback. If something material is sitting on the US tape later today, the calendar feed didn't carry it — flag, don't fabricate.
Sources cited
Treasury.gov (10y TIPS series, 2.23% as of 06/17/2026) · CME FedWatch (Fed-funds futures path) · CFTC COT (managed-money positioning, 06/09) · investing.com (gold headlines, automated technical aggregate "Strong Sell," "Gold trapped at $4,327 with bearish lean") · Reuters/FXStreet (ECB Simkus, Sleijpen) · Bloomberg Markets (Lagarde AI, ECB Iran energy shock) · onewordnews (commodity sentiment composite, +0.00) · ForexFactory (economic calendar).
Desk summary & bias
Gold is being driven by one variable today: the 10y real yield, which jumped +9bp to 2.23% on a hawkish Fed re-pricing reinforced by Citi pushing its cut timeline to October/December/January. With Fed-funds futures showing zero cuts and 33% hike odds at the next FOMC, the opportunity-cost case for the metal is at its weakest in weeks, and DXY at 100.28 (1h RSI 65, 4h RSI 68) is confirming the dollar leg of the same move. Technically, spot at 4,282 sits below every EMA on every TF and a hair below the 4,288 daily pivot, with the 4,295–4,314 fib golden pocket overlapping the 1h EMA cluster as the textbook fade zone. The single most important thing to watch is whether 4,202 (daily S1) / 4,197 (weekly pivot) holds; a clean break opens 4,131 and the broader weekly-S2 air pocket below.
Trade ideas
| # | Bias | Setup | Trigger | Entry zone | Invalidation | Target | Conviction | Why |
|---|---|---|---|---|---|---|---|---|
| 1 | SELL | Bounce-fade into EMA / fib cluster | 15m rejection in golden pocket | 4,295.41 – 4,313.94 | H1 close > 4,359.31 | 4,202.22 | 65% | Real yields +9bp, hawkish Fed re-price, DXY momentum-extended; sell-the-rip into confluence |
| 2 | BUY | Daily-S1 / weekly-P shelf reclaim | 15m wick + reclaim of 4,202.22 | 4,197.80 – 4,216.86 | H1 close < 4,180.00 | 4,288.09 | 35% | Counter-trend flush trade only; GVZ 28.45 supports a one-leg rebound off real confluence |
| 3 | SELL | Break-and-go continuation | H1 close < 4,202.22 | 4,197.80 – 4,202.22 | H1 close > 4,253.93 | 4,131.00 | 55% | If daily S1 / weekly P fails, COT longs (mm net +173k) become forced sellers into the air pocket |
Net desk bias: SELL. The +9bp real-yield rip, combined with Fed-funds futures pricing zero cuts and 33% hike odds, is a clean macro headwind, and the DXY tape (+0.32% intraday, 4h RSI 68) is confirming it. The technical state — price below every EMA on every TF, investing.com's automated read at Strong Sell, daily MACD rolling — agrees. The only internal disagreement is short-term oversold conditions on 15m/1h, which is exactly why the lean is sell-the-rip rather than sell-the-low. If macro and technicals had to split, I'd weight macro here because the rate move is fresh (today) and the technical roll is following it, not leading it.
(not financial advice)
//@version=5
indicator("Gold Desk 2026-06-18 — bias SELL", overlay=true, max_lines_count=300, max_labels_count=300, max_boxes_count=100)
// ── Inputs (Fibonacci swing — anchored to the last 5-session range) ──
swingHigh = input.float(4373.95, "Swing High")
swingLow = input.float(4216.86, "Swing Low")
// ── EMAs (trend skeleton) ──
ema20 = ta.ema(close, 20)
ema50 = ta.ema(close, 50)
ema200 = ta.ema(close, 200)
plot(ema20, color=color.new(color.yellow, 0), title="EMA20", linewidth=1)
plot(ema50, color=color.new(color.orange, 0), title="EMA50", linewidth=2)
plot(ema200, color=color.new(color.red, 0), title="EMA200", linewidth=2)
// ── Fibonacci levels of the 4,373.95 → 4,216.86 down-leg ──
fibRange = swingHigh - swingLow
fib_236 = swingLow + 0.236 * fibRange
fib_382 = swingLow + 0.382 * fibRange
fib_500 = swingLow + 0.500 * fibRange
fib_618 = swingLow + 0.618 * fibRange
fib_786 = swingLow + 0.786 * fibRange
// ── Pivots (daily + weekly) ──
dP = 4288.09
dR1 = 4359.31
dS1 = 4202.22
dR2 = 4445.18
dS2 = 4131.00
wP = 4197.80
wR1 = 4369.13
hline(dP, "Daily P", color=color.new(color.white, 30), linestyle=hline.style_solid)
hline(dR1, "Daily R1", color=color.new(color.red, 40), linestyle=hline.style_dashed)
hline(dS1, "Daily S1", color=color.new(color.lime, 40), linestyle=hline.style_dashed)
hline(dR2, "Daily R2", color=color.new(color.red, 60), linestyle=hline.style_dotted)
hline(dS2, "Daily S2", color=color.new(color.lime, 60), linestyle=hline.style_dotted)
hline(wP, "Weekly P", color=color.new(color.aqua, 30), linestyle=hline.style_solid)
hline(wR1, "Weekly R1", color=color.new(color.red, 50), linestyle=hline.style_dotted)
// ── Bias banner (top-right corner) ──
var table biasTbl = table.new(position.top_right, 2, 4, bgcolor=color.new(color.black, 10), border_color=color.new(color.gray, 50), border_width=1)
// ── Last-bar drawings (fibs, supply/demand, trade ideas, banner) ──
if barstate.islast
rightX = bar_index + 80
leftX = bar_index - 200
// ── Fibonacci reference lines ──
line.new(leftX, fib_236, rightX, fib_236, color=color.new(color.gray, 20), style=line.style_dotted)
line.new(leftX, fib_382, rightX, fib_382, color=color.new(color.gray, 0), style=line.style_dotted)
line.new(leftX, fib_786, rightX, fib_786, color=color.new(color.gray, 0), style=line.style_dotted)
label.new(rightX, fib_236, "Fib 0.236 · " + str.tostring(fib_236, "#.##"), style=label.style_label_left, color=color.new(color.gray, 60), textcolor=color.white, size=size.tiny)
label.new(rightX, fib_382, "Fib 0.382 · " + str.tostring(fib_382, "#.##"), style=label.style_label_left, color=color.new(color.gray, 60), textcolor=color.white, size=size.tiny)
label.new(rightX, fib_786, "Fib 0.786 · " + str.tostring(fib_786, "#.##"), style=label.style_label_left, color=color.new(color.gray, 60), textcolor=color.white, size=size.tiny)
// ── Supply zone: 4,359–4,369 (daily R1 + weekly R1 cluster) ──
box.new(leftX, wR1, rightX, dR1, bgcolor=color.new(color.red, 85), border_color=color.new(color.red, 40))
label.new(rightX, wR1, "Supply · 4,359 – 4,369 (Daily R1 + Weekly R1)", style=label.style_label_left, color=color.new(color.red, 60), textcolor=color.white, size=size.small)
// ── Demand zone: 4,197–4,202 (daily S1 + weekly pivot shelf) ──
box.new(leftX, dS1, rightX, wP, bgcolor=color.new(color.green, 85), border_color=color.new(color.green, 40))
label.new(rightX, dS1, "Demand · 4,197 – 4,202 (Daily S1 + Weekly P)", style=label.style_label_left, color=color.new(color.green, 60), textcolor=color.white, size=size.small)
// ── SELL #1 — Golden-pocket fade (entry 4,295.41 – 4,313.94 · inv 4,359.31 · tgt 4,202.22 · 65%) ──
box.new(leftX, fib_618, rightX, fib_500, bgcolor=color.new(color.yellow, 78), border_color=color.new(color.red, 0), border_style=line.style_dashed)
line.new(leftX, dR1, rightX, dR1, color=color.new(color.red, 0), style=line.style_dashed, width=2)
line.new(leftX, dS1, rightX, dS1, color=color.new(color.lime, 0), style=line.style_dashed, width=2)
label.new(rightX, (fib_500 + fib_618) / 2.0, "SELL #1 · Golden pocket fade · 65%", style=label.style_label_left, color=color.new(color.red, 30), textcolor=color.white, size=size.normal)
label.new(rightX, dR1, "Inv 4,359.31 (Daily R1, H1 close)", style=label.style_label_left, color=color.new(color.red, 50), textcolor=color.white, size=size.small)
label.new(rightX, dS1, "Tgt 4,202.22 (Daily S1)", style=label.style_label_left, color=color.new(color.lime, 40), textcolor=color.white, size=size.small)
// ── BUY #2 — Demand shelf reclaim (entry 4,197.80 – 4,216.86 · inv 4,180 · tgt 4,288.09 · 35%) ──
box.new(leftX, 4216.86, rightX, 4197.80, bgcolor=color.new(color.green, 70), border_color=color.new(color.green, 0))
line.new(leftX, 4180.0, rightX, 4180.0, color=color.new(color.red, 0), style=line.style_dashed, width=2)
line.new(leftX, dP, rightX, dP, color=color.new(color.lime, 0), style=line.style_dashed, width=2)
label.new(rightX, 4207.0, "BUY #2 · Shelf reclaim · 35%", style=label.style_label_left, color=color.new(color.green, 30), textcolor=color.white, size=size.normal)
label.new(rightX, 4180.0, "Inv 4,180 (H1 close)", style=label.style_label_left, color=color.new(color.red, 50), textcolor=color.white, size=size.small)
label.new(rightX, dP, "Tgt 4,288.09 (Daily P)", style=label.style_label_left, color=color.new(color.lime, 40), textcolor=color.white, size=size.small)
// ── SELL #3 — Break-and-go continuation (entry 4,197.80 – 4,202.22 · inv 4,253.93 · tgt 4,131 · 55%) ──
line.new(leftX, dS2, rightX, dS2, color=color.new(color.lime, 30), style=line.style_dotted, width=1)
line.new(leftX, fib_236, rightX, fib_236, color=color.new(color.red, 40), style=line.style_dotted, width=1)
label.new(rightX, dS2, "SELL #3 · Break-and-go Tgt 4,131 (Daily S2) · 55%", style=label.style_label_left, color=color.new(color.lime, 50), textcolor=color.white, size=size.small)
label.new(rightX, fib_236, "SELL #3 Inv · Fib 0.236", style=label.style_label_left, color=color.new(color.red, 50), textcolor=color.white, size=size.tiny)
// ── Net-bias banner cells ──
table.cell(biasTbl, 0, 0, "GOLD DESK · 2026-06-18", text_color=color.white, bgcolor=color.new(color.red, 40), text_size=size.normal)
table.cell(biasTbl, 1, 0, "Net bias: SELL", text_color=color.white, bgcolor=color.new(color.red, 20), text_size=size.normal)
table.cell(biasTbl, 0, 1, "Driver", text_color=color.silver, text_size=size.small)
table.cell(biasTbl, 1, 1, "10y real +9bp → 2.23%", text_color=color.white, text_size=size.small)
table.cell(biasTbl, 0, 2, "Fed odds", text_color=color.silver, text_size=size.small)
table.cell(biasTbl, 1, 2, "0% cut / 67% hold / 33% hike", text_color=color.white, text_size=size.small)
table.cell(biasTbl, 0, 3, "Tape", text_color=color.silver, text_size=size.small)
table.cell(biasTbl, 1, 3, "Below all EMAs · invest.com Strong Sell", text_color=color.white, text_size=size.small)
{"bias": "SELL",
"ideas": [
{"bias": "SELL", "label": "Golden-pocket bounce-fade", "entry_low": 4295.41, "entry_high": 4313.94,
"invalidation": 4359.31, "target": 4202.22, "conviction": 65},
{"bias": "BUY", "label": "Demand shelf reclaim", "entry_low": 4197.80, "entry_high": 4216.86,
"invalidation": 4180.00, "target": 4288.09, "conviction": 35},
{"bias": "SELL", "label": "Break-and-go continuation", "entry_low": 4197.80, "entry_high": 4202.22,
"invalidation": 4253.93, "target": 4131.00, "conviction": 55}
]}
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-06-18 — bias SELL", overlay=true, max_lines_count=300, max_labels_count=300, max_boxes_count=100)
// ── Inputs (Fibonacci swing — anchored to the last 5-session range) ──
swingHigh = input.float(4373.95, "Swing High")
swingLow = input.float(4216.86, "Swing Low")
// ── EMAs (trend skeleton) ──
ema20 = ta.ema(close, 20)
ema50 = ta.ema(close, 50)
ema200 = ta.ema(close, 200)
plot(ema20, color=color.new(color.yellow, 0), title="EMA20", linewidth=1)
plot(ema50, color=color.new(color.orange, 0), title="EMA50", linewidth=2)
plot(ema200, color=color.new(color.red, 0), title="EMA200", linewidth=2)
// ── Fibonacci levels of the 4,373.95 → 4,216.86 down-leg ──
fibRange = swingHigh - swingLow
fib_236 = swingLow + 0.236 * fibRange
fib_382 = swingLow + 0.382 * fibRange
fib_500 = swingLow + 0.500 * fibRange
fib_618 = swingLow + 0.618 * fibRange
fib_786 = swingLow + 0.786 * fibRange
// ── Pivots (daily + weekly) ──
dP = 4288.09
dR1 = 4359.31
dS1 = 4202.22
dR2 = 4445.18
dS2 = 4131.00
wP = 4197.80
wR1 = 4369.13
hline(dP, "Daily P", color=color.new(color.white, 30), linestyle=hline.style_solid)
hline(dR1, "Daily R1", color=color.new(color.red, 40), linestyle=hline.style_dashed)
hline(dS1, "Daily S1", color=color.new(color.lime, 40), linestyle=hline.style_dashed)
hline(dR2, "Daily R2", color=color.new(color.red, 60), linestyle=hline.style_dotted)
hline(dS2, "Daily S2", color=color.new(color.lime, 60), linestyle=hline.style_dotted)
hline(wP, "Weekly P", color=color.new(color.aqua, 30), linestyle=hline.style_solid)
hline(wR1, "Weekly R1", color=color.new(color.red, 50), linestyle=hline.style_dotted)
// ── Bias banner (top-right corner) ──
var table biasTbl = table.new(position.top_right, 2, 4, bgcolor=color.new(color.black, 10), border_color=color.new(color.gray, 50), border_width=1)
// ── Last-bar drawings (fibs, supply/demand, trade ideas, banner) ──
if barstate.islast
rightX = bar_index + 80
leftX = bar_index - 200
// ── Fibonacci reference lines ──
line.new(leftX, fib_236, rightX, fib_236, color=color.new(color.gray, 20), style=line.style_dotted)
line.new(leftX, fib_382, rightX, fib_382, color=color.new(color.gray, 0), style=line.style_dotted)
line.new(leftX, fib_786, rightX, fib_786, color=color.new(color.gray, 0), style=line.style_dotted)
label.new(rightX, fib_236, "Fib 0.236 · " + str.tostring(fib_236, "#.##"), style=label.style_label_left, color=color.new(color.gray, 60), textcolor=color.white, size=size.tiny)
label.new(rightX, fib_382, "Fib 0.382 · " + str.tostring(fib_382, "#.##"), style=label.style_label_left, color=color.new(color.gray, 60), textcolor=color.white, size=size.tiny)
label.new(rightX, fib_786, "Fib 0.786 · " + str.tostring(fib_786, "#.##"), style=label.style_label_left, color=color.new(color.gray, 60), textcolor=color.white, size=size.tiny)
// ── Supply zone: 4,359–4,369 (daily R1 + weekly R1 cluster) ──
box.new(leftX, wR1, rightX, dR1, bgcolor=color.new(color.red, 85), border_color=color.new(color.red, 40))
label.new(rightX, wR1, "Supply · 4,359 – 4,369 (Daily R1 + Weekly R1)", style=label.style_label_left, color=color.new(color.red, 60), textcolor=color.white, size=size.small)
// ── Demand zone: 4,197–4,202 (daily S1 + weekly pivot shelf) ──
box.new(leftX, dS1, rightX, wP, bgcolor=color.new(color.green, 85), border_color=color.new(color.green, 40))
label.new(rightX, dS1, "Demand · 4,197 – 4,202 (Daily S1 + Weekly P)", style=label.style_label_left, color=color.new(color.green, 60), textcolor=color.white, size=size.small)
// ── SELL #1 — Golden-pocket fade (entry 4,295.41 – 4,313.94 · inv 4,359.31 · tgt 4,202.22 · 65%) ──
box.new(leftX, fib_618, rightX, fib_500, bgcolor=color.new(color.yellow, 78), border_color=color.new(color.red, 0), border_style=line.style_dashed)
line.new(leftX, dR1, rightX, dR1, color=color.new(color.red, 0), style=line.style_dashed, width=2)
line.new(leftX, dS1, rightX, dS1, color=color.new(color.lime, 0), style=line.style_dashed, width=2)
label.new(rightX, (fib_500 + fib_618) / 2.0, "SELL #1 · Golden pocket fade · 65%", style=label.style_label_left, color=color.new(color.red, 30), textcolor=color.white, size=size.normal)
label.new(rightX, dR1, "Inv 4,359.31 (Daily R1, H1 close)", style=label.style_label_left, color=color.new(color.red, 50), textcolor=color.white, size=size.small)
label.new(rightX, dS1, "Tgt 4,202.22 (Daily S1)", style=label.style_label_left, color=color.new(color.lime, 40), textcolor=color.white, size=size.small)
// ── BUY #2 — Demand shelf reclaim (entry 4,197.80 – 4,216.86 · inv 4,180 · tgt 4,288.09 · 35%) ──
box.new(leftX, 4216.86, rightX, 4197.80, bgcolor=color.new(color.green, 70), border_color=color.new(color.green, 0))
line.new(leftX, 4180.0, rightX, 4180.0, color=color.new(color.red, 0), style=line.style_dashed, width=2)
line.new(leftX, dP, rightX, dP, color=color.new(color.lime, 0), style=line.style_dashed, width=2)
label.new(rightX, 4207.0, "BUY #2 · Shelf reclaim · 35%", style=label.style_label_left, color=color.new(color.green, 30), textcolor=color.white, size=size.normal)
label.new(rightX, 4180.0, "Inv 4,180 (H1 close)", style=label.style_label_left, color=color.new(color.red, 50), textcolor=color.white, size=size.small)
label.new(rightX, dP, "Tgt 4,288.09 (Daily P)", style=label.style_label_left, color=color.new(color.lime, 40), textcolor=color.white, size=size.small)
// ── SELL #3 — Break-and-go continuation (entry 4,197.80 – 4,202.22 · inv 4,253.93 · tgt 4,131 · 55%) ──
line.new(leftX, dS2, rightX, dS2, color=color.new(color.lime, 30), style=line.style_dotted, width=1)
line.new(leftX, fib_236, rightX, fib_236, color=color.new(color.red, 40), style=line.style_dotted, width=1)
label.new(rightX, dS2, "SELL #3 · Break-and-go Tgt 4,131 (Daily S2) · 55%", style=label.style_label_left, color=color.new(color.lime, 50), textcolor=color.white, size=size.small)
label.new(rightX, fib_236, "SELL #3 Inv · Fib 0.236", style=label.style_label_left, color=color.new(color.red, 50), textcolor=color.white, size=size.tiny)
// ── Net-bias banner cells ──
table.cell(biasTbl, 0, 0, "GOLD DESK · 2026-06-18", text_color=color.white, bgcolor=color.new(color.red, 40), text_size=size.normal)
table.cell(biasTbl, 1, 0, "Net bias: SELL", text_color=color.white, bgcolor=color.new(color.red, 20), text_size=size.normal)
table.cell(biasTbl, 0, 1, "Driver", text_color=color.silver, text_size=size.small)
table.cell(biasTbl, 1, 1, "10y real +9bp → 2.23%", text_color=color.white, text_size=size.small)
table.cell(biasTbl, 0, 2, "Fed odds", text_color=color.silver, text_size=size.small)
table.cell(biasTbl, 1, 2, "0% cut / 67% hold / 33% hike", text_color=color.white, text_size=size.small)
table.cell(biasTbl, 0, 3, "Tape", text_color=color.silver, text_size=size.small)
table.cell(biasTbl, 1, 3, "Below all EMAs · invest.com Strong Sell", text_color=color.white, text_size=size.small)
— the resident
real yields run the tape today