Let's talk
gold July 13, 2026 · 13 min read

Gold Desk — Real Yields Grind Higher, Hike-Odds Bite, CPI Ahead

Gold slipped to 4,063 as WTI's Iran-driven rally revived inflation angst and rate-hike bets — Fed-funds futures now assign 36% odds to a **hike** at the July 29 FOMC, with a cut fully priced out. The 10y real yield ticked up to 2.32%, and the daily chart is below all three key EMAs while investing.com's aggregate reads **Strong Sell**. Yet 1h and 4h RSIs are oversold and price is pinned against daily S1, so the tape is coiled, not one-way. Our lean into Tuesday's CPI + Warsh testimony is to **fade rallies into the 4,119–4,137 golden pocket**; bounces off the 4,024–4,046 shelf are counter-trend scalps only.


Gold slipped to 4,063 as WTI's Iran-driven rally revived inflation angst and rate-hike bets — Fed-funds futures now assign 36% odds to a hike at the July 29 FOMC, with a cut fully priced out. The 10y real yield ticked up to 2.32%, and the daily chart is below all three key EMAs while investing.com's aggregate reads Strong Sell. Yet 1h and 4h RSIs are oversold and price is pinned against daily S1, so the tape is coiled, not one-way. Our lean into Tuesday's CPI + Warsh testimony is to fade rallies into the 4,119–4,137 golden pocket; bounces off the 4,024–4,046 shelf are counter-trend scalps only.

The session

PAXG-referenced spot prints 4,062.96 into the London open, down 1.24% on the day and sitting almost exactly on daily S1 at 4,063.31. Range so far: 4,040.99 – 4,116.02, a full $75 spread on modestly elevated implied vol (GVZ 23.95). The catalyst is not gold-specific — WTI is up 3.6% to $73.98 after weekend Iran strikes and rekindled Strait of Hormuz tensions, and Investing.com's wire is explicit: "Gold slips as Iran strikes stoke inflation fears; CPI, Warsh in focus." Higher crude at this stage of the cycle doesn't fund a gold bid — it funds a rate-path bid, because the market reads it as sticky-inflation friction and pushes the terminal rate higher. That's exactly what fed-funds futures are showing (see macro section).

DXY is essentially unchanged at 100.98 (+0.02%), which is telling: gold's 1.24% drop is not being driven by dollar strength today, it's being driven by the rates leg. That matters for the trade — a DXY breakdown would not automatically rescue this tape.

Multi-timeframe read

TF State Key read
15m Basing RSI 52, MACD hist +1.9 rising, price above EMA20 (4,058.6). Short-term impulse being unwound.
1h Oversold RSI 34.7, MACD negative but curling up, price 11 pts under EMA20, 25 under EMA50. Stretched.
4h Bearish RSI 32.4, MACD hist −4.5 still falling, price 28 pts under EMA20. Sellers in control.
1d Trend down RSI 40.9, MACD histogram falling, close below EMA20 (4,116.4), EMA50 (4,226.9) AND EMA200 (4,418.8) — a −356 gap from the 200.

Where they agree: daily and 4h. This is a downtrend. Where they diverge: 1h and 15m are trying to build a base at daily S1. That divergence — oversold intraday inside a daily downtrend — is the classic setup for a mean-revert bounce that then gets sold. It is not a bottom signal on its own.

Investing.com's automated aggregate calls the daily "Strong Sell" (2 buy / 10 sell across MA5–MA200, with their RSI and MACD both flagged Sell). That matches our read — no divergence to flag.

Macro frame

The primary gold driver, the US 10y real yield (TIPS), is 2.32%, up 1 bp d/d (per the Treasury.gov real-yields feed, as of 07/10). Breakeven inflation is 2.24% (+1 bp), and the nominal 10y sits at 4.56% — so both legs of the nominal moved up, and the real leg is what gold prices. At 2.32%, real carry is punitive for a non-yielding asset and roughly 40 bp above where gold was comfortable at its highs.

The rates path explains the leg: Fed-funds futures imply 64% hold and 36% HIKE at the July 29 FOMC — zero cut probability. That is a sharply hawkish tilt for mid-2026, and it's coming with a background that a CMC Markets preview flags as "US CPI, Warsh testimony, Netflix earnings" — the newly-installed Fed Chair Warsh testifying the same afternoon as the CPI print is a two-catalyst stack that can genuinely reprice the curve. Goldman (via investingLive) expects core CPI to ease to 2.8% y/y in June, which happens to be exactly the ForexFactory consensus. A print at or below 2.8% cools the hike odds and gives gold room; a print above rekindles them.

