Gold Desk 2026-06-30 — Pinned to Pivot, Trend Still Heavy
Spot prints 4,029 with the tape sitting almost exactly on the daily pivot at 4,028 — the calm at the centre of a steep down-move that has gold trading $431 below its 1-day EMA200 and skirting an 8-month low. Real yields ticked 2 bp lower on the day, a marginal tailwind, but fed-funds futures price zero cuts at July's FOMC with a 32% probability assigned to a *hike* — a hawkish skew that keeps the real-yield path elevated and the bid on dollars firm. Investing.com's daily aggregate flips to **Strong Sell**, lining up with our own read; the only thing arguing the other way is daily RSI at 35, which says don't chase shorts blindly. Plan of attack: fade strength into the 4,058–4,086 supply shelf (daily R1 + weekly pivot + the 0.382–0.5 fib of last week's range), and scalp an oversold flush off 3,955–3,984. **Net desk bias: SELL.**
Spot prints 4,029 with the tape sitting almost exactly on the daily pivot at 4,028 — the calm at the centre of a steep down-move that has gold trading $431 below its 1-day EMA200 and skirting an 8-month low. Real yields ticked 2 bp lower on the day, a marginal tailwind, but fed-funds futures price zero cuts at July's FOMC with a 32% probability assigned to a hike — a hawkish skew that keeps the real-yield path elevated and the bid on dollars firm. Investing.com's daily aggregate flips to Strong Sell, lining up with our own read; the only thing arguing the other way is daily RSI at 35, which says don't chase shorts blindly. Plan of attack: fade strength into the 4,058–4,086 supply shelf (daily R1 + weekly pivot + the 0.382–0.5 fib of last week's range), and scalp an oversold flush off 3,955–3,984. Net desk bias: SELL.
The session
PAXG/USDT trades 4,029.59, off 1.11% on the day and -4.47% for the month, having printed a 3,944.57–4,081.64 session range. The tape is now pinned to the daily pivot (4,028.06), and that pin is the technically interesting feature of the morning — bulls and bears are paying the same toll at the same level. The triggering tape action is the same theme investing.com has been carrying for two sessions ("Gold slides to near 8-mth low, set for June losses as rate hike jitters weigh"), reinforced overnight by a parade of ECB speakers across Bloomberg, FXStreet and FT — Lagarde, Lane, Wunsch, Kazaks, Sleijpen — all leaning toward "no rush" on rate hikes as French CPI prints back at the ECB target. A dovish ECB chorus weakens the euro by extension; DXY firms (+0.29% intraday to 101.30) and the 30-day XAU↔DXY correlation at -0.44 does the rest of the math.
GC=F front-month sits at 4,042.30, a +0.32% premium to PAXG — normal contango/basis, no dislocation to read into.
Multi-timeframe read
The four timeframes tell a coherent story of a market correcting hard inside a still-intact daily downtrend.
- 15m: RSI 69.5 with falling MACD histogram (+5.19, rolling). Price is above both EMA20 (+23.6) and EMA50 (+27.0). This is the short-term bounce that got us back to the pivot — and it's already overbought.
- 1h: RSI 55.2, MACD histogram +5.75 and rising. Price above EMA20 (+18.1) but just below EMA50 (-1.5). The EMA50 here at 4,031 is the line of control — the bounce is alive only as long as we can claw above it.
- 4h: RSI 47.8, MACD histogram negative (-5.07) but rising. Price below EMA20 (-11.6). The 4-hour is the inflection chart — bears in control, but momentum is unwinding from a deeply oversold state.
- 1d: RSI 35.0 (approaching oversold), MACD histogram -1.37 and rising. Price below all three daily EMAs by sizeable margins: -115 vs EMA20 (4,144.63), -277 vs EMA50 (4,307.07), -431 vs EMA200 (4,461.13). The daily is unambiguously bearish.
Where they agree: this is a counter-trend bounce inside a daily downtrend. Where they diverge: the lower timeframes are running hot enough that a fresh local high (toward 4,058–4,086) before the next leg lower is the higher-probability path. Investing.com's MA aggregate says 8-buy/4-sell across MA5–MA200 — a tactical agreement with us on the short term; their Strong Sell aggregate is the daily structural read. We agree with both.
Macro frame
The single number that matters: US 10-year real yield 2.16%, -2 bp on the day. That marginal compression in real rates is the only thing arguing for a bid in gold today; the absolute level remains punitive. Breakeven inflation lifted +2 bp to 2.22%, leaving the 4.38% nominal flat — the entire move was breakeven up, real down, which is mildly stagflationary in flavour and ambiguous for the metal.
The Fed-funds futures path makes the headwind explicit: 0% odds of a cut, 68% hold, 32% hike at the Jul 29 FOMC, with the implied target range tilting toward 3.75–4.00%. A market pricing a coin-flip-adjacent probability of a hike is a market that struggles to compress real yields meaningfully — and gold needs that compression. Until the curve shifts toward at least a partial-cut path, rallies are bounces, not bottoms.
DXY at 101.30 (+0.29% intraday, +2.41% on the month) is in a clean daily uptrend (RSI 67.7, price above all daily EMAs). The ECB chorus is the proximate accelerant — Bloomberg's read on Wunsch ("Case for Another Rate Hike Not as Strong Now"), FT on Lagarde ("does not need to fight inflation with the same force as in 2022-23"), and FXStreet on Sleijpen all push the same way. EUR softer → DXY firmer → gold capped via the -0.44 correlation.
Cross-asset reads its own confirmation:
- VIX 17.52: equity risk benign, no flight-to-safety bid.
- GVZ 27.70: gold's own implied vol is elevated — options market is pricing a move, just not committing to a direction.
- Gold/silver 68: silver outperforming, a regime where the precious complex is being driven by industrial/risk pulses rather than a pure monetary debasement bid.
- WTI $70.34 (-0.6%): weakening crude undercuts the inflation-hedge story.
- BTC $59,439 (-1.2%): "digital gold" leaking too — no narrative tailwind from the alternative-store-of-value bucket.
CFTC COT (2026-06-23) shows managed money still net long +181,339, having absorbed the recent drawdown without capitulating. That's a risk to the bear thesis — there's positioning fuel to feed a forced unwind if 3,955–3,910 gives way. Commercials remain heavily short (-205,404 net), which is structurally what you'd expect at these levels.
Two scenarios
Conviction figures below are honest qualitative reads, not back-tested probabilities.
Sell setup
- Trigger: rally into the 4,057.67 (daily R1) – 4,086.08 (weekly pivot) supply shelf and rejection on the 15m/1h. Note this zone overlaps the 0.382–0.5 fib retracement of last week's 3,959.00 → 4,216.86 swing (computed: 4,057.5 / 4,087.9 — the golden pocket, see chart).
- Invalidation: 4-hour close above 4,144.63 (daily EMA20). A reclaim of the 1d EMA20 invalidates the bounce-fade thesis and opens 4,213 (weekly R1).
- Target: 3,984.12 (daily S1), runner to 3,955.30 (weekly S1).
- Conviction: 60%.
- Rationale: daily structure is bearish, investing.com's daily aggregate is Strong Sell, the macro path (32% hike odds, firm DXY, real yields at 2.16%) caps rallies, and the proposed entry zone is a triple-confluence (daily R1 + weekly pivot + fib golden pocket). The lower-timeframe overbought condition gives the entry trigger.
Buy setup
- Trigger: flush into 3,955.30 (weekly S1) – 3,984.12 (daily S1) with a bullish reversal candle on 1h and 4h MACD histogram inflecting positive.
- Invalidation: hourly close below 3,910.57 (daily S3). Below that, weekly S2 at 3,828 is the next shelf.
- Target: 4,057.67 (daily R1); trail above the daily pivot 4,028.
- Conviction: 40%.
- Rationale: daily RSI 35, COT net-long positioning has not capitulated, real yields ticked lower on the day, and the daily 4-hour MACD histogram is already rising from negative territory. This is a counter-trend scalp, not a swing — sized accordingly.
Levels worth marking
Above (resistance): 4,057.67 (daily R1) · 4,086.08 (weekly P, ≈ fib 0.5) · 4,101.61 (daily R2) · 4,118 (fib 0.618 — top of golden pocket) · 4,144.63 (1d EMA20, structural invalidation) · 4,162 (fib 0.786) · 4,213.16 (weekly R1).
Below (support): 4,028.06 (daily pivot — current pin) · 3,984.12 (daily S1) · 3,954.51 / 3,955.30 (daily S2 ≈ weekly S1, the cluster that matters) · 3,910.57 (daily S3) · 3,828.22 (weekly S2).
Calendar / catalysts
From the pre-fetched ForexFactory feed for today's US session:
- 15:30 UTC · CAD GDP m/m (high impact; forecast +0.4%, prev -0.1%) — USD/CAD pulse, second-order for gold.
- 17:00 UTC · USD CB Consumer Confidence (forecast 94.4, prev 93.1) — direct DXY input.
- TBA · USD JOLTS Job Openings (forecast 7.28M, prev 7.62M) — a downside surprise here softens the Fed-hike skew and is the cleanest macro catalyst for a gold lift.
- All day · German Prelim CPI m/m (forecast 0.0%, prev -0.2%) — feeds the ECB-dovish narrative if it disappoints; EUR-negative, DXY-positive, gold-negative.
A negative JOLTS print + soft CB Consumer Confidence would be the cleanest combination to invalidate the sell setup intraday. Both prints firm in line or above forecast and the SELL trigger gets stronger.
Sources cited
- onewordnews commodity sentiment + headline scrape (composite +0.00, ECB-dovish bias).
- investing.com technical aggregate (Strong Sell daily) and gold news feed ("Gold slides to near 8-mth low…", "Gold tests $4,113 resistance amid bearish trend").
- Bloomberg Markets on ECB Wunsch, Lane, Kazaks; Financial Times on Lagarde; FXStreet on Sleijpen and the euro-area inflation picture.
- Treasury.gov real-yield series (TIPS 10y 2.16%, -2 bp d/d) and 10y nominal/breakeven decomposition.
- CFTC COMEX Gold COT (managed-money net +181,339 as of 2026-06-23).
- ForexFactory economic calendar (Jun 30 prints listed above).
- CME FedWatch-equivalent fed-funds futures (0/68/32 cut/hold/hike).
Desk summary & bias
Gold is pinned to the daily pivot at 4,028 inside a clean daily downtrend, with the macro engine doing the heavy lifting against it: real yields at 2.16% are punitive in absolute terms, the Fed-funds curve assigns a 32% probability to a July hike, and a chorus of ECB doves on Bloomberg / FT / FXStreet is firming DXY through the -0.44 XAU correlation. The single most important watch into the US session is JOLTS — a meaningful miss is the only readily available macro catalyst that can flip the real-yield path and rescue the metal short-term. The technical state agrees with the macro: investing.com's daily aggregate is Strong Sell, daily MACD/EMA structure is unambiguously bearish, and the lower-timeframe bounce is already overbought into the 4,058–4,086 confluence shelf.
| # | Bias | Setup | Trigger | Entry zone | Invalidation | Target | Conviction | Why |
|---|---|---|---|---|---|---|---|---|
| 1 | SELL | Bounce-fade @ R1/weekly-P shelf | LTF rejection in supply | 4,057.67 – 4,086.08 | 4h close > 4,144.63 (1d EMA20) | 3,984.12 → 3,955.30 | 60% | Daily Strong Sell, hawkish FOMC odds, firm DXY; triple-confluence supply (daily R1 + weekly P + fib golden pocket) |
| 2 | BUY | Oversold scalp @ S1/weekly-S1 cluster | Reversal candle + 1h MACD flip | 3,955.30 – 3,984.12 | 1h close < 3,910.57 (daily S3) | 4,057.67 | 40% | Daily RSI 35, real yields -2 bp, COT longs not capitulated; counter-trend, size small |
| 3 | SELL | Swing fade @ daily EMA20 | Tag of 1d EMA20 + daily rejection | 4,140 – 4,145 | Daily close > 4,213.16 (weekly R1) | 3,955.30 → 3,828.22 | 50% | If JOLTS miss drives a bigger bounce, the 1d EMA20 is the structural line where the daily downtrend has to reassert |
Net desk bias: SELL. Real yields at 2.16% with a Fed curve pricing a 32% hike-risk and zero cuts is a macro frame that simply does not let gold bottom durably; ECB-dovish flow firms DXY and compounds the headwind via the -0.44 correlation. The technical state confirms — price 431 below the 1d EMA200, investing.com's daily aggregate Strong Sell. We weight the macro and the daily over the oversold 1d RSI, because RSI 35 is not RSI 25 and the COT longs haven't yet been forced out. The buy idea exists only as a tactical counter-trend scalp; the structural trade is to sell rallies into 4,058–4,086 and again into 4,144 if we get there.
(not financial advice)
//@version=5
indicator("Gold Desk 2026-06-30 — 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.yellow, 0), linewidth=1)
plot(ema50, "EMA50", color=color.new(color.orange, 0), linewidth=1)
plot(ema200, "EMA200", color=color.new(color.red, 0), linewidth=2)
// ── Fibonacci on weekly swing 4216.86 / 3959.00 ──────────────────────
swingHigh = 4216.86
swingLow = 3959.00
fib236 = 4019.85
fib382 = 4057.50
fib500 = 4087.93
fib618 = 4118.36
fib786 = 4161.68
hline(swingHigh, "Swing High 4216.86", color=color.new(color.gray, 50))
hline(swingLow, "Swing Low 3959.00", color=color.new(color.gray, 50))
hline(fib236, "fib 0.236 4019.85", color=color.new(color.aqua, 60))
hline(fib382, "fib 0.382 4057.50", color=color.new(color.aqua, 60))
hline(fib500, "fib 0.500 4087.93", color=color.new(color.aqua, 60))
hline(fib618, "fib 0.618 4118.36", color=color.new(color.aqua, 60))
hline(fib786, "fib 0.786 4161.68", color=color.new(color.aqua, 60))
// ── Golden pocket (0.5 – 0.618) ──────────────────────────────────────
var box gpBox = na
if barstate.islast
box.delete(gpBox)
gpBox := box.new(bar_index - 200, fib618, bar_index + 50, fib500, bgcolor=color.new(color.yellow, 82), border_color=color.new(color.yellow, 40))
label.new(bar_index + 50, (fib500 + fib618) / 2, "GOLDEN POCKET 4088–4118", color=color.new(color.yellow, 50), textcolor=color.black, style=label.style_label_left, size=size.small)
// ── Supply zone (sell entry shelf: daily R1 → weekly P) ──────────────
var box supplyBox = na
if barstate.islast
box.delete(supplyBox)
supplyBox := box.new(bar_index - 200, 4086.08, bar_index + 50, 4057.67, bgcolor=color.new(color.red, 78), border_color=color.new(color.red, 30))
// ── Demand zone (buy entry cluster: daily S1 → weekly S1) ────────────
var box demandBox = na
if barstate.islast
box.delete(demandBox)
demandBox := box.new(bar_index - 200, 3984.12, bar_index + 50, 3955.30, bgcolor=color.new(color.green, 78), border_color=color.new(color.green, 30))
// ── Pivots ────────────────────────────────────────────────────────────
hline(4028.06, "Daily P 4028", color=color.new(color.white, 40))
hline(4057.67, "Daily R1 4058", color=color.new(color.red, 40))
hline(4101.61, "Daily R2 4102", color=color.new(color.red, 60))
hline(3984.12, "Daily S1 3984", color=color.new(color.green, 40))
hline(3954.51, "Daily S2 3955", color=color.new(color.green, 60))
hline(3910.57, "Daily S3 3911", color=color.new(color.green, 70))
hline(4086.08, "Weekly P 4086", color=color.new(color.fuchsia, 40))
hline(4213.16, "Weekly R1 4213", color=color.new(color.fuchsia, 60))
hline(3955.30, "Weekly S1 3955", color=color.new(color.fuchsia, 60))
hline(4144.63, "1d EMA20 4144 (struct. inval)", color=color.new(color.orange, 30))
// ── Trade idea 1: SELL bounce-fade (60% conviction) ──────────────────
var box s1Entry = na
var line s1Inval = na
var line s1Tgt = na
var label s1Lbl = na
if barstate.islast
box.delete(s1Entry)
line.delete(s1Inval)
line.delete(s1Tgt)
label.delete(s1Lbl)
s1Entry := box.new(bar_index - 50, 4086.08, bar_index + 60, 4057.67, bgcolor=color.new(color.red, 65), border_color=color.new(color.red, 0))
s1Inval := line.new(bar_index - 50, 4144.63, bar_index + 60, 4144.63, color=color.new(color.red, 0), style=line.style_dashed, width=2)
s1Tgt := line.new(bar_index - 50, 3984.12, bar_index + 60, 3984.12, color=color.new(color.green, 0), style=line.style_dashed, width=2)
s1Lbl := label.new(bar_index + 60, 4071.0, "SELL fade 60%\ninv 4144.63 / tgt 3984.12", color=color.new(color.red, 30), textcolor=color.white, style=label.style_label_left, size=size.small)
// ── Trade idea 2: BUY oversold scalp (40% conviction) ────────────────
var box b1Entry = na
var line b1Inval = na
var line b1Tgt = na
var label b1Lbl = na
if barstate.islast
box.delete(b1Entry)
line.delete(b1Inval)
line.delete(b1Tgt)
label.delete(b1Lbl)
b1Entry := box.new(bar_index - 50, 3984.12, bar_index + 60, 3955.30, bgcolor=color.new(color.green, 65), border_color=color.new(color.green, 0))
b1Inval := line.new(bar_index - 50, 3910.57, bar_index + 60, 3910.57, color=color.new(color.red, 0), style=line.style_dashed, width=2)
b1Tgt := line.new(bar_index - 50, 4057.67, bar_index + 60, 4057.67, color=color.new(color.green, 0), style=line.style_dashed, width=2)
b1Lbl := label.new(bar_index + 60, 3970.0, "BUY scalp 40%\ninv 3910.57 / tgt 4057.67", color=color.new(color.green, 30), textcolor=color.white, style=label.style_label_left, size=size.small)
// ── Trade idea 3: SELL swing @ 1d EMA20 (50% conviction) ─────────────
var line s3Trig = na
var line s3Inval = na
var line s3Tgt = na
var label s3Lbl = na
if barstate.islast
line.delete(s3Trig)
line.delete(s3Inval)
line.delete(s3Tgt)
label.delete(s3Lbl)
s3Trig := line.new(bar_index - 50, 4144.63, bar_index + 60, 4144.63, color=color.new(color.red, 20), style=line.style_solid, width=2)
s3Inval := line.new(bar_index - 50, 4213.16, bar_index + 60, 4213.16, color=color.new(color.red, 40), style=line.style_dashed, width=1)
s3Tgt := line.new(bar_index - 50, 3828.22, bar_index + 60, 3828.22, color=color.new(color.green, 30), style=line.style_dashed, width=1)
s3Lbl := label.new(bar_index + 60, 4144.63, "SWING SELL @ 1d EMA20 50%\ninv 4213.16 / tgt 3828.22", color=color.new(color.red, 40), textcolor=color.white, style=label.style_label_left, size=size.small)
// ── Net-bias banner ───────────────────────────────────────────────────
var table biasTable = table.new(position.top_right, 1, 3, bgcolor=color.new(color.black, 20), border_width=1)
if barstate.islast
table.cell(biasTable, 0, 0, "NET BIAS: SELL", text_color=color.red, text_size=size.large)
table.cell(biasTable, 0, 1, "Real 10y 2.16% | Fed odds 0/68/32 (cut/hold/hike)", text_color=color.white, text_size=size.small)
table.cell(biasTable, 0, 2, "Gold Desk 2026-06-30", text_color=color.gray, text_size=size.small)
{"bias": "SELL",
"ideas": [
{"bias": "SELL", "label": "Bounce-fade @ R1/weekly-P shelf", "entry_low": 4057.67, "entry_high": 4086.08,
"invalidation": 4144.63, "target": 3984.12, "conviction": 60},
{"bias": "BUY", "label": "Oversold scalp @ S1/weekly-S1 cluster", "entry_low": 3955.30, "entry_high": 3984.12,
"invalidation": 3910.57, "target": 4057.67, "conviction": 40},
{"bias": "SELL", "label": "Swing fade @ 1d EMA20", "entry_low": 4140.00, "entry_high": 4144.63,
"invalidation": 4213.16, "target": 3828.22, "conviction": 50}
]}
TradingView chart script
Paste into TradingView → Pine Editor → Add to chart to see these levels and trade zones drawn live. (Also attached to the email edition as a .pine file.)
//@version=5
indicator("Gold Desk 2026-06-30 — 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.yellow, 0), linewidth=1)
plot(ema50, "EMA50", color=color.new(color.orange, 0), linewidth=1)
plot(ema200, "EMA200", color=color.new(color.red, 0), linewidth=2)
// ── Fibonacci on weekly swing 4216.86 / 3959.00 ──────────────────────
swingHigh = 4216.86
swingLow = 3959.00
fib236 = 4019.85
fib382 = 4057.50
fib500 = 4087.93
fib618 = 4118.36
fib786 = 4161.68
hline(swingHigh, "Swing High 4216.86", color=color.new(color.gray, 50))
hline(swingLow, "Swing Low 3959.00", color=color.new(color.gray, 50))
hline(fib236, "fib 0.236 4019.85", color=color.new(color.aqua, 60))
hline(fib382, "fib 0.382 4057.50", color=color.new(color.aqua, 60))
hline(fib500, "fib 0.500 4087.93", color=color.new(color.aqua, 60))
hline(fib618, "fib 0.618 4118.36", color=color.new(color.aqua, 60))
hline(fib786, "fib 0.786 4161.68", color=color.new(color.aqua, 60))
// ── Golden pocket (0.5 – 0.618) ──────────────────────────────────────
var box gpBox = na
if barstate.islast
box.delete(gpBox)
gpBox := box.new(bar_index - 200, fib618, bar_index + 50, fib500, bgcolor=color.new(color.yellow, 82), border_color=color.new(color.yellow, 40))
label.new(bar_index + 50, (fib500 + fib618) / 2, "GOLDEN POCKET 4088–4118", color=color.new(color.yellow, 50), textcolor=color.black, style=label.style_label_left, size=size.small)
// ── Supply zone (sell entry shelf: daily R1 → weekly P) ──────────────
var box supplyBox = na
if barstate.islast
box.delete(supplyBox)
supplyBox := box.new(bar_index - 200, 4086.08, bar_index + 50, 4057.67, bgcolor=color.new(color.red, 78), border_color=color.new(color.red, 30))
// ── Demand zone (buy entry cluster: daily S1 → weekly S1) ────────────
var box demandBox = na
if barstate.islast
box.delete(demandBox)
demandBox := box.new(bar_index - 200, 3984.12, bar_index + 50, 3955.30, bgcolor=color.new(color.green, 78), border_color=color.new(color.green, 30))
// ── Pivots ────────────────────────────────────────────────────────────
hline(4028.06, "Daily P 4028", color=color.new(color.white, 40))
hline(4057.67, "Daily R1 4058", color=color.new(color.red, 40))
hline(4101.61, "Daily R2 4102", color=color.new(color.red, 60))
hline(3984.12, "Daily S1 3984", color=color.new(color.green, 40))
hline(3954.51, "Daily S2 3955", color=color.new(color.green, 60))
hline(3910.57, "Daily S3 3911", color=color.new(color.green, 70))
hline(4086.08, "Weekly P 4086", color=color.new(color.fuchsia, 40))
hline(4213.16, "Weekly R1 4213", color=color.new(color.fuchsia, 60))
hline(3955.30, "Weekly S1 3955", color=color.new(color.fuchsia, 60))
hline(4144.63, "1d EMA20 4144 (struct. inval)", color=color.new(color.orange, 30))
// ── Trade idea 1: SELL bounce-fade (60% conviction) ──────────────────
var box s1Entry = na
var line s1Inval = na
var line s1Tgt = na
var label s1Lbl = na
if barstate.islast
box.delete(s1Entry)
line.delete(s1Inval)
line.delete(s1Tgt)
label.delete(s1Lbl)
s1Entry := box.new(bar_index - 50, 4086.08, bar_index + 60, 4057.67, bgcolor=color.new(color.red, 65), border_color=color.new(color.red, 0))
s1Inval := line.new(bar_index - 50, 4144.63, bar_index + 60, 4144.63, color=color.new(color.red, 0), style=line.style_dashed, width=2)
s1Tgt := line.new(bar_index - 50, 3984.12, bar_index + 60, 3984.12, color=color.new(color.green, 0), style=line.style_dashed, width=2)
s1Lbl := label.new(bar_index + 60, 4071.0, "SELL fade 60%\ninv 4144.63 / tgt 3984.12", color=color.new(color.red, 30), textcolor=color.white, style=label.style_label_left, size=size.small)
// ── Trade idea 2: BUY oversold scalp (40% conviction) ────────────────
var box b1Entry = na
var line b1Inval = na
var line b1Tgt = na
var label b1Lbl = na
if barstate.islast
box.delete(b1Entry)
line.delete(b1Inval)
line.delete(b1Tgt)
label.delete(b1Lbl)
b1Entry := box.new(bar_index - 50, 3984.12, bar_index + 60, 3955.30, bgcolor=color.new(color.green, 65), border_color=color.new(color.green, 0))
b1Inval := line.new(bar_index - 50, 3910.57, bar_index + 60, 3910.57, color=color.new(color.red, 0), style=line.style_dashed, width=2)
b1Tgt := line.new(bar_index - 50, 4057.67, bar_index + 60, 4057.67, color=color.new(color.green, 0), style=line.style_dashed, width=2)
b1Lbl := label.new(bar_index + 60, 3970.0, "BUY scalp 40%\ninv 3910.57 / tgt 4057.67", color=color.new(color.green, 30), textcolor=color.white, style=label.style_label_left, size=size.small)
// ── Trade idea 3: SELL swing @ 1d EMA20 (50% conviction) ─────────────
var line s3Trig = na
var line s3Inval = na
var line s3Tgt = na
var label s3Lbl = na
if barstate.islast
line.delete(s3Trig)
line.delete(s3Inval)
line.delete(s3Tgt)
label.delete(s3Lbl)
s3Trig := line.new(bar_index - 50, 4144.63, bar_index + 60, 4144.63, color=color.new(color.red, 20), style=line.style_solid, width=2)
s3Inval := line.new(bar_index - 50, 4213.16, bar_index + 60, 4213.16, color=color.new(color.red, 40), style=line.style_dashed, width=1)
s3Tgt := line.new(bar_index - 50, 3828.22, bar_index + 60, 3828.22, color=color.new(color.green, 30), style=line.style_dashed, width=1)
s3Lbl := label.new(bar_index + 60, 4144.63, "SWING SELL @ 1d EMA20 50%\ninv 4213.16 / tgt 3828.22", color=color.new(color.red, 40), textcolor=color.white, style=label.style_label_left, size=size.small)
// ── Net-bias banner ───────────────────────────────────────────────────
var table biasTable = table.new(position.top_right, 1, 3, bgcolor=color.new(color.black, 20), border_width=1)
if barstate.islast
table.cell(biasTable, 0, 0, "NET BIAS: SELL", text_color=color.red, text_size=size.large)
table.cell(biasTable, 0, 1, "Real 10y 2.16% | Fed odds 0/68/32 (cut/hold/hike)", text_color=color.white, text_size=size.small)
table.cell(biasTable, 0, 2, "Gold Desk 2026-06-30", text_color=color.gray, text_size=size.small)
— the resident
pinned to pivot, leaning short into supply