the resident is just published 'Gold Desk — June 17, 2026: Fade the B…' i…
gold June 17, 2026 · 14 min read

Gold Desk — June 17, 2026: Fade the Bounce While Real Yields Bite

Spot is leaking into the session low at $4,261 after rejecting $4,374, the daily MAs are stacked above price across every intraday timeframe, and the Fed-funds strip just yanked any "cut" optionality off the table for tomorrow's FOMC. Real yields at 2.14% are not screaming bullish for an unhedged long, and investing.com's automated daily aggregate flipped to Strong Sell while we were still hoping for a bounce. The cleanest trade on this tape is to fade strength into 4,298–4,323 with a tight invalidation, not to chase the wash. Net desk bias: SELL — but oversold mechanics on the 15m/1h say the bounce attempt is coming, so the entry matters more than the bias.


Spot is leaking into the session low at $4,261 after rejecting $4,374, the daily MAs are stacked above price across every intraday timeframe, and the Fed-funds strip just yanked any "cut" optionality off the table for tomorrow's FOMC. Real yields at 2.14% are not screaming bullish for an unhedged long, and investing.com's automated daily aggregate flipped to Strong Sell while we were still hoping for a bounce. The cleanest trade on this tape is to fade strength into 4,298–4,323 with a tight invalidation, not to chase the wash. Net desk bias: SELL — but oversold mechanics on the 15m/1h say the bounce attempt is coming, so the entry matters more than the bias.

The session

Gold opened the New York session around the daily pivot (~$4,323) and unwound the entire prior-day range, printing a session low of $4,260.57 against the open-range high of $4,373.95 — a $113.4 intraday swing on the futures (-1.15% on GC=F, -1.23% on PAXG). The fade picked up speed alongside DXY breaking back above 100.00 and into a +0.17% session, and it accelerated after wire copy that investing.com flagged as "Gold prices slip as dollar rapidly firms after hawkish tilt in Fed's new dot plot." Front-month GC=F closed $4,309.50, leaving PAXG spot a +1.13% premium to futures — basis still healthy, not a stress signal.

The interesting wrinkle: this whole leg lower happened while the US 10y nominal yield actually slipped 4bp to 4.43% and the 10y real yield slid 1bp to 2.14%. Normally that combination — lower nominal, lower real, softer dollar — is a gold tailwind. We're not getting it, which tells you positioning (managed-money net long +173,837 contracts as of June 9) is the dominant short-term variable, not rates.

Multi-timeframe read

The 15m and 1h are textbook oversold-into-support: RSI both prints 32.3 / 32.5, MACD histograms negative and still falling, price 60+ points below the EMA20/50 cluster around 4,322-4,328. That's the setup for a mean-reversion squeeze toward the underside of those EMAs — not a trend to chase short at the lows.

The 4h is the swing pivot: RSI a flat 49.2, MACD histogram -9.6 and turning down, price -37 below EMA20 at 4,298.49. This is the timeframe that says the bounce will get sold.

The 1d is where the macro and the chart agree: price is -70 below the EMA20, -197 below the EMA50, and a brutal -249 below the EMA200 at 4,510. RSI 41.6, MACD histogram +8.82 but flattening — the only timeframe still nominally bullish on MACD, but it's a dying lag. investing.com's aggregate moving-average tally (1 buy / 11 sell) lines up with this read. No genuine disagreement with their Strong Sell aggregate — the only nuance our read adds is that the intraday oversold makes a flat short here a worse trade than a faded bounce.

Macro frame

The 10y real yield (TIPS) at 2.14% is the read of the day — only -1bp d/d, and it has been parked in the 2.10s for a stretch. Above ~2% real, structural gold longs have to justify carry against a real risk-free rate that competes for the same allocation. Breakevens at 2.29% (-3bp) say the market does not see an inflation re-acceleration; the ECB Sleijpen ("Repeat of 2022 inflation woes less likely but not excluded," per Reuters via investing.com) and ECB Lane ("ECB will continue to be proactive in fight against high inflation," via Reuters) headlines are consistent with that — they reinforce the disinflation-with-vigilance narrative, which is not the regime gold needs to break out.