DXY is running quietly firm — 100.98, up 1.03% on the month, above all daily EMAs, RSI 58 — but the intraday move is a rounding error. The 30-day DXY↔XAU return correlation of −0.66 confirms the inverse relationship is intact; today's decoupling (dollar flat, gold down) tells us rates are doing the work.

Cross-asset: VIX 16.4 (+9.2%) shows a risk-off tick, GVZ 23.95 shows the market IS pricing a meaningful gold move around CPI, and gold/silver at 69.2 with silver at $58.71 shows the precious complex is still in an "industrial/silver-leading" regime rather than a defensive-gold-leading regime — another argument against calling a bottom today. BTC at $63,758, essentially flat, means "digital gold" isn't rallying either, so this is not a broad hard-asset panic; it's specifically a real-yield event.

CFTC COT (07-Jul) shows managed money still net +194,246 (L 233,713 / S 39,467) — that is a lot of speculative length riding into a downtrend. It's a slow-motion overhang: not a same-day catalyst, but a reason rallies get sold and downside can extend if S1/S2 give way.

Two scenarios

Note: convictions below are the desk's honest qualitative confidence, not back-tested probabilities.

Sell setup

  • Trigger: Rally into 4,119.01 – 4,137.42 (the 50%–61.8% fib of last week's 4,197.02 high → 4,040.99 low swing, which overlaps daily R2 4,120.26 and R3 4,137.41) that prints a rejection wick on the 1h with RSI failing under 50.
  • Invalidation: 4h close above 4,150 (above the 78.6% fib at 4,163.6 and clear of the pocket).
  • Target: 4,046.16 (daily S2), stretch to 4,023.99 (weekly S1).
  • Conviction: 62%
  • Rationale: Real yields firm, DXY firm, hike odds skew, daily under all EMAs, and the golden pocket coincides with a stack of pivot resistance. Investing.com independently confirms "Strong Sell" on the daily aggregate. COT length still needs to bleed.

Buy setup

  • Trigger: Test of 4,046 – 4,024 (daily S2 / weekly S1) that reclaims 4,063 (daily S1) on a 1h close.
  • Invalidation: 4h close below 4,020.
  • Target: 4,100.36 (daily R1) into 4,110.50 (weekly pivot).
  • Conviction: 40%
  • Rationale: Counter-trend scalp. 1h/4h RSI already oversold, GVZ elevated implies a real move is coming and mean-reversion pays until it doesn't, and MM length is still supportive of a bounce, not a collapse. Trade small, cut fast — this fights the daily.

Levels worth marking

  • Overhead: 4,083.21 (daily P) · 4,100.36 (daily R1) · 4,110.50 (weekly P) · 4,119–4,137 golden pocket (fib 0.5–0.618 = daily R2/R3) · 4,163.6 (fib 0.786) · 4,199.86 (weekly R1) · 4,226.86 (daily EMA50 — the swing-fail level).
  • Below: 4,063.31 (daily S1, we are here) · 4,046.16 (daily S2) · 4,026.26 (daily S3) · 4,023.99 (weekly S1) · 3,934.63 (weekly S2 — only in play on a CPI shock).
  • Reference: EMA200 daily at 4,418.83 sits 356 points overhead; the daily trend is not close to a challenge.

Calendar / catalysts

From ForexFactory (pre-fetched):

  • Tue Jul 14 · 15:30 UTC · USD · High — Core CPI m/m (f 0.2% / p 0.2%), CPI m/m (f −0.1% / p 0.5%), Core CPI y/y (f 2.8% / p 2.9%), CPI y/y (f 3.8% / p 4.2%). Print of the week.
  • Tue Jul 14 · 17:00 UTC · USD · HighFed Chairman Warsh testifies. Two hours after CPI — expect intraday whip.
  • Tue Jul 14 · 11:45 & 23:00 UTC · GBP · High — BOE Gov Bailey speaks (twice).

Wednesday-onward catalysts are not in the brief for this run.

Sources cited

Treasury.gov (10y real yield), CFTC (COT 07-Jul), CME fed-funds futures (rate-move odds), investing.com (Strong Sell daily aggregate, gold wire — "Gold slips as Iran strikes stoke inflation fears"), investingLive (Goldman core CPI estimate), CMC Markets (week-ahead preview), Forex Factory (economic calendar + XAU/USD week preview), onewordnews sentiment aggregator (commodity avg +0.00).

Desk summary & bias

Gold is trapped between a hostile macro (real yield 2.32% and rising, Fed-funds pricing zero cuts and 36% hike odds into July 29, DXY firm, WTI-driven inflation impulse) and a stretched short-term tape (1h/4h RSI oversold at daily S1 4,063, GVZ elevated). The daily is decisively bearish — below EMA20/50/200 and independently flagged Strong Sell by investing.com — but the intraday odds favour a mean-revert bounce first. The single thing that matters next is Tuesday's CPI + Warsh double-header: a soft print cools hike odds and lets gold retake 4,110; a hot print (or hawkish Warsh) opens weekly S1 4,024 and below.

# Bias Setup Trigger Entry zone Invalidation Target Conviction Why
1 SELL Golden-pocket fade 1h rejection wick with RSI < 50 4,119 – 4,137 4,150 4,046 62% Fib 0.5–0.618 stacked with daily R2/R3; macro headwind; investing.com Strong Sell.
2 BUY Oversold scalp at demand 1h reclaim of 4,063 after tag of 4,024–4,046 4,024 – 4,046 4,020 4,100 40% 1h/4h RSI stretched at weekly S1; counter-trend, size accordingly.
3 SELL Trend continuation 1h close under 4,020 (weekly S1 break) 4,020 – 4,024 4,046 3,935 55% Only fires on CPI shock or Warsh hawk; opens weekly S2.

Net desk bias: SELL. The 10y real yield is grinding higher into a Fed meeting the market is pricing with zero cuts and material hike risk, DXY is firm, and the daily chart is under every meaningful moving average. The oversold intraday is a tactical argument for a bounce, not a directional one — and any such bounce runs directly into 4,119–4,137, which is the highest-quality supply zone on the chart. We weight the macro over the mean-reversion here because CPI + Warsh is a two-catalyst stack that can force the rates leg, and gold has no headline offset in view.

(not financial advice)

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

// ── EMAs ──
ema20 = ta.ema(close, 20)
ema50 = ta.ema(close, 50)
ema200 = ta.ema(close, 200)
plot(ema20, "EMA20", color=color.new(color.aqua, 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)

// ── Fibonacci swing: last-week high 4197.02 → session low 4040.99 ──
swingHi = 4197.02
swingLo = 4040.99
rng = swingHi - swingLo
fib236 = swingLo + rng * 0.236
fib382 = swingLo + rng * 0.382
fib500 = swingLo + rng * 0.500
fib618 = swingLo + rng * 0.618
fib786 = swingLo + rng * 0.786
hline(fib236, "fib 0.236", color=color.new(color.gray, 40), linestyle=hline.style_dashed)
hline(fib382, "fib 0.382", color=color.new(color.gray, 20), linestyle=hline.style_dashed)
hline(fib500, "fib 0.500", color=color.new(color.yellow, 0), linestyle=hline.style_dashed)
hline(fib618, "fib 0.618", color=color.new(color.yellow, 0), linestyle=hline.style_dashed)
hline(fib786, "fib 0.786", color=color.new(color.gray, 20), linestyle=hline.style_dashed)

// ── Golden pocket 0.5 → 0.618 (highest-probability reaction zone) ──
var box goldenPocket = na
if barstate.islast
    box.delete(goldenPocket)
    goldenPocket := box.new(bar_index - 200, fib618, bar_index + 20, fib500, bgcolor=color.new(color.yellow, 80), border_color=color.new(color.yellow, 40))
    label.new(bar_index + 20, (fib500 + fib618) / 2, "GOLDEN POCKET  4119–4137", style=label.style_label_left, color=color.new(color.yellow, 60), textcolor=color.white, size=size.small)

// ── Supply zone: weekly R1 stack into 4150 fib-fail ──
var box supply = na
if barstate.islast
    box.delete(supply)
    supply := box.new(bar_index - 200, 4199.86, bar_index + 20, 4150.0, bgcolor=color.new(color.red, 85), border_color=color.new(color.red, 40))
    label.new(bar_index + 20, 4175.0, "SUPPLY  4150–4200", style=label.style_label_left, color=color.new(color.red, 60), textcolor=color.white, size=size.small)

// ── Demand zone: daily S2/S3 into weekly S1 ──
var box demand = na
if barstate.islast
    box.delete(demand)
    demand := box.new(bar_index - 200, 4046.16, bar_index + 20, 4020.0, bgcolor=color.new(color.green, 85), border_color=color.new(color.green, 40))
    label.new(bar_index + 20, 4033.0, "DEMAND  4020–4046", style=label.style_label_left, color=color.new(color.green, 60), textcolor=color.white, size=size.small)

// ── Pivots that matter ──
hline(4083.21, "Daily P 4083", color=color.new(color.white, 50), linestyle=hline.style_dotted)
hline(4110.50, "Weekly P 4110", color=color.new(color.white, 20), linestyle=hline.style_solid)
hline(4063.31, "Daily S1 4063", color=color.new(color.gray, 30), linestyle=hline.style_dotted)
hline(4023.99, "Weekly S1 4024", color=color.new(color.lime, 30), linestyle=hline.style_solid)

// ── Trade 1: SELL bounce-fade into golden pocket ──
var box sellEntry = na
var line sellStop = na
var line sellTgt = na
if barstate.islast
    box.delete(sellEntry)
    line.delete(sellStop)
    line.delete(sellTgt)
    sellEntry := box.new(bar_index - 50, 4137.41, bar_index + 50, 4119.01, bgcolor=color.new(color.red, 70), border_color=color.new(color.red, 20))
    sellStop := line.new(bar_index - 50, 4150.0, bar_index + 50, 4150.0, color=color.new(color.red, 0), style=line.style_dashed, width=2)
    sellTgt := line.new(bar_index - 50, 4046.16, bar_index + 50, 4046.16, color=color.new(color.red, 0), style=line.style_dotted, width=2)
    label.new(bar_index + 50, 4128.0, "SELL fade  62%", style=label.style_label_left, color=color.new(color.red, 40), textcolor=color.white, size=size.small)
    label.new(bar_index + 50, 4150.0, "invalid 4150", style=label.style_label_left, color=color.new(color.red, 70), textcolor=color.white, size=size.tiny)
    label.new(bar_index + 50, 4046.16, "target 4046", style=label.style_label_left, color=color.new(color.red, 70), textcolor=color.white, size=size.tiny)

// ── Trade 2: BUY oversold scalp from demand ──
var box buyEntry = na
var line buyStop = na
var line buyTgt = na
if barstate.islast
    box.delete(buyEntry)
    line.delete(buyStop)
    line.delete(buyTgt)
    buyEntry := box.new(bar_index - 50, 4046.16, bar_index + 50, 4024.0, bgcolor=color.new(color.green, 70), border_color=color.new(color.green, 20))
    buyStop := line.new(bar_index - 50, 4020.0, bar_index + 50, 4020.0, color=color.new(color.green, 0), style=line.style_dashed, width=2)
    buyTgt := line.new(bar_index - 50, 4100.36, bar_index + 50, 4100.36, color=color.new(color.green, 0), style=line.style_dotted, width=2)
    label.new(bar_index + 50, 4035.0, "BUY scalp  40%", style=label.style_label_left, color=color.new(color.green, 40), textcolor=color.white, size=size.small)
    label.new(bar_index + 50, 4020.0, "invalid 4020", style=label.style_label_left, color=color.new(color.green, 70), textcolor=color.white, size=size.tiny)
    label.new(bar_index + 50, 4100.36, "target 4100", style=label.style_label_left, color=color.new(color.green, 70), textcolor=color.white, size=size.tiny)

// ── Net-bias banner (top-right table) ──
var table biasTbl = table.new(position.top_right, 2, 4, bgcolor=color.new(color.black, 20), border_color=color.new(color.white, 60), border_width=1)
if barstate.islast
    table.cell(biasTbl, 0, 0, "NET BIAS", text_color=color.white, bgcolor=color.new(color.gray, 40), text_size=size.small)
    table.cell(biasTbl, 1, 0, "SELL", text_color=color.white, bgcolor=color.new(color.red, 20), text_size=size.small)
    table.cell(biasTbl, 0, 1, "Real yld", text_color=color.silver, text_size=size.tiny)
    table.cell(biasTbl, 1, 1, "2.32%  +1bp", text_color=color.white, text_size=size.tiny)
    table.cell(biasTbl, 0, 2, "Fed odds", text_color=color.silver, text_size=size.tiny)
    table.cell(biasTbl, 1, 2, "hold 64 / hike 36", text_color=color.white, text_size=size.tiny)
    table.cell(biasTbl, 0, 3, "1D trend", text_color=color.silver, text_size=size.tiny)
    table.cell(biasTbl, 1, 3, "<EMA20/50/200", text_color=color.white, text_size=size.tiny)
{"bias": "SELL",
 "ideas": [
   {"bias": "SELL", "label": "Golden-pocket fade", "entry_low": 4119, "entry_high": 4137,
    "invalidation": 4150, "target": 4046, "conviction": 62},
   {"bias": "BUY", "label": "Oversold scalp at demand", "entry_low": 4024, "entry_high": 4046,
    "invalidation": 4020, "target": 4100, "conviction": 40},
   {"bias": "SELL", "label": "Trend continuation on S1 break", "entry_low": 4020, "entry_high": 4024,
    "invalidation": 4046, "target": 3935, "conviction": 55}
 ]}

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-07-13 — bias SELL", overlay=true, max_lines_count=300, max_labels_count=300, max_boxes_count=100)

// ── EMAs ──
ema20 = ta.ema(close, 20)
ema50 = ta.ema(close, 50)
ema200 = ta.ema(close, 200)
plot(ema20, "EMA20", color=color.new(color.aqua, 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)

// ── Fibonacci swing: last-week high 4197.02 → session low 4040.99 ──
swingHi = 4197.02
swingLo = 4040.99
rng = swingHi - swingLo
fib236 = swingLo + rng * 0.236
fib382 = swingLo + rng * 0.382
fib500 = swingLo + rng * 0.500
fib618 = swingLo + rng * 0.618
fib786 = swingLo + rng * 0.786
hline(fib236, "fib 0.236", color=color.new(color.gray, 40), linestyle=hline.style_dashed)
hline(fib382, "fib 0.382", color=color.new(color.gray, 20), linestyle=hline.style_dashed)
hline(fib500, "fib 0.500", color=color.new(color.yellow, 0), linestyle=hline.style_dashed)
hline(fib618, "fib 0.618", color=color.new(color.yellow, 0), linestyle=hline.style_dashed)
hline(fib786, "fib 0.786", color=color.new(color.gray, 20), linestyle=hline.style_dashed)

// ── Golden pocket 0.5 → 0.618 (highest-probability reaction zone) ──
var box goldenPocket = na
if barstate.islast
    box.delete(goldenPocket)
    goldenPocket := box.new(bar_index - 200, fib618, bar_index + 20, fib500, bgcolor=color.new(color.yellow, 80), border_color=color.new(color.yellow, 40))
    label.new(bar_index + 20, (fib500 + fib618) / 2, "GOLDEN POCKET  4119–4137", style=label.style_label_left, color=color.new(color.yellow, 60), textcolor=color.white, size=size.small)

// ── Supply zone: weekly R1 stack into 4150 fib-fail ──
var box supply = na
if barstate.islast
    box.delete(supply)
    supply := box.new(bar_index - 200, 4199.86, bar_index + 20, 4150.0, bgcolor=color.new(color.red, 85), border_color=color.new(color.red, 40))
    label.new(bar_index + 20, 4175.0, "SUPPLY  4150–4200", style=label.style_label_left, color=color.new(color.red, 60), textcolor=color.white, size=size.small)

// ── Demand zone: daily S2/S3 into weekly S1 ──
var box demand = na
if barstate.islast
    box.delete(demand)
    demand := box.new(bar_index - 200, 4046.16, bar_index + 20, 4020.0, bgcolor=color.new(color.green, 85), border_color=color.new(color.green, 40))
    label.new(bar_index + 20, 4033.0, "DEMAND  4020–4046", style=label.style_label_left, color=color.new(color.green, 60), textcolor=color.white, size=size.small)

// ── Pivots that matter ──
hline(4083.21, "Daily P 4083", color=color.new(color.white, 50), linestyle=hline.style_dotted)
hline(4110.50, "Weekly P 4110", color=color.new(color.white, 20), linestyle=hline.style_solid)
hline(4063.31, "Daily S1 4063", color=color.new(color.gray, 30), linestyle=hline.style_dotted)
hline(4023.99, "Weekly S1 4024", color=color.new(color.lime, 30), linestyle=hline.style_solid)

// ── Trade 1: SELL bounce-fade into golden pocket ──
var box sellEntry = na
var line sellStop = na
var line sellTgt = na
if barstate.islast
    box.delete(sellEntry)
    line.delete(sellStop)
    line.delete(sellTgt)
    sellEntry := box.new(bar_index - 50, 4137.41, bar_index + 50, 4119.01, bgcolor=color.new(color.red, 70), border_color=color.new(color.red, 20))
    sellStop := line.new(bar_index - 50, 4150.0, bar_index + 50, 4150.0, color=color.new(color.red, 0), style=line.style_dashed, width=2)
    sellTgt := line.new(bar_index - 50, 4046.16, bar_index + 50, 4046.16, color=color.new(color.red, 0), style=line.style_dotted, width=2)
    label.new(bar_index + 50, 4128.0, "SELL fade  62%", style=label.style_label_left, color=color.new(color.red, 40), textcolor=color.white, size=size.small)
    label.new(bar_index + 50, 4150.0, "invalid 4150", style=label.style_label_left, color=color.new(color.red, 70), textcolor=color.white, size=size.tiny)
    label.new(bar_index + 50, 4046.16, "target 4046", style=label.style_label_left, color=color.new(color.red, 70), textcolor=color.white, size=size.tiny)

// ── Trade 2: BUY oversold scalp from demand ──
var box buyEntry = na
var line buyStop = na
var line buyTgt = na
if barstate.islast
    box.delete(buyEntry)
    line.delete(buyStop)
    line.delete(buyTgt)
    buyEntry := box.new(bar_index - 50, 4046.16, bar_index + 50, 4024.0, bgcolor=color.new(color.green, 70), border_color=color.new(color.green, 20))
    buyStop := line.new(bar_index - 50, 4020.0, bar_index + 50, 4020.0, color=color.new(color.green, 0), style=line.style_dashed, width=2)
    buyTgt := line.new(bar_index - 50, 4100.36, bar_index + 50, 4100.36, color=color.new(color.green, 0), style=line.style_dotted, width=2)
    label.new(bar_index + 50, 4035.0, "BUY scalp  40%", style=label.style_label_left, color=color.new(color.green, 40), textcolor=color.white, size=size.small)
    label.new(bar_index + 50, 4020.0, "invalid 4020", style=label.style_label_left, color=color.new(color.green, 70), textcolor=color.white, size=size.tiny)
    label.new(bar_index + 50, 4100.36, "target 4100", style=label.style_label_left, color=color.new(color.green, 70), textcolor=color.white, size=size.tiny)

// ── Net-bias banner (top-right table) ──
var table biasTbl = table.new(position.top_right, 2, 4, bgcolor=color.new(color.black, 20), border_color=color.new(color.white, 60), border_width=1)
if barstate.islast
    table.cell(biasTbl, 0, 0, "NET BIAS", text_color=color.white, bgcolor=color.new(color.gray, 40), text_size=size.small)
    table.cell(biasTbl, 1, 0, "SELL", text_color=color.white, bgcolor=color.new(color.red, 20), text_size=size.small)
    table.cell(biasTbl, 0, 1, "Real yld", text_color=color.silver, text_size=size.tiny)
    table.cell(biasTbl, 1, 1, "2.32%  +1bp", text_color=color.white, text_size=size.tiny)
    table.cell(biasTbl, 0, 2, "Fed odds", text_color=color.silver, text_size=size.tiny)
    table.cell(biasTbl, 1, 2, "hold 64 / hike 36", text_color=color.white, text_size=size.tiny)
    table.cell(biasTbl, 0, 3, "1D trend", text_color=color.silver, text_size=size.tiny)
    table.cell(biasTbl, 1, 3, "<EMA20/50/200", 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

real yields lead, gold follows, fade the pop