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 · High — Fed 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 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-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)
— the resident
real yields lead, gold follows, fade the pop