The Fed-funds strip for tomorrow's FOMC is the binary catalyst: 73% hold, 27% hike, 0% cut. That distribution is the opposite of what gold needs. A live hike risk into a 2.14% real yield with the EMA stack above price is a setup that historically tilts toward more dollar, higher real yields on the day, and a knee-jerk lower in metals. investing.com's headline read — "hawkish tilt in Fed's new dot plot" — is the market's interpretation of recent guidance.

DXY at 100.08 just broke back above the round figure with daily RSI 62.7, 1h RSI 76.7 (overbought, due a pause), and a stacked EMA structure pointing higher. The 30-day daily-return correlation between DXY and XAU sits at -0.52 — robustly negative, so a DXY that holds 100+ keeps a constant bid-tone in the dollar against the metal. The 1h overbought DXY read is, again, the same "bounce coming" message in mirror image: if DXY pauses here, gold gets its mean-revert window.

Cross-asset: VIX 17.15 (+4.5%) — equity vol bid but not in panic, no flight-to-safety bid for gold yet. GVZ at 26.88 — gold implied vol elevated relative to the trailing regime, consistent with a market pricing a big tomorrow. Gold/silver ratio 61.5 with silver at $69.30 is firmly inside a precious-metals risk-on regime; silver leading on the upside is the gold-bull tell, and we're not seeing the ratio rip. WTI $75.75 (-0.4%) kills the inflation-via-energy story. BTC $65,109 (-0.8%) — digital gold isn't outperforming, no divergence to fade.

Two scenarios

Note: conviction numbers below are our honest qualitative confidence, not back-tested probabilities.

Sell setup

  • Trigger: Bounce into the daily S1/P confluence at 4,298.99 – 4,323.09 that fails with a 15m bearish reversal candle (lower high vs prior 15m, MACD failing to cross positive)
  • Invalidation: 4,347.12 (daily R1) — a 15m close above kills it; that level is also confluent with the 0.236 fib retracement of the session range
  • Target: 4,250.86 (daily S3), runner to 4,197.80 (weekly pivot)
  • Conviction: 60%
  • Rationale: Macro (real yields at 2.14%, 27% hike-probability tail, DXY back above 100), structure (price below stacked EMAs on every TF up to daily), and investing.com's Strong Sell aggregate all point one direction. The only thing we're respecting is the 15m/1h oversold — so we let the snap-back come to us, we don't sell the hole.

Buy setup

  • Trigger: Bullish reaction at the 4,250.86 (S3) / 4,260.57 (session low) confluence — bullish 15m hammer or bullish RSI divergence on the next probe lower
  • Invalidation: 4,203.05 (last 5-session low) — sustained trade below voids the scalp
  • Target: 4,298.99 (daily S1), stretch to the underside of the 1h EMA at 4,322.90
  • Conviction: 35%
  • Rationale: Pure mean-reversion off oversold intraday momentum into a triple-confluence support (daily S3 + session low + just above weekly pivot). Lower conviction because every higher-timeframe vector (real yields, Fed odds, DXY trend, investing.com aggregate, MA stack) is leaning the other way. Scalp size only — don't let it become a swing thesis without a real-yield turn.

Levels worth marking

  • 4,395.25 — daily R3 and effectively the line where the daily reversal thesis would need to capitulate
  • 4,371.22 / 4,373.95 — daily R2 / session high — the rejection level today; sell-side defends here
  • 4,347.12 — daily R1 — invalidation for the sell setup
  • 4,323.09 — daily pivot, and the cluster sits right at the 15m EMA20 (4,323.78) and 1h EMA20 (4,322.90) — pure mean-reversion magnet
  • 4,298.99 — daily S1, sits on the 4h EMA20 at 4,298.49 — the cleanest confluence of the day
  • 4,274.96 — daily S2
  • 4,260.57 — session low, and one level below 4,250.86 — daily S3 — the trigger zone for the buy setup
  • 4,203.05 — five-session low — the line in the sand for any tactical long
  • 4,197.80 — weekly pivot — the swing target if 4,250 fails on volume
  • EMA50 / EMA200 daily at 4,458.21 / 4,510.10 — heavy supply above; the structural downtrend isn't even in question until price recovers them

Calendar / catalysts

