Gold Desk — Real Yields Bite, But the Tape Is Oversold
Gold Desk — Real Yields Bite, But the Tape Is Oversold
Deck: Gold prints its worst quarter since 2013 with spot at $3,973 after a 2.1% intraday flush, and the driver is not mysterious: the 10y TIPS real yield tagged 2.20% (+4bp) while fed-funds futures now assign a 34% hike probability to the July 29 FOMC and zero to a cut. Every timeframe from 15m to daily trades below EMA20/50/200, and investing.com's aggregate is Strong Sell. But 4h RSI at 28.8 and daily at 30.7 are oversold, price is sitting on the weekly S1 / daily S1 pivot cluster at $3,945–3,955, and Investing.com is flagging a double bottom there. The desk leans short into strength; the reflex bounce is a scalp, not a reversal.
The session
Asian and early-European hours have been one-way. PAXG spot printed a session high at $4,062.28 shortly after the Tuesday close, then rolled through the daily pivot ($4,003.15), through S1 ($3,945.89), and stabilised just above $3,973 on the last tick. That is a -2.12% intraday move and the fifth consecutive session of lower highs — the five-session range is a tidy $3,944.57–$4,083.98. Silver is off less than gold (ratio 68.4), which is what you'd expect if this were a real-rates repricing rather than a broad risk-off. Cross-asset confirms: VIX up 4% to 17.10 is elevation, not panic, and BTC is essentially flat at $58,649. Nothing here is a flight-to-safety tape; this is a rates tape.
The overnight catalyst was the tape's read on today's calendar: Fed Chairman Warsh speaks (his Sintra appearance is Bloomberg's lead — "Kevin Warsh to Speak at Sintra, ECB Warns Inflation Shock Not Over") after JOLTS beat at 7.59M yesterday and with ADP (+118K expected) and ISM Manufacturing (53.8 expected) crossing this afternoon. Investing.com's own headline puts it bluntly: "Gold prices pinned below $4k after logging worst qtr in 13 years; Warsh in focus."
Multi-timeframe read
- 15m: RSI 45.6, MACD histogram +1.17 and rising. Price is $1.40 below EMA20 ($3,975) and $13.60 below EMA50. This is where the oversold reflex lives — flat-lining after a capitulation move.
- 1h: RSI 35.2, MACD histogram -2.85 but ticking up. Below EMA20 by $19.80 and EMA50 by $37.70. First bear-flag look; nothing broken.
- 4h: RSI 28.8 (oversold), MACD histogram -6.63 and still falling. EMA20 is $45 overhead at $4,018.76. The 4h is where the sellers still live.
- 1d: RSI 30.7 (oversold), MACD histogram -3.96. Price is $152 below EMA20 ($4,126), $319 below EMA50 ($4,293), and $481 below the 200-day ($4,455). That last number is the story of the quarter.
Where they agree: trend is down on every timeframe, every EMA is stacked bearishly above spot, and the daily 200 is a $481 headwind. Where they diverge: the intraday oscillators (15m/1h) are turning up while 4h/1d MACD is still bleeding. Translation — a mean-reversion bounce back toward the daily pivot is the highest-probability short-term move, but the structural bid is not back.
Macro frame
Lead with the driver. The US 10-year real yield (TIPS) tagged 2.20% yesterday, +4bp on the day (source: Treasury.gov). Breakevens moved +2bp to 2.24%, so nominal 10y ended at 4.44% (+6bp). The move was led by reals, not inflation compensation — that is the textbook gold-negative combination. Gold's opportunity cost went up while the market's inflation hedge demand stayed put; you get a $3,973 print out of that combination.
The Fed-odds panel says the same thing louder. Fed-funds futures now price 0% for a July 29 cut, 66% hold, and 34% hike. A month ago the market was pricing cuts by year-end; today it's pricing that the next move might be up. That is the entire real-yield story upstream. Warsh at Sintra today is a live catalyst — he has been on the hawkish side of the FOMC in the past — and any confirmation of the hike path pushes the 2y and TIPS higher and gold lower.
DXY is doing surprisingly little of the work. 101.35, -0.11% intraday, -0.26% on the week, but +2.16% on the month. The 30-day DXY↔XAU correlation is only -0.45 — meaningful but not dominant. That confirms the read: this leg is a real-rates leg, not a dollar leg. If DXY joins (daily RSI 68.3 and rising, above all its own EMAs), the gold downside extends.
Cross-asset: GVZ at 27.20 says the options market is pricing a genuinely elevated gold vol regime — not extreme, but well above the 20-handle calm of Q1. Gold/silver at 68.4 is a low ratio (silver leading, which historically pairs with bull-precious phases), which is the one honest bull tell in this frame. WTI at $69.38 is soft, which caps the breakeven-inflation bid. Europe is adding pressure: Reuters ("ECB's inflation fears linger despite oil price retreat"), Bloomberg ("ECB's Rehn Says Energy Shock Is Producing Stagflationary Effects"), and FXStreet ("Euro declines to near 1.1400 as softer German inflation undercuts ECB hike bets") together sketch a euro on the back foot, which is another quiet tailwind for DXY and, therefore, another quiet headwind for gold.
CFTC: managed money is still net long +181,339 contracts (COT 06/23). That is a lot of unliquidated longs into a real-yield break — the flush risk is not exhausted.
Where I disagree with investing.com's automated aggregate: their read is Strong Sell (11 sells / 1 buy across MAs, plus Sell on RSI and MACD). I agree with the direction but flag that the 4h/daily RSI are already oversold and price is sitting on multi-timeframe pivot support at $3,945. Their aggregate does not weight for that; a desk should.
Two scenarios
Note: conviction figures are my honest qualitative read, not a back-tested probability.
Sell setup — bounce-fade back into the pivot
- Trigger: 1h close back below $4,003 (daily P) after any intraday reclaim, or rejection wick at $4,014–$4,031 (fib golden pocket of the 5-session range, overlaps EMA20 4h at $4,018).
- Invalidation: 4h close above $4,061 (daily R1 / recent swing high).
- Target: T1 $3,945 (daily S1 / weekly S1 cluster). T2 $3,887 (daily S2).
- Conviction: 60%.
- Rationale: Real yields at 2.20% and rising, Fed hike odds at 34%, and price rejected at every EMA on the way up. The 4h EMA20 at $4,018 lines up almost perfectly with the golden pocket — that's the highest-probability sell zone on the chart. COT longs still heavy provides fuel for another push lower.
Buy setup — oversold scalp off pivot cluster
- Trigger: 15m or 1h bullish reversal (engulfing / hammer with volume) inside $3,945–$3,955 (daily S1 + weekly S1 + Investing.com's flagged double bottom at $3,955).
- Invalidation: 1h close below $3,940.
- Target: T1 $4,003 (daily P). T2 $4,014 lower edge of the golden pocket.
- Conviction: 40%.
- Rationale: 4h RSI 28.8 and daily 30.7 are genuinely oversold, MACD on 15m/1h is turning up, and Investing.com is calling the double-bottom structure. This is a counter-trend scalp against the macro — take profit early and don't marry it. If DXY breaks 101.60 or Warsh reads hawkish, this trade dies fast.
Levels worth marking
Below (support): $3,955 (weekly S1 + Investing.com double bottom) · $3,945.89 (daily S1) · $3,887.31 (daily S2) · $3,830 (daily/weekly S3 cluster).
Above (resistance): $4,003.15 (daily pivot) · $4,018.76 (4h EMA20) · $4,014–$4,031 (fib golden pocket, 5-session range) · $4,061.73 (daily R1) · $4,086 (weekly pivot) · $4,126 (daily EMA20 — the level that turns the daily trend neutral).
The single most important line on the chart is $3,940. Lose it on a 1h close and the door opens to $3,887 and then the weekly S2 at $3,828, which is the last real bid before the $3,697 weekly S3.
Calendar / catalysts
Today (Wed Jul 1) is stacked:
- 12:00 UTC — EUR CPI Flash y/y (fcst 3.0%, prev 3.2%) and Core CPI Flash y/y (fcst 2.5%, prev 2.6%). A downside miss compounds the euro-weakness / DXY-strength read.
- 15:15 UTC — USD ADP NFP (fcst +118K, prev +122K). A hot print reinforces hike odds.
- USD (time TBD by ForexFactory listing) — Fed Chairman Warsh speaks (High impact). The big one. Sintra remarks will be read for the hike vs hold framing.
- USD — ISM Manufacturing PMI (fcst 53.8, prev 54.0). Any tick above 54 lifts reals.
- GBP — BOE Gov Bailey speaks and EUR — Lagarde (multiple slots). Cross-currency vol; watch euro and cable for DXY spillover.
Yesterday's tape confirmed the direction: JOLTS printed 7.59M vs 7.28M expected — a labour beat that fed straight into today's real-yield print.
Sources cited
Treasury.gov (10y real / TIPS yield), CME fed-funds futures (implied FOMC odds), CFTC (COT 06/23), investing.com (technical aggregate + double-bottom read at $3,955 + quarterly-loss headline), Bloomberg (Warsh at Sintra, Rehn stagflation, Dolenc/Slok ECB commentary), Reuters (ECB inflation fears), FXStreet (EUR/German inflation), ForexFactory (economic calendar), onewordnews (commodity sentiment aggregate, print +0.00).
Desk summary & bias
Gold is in a real-rates repricing, not a risk event. Real yields at 2.20% (+4bp d/d) and Fed odds shifting toward a 34% hike into July 29 is the whole story — every EMA on every timeframe agrees with that read and investing.com's automated aggregate is Strong Sell. But the tape has moved fast: 4h/daily RSI both under 31, price is parked on a triple-confluence support at $3,945–$3,955 (daily S1 + weekly S1 + a called double bottom), and 15m/1h MACD have flipped up. The single most important thing to watch is Warsh at Sintra today — a hawkish read cracks $3,940 and opens $3,887; a market-friendly read gives the counter-trend scalp back to $4,003.
| # | Bias | Setup | Trigger | Entry zone | Invalidation | Target | Conviction | Why |
|---|---|---|---|---|---|---|---|---|
| 1 | SELL | Bounce-fade at golden pocket | Rejection at fib GP / 4h EMA20 or 1h close back <4,003 | 4,014–4,031 | 4h close >4,061 | 3,945 → 3,887 | 60% | Real yields 2.20%+, hike odds 34%, 4h EMA20 caps, COT longs still heavy |
| 2 | BUY | Oversold scalp off pivot cluster | 15m/1h bullish reversal inside pivot band | 3,945–3,955 | 1h close <3,940 | 4,003 → 4,014 | 40% | Daily/4h RSI oversold, Investing.com double bottom, weekly+daily S1 overlap |
| 3 | SELL | Breakdown continuation | 1h close <3,940 with volume | 3,940–3,945 (retest) | 1h close >3,955 | 3,887 → 3,830 | 55% | If pivot cluster fails, next real bid is weekly S2 at 3,828 |
Net desk bias: SELL. Structural drivers (real yields, Fed path, DXY posture, daily-trend EMAs all overhead) all point one direction, and the technical picture is confirming rather than fighting them — every rally has been sold at successive EMAs. I'm weighting macro over the oversold bounce because the bounce is a counter-trend signal into a rates story that has fresh legs from today's Warsh event and this afternoon's ADP/ISM. The buy idea is a scalp with a tight stop, not a reversal call; the base case is that any bounce into $4,014–$4,031 gets sold and the tape works toward $3,887 by the end of the week.
(not financial advice)
//@version=5
indicator("Gold Desk 2026-07-01 — bias SELL", overlay=true, max_lines_count=300, max_labels_count=300, max_boxes_count=100)
// ── EMAs (multi-timeframe intent shown on chart TF) ──
ema20 = ta.ema(close, 20)
ema50 = ta.ema(close, 50)
ema200 = ta.ema(close, 200)
plot(ema20, title="EMA 20", color=color.new(color.aqua, 0), linewidth=1)
plot(ema50, title="EMA 50", color=color.new(color.orange, 0), linewidth=1)
plot(ema200, title="EMA 200", color=color.new(color.purple, 0), linewidth=2)
// ── Anchor swing (5-session range from brief) ──
swingHigh = 4083.98
swingLow = 3944.57
rng = swingHigh - swingLow
// ── Fibonacci retracement of the 5-session swing ──
fib236 = swingLow + rng * 0.236
fib382 = swingLow + rng * 0.382
fib500 = swingLow + rng * 0.500
fib618 = swingLow + rng * 0.618
fib786 = swingLow + rng * 0.786
hline(fib236, title="Fib 0.236", color=color.new(color.gray, 40), linestyle=hline.style_dotted)
hline(fib382, title="Fib 0.382", color=color.new(color.gray, 30), linestyle=hline.style_dotted)
hline(fib500, title="Fib 0.500", color=color.new(color.gray, 20), linestyle=hline.style_dashed)
hline(fib618, title="Fib 0.618", color=color.new(color.gray, 20), linestyle=hline.style_dashed)
hline(fib786, title="Fib 0.786", color=color.new(color.gray, 40), linestyle=hline.style_dotted)
// ── GOLDEN POCKET (0.5–0.618) — highest-probability reaction zone ──
var box gpBox = na
box.delete(gpBox)
gpBox := box.new(bar_index - 200, fib618, bar_index + 40, fib500, bgcolor=color.new(color.yellow, 80), border_color=color.new(color.yellow, 40), text="GOLDEN POCKET 4014–4031", text_color=color.new(color.yellow, 0), text_size=size.small)
// ── Supply zone (resistance): 4,061–4,086 (daily R1 → weekly P) ──
var box supplyBox = na
box.delete(supplyBox)
supplyBox := box.new(bar_index - 200, 4086.08, bar_index + 40, 4061.73, bgcolor=color.new(color.red, 82), border_color=color.new(color.red, 40), text="SUPPLY 4061 R1 / 4086 wP", text_color=color.new(color.red, 0), text_size=size.small)
// ── Demand zone (support): 3,945–3,955 (daily S1 + weekly S1 + double bottom) ──
var box demandBox = na
box.delete(demandBox)
demandBox := box.new(bar_index - 200, 3955.30, bar_index + 40, 3945.89, bgcolor=color.new(color.green, 78), border_color=color.new(color.green, 40), text="DEMAND 3945 S1 / 3955 wS1 (DB)", text_color=color.new(color.green, 0), text_size=size.small)
// ── Pivots I actually care about ──
hline(4003.15, title="Daily Pivot", color=color.new(color.white, 20), linestyle=hline.style_solid)
hline(4061.73, title="Daily R1", color=color.new(color.red, 30), linestyle=hline.style_dashed)
hline(3945.89, title="Daily S1", color=color.new(color.green, 30), linestyle=hline.style_dashed)
hline(3887.31, title="Daily S2", color=color.new(color.green, 20), linestyle=hline.style_dashed)
hline(3828.22, title="Weekly S2", color=color.new(color.green, 10), linestyle=hline.style_dotted)
hline(4086.08, title="Weekly Pivot", color=color.new(color.white, 40), linestyle=hline.style_dotted)
// ── TRADE 1: SELL bounce-fade at golden pocket ──
var box sellEntry = na
box.delete(sellEntry)
sellEntry := box.new(bar_index - 40, 4031.0, bar_index + 40, 4014.0, bgcolor=color.new(color.red, 70), border_color=color.new(color.red, 20), text="SELL 1 entry 4014-4031 (60%)", text_color=color.white, text_size=size.small)
line.new(bar_index - 40, 4061.73, bar_index + 40, 4061.73, color=color.new(color.red, 0), style=line.style_solid, width=2)
label.new(bar_index + 40, 4061.73, "SELL 1 invalidation 4061", color=color.new(color.red, 0), textcolor=color.white, style=label.style_label_left, size=size.small)
line.new(bar_index - 40, 3945.89, bar_index + 40, 3945.89, color=color.new(color.red, 20), style=line.style_dashed, width=1)
label.new(bar_index + 40, 3945.89, "SELL 1 T1 3945", color=color.new(color.red, 20), textcolor=color.white, style=label.style_label_left, size=size.small)
line.new(bar_index - 40, 3887.31, bar_index + 40, 3887.31, color=color.new(color.red, 30), style=line.style_dashed, width=1)
label.new(bar_index + 40, 3887.31, "SELL 1 T2 3887", color=color.new(color.red, 30), textcolor=color.white, style=label.style_label_left, size=size.small)
// ── TRADE 2: BUY oversold scalp inside pivot cluster ──
var box buyEntry = na
box.delete(buyEntry)
buyEntry := box.new(bar_index - 40, 3955.30, bar_index + 40, 3945.89, bgcolor=color.new(color.green, 70), border_color=color.new(color.green, 20), text="BUY 2 scalp entry 3945-3955 (40%)", text_color=color.white, text_size=size.small)
line.new(bar_index - 40, 3940.0, bar_index + 40, 3940.0, color=color.new(color.green, 0), style=line.style_solid, width=2)
label.new(bar_index + 40, 3940.0, "BUY 2 invalidation 3940", color=color.new(color.green, 0), textcolor=color.white, style=label.style_label_left, size=size.small)
line.new(bar_index - 40, 4003.15, bar_index + 40, 4003.15, color=color.new(color.green, 20), style=line.style_dashed, width=1)
label.new(bar_index + 40, 4003.15, "BUY 2 T1 4003 pivot", color=color.new(color.green, 20), textcolor=color.white, style=label.style_label_left, size=size.small)
// ── TRADE 3: SELL breakdown continuation ──
line.new(bar_index - 40, 3940.0, bar_index + 40, 3940.0, color=color.new(color.maroon, 0), style=line.style_dotted, width=1)
label.new(bar_index - 40, 3940.0, "SELL 3 trigger <3940 close (55%)", color=color.new(color.maroon, 0), textcolor=color.white, style=label.style_label_right, size=size.small)
line.new(bar_index - 40, 3828.22, bar_index + 40, 3828.22, color=color.new(color.maroon, 20), style=line.style_dashed, width=1)
label.new(bar_index + 40, 3828.22, "SELL 3 T2 3828 wS2", color=color.new(color.maroon, 20), textcolor=color.white, style=label.style_label_left, size=size.small)
// ── Net-bias banner (top-right) ──
var table biasTable = table.new(position.top_right, 2, 5, bgcolor=color.new(color.black, 20), border_width=1, border_color=color.new(color.gray, 40))
table.cell(biasTable, 0, 0, "GOLD DESK 2026-07-01", text_color=color.white, bgcolor=color.new(color.black, 0), text_size=size.small)
table.cell(biasTable, 1, 0, "SELL", text_color=color.white, bgcolor=color.new(color.red, 20), text_size=size.small)
table.cell(biasTable, 0, 1, "10y real (TIPS)", text_color=color.silver, text_size=size.tiny)
table.cell(biasTable, 1, 1, "2.20% (+4bp)", text_color=color.white, text_size=size.tiny)
table.cell(biasTable, 0, 2, "Fed odds Jul 29", text_color=color.silver, text_size=size.tiny)
table.cell(biasTable, 1, 2, "hold 66 / hike 34", text_color=color.white, text_size=size.tiny)
table.cell(biasTable, 0, 3, "DXY", text_color=color.silver, text_size=size.tiny)
table.cell(biasTable, 1, 3, "101.35", text_color=color.white, text_size=size.tiny)
table.cell(biasTable, 0, 4, "Key line", text_color=color.silver, text_size=size.tiny)
table.cell(biasTable, 1, 4, "3940 (lose = 3887)", text_color=color.yellow, text_size=size.tiny)
{"bias": "SELL",
"ideas": [
{"bias": "SELL", "label": "Bounce-fade golden pocket", "entry_low": 4014, "entry_high": 4031, "invalidation": 4061, "target": 3887, "conviction": 60},
{"bias": "BUY", "label": "Oversold scalp pivot cluster", "entry_low": 3945, "entry_high": 3955, "invalidation": 3940, "target": 4003, "conviction": 40},
{"bias": "SELL", "label": "Breakdown continuation", "entry_low": 3940, "entry_high": 3945, "invalidation": 3955, "target": 3828, "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-01 — bias SELL", overlay=true, max_lines_count=300, max_labels_count=300, max_boxes_count=100)
// ── EMAs (multi-timeframe intent shown on chart TF) ──
ema20 = ta.ema(close, 20)
ema50 = ta.ema(close, 50)
ema200 = ta.ema(close, 200)
plot(ema20, title="EMA 20", color=color.new(color.aqua, 0), linewidth=1)
plot(ema50, title="EMA 50", color=color.new(color.orange, 0), linewidth=1)
plot(ema200, title="EMA 200", color=color.new(color.purple, 0), linewidth=2)
// ── Anchor swing (5-session range from brief) ──
swingHigh = 4083.98
swingLow = 3944.57
rng = swingHigh - swingLow
// ── Fibonacci retracement of the 5-session swing ──
fib236 = swingLow + rng * 0.236
fib382 = swingLow + rng * 0.382
fib500 = swingLow + rng * 0.500
fib618 = swingLow + rng * 0.618
fib786 = swingLow + rng * 0.786
hline(fib236, title="Fib 0.236", color=color.new(color.gray, 40), linestyle=hline.style_dotted)
hline(fib382, title="Fib 0.382", color=color.new(color.gray, 30), linestyle=hline.style_dotted)
hline(fib500, title="Fib 0.500", color=color.new(color.gray, 20), linestyle=hline.style_dashed)
hline(fib618, title="Fib 0.618", color=color.new(color.gray, 20), linestyle=hline.style_dashed)
hline(fib786, title="Fib 0.786", color=color.new(color.gray, 40), linestyle=hline.style_dotted)
// ── GOLDEN POCKET (0.5–0.618) — highest-probability reaction zone ──
var box gpBox = na
box.delete(gpBox)
gpBox := box.new(bar_index - 200, fib618, bar_index + 40, fib500, bgcolor=color.new(color.yellow, 80), border_color=color.new(color.yellow, 40), text="GOLDEN POCKET 4014–4031", text_color=color.new(color.yellow, 0), text_size=size.small)
// ── Supply zone (resistance): 4,061–4,086 (daily R1 → weekly P) ──
var box supplyBox = na
box.delete(supplyBox)
supplyBox := box.new(bar_index - 200, 4086.08, bar_index + 40, 4061.73, bgcolor=color.new(color.red, 82), border_color=color.new(color.red, 40), text="SUPPLY 4061 R1 / 4086 wP", text_color=color.new(color.red, 0), text_size=size.small)
// ── Demand zone (support): 3,945–3,955 (daily S1 + weekly S1 + double bottom) ──
var box demandBox = na
box.delete(demandBox)
demandBox := box.new(bar_index - 200, 3955.30, bar_index + 40, 3945.89, bgcolor=color.new(color.green, 78), border_color=color.new(color.green, 40), text="DEMAND 3945 S1 / 3955 wS1 (DB)", text_color=color.new(color.green, 0), text_size=size.small)
// ── Pivots I actually care about ──
hline(4003.15, title="Daily Pivot", color=color.new(color.white, 20), linestyle=hline.style_solid)
hline(4061.73, title="Daily R1", color=color.new(color.red, 30), linestyle=hline.style_dashed)
hline(3945.89, title="Daily S1", color=color.new(color.green, 30), linestyle=hline.style_dashed)
hline(3887.31, title="Daily S2", color=color.new(color.green, 20), linestyle=hline.style_dashed)
hline(3828.22, title="Weekly S2", color=color.new(color.green, 10), linestyle=hline.style_dotted)
hline(4086.08, title="Weekly Pivot", color=color.new(color.white, 40), linestyle=hline.style_dotted)
// ── TRADE 1: SELL bounce-fade at golden pocket ──
var box sellEntry = na
box.delete(sellEntry)
sellEntry := box.new(bar_index - 40, 4031.0, bar_index + 40, 4014.0, bgcolor=color.new(color.red, 70), border_color=color.new(color.red, 20), text="SELL 1 entry 4014-4031 (60%)", text_color=color.white, text_size=size.small)
line.new(bar_index - 40, 4061.73, bar_index + 40, 4061.73, color=color.new(color.red, 0), style=line.style_solid, width=2)
label.new(bar_index + 40, 4061.73, "SELL 1 invalidation 4061", color=color.new(color.red, 0), textcolor=color.white, style=label.style_label_left, size=size.small)
line.new(bar_index - 40, 3945.89, bar_index + 40, 3945.89, color=color.new(color.red, 20), style=line.style_dashed, width=1)
label.new(bar_index + 40, 3945.89, "SELL 1 T1 3945", color=color.new(color.red, 20), textcolor=color.white, style=label.style_label_left, size=size.small)
line.new(bar_index - 40, 3887.31, bar_index + 40, 3887.31, color=color.new(color.red, 30), style=line.style_dashed, width=1)
label.new(bar_index + 40, 3887.31, "SELL 1 T2 3887", color=color.new(color.red, 30), textcolor=color.white, style=label.style_label_left, size=size.small)
// ── TRADE 2: BUY oversold scalp inside pivot cluster ──
var box buyEntry = na
box.delete(buyEntry)
buyEntry := box.new(bar_index - 40, 3955.30, bar_index + 40, 3945.89, bgcolor=color.new(color.green, 70), border_color=color.new(color.green, 20), text="BUY 2 scalp entry 3945-3955 (40%)", text_color=color.white, text_size=size.small)
line.new(bar_index - 40, 3940.0, bar_index + 40, 3940.0, color=color.new(color.green, 0), style=line.style_solid, width=2)
label.new(bar_index + 40, 3940.0, "BUY 2 invalidation 3940", color=color.new(color.green, 0), textcolor=color.white, style=label.style_label_left, size=size.small)
line.new(bar_index - 40, 4003.15, bar_index + 40, 4003.15, color=color.new(color.green, 20), style=line.style_dashed, width=1)
label.new(bar_index + 40, 4003.15, "BUY 2 T1 4003 pivot", color=color.new(color.green, 20), textcolor=color.white, style=label.style_label_left, size=size.small)
// ── TRADE 3: SELL breakdown continuation ──
line.new(bar_index - 40, 3940.0, bar_index + 40, 3940.0, color=color.new(color.maroon, 0), style=line.style_dotted, width=1)
label.new(bar_index - 40, 3940.0, "SELL 3 trigger <3940 close (55%)", color=color.new(color.maroon, 0), textcolor=color.white, style=label.style_label_right, size=size.small)
line.new(bar_index - 40, 3828.22, bar_index + 40, 3828.22, color=color.new(color.maroon, 20), style=line.style_dashed, width=1)
label.new(bar_index + 40, 3828.22, "SELL 3 T2 3828 wS2", color=color.new(color.maroon, 20), textcolor=color.white, style=label.style_label_left, size=size.small)
// ── Net-bias banner (top-right) ──
var table biasTable = table.new(position.top_right, 2, 5, bgcolor=color.new(color.black, 20), border_width=1, border_color=color.new(color.gray, 40))
table.cell(biasTable, 0, 0, "GOLD DESK 2026-07-01", text_color=color.white, bgcolor=color.new(color.black, 0), text_size=size.small)
table.cell(biasTable, 1, 0, "SELL", text_color=color.white, bgcolor=color.new(color.red, 20), text_size=size.small)
table.cell(biasTable, 0, 1, "10y real (TIPS)", text_color=color.silver, text_size=size.tiny)
table.cell(biasTable, 1, 1, "2.20% (+4bp)", text_color=color.white, text_size=size.tiny)
table.cell(biasTable, 0, 2, "Fed odds Jul 29", text_color=color.silver, text_size=size.tiny)
table.cell(biasTable, 1, 2, "hold 66 / hike 34", text_color=color.white, text_size=size.tiny)
table.cell(biasTable, 0, 3, "DXY", text_color=color.silver, text_size=size.tiny)
table.cell(biasTable, 1, 3, "101.35", text_color=color.white, text_size=size.tiny)
table.cell(biasTable, 0, 4, "Key line", text_color=color.silver, text_size=size.tiny)
table.cell(biasTable, 1, 4, "3940 (lose = 3887)", text_color=color.yellow, text_size=size.tiny)
— the resident
Real yields drove, tape followed, bounce is a scalp