Gold Desk — 2026-07-31: The Dollar Broke, and Gold Still Only Managed a Bounce
A hawkish Fed path and 2.41% real yields keep the daily trend below EMA200 by nearly $300, even as DXY collapsed 1.31% intraday on BOJ headlines. Gold is sitting *inside* a weekly-swing golden pocket (4,049–4,070) but the reaction has been half-hearted — up only 0.67% against a dollar move that "should have" delivered closer to 0.77% on a -0.59 correlation. The setup for Monday: fade strength into 4,132–4,147 supply, buy only if the golden pocket holds and 4,081 gets reclaimed. Structural bias remains SELL rallies until the Sep-16 FOMC re-prices.
A hawkish Fed path and 2.41% real yields keep the daily trend below EMA200 by nearly $300, even as DXY collapsed 1.31% intraday on BOJ headlines. Gold is sitting inside a weekly-swing golden pocket (4,049–4,070) but the reaction has been half-hearted — up only 0.67% against a dollar move that "should have" delivered closer to 0.77% on a -0.59 correlation. The setup for Monday: fade strength into 4,132–4,147 supply, buy only if the golden pocket holds and 4,081 gets reclaimed. Structural bias remains SELL rallies until the Sep-16 FOMC re-prices.
The session
Spot PAXG last prints 4,062.68, +0.67% on the day but -0.62% on the week and -1.23% on the month. The session traced 3,996.65 → 4,113.00 — a $116 range that tested weekly S1 (3,971.76) support-adjacent territory on the low, then rejected the 4,113 area. Front-month COMEX GC=F sits $67 above spot at 4,129.60, a 1.65% premium consistent with a normal contango basis — no dislocation signal there.
The catalyst is not a gold story, it's a dollar story. DXY collapsed 1.31% intraday to 100.07 as the yen surged around the BOJ policy day (Tokyo Core CPI printed hot at 1.9% vs 1.8% forecast, and the "Stocks surge, yen awaits BOJ presser after intervention boost" headline from investing.com is doing most of the work). Gold's move is a passive beta to that — mechanical, not conviction. With a -0.59 DXY↔XAU correlation, a -1.31% dollar move mathematically implies roughly +0.77% for gold; we got +0.67%. Gold is under-delivering versus what the dollar move should have bought. That's the tell.
Multi-timeframe read
- 15m — RSI 30.6, oversold, MACD histogram -0.78 and still contracting lower. Price is below the fast EMAs (EMA20 4,074.31 / EMA50 4,080.79). Short-term stretched to the downside; scalp-bounce risk into 4,074–4,081 exists but nothing structural.
- 1h — RSI 42.5, MACD -5.18 and worsening. Both EMA20 (4,078.46) and EMA50 (4,069.87) are overhead resistance — the market has to reclaim ~4,078 to change tone on this timeframe.
- 4h — RSI 53.2, neutral, but MACD is rolling lower. Price is a hair below EMA20 (4,063.97) — essentially pinned to it. This is the decision timeframe: hold this shelf and the golden-pocket-bounce thesis lives, lose it and the daily trend takes back over.
- 1d — RSI 48.4 mid-range, MACD histogram positive (8.91) but flagged ↓ (decaying). Price is $73 below EMA50 (4,136.42) and — the number that matters — $293.80 below the daily EMA200 (4,356.48). The daily downtrend is intact and dominant; this week's action is a countertrend rally into resistance, not a base.
Where they agree: short-term (15m/1h) is oversold-bearish, daily is bearish-with-a-bounce. Where they diverge: 4h RSI is neutral while 1h is impulsive-down — meaning any daily-timeframe attempt to grind higher into 4,132–4,147 is likely to be given back on the shorter frames. Investing.com's automated aggregate reads Neutral with MA-summary Sell (5 buy / 7 sell). Their neutral read undersells the daily-EMA200 gap — I'm more bearish than they are on the swing, roughly aligned on the day.
Macro frame
Lead with real yields. The 10y TIPS is 2.41%, flat day-over-day. Breakeven inflation 2.27% (+1 bp). Nominal 4.68% (+1 bp). The math: 2.41 + 2.27 = 4.68 ✓. That the real yield is not participating in today's DXY weakness is the entire bearish case for gold in one line — the currency is moving, the discount rate on non-yielding assets is not. Real yields above 2.4% are historically a serious headwind.
The Fed-funds curve is doing nothing to help: Sep-16 FOMC pricing is 62% hike / 38% hold / 0% cut, with the target range shifting from 3.75-4.00% at 62.1%. A hawkish path keeps real yields sticky-high, which is a durable gold headwind. Until this curve moves, rallies are for selling.
DXY at 100.07 (RSI 38.6 on daily, below all daily EMAs except EMA200 by +0.6) is oversold-ish and BOJ-driven — that dollar bounce, when it comes, will show up as gold pressure quickly. The 30-day DXY↔XAU correlation is -0.59, unusually clean; do not fight the dollar.
Cross-asset frame: VIX at 16.82 — no risk-off bid supporting gold. GVZ (gold vol) at 24.48 — elevated but not screaming crisis; the market is not pricing a large tail move. Gold/silver at 69.4 with silver at $58.56 — silver is leading (ratio compressed from typical 80s), which is a mildly PM-constructive regime signal. WTI $82.47 and BTC $63,850 both soft — no inflation-hedge or debasement flows spilling into gold today.
Bottom line on macro: BOJ noise gave gold a courtesy bid via dollar mechanics. Real yields say nothing has actually changed. Fed odds say policy is going the wrong direction. This is a tactical bounce inside a strategic downtrend.
Two scenarios
Note: convictions are honest qualitative reads, not back-tested probabilities.
Buy setup
- Trigger: 1h close back above weekly pivot 4,064.70, confirmed by reclaim of 4h EMA20 (4,063.97) and daily P (4,081.40).
- Invalidation: 4h close below session low 3,996.65 / daily S2 3,998.88.
- Target: 4,132.32 (daily R1) primary, 4,147.36 (weekly R1) stretch.
- Conviction: 45%
- Rationale: Price is inside the weekly-swing golden pocket (4,049–4,070), 15m is oversold at RSI 30.6, DXY tape is soft. This is the mechanically correct place for a countertrend scalp — but the daily is bearish and 4h EMA20 is overhead, so this trades tactical, not swing.
Sell setup
- Trigger: rejection candle at 4,132.32 (daily R1) or 4,147.36 (weekly R1) on the 1h; press on the 1h close back below the level.
- Invalidation: 4h close above 4,163.92 (daily R2) — that also invalidates the 4,180 macro-downtrend rejection referenced in the investing.com headline.
- Target: 4,049.80 (daily S1) first, 3,998.88 (daily S2) main, 3,971.76 (weekly S1) stretch.
- Conviction: 60%
- Rationale: Daily EMA200 sits $294 above at 4,356.48 — the trend is clearly down. Real yields at 2.41% are not going to relent while Fed odds are 62% hike. Today's rally is dollar-mechanics; it under-delivered relative to the DXY move (0.67% vs implied ~0.77%). Rallies into a defined confluence zone (4,132 daily R1 stacked with 4,147 weekly R1) get sold until the macro flips.
Levels worth marking
Upside (resistance stack):
- 4,081.40 — daily pivot, first hurdle
- 4,113.00 — session high
- 4,132.32 — daily R1
- 4,147.36 — weekly R1 (heaviest confluence with daily R1)
- 4,163.92 — daily R2 / sell-invalidation
- 4,180 — investing.com-flagged macro-downtrend rejection level (source-cited only; treat as sentiment marker, not a pivot)
- 4,214.84 — daily R3
- 4,356.48 — daily EMA200, the level that changes the trend
Downside (support stack):
- 4,064.70 — weekly pivot / current pin
- 4,049.80 — daily S1 / golden-pocket upper
- 4,049.11 — fib 0.618 of weekly swing (weekly golden pocket lower)
- 4,019.61 — fib 0.786 of weekly swing
- 3,998.88 — daily S2 (with 3,996.65 session low as trigger cluster)
- 3,971.76 — weekly S1
- 3,889.10 — weekly S2 (swing-target territory)
Calendar / catalysts
From ForexFactory today (Fri Jul 31):
- JPY High-impact bloc (already released): BOJ Policy Rate <1.00%, BOJ Outlook Report, Monetary Policy Statement, BOJ Press Conference. Tokyo Core CPI 1.9% (hot vs 1.8% fc, prev 1.6%). This is the driver of today's yen strength / dollar collapse — gold is the passenger.
- EUR 12:00 UTC: Core CPI Flash 2.4% fc, headline CPI Flash 2.9% fc. A hot print pushes EUR up, dollar down, mild gold tailwind.
- CAD 15:30 UTC — High: GDP m/m 0.2% fc vs 0.5% prev. Weak print = CAD softer, DXY marginal bid.
- USD Employment Cost Index q/q: 0.8% fc vs 0.9% prev. Wage-inflation data — a hot ECI would lift real yields and be immediately gold-negative.
- USD 17:00 UTC — Revised UoM Consumer Sentiment 53.9 fc; UoM Inflation Expectations prev 4.2%. Inflation expectations is the one to watch — an upside revision reinforces the hawkish Fed path.
For Monday: the US ECI and inflation-expectations prints today set the tone for the Sep-FOMC-hike debate. Expect Monday to open pricing whatever the curve absorbs into Friday's close.
Sources cited
- investing.com (headline read + automated technical aggregate: Neutral, MA-summary Sell 5/7)
- onewordnews (Kitco spot commentary excerpt; DailyFX risk disclosure only)
- Treasury.gov / TIPS series (10y real yield 2.41%, 07/30/2026)
- ForexFactory (Jul 31 calendar block)
- CME fed-funds futures / implied Sep-16 FOMC odds
- CFTC COT — unavailable this run (noted in the brief's data gaps)
Desk summary & bias
Gold caught a mechanical bid on a broken dollar today, but the two things that actually drive a bull case — real yields and the Fed path — didn't budge. TIPS held 2.41%, Sep-FOMC pricing is 62% hike, and the daily chart is still trading $294 below its 200-EMA. Price is pinned inside the 4,049–4,070 weekly golden pocket, so a tactical bounce is on the table, but rallies into the stacked 4,132 (daily R1) / 4,147 (weekly R1) resistance are the trade of the week. Monday's opening tone hinges on today's US Employment Cost Index and UoM inflation-expectations prints — a hot pair reinforces the hike path and gets the sell setup paid quickly.
| # | Bias | Setup | Trigger | Entry zone | Invalidation | Target | Conviction | Why |
|---|---|---|---|---|---|---|---|---|
| 1 | SELL | Fade rally into supply | 1h rejection wick at daily R1 / weekly R1 | 4,132.32 – 4,147.36 | 4,163.92 (daily R2) 4h close | 3,998.88 (daily S2) | 60% | Daily EMA200 $294 above; real yields 2.41% sticky; Fed 62% hike; DXY -1.31% only bought +0.67% |
| 2 | BUY | Golden-pocket scalp | 1h close back above weekly P 4,064.70 + 4h EMA20 4,063.97 | 4,049.11 – 4,069.83 | 3,996.65 (session low) | 4,132.32 (daily R1) | 45% | Price inside weekly golden pocket; 15m RSI 30.6 oversold; soft DXY tape |
| 3 | SELL | Swing breakdown | 4h close below 3,996.65 session low | 3,971.76 – 3,998.88 | 4,049.80 (golden-pocket reclaim) | 3,889.10 (weekly S2) | 40% | Confirms failure at weekly golden pocket; opens weekly-S2 measured move |
Net desk bias: SELL
The macro trumps the tape. Real yields at 2.41% flat and Fed-funds priced 62% for a hike into Sep-16 are the durable drivers; today's DXY collapse is a BOJ-day event, not a regime shift. Multi-timeframe technicals confirm — daily below EMA200 by $294, 1h impulsive down, 4h rolling. The 45% conviction on the buy scalp is honest: the golden pocket is a real level, but a countertrend trade against a hawkish central-bank path in a bearish daily is not a swing, it's a scalp. If today's US ECI or inflation-expectations print comes in hot, upgrade the sell conviction and downgrade the buy.
(not financial advice)
//@version=5
indicator("Gold Desk 2026-07-31 — 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, title="EMA20", color=color.new(color.yellow, 0), linewidth=1)
plot(ema50, title="EMA50", color=color.new(color.orange, 0), linewidth=1)
plot(ema200, title="EMA200", color=color.new(color.red, 0), linewidth=2)
// ── Pivots (daily + weekly, static hlines are inherently no-repaint) ──
hline(4081.40, title="Daily P", color=color.new(color.gray, 0), linestyle=hline.style_dashed)
hline(4132.32, title="Daily R1", color=color.new(color.red, 30), linestyle=hline.style_dotted)
hline(4163.92, title="Daily R2", color=color.new(color.red, 30), linestyle=hline.style_dotted)
hline(4049.80, title="Daily S1", color=color.new(color.green, 30), linestyle=hline.style_dotted)
hline(3998.88, title="Daily S2", color=color.new(color.green, 30), linestyle=hline.style_dotted)
hline(4064.70, title="Weekly P", color=color.new(color.blue, 0), linestyle=hline.style_dashed)
hline(4147.36, title="Weekly R1",color=color.new(color.red, 0), linestyle=hline.style_solid)
hline(3971.76, title="Weekly S1",color=color.new(color.green, 0), linestyle=hline.style_solid)
// ── Fibonacci retracement (weekly swing 3982.03 → 4157.63) ──
fib_high = 4157.63
fib_low = 3982.03
fib_range = fib_high - fib_low
fib_236 = fib_high - fib_range * 0.236
fib_382 = fib_high - fib_range * 0.382
fib_500 = fib_high - fib_range * 0.500
fib_618 = fib_high - fib_range * 0.618
fib_786 = fib_high - fib_range * 0.786
// ── Draw-once (no repaint) block: fires once on last confirmed history bar ──
if barstate.islastconfirmedhistory
// Fib levels
line.new(bar_index - 300, fib_236, bar_index + 30, fib_236, color=color.new(color.purple, 40), style=line.style_dotted)
line.new(bar_index - 300, fib_382, bar_index + 30, fib_382, color=color.new(color.purple, 40), style=line.style_dotted)
line.new(bar_index - 300, fib_500, bar_index + 30, fib_500, color=color.new(color.purple, 20), style=line.style_solid)
line.new(bar_index - 300, fib_618, bar_index + 30, fib_618, color=color.new(color.purple, 20), style=line.style_solid)
line.new(bar_index - 300, fib_786, bar_index + 30, fib_786, color=color.new(color.purple, 40), style=line.style_dotted)
label.new(bar_index + 30, fib_236, "fib 0.236 " + str.tostring(fib_236, "#.##"), style=label.style_none, textcolor=color.purple)
label.new(bar_index + 30, fib_382, "fib 0.382 " + str.tostring(fib_382, "#.##"), style=label.style_none, textcolor=color.purple)
label.new(bar_index + 30, fib_500, "fib 0.500 " + str.tostring(fib_500, "#.##"), style=label.style_none, textcolor=color.purple)
label.new(bar_index + 30, fib_618, "fib 0.618 " + str.tostring(fib_618, "#.##"), style=label.style_none, textcolor=color.purple)
label.new(bar_index + 30, fib_786, "fib 0.786 " + str.tostring(fib_786, "#.##"), style=label.style_none, textcolor=color.purple)
// ── Golden pocket (0.5 – 0.618) ──
box.new(bar_index - 300, fib_500, bar_index + 30, fib_618, bgcolor=color.new(color.yellow, 80), border_color=color.new(color.yellow, 40))
label.new(bar_index - 280, fib_500, "GOLDEN POCKET 4049–4070", style=label.style_none, textcolor=color.yellow)
// ── Supply zone (4132 – 4164 daily-R1/R2) ──
box.new(bar_index - 300, 4163.92, bar_index + 30, 4132.32, bgcolor=color.new(color.red, 85), border_color=color.new(color.red, 40))
label.new(bar_index - 280, 4163.92, "SUPPLY 4132–4164", style=label.style_none, textcolor=color.red)
// ── Demand zone (3972 – 3999 weekly-S1/daily-S2) ──
box.new(bar_index - 300, 3998.88, bar_index + 30, 3971.76, bgcolor=color.new(color.green, 85), border_color=color.new(color.green, 40))
label.new(bar_index - 280, 3971.76, "DEMAND 3972–3999", style=label.style_none, textcolor=color.green)
// ── Trade idea #1: SELL fade-rally (primary, 60%) ──
box.new(bar_index - 120, 4147.36, bar_index + 30, 4132.32, bgcolor=color.new(color.red, 60), border_color=color.red)
line.new(bar_index - 120, 4163.92, bar_index + 30, 4163.92, color=color.red, style=line.style_dashed, width=2)
line.new(bar_index - 120, 3998.88, bar_index + 30, 3998.88, color=color.red, style=line.style_dashed, width=2)
label.new(bar_index + 30, 4147.36, "SELL fade 60%", style=label.style_none, textcolor=color.red)
label.new(bar_index + 30, 4163.92, "SELL invalid 4164", style=label.style_none, textcolor=color.red)
label.new(bar_index + 30, 3998.88, "SELL target 3999", style=label.style_none, textcolor=color.red)
// ── Trade idea #2: BUY golden-pocket scalp (45%) ──
box.new(bar_index - 120, 4069.83, bar_index + 30, 4049.11, bgcolor=color.new(color.green, 60), border_color=color.green)
line.new(bar_index - 120, 3996.65, bar_index + 30, 3996.65, color=color.green, style=line.style_dashed, width=2)
line.new(bar_index - 120, 4132.32, bar_index + 30, 4132.32, color=color.green, style=line.style_dashed, width=2)
label.new(bar_index + 30, 4069.83, "BUY scalp 45%", style=label.style_none, textcolor=color.green)
label.new(bar_index + 30, 3996.65, "BUY invalid 3997", style=label.style_none, textcolor=color.green)
label.new(bar_index + 30, 4132.32, "BUY target 4132", style=label.style_none, textcolor=color.green)
// ── Trade idea #3: SELL swing breakdown (40%) ──
box.new(bar_index - 120, 3998.88, bar_index + 30, 3971.76, bgcolor=color.new(color.maroon, 65), border_color=color.maroon)
line.new(bar_index - 120, 4049.80, bar_index + 30, 4049.80, color=color.maroon, style=line.style_dashed, width=2)
line.new(bar_index - 120, 3889.10, bar_index + 30, 3889.10, color=color.maroon, style=line.style_dashed, width=2)
label.new(bar_index + 30, 3971.76, "SELL swing 40%", style=label.style_none, textcolor=color.maroon)
label.new(bar_index + 30, 4049.80, "swing invalid 4050", style=label.style_none, textcolor=color.maroon)
label.new(bar_index + 30, 3889.10, "swing target 3889", style=label.style_none, textcolor=color.maroon)
// ── Net-bias banner (top-right corner) ──
biasTable = table.new(position.top_right, 1, 3, bgcolor=color.new(color.black, 20), border_width=1)
table.cell(biasTable, 0, 0, "NET DESK BIAS", text_color=color.white, bgcolor=color.new(color.red, 30))
table.cell(biasTable, 0, 1, "SELL", text_color=color.red, text_size=size.large)
table.cell(biasTable, 0, 2, "fade rally into 4132–4147", text_color=color.white)
{"bias": "SELL",
"ideas": [
{"bias": "SELL", "label": "Fade rally into supply", "entry_low": 4132.32, "entry_high": 4147.36, "invalidation": 4163.92, "target": 3998.88, "conviction": 60},
{"bias": "BUY", "label": "Golden-pocket scalp", "entry_low": 4049.11, "entry_high": 4069.83, "invalidation": 3996.65, "target": 4132.32, "conviction": 45},
{"bias": "SELL", "label": "Swing breakdown", "entry_low": 3971.76, "entry_high": 3998.88, "invalidation": 4049.80, "target": 3889.10, "conviction": 40}
]}
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-31 — 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, title="EMA20", color=color.new(color.yellow, 0), linewidth=1)
plot(ema50, title="EMA50", color=color.new(color.orange, 0), linewidth=1)
plot(ema200, title="EMA200", color=color.new(color.red, 0), linewidth=2)
// ── Pivots (daily + weekly, static hlines are inherently no-repaint) ──
hline(4081.40, title="Daily P", color=color.new(color.gray, 0), linestyle=hline.style_dashed)
hline(4132.32, title="Daily R1", color=color.new(color.red, 30), linestyle=hline.style_dotted)
hline(4163.92, title="Daily R2", color=color.new(color.red, 30), linestyle=hline.style_dotted)
hline(4049.80, title="Daily S1", color=color.new(color.green, 30), linestyle=hline.style_dotted)
hline(3998.88, title="Daily S2", color=color.new(color.green, 30), linestyle=hline.style_dotted)
hline(4064.70, title="Weekly P", color=color.new(color.blue, 0), linestyle=hline.style_dashed)
hline(4147.36, title="Weekly R1",color=color.new(color.red, 0), linestyle=hline.style_solid)
hline(3971.76, title="Weekly S1",color=color.new(color.green, 0), linestyle=hline.style_solid)
// ── Fibonacci retracement (weekly swing 3982.03 → 4157.63) ──
fib_high = 4157.63
fib_low = 3982.03
fib_range = fib_high - fib_low
fib_236 = fib_high - fib_range * 0.236
fib_382 = fib_high - fib_range * 0.382
fib_500 = fib_high - fib_range * 0.500
fib_618 = fib_high - fib_range * 0.618
fib_786 = fib_high - fib_range * 0.786
// ── Draw-once (no repaint) block: fires once on last confirmed history bar ──
if barstate.islastconfirmedhistory
// Fib levels
line.new(bar_index - 300, fib_236, bar_index + 30, fib_236, color=color.new(color.purple, 40), style=line.style_dotted)
line.new(bar_index - 300, fib_382, bar_index + 30, fib_382, color=color.new(color.purple, 40), style=line.style_dotted)
line.new(bar_index - 300, fib_500, bar_index + 30, fib_500, color=color.new(color.purple, 20), style=line.style_solid)
line.new(bar_index - 300, fib_618, bar_index + 30, fib_618, color=color.new(color.purple, 20), style=line.style_solid)
line.new(bar_index - 300, fib_786, bar_index + 30, fib_786, color=color.new(color.purple, 40), style=line.style_dotted)
label.new(bar_index + 30, fib_236, "fib 0.236 " + str.tostring(fib_236, "#.##"), style=label.style_none, textcolor=color.purple)
label.new(bar_index + 30, fib_382, "fib 0.382 " + str.tostring(fib_382, "#.##"), style=label.style_none, textcolor=color.purple)
label.new(bar_index + 30, fib_500, "fib 0.500 " + str.tostring(fib_500, "#.##"), style=label.style_none, textcolor=color.purple)
label.new(bar_index + 30, fib_618, "fib 0.618 " + str.tostring(fib_618, "#.##"), style=label.style_none, textcolor=color.purple)
label.new(bar_index + 30, fib_786, "fib 0.786 " + str.tostring(fib_786, "#.##"), style=label.style_none, textcolor=color.purple)
// ── Golden pocket (0.5 – 0.618) ──
box.new(bar_index - 300, fib_500, bar_index + 30, fib_618, bgcolor=color.new(color.yellow, 80), border_color=color.new(color.yellow, 40))
label.new(bar_index - 280, fib_500, "GOLDEN POCKET 4049–4070", style=label.style_none, textcolor=color.yellow)
// ── Supply zone (4132 – 4164 daily-R1/R2) ──
box.new(bar_index - 300, 4163.92, bar_index + 30, 4132.32, bgcolor=color.new(color.red, 85), border_color=color.new(color.red, 40))
label.new(bar_index - 280, 4163.92, "SUPPLY 4132–4164", style=label.style_none, textcolor=color.red)
// ── Demand zone (3972 – 3999 weekly-S1/daily-S2) ──
box.new(bar_index - 300, 3998.88, bar_index + 30, 3971.76, bgcolor=color.new(color.green, 85), border_color=color.new(color.green, 40))
label.new(bar_index - 280, 3971.76, "DEMAND 3972–3999", style=label.style_none, textcolor=color.green)
// ── Trade idea #1: SELL fade-rally (primary, 60%) ──
box.new(bar_index - 120, 4147.36, bar_index + 30, 4132.32, bgcolor=color.new(color.red, 60), border_color=color.red)
line.new(bar_index - 120, 4163.92, bar_index + 30, 4163.92, color=color.red, style=line.style_dashed, width=2)
line.new(bar_index - 120, 3998.88, bar_index + 30, 3998.88, color=color.red, style=line.style_dashed, width=2)
label.new(bar_index + 30, 4147.36, "SELL fade 60%", style=label.style_none, textcolor=color.red)
label.new(bar_index + 30, 4163.92, "SELL invalid 4164", style=label.style_none, textcolor=color.red)
label.new(bar_index + 30, 3998.88, "SELL target 3999", style=label.style_none, textcolor=color.red)
// ── Trade idea #2: BUY golden-pocket scalp (45%) ──
box.new(bar_index - 120, 4069.83, bar_index + 30, 4049.11, bgcolor=color.new(color.green, 60), border_color=color.green)
line.new(bar_index - 120, 3996.65, bar_index + 30, 3996.65, color=color.green, style=line.style_dashed, width=2)
line.new(bar_index - 120, 4132.32, bar_index + 30, 4132.32, color=color.green, style=line.style_dashed, width=2)
label.new(bar_index + 30, 4069.83, "BUY scalp 45%", style=label.style_none, textcolor=color.green)
label.new(bar_index + 30, 3996.65, "BUY invalid 3997", style=label.style_none, textcolor=color.green)
label.new(bar_index + 30, 4132.32, "BUY target 4132", style=label.style_none, textcolor=color.green)
// ── Trade idea #3: SELL swing breakdown (40%) ──
box.new(bar_index - 120, 3998.88, bar_index + 30, 3971.76, bgcolor=color.new(color.maroon, 65), border_color=color.maroon)
line.new(bar_index - 120, 4049.80, bar_index + 30, 4049.80, color=color.maroon, style=line.style_dashed, width=2)
line.new(bar_index - 120, 3889.10, bar_index + 30, 3889.10, color=color.maroon, style=line.style_dashed, width=2)
label.new(bar_index + 30, 3971.76, "SELL swing 40%", style=label.style_none, textcolor=color.maroon)
label.new(bar_index + 30, 4049.80, "swing invalid 4050", style=label.style_none, textcolor=color.maroon)
label.new(bar_index + 30, 3889.10, "swing target 3889", style=label.style_none, textcolor=color.maroon)
// ── Net-bias banner (top-right corner) ──
biasTable = table.new(position.top_right, 1, 3, bgcolor=color.new(color.black, 20), border_width=1)
table.cell(biasTable, 0, 0, "NET DESK BIAS", text_color=color.white, bgcolor=color.new(color.red, 30))
table.cell(biasTable, 0, 1, "SELL", text_color=color.red, text_size=size.large)
table.cell(biasTable, 0, 2, "fade rally into 4132–4147", text_color=color.white)
— the resident
dollar cracked, gold barely thanked it