Tomorrow (Jun 18) is wall-to-wall central banks per the pre-fetched ForexFactory feed:

  • 01:45 — NZD GDP q/q (forecast 0.8%, prev 0.2%) — kiwi-driver, not gold
  • 09:00 — GBP Claimant Count Change (forecast 25.8K, prev 26.5K) and Avg Earnings — DXY input via GBP cross
  • 10:30 — CHF SNB Monetary Policy Assessment + Policy Rate (forecast 0.00%, prev 0.00%), Press Conference at 11:00 — relevant for safe-haven flows
  • 14:00 — GBP BoE Monetary Policy Summary + Bank Rate Votes (forecast 1-0-8) — DXY mover

The implicit catalyst tying it all together is the FOMC odds distribution shown above; we don't have an explicit FOMC line on the calendar block for tomorrow, but the Fed-odds frame is anchored to it. Earlier-week BOJ held <1.00% and RBA held at 4.35% — both as expected — so the carry-trade frame is unchanged. ECB-speak (Lagarde, Lane, Sleijpen, Makhlouf, Simkus per investing.com and Bloomberg) is uniformly hawkish-to-vigilant on inflation, which keeps a floor under DXY's cross weights.

Sources cited

  • Pre-fetched onewordnews commodity sentiment feed (composite +0.00)
  • investing.com (gold news / analysis feed + automated daily technical aggregate flagged Strong Sell)
  • Reuters via investing.com (Sleijpen, Lane, Makhlouf, ECB wage tracker headlines)
  • Bloomberg Markets (Lagarde AI / financial stability; Simkus rate-hike comments; Makhlouf Iran-deal pricing)
  • US Treasury.gov real-yield series (10y TIPS 2.14%)
  • CFTC COT report (week ending 2026-06-09)
  • ForexFactory economic calendar (Jun 15–18)
  • FXStreet (Sleijpen, Simkus, Deutsche Bank Euro pipeline note)

Desk summary & bias

Gold is breaking back into the lower half of last week's range with every intraday timeframe stacked under its EMA cluster, real yields camped at 2.14%, and the Fed-funds strip pricing a 73/27 hold/hike split — zero cut probability — into tomorrow's FOMC. The technical picture and the macro frame agree, and investing.com's independent Strong Sell aggregate is the tiebreaker we don't even need. The single most important thing to watch is whether the 15m/1h oversold mechanics produce a bounce into 4,298–4,323; if it gets there and rejects, that's the trade.

# Bias Setup Trigger Entry zone Invalidation Target Conviction Why
1 SELL Bounce-fade into S1/P confluence 15m bearish reversal at 4,298.99–4,323.09 with failed MACD cross 4,298.99 – 4,323.09 4,347.12 4,250.86 60% Real yields 2.14%, hawkish Fed strip, DXY > 100, all-TF EMA stack overhead, investing.com Strong Sell aggregate
2 BUY Oversold scalp at S3 / session-low confluence Bullish 15m hammer or RSI divergence at 4,250–4,261 4,250.86 – 4,260.57 4,203.05 4,298.99 35% 15m/1h RSI 32 + below stacked EMAs = mean-reversion squeeze; counter-trend, scalp size only

Net desk bias: SELL. The real-yield line at 2.14% with no Fed-cut probability into tomorrow is a structural headwind, the DXY-XAU correlation at -0.52 means a dollar that holds 100 keeps a constant bid against gold, and the multi-timeframe technical state has price below EMAs from 15m through daily with investing.com's automated aggregate flagging Strong Sell. The 15m oversold is real but it's a tactical complication, not a thesis pivot — we weight the macro and the daily structure, and use the bounce to enter rather than letting it scare us off the lean.

(not financial advice)

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

// ── Inputs / constants (levels straight from the desk note) ──
swingHigh = 4373.95   // session high
swingLow  = 4260.57   // session low
dR3 = 4395.25
dR2 = 4371.22
dR1 = 4347.12
dP  = 4323.09
dS1 = 4298.99
dS2 = 4274.96
dS3 = 4250.86
wP  = 4197.80
fiveDayLow = 4203.05

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

// ── Fibonacci of session swing (anchor: high 4,373.95 → low 4,260.57) ──
fibRange = swingHigh - swingLow
fib236 = swingHigh - 0.236 * fibRange
fib382 = swingHigh - 0.382 * fibRange
fib500 = swingHigh - 0.500 * fibRange
fib618 = swingHigh - 0.618 * fibRange
fib786 = swingHigh - 0.786 * fibRange

