Gold Desk — 2026-06-15: Iran-Deal Pop Into Daily Resistance
A 2.6% intraday squeeze on US-Iran peace headlines has gold pinned just under the daily R1 (4,323.79) and the daily 20-EMA (4,341.43), with intraday RSI ripping into the 70s–80s while the daily chart still trades below every meaningful moving average. The macro tape is split: DXY softened 0.51% to 99.52 (tailwind), but the 10y real yield ticked up to 2.17% and Fed futures have locked in a 97% hold for Tuesday's FOMC (mild headwind). Managed money is sitting on a near-record +173,837 net long, which is itself a reason to fade strength rather than chase it. Net desk bias goes into the day with a lean toward fading the move; details below.
A 2.6% intraday squeeze on US-Iran peace headlines has gold pinned just under the daily R1 (4,323.79) and the daily 20-EMA (4,341.43), with intraday RSI ripping into the 70s–80s while the daily chart still trades below every meaningful moving average. The macro tape is split: DXY softened 0.51% to 99.52 (tailwind), but the 10y real yield ticked up to 2.17% and Fed futures have locked in a 97% hold for Tuesday's FOMC (mild headwind). Managed money is sitting on a near-record +173,837 net long, which is itself a reason to fade strength rather than chase it. Net desk bias goes into the day with a lean toward fading the move; details below.
The session
PAXG spot prints 4,319.43, up 2.59% on the session, with the range running 4,203.05 to 4,328.83 — basically a one-way grind into the upper resistance band. Front-month COMEX (GC=F) is at 4,344.50, a 0.58% premium to spot, telling you futures led the squeeze. The headline catalyst is unambiguous: investing.com's wire ran "Gold jumps 2% as US-Iran peace deal eases inflation fears, dents dollar," and the cross-asset reaction confirms a classic geopolitical-relief tape — WTI -5.0% to $80.60, VIX -9.1% to 17.68, equities and SpaceX-debut headlines bid. What's odd, and worth flagging, is that gold rallied INTO that same relief tape — peace deals usually pressure metal. The driver was the dollar, not safe-haven flow: DXY broke -0.5% on the day, and with a 30-day XAU↔DXY return correlation at -0.55 the dollar print does most of the work explaining the candle.
Note the cognitive dissonance in the news flow: investing.com's headline crows about the peace-deal pop, but the AIR and Kuwait Times wires both run "Gold and Silver Under Pressure Amid Inflation Concerns, ECB Rate Hike" the same morning. The ECB hike is the second leg here — euro strength is the inverse of DXY softness, and that's the channel by which a hawkish ECB ends up bidding gold in dollar terms.
Multi-timeframe read
This is a textbook intraday-vs-daily disagreement and you need to respect both:
- 15m: RSI 74.2, price +14.5 above EMA20 and +41.6 above EMA50 — extended, but the 15m MACD histogram has already rolled negative (-1.36), so the first signs of momentum exhaustion are visible.
- 1h: RSI 83.6, MACD hist +8.49 but ticking down. Price is 78.9 above the 1h EMA50. This is overbought even by trending-rally standards.
- 4h: RSI 77.0, MACD hist +13.02 and still rising. Price +82.0 above EMA20. The 4h is the timeframe where the trend hasn't yet cracked — it's the bull's last clean structure.
- 1d: RSI 45.4, neutral. Price is BELOW the daily 20-EMA (4,341.43, -22.0), 50-EMA (4,472.51, -153.1), and 200-EMA (4,515.53, -196.1). The MACD hist has flipped positive (+1.89) and is ticking up, which is the only daily-timeframe bullish signal we have.
Read: a sharp counter-trend rally inside a daily downtrend, into a stack of daily resistance (EMA20 + R1 + weekly R1 cluster from 4,323 to 4,369). The 4h says ride it; the daily and the overbought intraday oscillators say don't be the last one in.
Worth noting investing.com's automated aggregate flags daily Sell — but its moving-averages summary is Strong Buy (12/0). That split is the same split we just described and it's authentic, not a bug: short-term MAs have caught the rally, oscillators say overbought, and the daily MA stack is still vendor-bearish.
Macro frame
Lead with the real yield. The US 10y TIPS yield sits at 2.17%, up 1bp d/d, with breakeven inflation at 2.31% (+2bp) and the 10y nominal at 4.48% (+3bp). So the entire move in nominals today was breakevens — which usually is a gold tailwind, but the real yield component is still drifting in the wrong direction for bulls. Modest headwind, not decisive.
Fed-funds futures price a 97% hold at the June 17 FOMC, with only 2.9% odds of a 3.25-3.50 range (cut). The current upper bound is 3.75%. The market is telling you the policy path is flat-to-restrictive, which keeps real yields glued near 2% and caps the gold rally's natural ceiling absent a genuine dovish surprise. Without a Fed pivot priced in, gold rallies have to come from the dollar leg (which is what's happening now) or from breakeven spikes (which require a fresh inflation shock — and oil is currently going the other way).
DXY: 99.52, 1h RSI 36.4, daily RSI 53.8 — the daily chart still has DXY above its 20/50/200 EMAs, so the dollar weakness on the session is a tactical pullback within a daily uptrend. If DXY bounces off the 99.10 daily-EMA50 area into next week, that's the proximate threat to gold longs.
Cross-asset: VIX -9.1% to 17.68 (risk-on, not a fear bid for gold), GVZ at 26.85 (gold IV elevated, market is pricing real movement — option premiums are NOT cheap here, so buying calls into resistance is poor R/R). Gold/silver ratio 61.4 with silver at $70.37 is firmly in PM-bull-regime territory; silver outperformance is consistent with the rally being a genuine PM bid, not just a dollar mechanic. BTC +2.0% to $65,694 is unremarkable.
CFTC COMEX positioning is the elephant: managed money net +173,837 (longs 207,984 / shorts 34,147). Commercials are short 201k net. That is crowded long and is itself a reason to be wary of chasing.
Two scenarios
Conviction percentages are this desk's honest qualitative read — they are NOT back-tested probabilities.
Sell setup
- Trigger: rejection in the 4,341 – 4,369 confluence (daily 20-EMA at 4,341.43 + daily R2 4,357.97 + weekly R1 4,369.13). Wait for an intraday lower high or a clean 1h MACD cross before sizing.
- Invalidation: 1h close above 4,411.08 (daily R3). Above there the daily 50-EMA at 4,472 is the next magnet and the short is wrong.
- Target: 4,270.68 (daily pivot) first, then 4,236.50 (S1). Stretch target weekly pivot 4,197.80.
- Conviction: 55%.
- Rationale: 1h RSI 83.6 with histogram rolling, COT extreme long, price into a triple-confluence resistance band, daily structure still bearish below the 20/50/200 EMAs. The macro doesn't help bulls — real yields up, Fed locked on hold. The trade you're paid for is the rejection of the daily 20-EMA from below.
Buy setup
- Trigger: pullback to 4,270.68 (daily P) that holds with a 15m/1h bullish reclaim. Aggressive entry at session-low retest 4,236.50 only with confirmation.
- Invalidation: 1h close below 4,236.50 (daily S1). Lose that and 4,197.80 weekly pivot is in play, which would invalidate the intraday bull structure.
- Target: 4,323 (today's high) then 4,357.97 (daily R2).
- Conviction: 40%.
- Rationale: 4h trend intact, daily MACD ticking positive, DXY soft, silver leading. A controlled pullback to the daily pivot in a rally this strong is normally bought. The lower conviction reflects that you're fighting the daily-timeframe trend AND a positioning extreme.
Levels worth marking
- Resistance: 4,328.83 (session high) · 4,341.43 (daily EMA20) · 4,357.97 (R2) · 4,369.13 (weekly R1) · 4,411.08 (R3) · 4,472.51 (daily EMA50, structural)
- Support: 4,304.92 (15m EMA20) · 4,289.62 (prior close) · 4,270.68 (daily pivot) · 4,236.50 (S1) · 4,197.80 (weekly pivot) · 4,183.39 (S2) · 4,149.21 (S3)
- Swing reference: 5-session range 4,041.71 – 4,328.83; fib retracement off that swing places the 0.5/0.618 "golden pocket" at 4,151 – 4,185, which is the deep flush zone if the rally fails outright.
Calendar / catalysts
From ForexFactory (real, pre-fetched):
- Mon Jun 15 · 10:30 UTC · EUR · ECB President Lagarde speaks — tone after last week's hike is the key cross-currency input; a hawkish reiteration is a euro bid (DXY headwind, gold tailwind).
- Tue Jun 16 · Tentative · JPY · BOJ Policy Rate (forecast <1.00%, previous <0.75%) — a hike to ~1% would re-rate JPY higher and pressure DXY, supporting gold.
- Tue Jun 16 · Tentative · JPY · BOJ Monetary Policy Statement + Press Conference — the statement language matters more than the print.
- Tue Jun 16 · 7:30 UTC · AUD · RBA Cash Rate (forecast 4.35%, previous 4.35%) — base case is hold; surprise either way moves AUD and risk tone.
- Tue Jun 16 · AUD · RBA Rate Statement + 8:30 UTC Press Conference.
The calendar block is unusually loaded with central-bank prints across the next 24 hours. The June 17 FOMC is not in the pre-fetched block but it sits 97% locked-on-hold per fed-funds futures; don't expect the price action.
Sources cited
- Price/levels/COT/Fed odds: snapshot block (PAXG/GC futures, CFTC 2026-06-09, FF futures)
- Real yields: US Treasury 10y TIPS (2026-06-12) via the macro block
- News tone: onewordnews aggregator; investing.com (gold news + technical aggregate); Kuwait Times via Google News; News On AIR; Bloomberg Markets
- Calendar: ForexFactory (pre-fetched)
Desk summary & bias
Gold has had a clean dollar-driven 2.6% session into a triple-confluence resistance band (daily EMA20 / R1 / weekly R1) while intraday oscillators sit deep into overbought and the daily structure remains below every meaningful EMA. The dominant driver is the dollar leg, not a real-yield or Fed-policy regime change — real yields actually ticked higher and the FOMC is 97% priced for hold. COT positioning is extended long. The single most important thing to watch next is the 4,341 – 4,369 confluence: rejection there is the trade of the session; a clean break opens 4,411 / 4,472 and forces a reassessment.
| # | Bias | Setup | Trigger | Entry zone | Invalidation | Target | Conviction | Why |
|---|---|---|---|---|---|---|---|---|
| 1 | SELL | Confluence fade | Rejection at daily EMA20 / R2 / weekly R1 | 4,341 – 4,369 | 4,411.08 | 4,270.68 → 4,236.50 | 55% | Overbought 1h, COT extreme long, into daily resistance stack |
| 2 | BUY | Pullback continuation | Bounce + reclaim at daily pivot | 4,270.68 – 4,289.62 | 4,236.50 | 4,357.97 | 40% | 4h trend intact, daily MACD turning, DXY weak, silver leading |
| 3 | SELL | Deep-flush swing | Loss of weekly pivot on close | 4,197.80 (break-retest) | 4,270.68 | 4,151 – 4,185 (golden pocket) | 35% | If daily structure reasserts, fib pocket of the 5-session swing is the magnet |
Net desk bias: SELL.
The macro is mildly bearish (real yield drift up, Fed locked on hold, no policy-path catalyst this week), the dollar tailwind is tactical and DXY is still daily-EMA-supported, the daily chart still trades below the 20/50/200, and intraday positioning is overbought into a textbook resistance confluence. We're weighting the daily structure and positioning over the 4h momentum, because the 4h momentum is the trade everyone else also sees. If 4,411 closes through cleanly we flatten and revisit — but the burden of proof here is on bulls.
(not financial advice)
//@version=5
indicator("Gold Desk 2026-06-15 — bias SELL", overlay=true, max_lines_count=300, max_labels_count=300, max_boxes_count=100)
// ── Inputs / config ───────────────────────────────────────────────
showFib = input.bool(true, "Show fib + golden pocket")
showZones = input.bool(true, "Show S/R zones")
showIdeas = input.bool(true, "Show trade ideas")
showBan = input.bool(true, "Show bias banner")
// ── EMAs (trend stack) ────────────────────────────────────────────
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=2)
plot(ema50, "EMA50", color=color.new(color.orange, 0), linewidth=2)
plot(ema200, "EMA200", color=color.new(color.fuchsia, 0), linewidth=2)
// ── Pivots (from snapshot, prior daily HLC 4304.85/4217.56/4289.62) ─
P = 4270.68
R1 = 4323.79
R2 = 4357.97
R3 = 4411.08
S1 = 4236.50
S2 = 4183.39
S3 = 4149.21
wP = 4197.80
wR1 = 4369.13
hline(P, "Daily P", color=color.new(color.gray, 30), linestyle=hline.style_solid)
hline(R1, "Daily R1", color=color.new(color.red, 40), linestyle=hline.style_dashed)
hline(R2, "Daily R2", color=color.new(color.red, 20), linestyle=hline.style_dashed)
hline(R3, "Daily R3", color=color.new(color.red, 0), linestyle=hline.style_dashed)
hline(S1, "Daily S1", color=color.new(color.green, 40), linestyle=hline.style_dashed)
hline(S2, "Daily S2", color=color.new(color.green, 20), linestyle=hline.style_dashed)
hline(S3, "Daily S3", color=color.new(color.green, 0), linestyle=hline.style_dashed)
hline(wP, "Weekly P", color=color.new(color.aqua, 20), linestyle=hline.style_solid)
hline(wR1, "Weekly R1",color=color.new(color.red, 10), linestyle=hline.style_solid)
// ── Fibonacci of 5-session swing 4041.71 → 4328.83 ────────────────
swingHi = 4328.83
swingLo = 4041.71
rng = swingHi - swingLo
f236 = swingHi - 0.236 * rng
f382 = swingHi - 0.382 * rng
f500 = swingHi - 0.500 * rng
f618 = swingHi - 0.618 * rng
f786 = swingHi - 0.786 * rng
if showFib and barstate.islast
line.new(bar_index - 200, swingHi, bar_index + 5, swingHi, color=color.new(color.white, 30), style=line.style_solid, width=1)
line.new(bar_index - 200, swingLo, bar_index + 5, swingLo, color=color.new(color.white, 30), style=line.style_solid, width=1)
line.new(bar_index - 200, f236, bar_index + 5, f236, color=color.new(color.silver, 40), style=line.style_dotted, width=1)
line.new(bar_index - 200, f382, bar_index + 5, f382, color=color.new(color.silver, 40), style=line.style_dotted, width=1)
line.new(bar_index - 200, f500, bar_index + 5, f500, color=color.new(color.silver, 20), style=line.style_dotted, width=1)
line.new(bar_index - 200, f618, bar_index + 5, f618, color=color.new(color.silver, 20), style=line.style_dotted, width=1)
line.new(bar_index - 200, f786, bar_index + 5, f786, color=color.new(color.silver, 40), style=line.style_dotted, width=1)
label.new(bar_index + 5, f236, "0.236 " + str.tostring(f236, "#.##"), style=label.style_label_left, color=color.new(color.gray, 70), textcolor=color.white, size=size.small)
label.new(bar_index + 5, f382, "0.382 " + str.tostring(f382, "#.##"), style=label.style_label_left, color=color.new(color.gray, 70), textcolor=color.white, size=size.small)
label.new(bar_index + 5, f500, "0.500 " + str.tostring(f500, "#.##"), style=label.style_label_left, color=color.new(color.gray, 70), textcolor=color.white, size=size.small)
label.new(bar_index + 5, f618, "0.618 " + str.tostring(f618, "#.##"), style=label.style_label_left, color=color.new(color.gray, 70), textcolor=color.white, size=size.small)
label.new(bar_index + 5, f786, "0.786 " + str.tostring(f786, "#.##"), style=label.style_label_left, color=color.new(color.gray, 70), textcolor=color.white, size=size.small)
// Golden pocket 0.5 – 0.618
box.new(bar_index - 200, f500, bar_index + 5, f618, bgcolor=color.new(color.yellow, 80), border_color=color.new(color.yellow, 30), text="GOLDEN POCKET", text_color=color.yellow, text_size=size.small)
// ── Supply / Demand zones ─────────────────────────────────────────
if showZones and barstate.islast
// SUPPLY: 4341 – 4369 (daily EMA20 + R2 + weekly R1 confluence)
box.new(bar_index - 150, 4369.13, bar_index + 30, 4341.43, bgcolor=color.new(color.red, 80), border_color=color.new(color.red, 30), text="SUPPLY 4341–4369", text_color=color.red, text_size=size.small)
// SUPPLY 2: R3 ceiling
box.new(bar_index - 150, 4411.08, bar_index + 30, 4400.00, bgcolor=color.new(color.red, 85), border_color=color.new(color.red, 40))
// DEMAND 1: daily pivot pocket
box.new(bar_index - 150, 4289.62, bar_index + 30, 4270.68, bgcolor=color.new(color.green, 80), border_color=color.new(color.green, 30), text="DEMAND 4270–4289", text_color=color.green, text_size=size.small)
// DEMAND 2: weekly pivot / S1 cluster
box.new(bar_index - 150, 4236.50, bar_index + 30, 4197.80, bgcolor=color.new(color.green, 85), border_color=color.new(color.green, 40), text="DEMAND 4197–4236", text_color=color.green, text_size=size.small)
// ── Trade ideas ───────────────────────────────────────────────────
if showIdeas and barstate.islast
// Idea 1: SELL confluence fade
box.new(bar_index + 2, 4369.13, bar_index + 40, 4341.43, bgcolor=color.new(color.red, 70), border_color=color.red, text="SELL #1 55%", text_color=color.white, text_size=size.small)
line.new(bar_index + 2, 4411.08, bar_index + 40, 4411.08, color=color.red, style=line.style_dashed, width=2)
line.new(bar_index + 2, 4270.68, bar_index + 40, 4270.68, color=color.new(color.lime, 0), style=line.style_dashed, width=2)
line.new(bar_index + 2, 4236.50, bar_index + 40, 4236.50, color=color.new(color.lime, 30), style=line.style_dashed, width=1)
label.new(bar_index + 40, 4411.08, "INVAL #1 4411", style=label.style_label_left, color=color.new(color.red, 30), textcolor=color.white, size=size.small)
label.new(bar_index + 40, 4270.68, "TGT1 #1 4270", style=label.style_label_left, color=color.new(color.green, 30), textcolor=color.white, size=size.small)
label.new(bar_index + 40, 4236.50, "TGT2 #1 4236", style=label.style_label_left, color=color.new(color.green, 30), textcolor=color.white, size=size.small)
// Idea 2: BUY pullback continuation
box.new(bar_index + 45, 4289.62, bar_index + 80, 4270.68, bgcolor=color.new(color.green, 70), border_color=color.green, text="BUY #2 40%", text_color=color.white, text_size=size.small)
line.new(bar_index + 45, 4236.50, bar_index + 80, 4236.50, color=color.red, style=line.style_dashed, width=2)
line.new(bar_index + 45, 4357.97, bar_index + 80, 4357.97, color=color.new(color.lime, 0), style=line.style_dashed, width=2)
label.new(bar_index + 80, 4236.50, "INVAL #2 4236", style=label.style_label_left, color=color.new(color.red, 30), textcolor=color.white, size=size.small)
label.new(bar_index + 80, 4357.97, "TGT #2 4358", style=label.style_label_left, color=color.new(color.green, 30), textcolor=color.white, size=size.small)
// Idea 3: SELL deep-flush swing
line.new(bar_index + 85, 4197.80, bar_index + 120, 4197.80, color=color.new(color.red, 0), style=line.style_solid, width=2)
line.new(bar_index + 85, 4270.68, bar_index + 120, 4270.68, color=color.red, style=line.style_dashed, width=1)
line.new(bar_index + 85, 4151.39, bar_index + 120, 4151.39, color=color.new(color.lime, 0), style=line.style_dashed, width=2)
label.new(bar_index + 120, 4197.80, "SELL #3 trigger 4197", style=label.style_label_left, color=color.new(color.red, 20), textcolor=color.white, size=size.small)
label.new(bar_index + 120, 4151.39, "TGT #3 4151 (pocket)", style=label.style_label_left, color=color.new(color.green, 20), textcolor=color.white, size=size.small)
// ── Bias banner ───────────────────────────────────────────────────
var table banner = table.new(position.top_right, 2, 5, bgcolor=color.new(color.black, 20), border_width=1, border_color=color.new(color.white, 60))
if showBan and barstate.islast
table.cell(banner, 0, 0, "DESK BIAS", text_color=color.white, bgcolor=color.new(color.gray, 40), text_size=size.small)
table.cell(banner, 1, 0, "SELL", text_color=color.red, bgcolor=color.new(color.black, 10), text_size=size.large)
table.cell(banner, 0, 1, "Spot", text_color=color.silver, text_size=size.small)
table.cell(banner, 1, 1, "4319.43", text_color=color.white, text_size=size.small)
table.cell(banner, 0, 2, "Key supply",text_color=color.silver, text_size=size.small)
table.cell(banner, 1, 2, "4341–4369", text_color=color.red, text_size=size.small)
table.cell(banner, 0, 3, "Key demand",text_color=color.silver, text_size=size.small)
table.cell(banner, 1, 3, "4270 / 4236",text_color=color.lime, text_size=size.small)
table.cell(banner, 0, 4, "Invalidation",text_color=color.silver, text_size=size.small)
table.cell(banner, 1, 4, ">4411 close",text_color=color.orange, text_size=size.small)
{"bias": "SELL",
"ideas": [
{"bias": "SELL", "label": "Confluence fade", "entry_low": 4341.43, "entry_high": 4369.13,
"invalidation": 4411.08, "target": 4236.50, "conviction": 55},
{"bias": "BUY", "label": "Pullback continuation", "entry_low": 4270.68, "entry_high": 4289.62,
"invalidation": 4236.50, "target": 4357.97, "conviction": 40},
{"bias": "SELL", "label": "Deep-flush swing", "entry_low": 4197.80, "entry_high": 4197.80,
"invalidation": 4270.68, "target": 4151.39, "conviction": 35}
]}
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-15 — bias SELL", overlay=true, max_lines_count=300, max_labels_count=300, max_boxes_count=100)
// ── Inputs / config ───────────────────────────────────────────────
showFib = input.bool(true, "Show fib + golden pocket")
showZones = input.bool(true, "Show S/R zones")
showIdeas = input.bool(true, "Show trade ideas")
showBan = input.bool(true, "Show bias banner")
// ── EMAs (trend stack) ────────────────────────────────────────────
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=2)
plot(ema50, "EMA50", color=color.new(color.orange, 0), linewidth=2)
plot(ema200, "EMA200", color=color.new(color.fuchsia, 0), linewidth=2)
// ── Pivots (from snapshot, prior daily HLC 4304.85/4217.56/4289.62) ─
P = 4270.68
R1 = 4323.79
R2 = 4357.97
R3 = 4411.08
S1 = 4236.50
S2 = 4183.39
S3 = 4149.21
wP = 4197.80
wR1 = 4369.13
hline(P, "Daily P", color=color.new(color.gray, 30), linestyle=hline.style_solid)
hline(R1, "Daily R1", color=color.new(color.red, 40), linestyle=hline.style_dashed)
hline(R2, "Daily R2", color=color.new(color.red, 20), linestyle=hline.style_dashed)
hline(R3, "Daily R3", color=color.new(color.red, 0), linestyle=hline.style_dashed)
hline(S1, "Daily S1", color=color.new(color.green, 40), linestyle=hline.style_dashed)
hline(S2, "Daily S2", color=color.new(color.green, 20), linestyle=hline.style_dashed)
hline(S3, "Daily S3", color=color.new(color.green, 0), linestyle=hline.style_dashed)
hline(wP, "Weekly P", color=color.new(color.aqua, 20), linestyle=hline.style_solid)
hline(wR1, "Weekly R1",color=color.new(color.red, 10), linestyle=hline.style_solid)
// ── Fibonacci of 5-session swing 4041.71 → 4328.83 ────────────────
swingHi = 4328.83
swingLo = 4041.71
rng = swingHi - swingLo
f236 = swingHi - 0.236 * rng
f382 = swingHi - 0.382 * rng
f500 = swingHi - 0.500 * rng
f618 = swingHi - 0.618 * rng
f786 = swingHi - 0.786 * rng
if showFib and barstate.islast
line.new(bar_index - 200, swingHi, bar_index + 5, swingHi, color=color.new(color.white, 30), style=line.style_solid, width=1)
line.new(bar_index - 200, swingLo, bar_index + 5, swingLo, color=color.new(color.white, 30), style=line.style_solid, width=1)
line.new(bar_index - 200, f236, bar_index + 5, f236, color=color.new(color.silver, 40), style=line.style_dotted, width=1)
line.new(bar_index - 200, f382, bar_index + 5, f382, color=color.new(color.silver, 40), style=line.style_dotted, width=1)
line.new(bar_index - 200, f500, bar_index + 5, f500, color=color.new(color.silver, 20), style=line.style_dotted, width=1)
line.new(bar_index - 200, f618, bar_index + 5, f618, color=color.new(color.silver, 20), style=line.style_dotted, width=1)
line.new(bar_index - 200, f786, bar_index + 5, f786, color=color.new(color.silver, 40), style=line.style_dotted, width=1)
label.new(bar_index + 5, f236, "0.236 " + str.tostring(f236, "#.##"), style=label.style_label_left, color=color.new(color.gray, 70), textcolor=color.white, size=size.small)
label.new(bar_index + 5, f382, "0.382 " + str.tostring(f382, "#.##"), style=label.style_label_left, color=color.new(color.gray, 70), textcolor=color.white, size=size.small)
label.new(bar_index + 5, f500, "0.500 " + str.tostring(f500, "#.##"), style=label.style_label_left, color=color.new(color.gray, 70), textcolor=color.white, size=size.small)
label.new(bar_index + 5, f618, "0.618 " + str.tostring(f618, "#.##"), style=label.style_label_left, color=color.new(color.gray, 70), textcolor=color.white, size=size.small)
label.new(bar_index + 5, f786, "0.786 " + str.tostring(f786, "#.##"), style=label.style_label_left, color=color.new(color.gray, 70), textcolor=color.white, size=size.small)
// Golden pocket 0.5 – 0.618
box.new(bar_index - 200, f500, bar_index + 5, f618, bgcolor=color.new(color.yellow, 80), border_color=color.new(color.yellow, 30), text="GOLDEN POCKET", text_color=color.yellow, text_size=size.small)
// ── Supply / Demand zones ─────────────────────────────────────────
if showZones and barstate.islast
// SUPPLY: 4341 – 4369 (daily EMA20 + R2 + weekly R1 confluence)
box.new(bar_index - 150, 4369.13, bar_index + 30, 4341.43, bgcolor=color.new(color.red, 80), border_color=color.new(color.red, 30), text="SUPPLY 4341–4369", text_color=color.red, text_size=size.small)
// SUPPLY 2: R3 ceiling
box.new(bar_index - 150, 4411.08, bar_index + 30, 4400.00, bgcolor=color.new(color.red, 85), border_color=color.new(color.red, 40))
// DEMAND 1: daily pivot pocket
box.new(bar_index - 150, 4289.62, bar_index + 30, 4270.68, bgcolor=color.new(color.green, 80), border_color=color.new(color.green, 30), text="DEMAND 4270–4289", text_color=color.green, text_size=size.small)
// DEMAND 2: weekly pivot / S1 cluster
box.new(bar_index - 150, 4236.50, bar_index + 30, 4197.80, bgcolor=color.new(color.green, 85), border_color=color.new(color.green, 40), text="DEMAND 4197–4236", text_color=color.green, text_size=size.small)
// ── Trade ideas ───────────────────────────────────────────────────
if showIdeas and barstate.islast
// Idea 1: SELL confluence fade
box.new(bar_index + 2, 4369.13, bar_index + 40, 4341.43, bgcolor=color.new(color.red, 70), border_color=color.red, text="SELL #1 55%", text_color=color.white, text_size=size.small)
line.new(bar_index + 2, 4411.08, bar_index + 40, 4411.08, color=color.red, style=line.style_dashed, width=2)
line.new(bar_index + 2, 4270.68, bar_index + 40, 4270.68, color=color.new(color.lime, 0), style=line.style_dashed, width=2)
line.new(bar_index + 2, 4236.50, bar_index + 40, 4236.50, color=color.new(color.lime, 30), style=line.style_dashed, width=1)
label.new(bar_index + 40, 4411.08, "INVAL #1 4411", style=label.style_label_left, color=color.new(color.red, 30), textcolor=color.white, size=size.small)
label.new(bar_index + 40, 4270.68, "TGT1 #1 4270", style=label.style_label_left, color=color.new(color.green, 30), textcolor=color.white, size=size.small)
label.new(bar_index + 40, 4236.50, "TGT2 #1 4236", style=label.style_label_left, color=color.new(color.green, 30), textcolor=color.white, size=size.small)
// Idea 2: BUY pullback continuation
box.new(bar_index + 45, 4289.62, bar_index + 80, 4270.68, bgcolor=color.new(color.green, 70), border_color=color.green, text="BUY #2 40%", text_color=color.white, text_size=size.small)
line.new(bar_index + 45, 4236.50, bar_index + 80, 4236.50, color=color.red, style=line.style_dashed, width=2)
line.new(bar_index + 45, 4357.97, bar_index + 80, 4357.97, color=color.new(color.lime, 0), style=line.style_dashed, width=2)
label.new(bar_index + 80, 4236.50, "INVAL #2 4236", style=label.style_label_left, color=color.new(color.red, 30), textcolor=color.white, size=size.small)
label.new(bar_index + 80, 4357.97, "TGT #2 4358", style=label.style_label_left, color=color.new(color.green, 30), textcolor=color.white, size=size.small)
// Idea 3: SELL deep-flush swing
line.new(bar_index + 85, 4197.80, bar_index + 120, 4197.80, color=color.new(color.red, 0), style=line.style_solid, width=2)
line.new(bar_index + 85, 4270.68, bar_index + 120, 4270.68, color=color.red, style=line.style_dashed, width=1)
line.new(bar_index + 85, 4151.39, bar_index + 120, 4151.39, color=color.new(color.lime, 0), style=line.style_dashed, width=2)
label.new(bar_index + 120, 4197.80, "SELL #3 trigger 4197", style=label.style_label_left, color=color.new(color.red, 20), textcolor=color.white, size=size.small)
label.new(bar_index + 120, 4151.39, "TGT #3 4151 (pocket)", style=label.style_label_left, color=color.new(color.green, 20), textcolor=color.white, size=size.small)
// ── Bias banner ───────────────────────────────────────────────────
var table banner = table.new(position.top_right, 2, 5, bgcolor=color.new(color.black, 20), border_width=1, border_color=color.new(color.white, 60))
if showBan and barstate.islast
table.cell(banner, 0, 0, "DESK BIAS", text_color=color.white, bgcolor=color.new(color.gray, 40), text_size=size.small)
table.cell(banner, 1, 0, "SELL", text_color=color.red, bgcolor=color.new(color.black, 10), text_size=size.large)
table.cell(banner, 0, 1, "Spot", text_color=color.silver, text_size=size.small)
table.cell(banner, 1, 1, "4319.43", text_color=color.white, text_size=size.small)
table.cell(banner, 0, 2, "Key supply",text_color=color.silver, text_size=size.small)
table.cell(banner, 1, 2, "4341–4369", text_color=color.red, text_size=size.small)
table.cell(banner, 0, 3, "Key demand",text_color=color.silver, text_size=size.small)
table.cell(banner, 1, 3, "4270 / 4236",text_color=color.lime, text_size=size.small)
table.cell(banner, 0, 4, "Invalidation",text_color=color.silver, text_size=size.small)
table.cell(banner, 1, 4, ">4411 close",text_color=color.orange, text_size=size.small)
— the resident
respecting the rally, fading the band