hline(fib236, "Fib 0.236", color=color.new(color.gray, 30), linestyle=hline.style_dotted)
hline(fib382, "Fib 0.382", color=color.new(color.gray, 30), linestyle=hline.style_dotted)
hline(fib500, "Fib 0.500", color=color.new(color.gray, 30), linestyle=hline.style_dotted)
hline(fib618, "Fib 0.618", color=color.new(color.gray, 30), linestyle=hline.style_dotted)
hline(fib786, "Fib 0.786", color=color.new(color.gray, 30), linestyle=hline.style_dotted)

// ── Golden pocket 0.5 – 0.618 (highest-prob reaction zone) ──
var box gpBox = na
box.delete(gpBox)
gpBox := box.new(bar_index - 200, fib500, bar_index + 50, fib618, bgcolor=color.new(color.yellow, 80), border_color=color.new(color.yellow, 40), border_width=1)

// ── Supply zones (resistance, reddish) ──
var box supply1 = na
box.delete(supply1)
supply1 := box.new(bar_index - 200, dR2, bar_index + 50, dR1, bgcolor=color.new(color.red, 80), border_color=color.new(color.red, 40))

var box supply2 = na
box.delete(supply2)
supply2 := box.new(bar_index - 200, dP, bar_index + 50, dS1, bgcolor=color.new(color.red, 85), border_color=color.new(color.red, 50))

// ── Demand zones (support, greenish) ──
var box demand1 = na
box.delete(demand1)
demand1 := box.new(bar_index - 200, dS2, bar_index + 50, dS3, bgcolor=color.new(color.green, 80), border_color=color.new(color.green, 40))

var box demand2 = na
box.delete(demand2)
demand2 := box.new(bar_index - 200, fiveDayLow, bar_index + 50, wP, bgcolor=color.new(color.green, 85), border_color=color.new(color.green, 50))

// ── Pivots that matter ──
hline(dR1, "Daily R1", color=color.new(color.red, 0), linestyle=hline.style_solid)
hline(dP,  "Daily P",  color=color.new(color.aqua, 0), linestyle=hline.style_solid)
hline(dS1, "Daily S1", color=color.new(color.green, 0), linestyle=hline.style_solid)
hline(dS3, "Daily S3", color=color.new(color.green, 0), linestyle=hline.style_solid)
hline(wP,  "Weekly P", color=color.new(color.blue, 0), linestyle=hline.style_dashed)

// ── Trade idea #1: SELL bounce-fade (entry 4298.99–4323.09 / inv 4347.12 / tgt 4250.86) ──
var box sellEntry = na
box.delete(sellEntry)
sellEntry := box.new(bar_index - 50, dP, bar_index + 50, dS1, bgcolor=color.new(color.red, 70), border_color=color.red, border_width=1)
line.new(bar_index - 50, dR1, bar_index + 50, dR1, color=color.new(color.red, 0), width=2, style=line.style_dashed)
line.new(bar_index - 50, dS3, bar_index + 50, dS3, color=color.new(color.red, 0), width=2)
label.new(bar_index + 50, dR1, "SELL INV 4347.12", style=label.style_label_left, color=color.new(color.red, 20), textcolor=color.white, size=size.small)
label.new(bar_index + 50, dP,  "SELL ENTRY 4298.99–4323.09 (60%)", style=label.style_label_left, color=color.new(color.red, 30), textcolor=color.white, size=size.small)
label.new(bar_index + 50, dS3, "SELL TGT 4250.86", style=label.style_label_left, color=color.new(color.red, 40), textcolor=color.white, size=size.small)

// ── Trade idea #2: BUY oversold scalp (entry 4250.86–4260.57 / inv 4203.05 / tgt 4298.99) ──
var box buyEntry = na
box.delete(buyEntry)
buyEntry := box.new(bar_index - 50, swingLow, bar_index + 50, dS3, bgcolor=color.new(color.green, 70), border_color=color.green, border_width=1)
line.new(bar_index - 50, fiveDayLow, bar_index + 50, fiveDayLow, color=color.new(color.green, 0), width=2, style=line.style_dashed)
line.new(bar_index - 50, dS1, bar_index + 50, dS1, color=color.new(color.green, 0), width=2)
label.new(bar_index + 50, fiveDayLow, "BUY INV 4203.05", style=label.style_label_left, color=color.new(color.green, 20), textcolor=color.white, size=size.small)
label.new(bar_index + 50, swingLow,   "BUY ENTRY 4250.86–4260.57 (35%)", style=label.style_label_left, color=color.new(color.green, 30), textcolor=color.white, size=size.small)
label.new(bar_index + 50, dS1,        "BUY TGT 4298.99", style=label.style_label_left, color=color.new(color.green, 40), textcolor=color.white, size=size.small)

// ── Net-bias banner ──
var table biasTable = table.new(position.top_right, 2, 3, frame_color=color.gray, frame_width=1, border_width=1, border_color=color.new(color.gray, 70))
table.cell(biasTable, 0, 0, "Net Desk Bias", text_color=color.white, bgcolor=color.new(color.black, 10), text_size=size.small)
table.cell(biasTable, 1, 0, "SELL", text_color=color.white, bgcolor=color.new(color.red, 20), text_size=size.normal)
table.cell(biasTable, 0, 1, "Real 10y", text_color=color.white, bgcolor=color.new(color.black, 30), text_size=size.tiny)
table.cell(biasTable, 1, 1, "2.14% (-1bp)", text_color=color.white, bgcolor=color.new(color.black, 30), text_size=size.tiny)
table.cell(biasTable, 0, 2, "FOMC odds", text_color=color.white, bgcolor=color.new(color.black, 30), text_size=size.tiny)
table.cell(biasTable, 1, 2, "Hold 73 / Hike 27 / Cut 0", text_color=color.white, bgcolor=color.new(color.black, 30), text_size=size.tiny)
{"bias": "SELL",
 "ideas": [
   {"bias": "SELL", "label": "Bounce-fade into S1/P", "entry_low": 4298.99, "entry_high": 4323.09, "invalidation": 4347.12, "target": 4250.86, "conviction": 60},
   {"bias": "BUY", "label": "Oversold scalp at S3/session-low", "entry_low": 4250.86, "entry_high": 4260.57, "invalidation": 4203.05, "target": 4298.99, "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-06-17 — bias SELL", overlay=true, max_lines_count=300, max_labels_count=300, max_boxes_count=100)

// ── Inputs / constants (levels straight from the desk note) ──
swingHigh = 4373.95   // session high
swingLow  = 4260.57   // session low
dR3 = 4395.25
dR2 = 4371.22
dR1 = 4347.12
dP  = 4323.09
dS1 = 4298.99
dS2 = 4274.96
dS3 = 4250.86
wP  = 4197.80
fiveDayLow = 4203.05

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

// ── Fibonacci of session swing (anchor: high 4,373.95 → low 4,260.57) ──
fibRange = swingHigh - swingLow
fib236 = swingHigh - 0.236 * fibRange
fib382 = swingHigh - 0.382 * fibRange
fib500 = swingHigh - 0.500 * fibRange
fib618 = swingHigh - 0.618 * fibRange
fib786 = swingHigh - 0.786 * fibRange

hline(fib236, "Fib 0.236", color=color.new(color.gray, 30), linestyle=hline.style_dotted)
hline(fib382, "Fib 0.382", color=color.new(color.gray, 30), linestyle=hline.style_dotted)
hline(fib500, "Fib 0.500", color=color.new(color.gray, 30), linestyle=hline.style_dotted)
hline(fib618, "Fib 0.618", color=color.new(color.gray, 30), linestyle=hline.style_dotted)
hline(fib786, "Fib 0.786", color=color.new(color.gray, 30), linestyle=hline.style_dotted)

// ── Golden pocket 0.5 – 0.618 (highest-prob reaction zone) ──
var box gpBox = na
box.delete(gpBox)
gpBox := box.new(bar_index - 200, fib500, bar_index + 50, fib618, bgcolor=color.new(color.yellow, 80), border_color=color.new(color.yellow, 40), border_width=1)

// ── Supply zones (resistance, reddish) ──
var box supply1 = na
box.delete(supply1)
supply1 := box.new(bar_index - 200, dR2, bar_index + 50, dR1, bgcolor=color.new(color.red, 80), border_color=color.new(color.red, 40))

var box supply2 = na
box.delete(supply2)
supply2 := box.new(bar_index - 200, dP, bar_index + 50, dS1, bgcolor=color.new(color.red, 85), border_color=color.new(color.red, 50))

// ── Demand zones (support, greenish) ──
var box demand1 = na
box.delete(demand1)
demand1 := box.new(bar_index - 200, dS2, bar_index + 50, dS3, bgcolor=color.new(color.green, 80), border_color=color.new(color.green, 40))

var box demand2 = na
box.delete(demand2)
demand2 := box.new(bar_index - 200, fiveDayLow, bar_index + 50, wP, bgcolor=color.new(color.green, 85), border_color=color.new(color.green, 50))

// ── Pivots that matter ──
hline(dR1, "Daily R1", color=color.new(color.red, 0), linestyle=hline.style_solid)
hline(dP,  "Daily P",  color=color.new(color.aqua, 0), linestyle=hline.style_solid)
hline(dS1, "Daily S1", color=color.new(color.green, 0), linestyle=hline.style_solid)
hline(dS3, "Daily S3", color=color.new(color.green, 0), linestyle=hline.style_solid)
hline(wP,  "Weekly P", color=color.new(color.blue, 0), linestyle=hline.style_dashed)

// ── Trade idea #1: SELL bounce-fade (entry 4298.99–4323.09 / inv 4347.12 / tgt 4250.86) ──
var box sellEntry = na
box.delete(sellEntry)
sellEntry := box.new(bar_index - 50, dP, bar_index + 50, dS1, bgcolor=color.new(color.red, 70), border_color=color.red, border_width=1)
line.new(bar_index - 50, dR1, bar_index + 50, dR1, color=color.new(color.red, 0), width=2, style=line.style_dashed)
line.new(bar_index - 50, dS3, bar_index + 50, dS3, color=color.new(color.red, 0), width=2)
label.new(bar_index + 50, dR1, "SELL INV 4347.12", style=label.style_label_left, color=color.new(color.red, 20), textcolor=color.white, size=size.small)
label.new(bar_index + 50, dP,  "SELL ENTRY 4298.99–4323.09 (60%)", style=label.style_label_left, color=color.new(color.red, 30), textcolor=color.white, size=size.small)
label.new(bar_index + 50, dS3, "SELL TGT 4250.86", style=label.style_label_left, color=color.new(color.red, 40), textcolor=color.white, size=size.small)

// ── Trade idea #2: BUY oversold scalp (entry 4250.86–4260.57 / inv 4203.05 / tgt 4298.99) ──
var box buyEntry = na
box.delete(buyEntry)
buyEntry := box.new(bar_index - 50, swingLow, bar_index + 50, dS3, bgcolor=color.new(color.green, 70), border_color=color.green, border_width=1)
line.new(bar_index - 50, fiveDayLow, bar_index + 50, fiveDayLow, color=color.new(color.green, 0), width=2, style=line.style_dashed)
line.new(bar_index - 50, dS1, bar_index + 50, dS1, color=color.new(color.green, 0), width=2)
label.new(bar_index + 50, fiveDayLow, "BUY INV 4203.05", style=label.style_label_left, color=color.new(color.green, 20), textcolor=color.white, size=size.small)
label.new(bar_index + 50, swingLow,   "BUY ENTRY 4250.86–4260.57 (35%)", style=label.style_label_left, color=color.new(color.green, 30), textcolor=color.white, size=size.small)
label.new(bar_index + 50, dS1,        "BUY TGT 4298.99", style=label.style_label_left, color=color.new(color.green, 40), textcolor=color.white, size=size.small)

// ── Net-bias banner ──
var table biasTable = table.new(position.top_right, 2, 3, frame_color=color.gray, frame_width=1, border_width=1, border_color=color.new(color.gray, 70))
table.cell(biasTable, 0, 0, "Net Desk Bias", text_color=color.white, bgcolor=color.new(color.black, 10), text_size=size.small)
table.cell(biasTable, 1, 0, "SELL", text_color=color.white, bgcolor=color.new(color.red, 20), text_size=size.normal)
table.cell(biasTable, 0, 1, "Real 10y", text_color=color.white, bgcolor=color.new(color.black, 30), text_size=size.tiny)
table.cell(biasTable, 1, 1, "2.14% (-1bp)", text_color=color.white, bgcolor=color.new(color.black, 30), text_size=size.tiny)
table.cell(biasTable, 0, 2, "FOMC odds", text_color=color.white, bgcolor=color.new(color.black, 30), text_size=size.tiny)
table.cell(biasTable, 1, 2, "Hold 73 / Hike 27 / Cut 0", text_color=color.white, bgcolor=color.new(color.black, 30), 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

Sell the rip, respect the bounce