PHANTOM TDI
See what others don't.
Trading & Data Intelligence
Automation · Data · Signals · Wealth · Technology

Phantom TDI — Trading & Data Intelligence — is a private market-intelligence and automation suite: multi-timeframe structure tracking (HH/HL/LH/LL), OI & whale-flow signals, paper & live execution journals, and a real-time bot performance dashboard.

⚠️ Risk disclaimer — Crypto trading involves substantial risk of loss. Signals and bot activity are informational only, not financial advice. The bot's notional is not yours: only your own capital and leverage decisions apply to you. Never trade more than you can afford to lose. By continuing you accept full responsibility for your decisions.

Dashboard
AUTOMATION — DATA — SIGNALS — WEALTH — TECHNOLOGY — TECHNOLOGY
● LIVE
—
Profile
Phantom TDI
« Sometimes the best trade is no trade. Measure the risk. »
Data · Signals · Live market read
Phantom Education
« You don't rise to your goals — you fall to your training. »
Academy · Lessons · Glossary
Phantom Vault
« Wealth isn't built on speed — it's built on time and consistency. »
Strategies · DCA · Your portfolio
PHANTOM TDI
Tap a module
5
The Brief
Data & Intelligence
Trading Bot
Personal Trades
+32▲ 8.1%
Reports
HH
Signals
Phantom Vault
Scanner
Setups
← Phantom Vault apps
🧩 Diversification — by bucket type
Each token by its real category — sorted by market cap. Avoid hidden duplicates & traps (SPX6900 = Meme, not the S&P 500). Tap a token to look it up on CoinGecko.
⚡ Phantom TDI Scanner
Multi-timeframe conviction radar
Loading squad…
Long ≥3/4 Neutral 2/4 Short ≥3/4 Sleeping TF → 1D · 12H · 4H · 1H
Loading token…
← Cycle Thesis
Loading…
👤 Identity & account
avatar
2MB max · JPG / PNG / WebP
What others see — Telegram alerts, trade cards, leaderboard. Never your login.
✈️ Telegram · @PhantomTDIBot
Loading…
You receive: your alert rules (always) · market alerts (F&G, Smart Money, ETF flows) · the trade cards you share.
📊 Status
Member since—
ModeSOLO
MEXC—
Leaderboard eligibility
—
⌖ THE BRIEF
Shortcut to all market sections. Click any zone for detail.
● 0 alerts upd —
① BTC Regime
…
② HTF Levels
…
③ Squad Pulse — Moving With or Against BTC
…
④ Structure Identification — Bull / Bear
…
⑤ Cross Alert — Death / Golden
…
⑥ Smart vs Retail Money Tracking
…
⑦ BTC Association — Decoupled or Coupled
…
⑧ Pre Alerts — Signals
…
⑨ Macro News — Data
…
Live market read · zero PnL · click a zone for detail. Refresh 30s.
Phantom Vault — Plans & Benefits
Simple. Transparent. No hidden fees.
FREE
$0 / month
✅ The Brief — read-only (4h refresh)
✅ Cycle Calendar — phases only
✅ BTC.D + Gold signal (display, no alerts)
✅ 1-token DCA tracker (BTC only)
✅ Academy — public videos
❌ Full Daily Economic Brief
❌ Push / Telegram alerts
❌ Live phase signals (6)
❌ Per-token exit rules
❌ Multi-token DCA tracker
Best Value
FULL ACCESS
$15 / month
Everything in Basic, plus:
✅ Push AND Telegram alerts
✅ Unlimited DCA tracker tokens
✅ Custom HTF Level alerts (Bounce / Heavy / Decision)
✅ Real-time Carry Trade alert (USD/JPY −1%/24h)
✅ Academy VIP — live sessions with George
✅ Priority access to new features
✅ VIP Telegram group (when open)
Already have Phantom TDI? Add Vault for less.
TDI Pro + Vault Full
$80/mo total (vs $90)
Save $120/yr
TDI VIP+ + Vault Full
$160/mo total (vs $165)
Save $60/yr
Full comparison
FeatureFreeBasicFull
The Brief (read-only)✅✅✅
Full Daily Economic Brief❌✅✅
Cycle Calendar — phases✅✅✅
Cycle Calendar — 6 live signals❌✅✅
Automatic phase verdict❌✅✅
Per-token exit rules❌✅✅
DCA tracker13∞
Push alerts❌✅✅
Telegram alerts❌❌✅
HTF Level alerts❌❌✅
Carry Trade alert (USD/JPY)❌❌✅
Academy — public videos✅✅✅
Academy PRO — recorded❌✅✅
Academy VIP — live❌❌✅
VIP Telegram group❌❌✅
Vault plans are separate from Phantom TDI. Prices in USDT (NOWPayments).
← Phantom Vault apps
💡 Add USDC as a token to automatically sync your deposits with the APY calculator
USDC — Compound APY Yield
12-MONTH PROJECTION
← Phantom Vault apps
Set It & Follow It
The lite version — much simpler than the cycle strategy. No zones, no triggers: just set your desired allocation once, buy it regularly, and follow it through. Built for anyone who doesn't want to trade the cycle. Want the cycle-aware version? Cycle Thesis →
My DCA strategy · drives your discipline score
Asset allocation — enter $ per token
💧 Amounts below are per month. Leave part of the budget unallocated — dry powder for a position that opens mid-month. You don't have to spend 100%.
Allocated $0 / $0
Your recurring buy
← Cycle Thesis
☢ BLACK SWAN — Live Projection of Your Plan

This reads your real BTC deployment triggers and USDC reserve straight from your Cycle Thesis / DCA plan — no separate setup. If BTC crashes to your Black Swan level, here is what deploying your reserve accumulates.

Loading your plan…
← Phantom Vault apps
Portfolio Value Live
—
—
Total DCA Cost
—
Weighted avg price
Last Updated
—
📈 Portfolio evolution
Value (what it is worth) vs cost (what you put in). The gap is your unrealised P&L over time.
Loading prices...
← Phantom Vault apps
💡 Enter the staking/yield APY for each token. Projection uses Binance live price × accumulated tokens.
🪙 Multi-Pot Staking Simulator
Separate staking positions — each with its own capital, APY and reward currency. Combined 12-month projection below.
BTC target $
3-month projection
← Phantom Vault apps
—
Mon
Tue
Wed
Thu
Fri
Sat
Sun
📈 DCA vs Market Price
Token price (line) vs your DCA buys (dots), with your average cost. Above the gold line you are in profit. Rewards count at the price they were received at — farming low pulls the line down. Sells do not move it.
— Price (Binance 365d) ● DCA buys ○ Rewards (farmed) -- Avg cost (rewards included) — Total tokens (right axis)
📊
FULL MONTHLY REPORT
Equity + DCA + Trades + Yield
📈
TRADING REPORT
P&L + WR + RR + Setup analysis
🤖
BOT TRADING REPORT
⚡ LIVE ONLY
Real-money trades only · per-striker breakdown · fees
Trading Journal
Equity curve per CEX/DEX
Equity Curve — Real Portfolio (all CEX/DEX combined)
Snapshot History · auto nightly
📓 YOUR PERSONAL TRADING JOURNAL
Log here:
  • Your own bot trades — any third-party bot you use (tag BOT in the modal)
  • Your manual trades — discretionary entries (tag MANUEL)
  • Phantom bot trades copied with different settings — your notional/leverage, not ours
⚠ Results will differ from Phantom bot stats if you use a different notional, leverage, or selectively copy trades — that's your responsibility.
For Phantom's own bot stats (its own notional + leverage), go to Phantom Bot Performance.
BOT Performance
AUTO
Recent Trades
Manual Performance
MANUEL
Recent Trades
FULL REPORT
Total P&L Curve
● BOT ● MANUEL
📊 Notional Volume
trades with leverage only
📰 Weekly AI Report
Phantom AI weekly recap · macro context + bot perf + outlook · regenerated Sunday 04:00 BKK
PHANTOM BOT PERFORMANCE
Phantom's own bot stats — shared across all users (copy it or not, the bot's perf is the bot's perf)
🤖 Tier PAPER · since 01/06 · bot-auto + manual
RECAP
HEADLINE PERFORMANCE
ACTIVITY
ACHIEVEMENTS
🤖 Source Comparison — bot vs bot
Per-source breakdown · all values are leveraged return % (move × leverage) · capital amounts hidden · click a header to sort
filtered by the tier toggle above
💎 Best & Worst Trades
Top 5 gainers / Top 5 losers across all sources · pick window 7d / 30d / all-time
📈 Equity Gain ⚡ PAPER ONLY
Total leveraged return % (move × leverage, summed across closed live trades). Capital amounts hidden — focus on consistency.
⏰ Performance by hour & day
Aggregate of all closed trades · which hours/days the bot actually performs · cell color = total PnL in that bucket
HOUR OF DAY (UTC)
DAY OF WEEK
📅 P&L Heatmap — last 13 weeks
Each cell = 1 day · color intensity = realised PnL · click a day to see its trades
Less More
DAILY PNL TRACKER
DAILY PNL CALENDAR
Mon
Tue
Wed
Thu
Fri
Sat
Sun
NOT FINANCIAL ADVICE — Bot results are simulated paper trading only
INTELLIGENCE & SIGNALS
Market Momentum · ICT Setups · Structure · Live Strikes · AI Signals
LIVE i
📊 Order Flow & Market Structure i
Per-asset multi-factor dashboard · whale momentum 3D · buy/sell volume % · RSI 14 · volume SMA 20 · 7D change · CME levels
SELECT PAIR
🏆 Trading Rewards
Trade on MEXC via your Phantom referral link and reduce your monthly subscription. The more you trade, the less you pay.
—
Loading…
📁 My Trade Cards
All your generated trade cards, grouped by ISO week · click any card to re-open the preview / share modal
—
Your personal trader stats — only your manual trades count here. Bot performance is shown on the Phantom Bot Performance page.
PERFORMANCE
ACTIVITY
ACHIEVEMENTS
MY DCA ZONES
💎 Personal DCA-zone alerts
Pick up to 2 tokens and define your major support zone. You'll get a Telegram alert when price enters or breaks below.
Rules: max 1 change per slot per 24h · max 1 alert per token per 24h · Telegram chat must be linked.
Personal traders ranked by their manual trades. Bot stats live on Phantom Bot Performance.
SORT BY
—
Rank Trader Equity WR R:R Trades Streak
💎 Plans & Benefits
Pick the tier that fits how you trade. Everything is open by default — locks unlock more depth.
🏆 Trading Rewards — volume-based discounts
Trade on MEXC via your Phantom referral link and reduce your monthly subscription. The more you trade, the less you pay. View your rewards →
❓ FAQ

Can I switch plans? Yes, at any billing cycle. Trading Rewards discount applies to your new plan automatically.

Is VVIP open to anyone? No — invitation only. Reach out via Telegram if you trade institutional volume.

What's the difference between the two AI tiers? Phantom AI gives you a fast 3-section read. Phantom AI Pro gives you a 5-section institutional-grade analysis with macro alignment, Smart Money correlation and a forward probability call.

Do I get refunded if I downgrade? Pro-rated credit applied to next cycle, never lost.

📋 Trade Manager
Your Personalised Trade Desk. Automated Trades, Manual Trades & Back testing
STATUS:
—
⏱ Post-Close Tracker — You vs the Bot
Every manual full close → bot's ladder (TP1/TP2/Moon/SL + trail) runs in the shadow for 4h. Verdict = TOO EARLY / SAVED / NEUTRAL based on the simulated exit.
⚡ ACTIVE (shadow trade still running)
📜 RECENT VERDICTS (30d)
🤖 Phantom Bot Trades
Phantom bot's positions — read-only. Chart with HH/HL pivots + current price dot. Refreshes every 5 min.
—
STATUS:
BOT:
⚙️ System Health
Cron tasks freshness monitoring. Auto-refresh every 30s.
—
TOTAL TASKS
—
✅ HEALTHY
—
⚠️ ALERTS
—
Phantom Vault
Accumulation · Discipline · Wealth
The vault where you stack. We never touch your funds — we help you set your rules in cold blood, hold to them, and see whether you're balanced.
🗺 The Vault — step by step
Pick a mode, log your buys, read the result. Everything else is automatic.
1 Choose your mode — one or the other
These two are exclusive — one active mode at a time, otherwise your discipline score means nothing.
Adaptive DCA → Fixed DCA →
Adaptive follows the cycle: zones, multipliers, a target qty per token. Fixed is flat: $X per token, every month, price aside.
2 Execution Log — log & track open →
Execute the buys yourself on your exchange, then log each buy here. Your Held updates automatically and each buy is scored: DISCIPLINED · DRIFT · OFF_PLAN.
3 DCA Calendar — read the result open →
Your buys against price over time. Held vs Target is your progress; the discipline score says whether you held the line. Did you buy the dips, or the tops?
💡 The Vault is a commitment device — Phantom never touches your money. You execute; it tracks, scores and keeps you honest, so the plan wins over emotion.
← Phantom Vault apps
🌑 The Cycle Ahead — 2026 → 2029
Phantom's working hypothesis for the next macro cycle · your accumulation & distribution compass
Too complicated for you? Go to the lite version → — set an allocation, buy regularly, done.
🧠 The Hypothesis
We're still in the bear phase — the bottom is not proven yet. Accumulation only begins once it is. The map ahead:
→ Black-swan washout — BTC deep bottom = the discount accumulation window (still ahead, not behind us).
→ Alt season builds as liquidity returns.
→ Alts make their ATH FIRST (≈ early 2029).
→ Rotation alt → BTC : alt profits flow into BTC for the final leg.
→ BTC tops LAST (≈ late 2029) — the macro blow-off.

Your edge in this map: accumulate alts in the discount, take alt profits when alts top — before BTC, then rotate into BTC for the final move. Never hold alts into the BTC-only final leg.
Hypothesis, not advice. The market decides; Phantom maps the terrain.
🧭 The 4 Phases — what to do in each
PHASE 1 · BEAR
Discreet institutional accumulation
Red monthly closes, bottom not proven. The deep washout is the discount window — keep dry powder ready, DCA discreetly.
PHASE 2 · ACCUMULATION
DCA zone — bottom confirmed
Structure-aware DCA in the discount. Build the stack. Patience.
PHASE 3 · EXPLOSION
Alt season, new ATHs, euphoria
Hold, let it run. Watch your sell targets approach.
PHASE 4 · DISTRIBUTION ⭐
Final legs before the bear dump
Bags distributed to retail. Alts top FIRST (Aug) → hit alt targets, rotate into BTC. BTC tops LAST (Oct) — distribute BTC into the final leg. The key move of the cycle.
💡 The whole edge in one line: alts top before BTC. Sell alt strength at the Aug top, rotate to BTC, hold BTC to its Oct final leg. Never hold alts into the BTC-only leg.
📖 Worked Example — SOL, a full cycle
A cycle that played out exactly on this map — kept here as a reference. The alt top comes first; the bounce that follows is a lower high and a trap, not a new leg.
SEP 2024 – JAN 2025
Real alt season — the true bull leg. SOL $120 → $294. This was THE window.
JAN 2025 ⭐
Alt-season top. The high prints first. Institutional distribution begins.
FEB – APR 2025
Crash −65%. Retail panics and sells the bottom.
AUG 2025 ⚠️
End-of-cycle bull trap. A lower high ($253 vs $294), decorrelated from BTC. Retail thinks "alt season 2 is starting" — in reality the last drain window.
OCT 2025 →
Final crash — confirmation. Bear market established.
🔑 The lesson: the alt top ($294) came first. The August bounce was a lower high and a trap — not a new leg. Sell strength into the first top; don't chase the "second alt season".
📦 Holdings — Current portfolio
Single source for DCA Zones · multi-platform · entered once
Loading…
📌 Single source — entered here, read automatically by DCA Zones below to compute target-qty progress. No more double entry.
📊 DCA Zones — Monthly Adaptive Plan
Anti-autopilot · adaptive allocation per zone (WATCH 0× · STANDARD 1× · AGGRESSIVE 2× · CAPITULATION 3×)
Tracked tokens (click × to remove):
Loading…
📍 BUY ZONES (from historical ATH)
Configure your budget + tokens above, then save.
🎯 EXIT TARGETS (cycle peak targets 2029)
Set your target exit price per token (separate from the historical ATH).
How it works: each token has a zone (computed live from CoinGecko ATH + MEXC price). The monthly budget is split by zone weight (capitulation = 3×, watch = 0×). The deeper a token is in capitulation, the more it receives. You execute the buys yourself on your exchange — Phantom Vault never touches your money (commitment device only).
← Cycle Thesis
📋 Cycle Plan 2026–2029
Macro thesis · DCA schedule · exit targets · Pro+ members
🔒 Pro+ access
🧠 Macro Thesis
Black swan Sep–Nov 2026 → BTC bottom $45K–$50K
Alt season starts Sep 2028 → alts ATH January 2029
BTC ATH October 2029 at $250,000 minimum
US debt $36T → necessity to pump BTC → rotation alt→BTC is the real engine beyond $200K
💼 Positions & Strategy
TOKEN ACTION AMOUNT ENTRY EXIT TARGET DATE
SUIDCA monthly$200/monow$3 min · $7–$15 bullJan 2029
XPLDCA monthly$200/monow$1 min · $3–$4 bullJan 2029
STXDCA monthly$200/monow$2 min · $4 bullJan 2029
SOL⏳ wait BS$200/mo$30–$35$150 min · $250–$350 bullJan 2029
BTCStaking 3.82%existingongoing$250K minOct 2029
HYPETrading only—on strong retracementTBDTBD
GoldDCA monthlyTBDnow$4,000+Oct 2029
Staking 11%BS reserve$1,400/monowdeploy at black swanSep–Nov 2026
📅 The 5 Critical Dates
📌 DATE 1 — JUN 10, 2026
First DCA
· SUI $200 · XPL $200 · STX $200
· Staking $1,400
ACTION : place the orders
📌 DATE 2 — SEP–NOV 2026 · BLACK SWAN
BTC bottom $45K–$50K
· SUI $0.40–$0.50
· STX $0.10–$0.12
· XPL $0.06–$0.07
· SOL $30–$35
ACTION : deploy ALL staking · DCA×2 on every position · SOL massive entry
📌 DATE 3 — SEP 2028 · ALT SEASON
Alt season begins
· Watch the targets
· Don't sell too early
· Hold through to January
ACTION : watch / hold
📌 DATE 4 — JANUARY 2029 · EXIT ALTS
Vidange totale des alts
Conditions :
✅ SUI > $3 · STX > $2 · XPL > $1 · SOL > $150
✅ General euphoria · FOMO everywhere
ACTION : DRAIN ALL ALTS · immediate rotation BTC/ETH · buy BTC $150K–$180K
📌 DATE 5 — OCTOBER 2029 · EXIT BTC
Mission accomplie
Conditions :
✅ BTC > $250K · maximum euphoria · mainstream media pump
ACTION : DRAIN ALL BTC · convert to real assets
💰 Math & Projections
TOTAL INVESTED
SUI   $200 × 26 mo = $5,200
XPL   $200 × 26 mo = $5,200
STX   $200 × 26 mo = $5,200
SOL   $200 × 12 mo = $2,400 (entry $30–35, BS)
Staking deployed at BS = $7,000+
TOTAL ≈ $52,000
PROJECTIONS JAN 2029
SCENARIOSUISTXXPLSOLTOTAL
🟡 Floor28K28K14K30K$105K
🟢 Base66K57K42K51K$221K
🚀 Bull141K115K140K85K$486K
BTC ROTATION · OCT 2029 @ $250K
CASHBTC @$165KVALUE @$250KMULT
$105K0.64 BTC$160K×3
$221K1.34 BTC$335K×6.4
$486K2.94 BTC$735K×14
🪣 Next Bull Buckets
1. Neobank / Fintech → XPL ✅
2. L1 Infrastructure → SUI / SOL ✅
3. Bitcoin L2 → STX ✅
4. Store of Value → BTC / Gold ✅
5. AI Utility → to identify
6. RWA → to identify
7. DePIN → to identify
⚠️ Absolute Rules
SELL :
✅ Targets hit = sell
✅ Calendar = respect
✅ Euphoria = exit signal
✅ Mainstream media pump = exit
NEVER :
❌ FOMO on something else
❌ Listen to influencers
❌ "This time it's different"
❌ Hold expecting more
❌ Change the plan mid-cycle
❌ Sell during the black swan
❌ Panic at -50% on positions
BLACK SWAN :
✅ DCA×2 on all positions
✅ Deploy the staking
✅ Buy SOL $30–$35
✅ This is the most important moment of the entire cycle
🧘 Psychology by Phase
PHASEFEELDO
Months 1–6Confident, easyDCA normal ✅
Black Swan"Crypto is dead"DCA ×2 ✅
Ranging 2027Boredom, doubtDCA normal ✅
Pump early 2028"I'd sell — I made ×3"Hold ✅
Alt season Sep 2028Reverse FOMOWatch targets ✅
January 2029"It'll go higher"DRAIN ALL ✅
BTC rotation"If only I'd held"Buy BTC ✅
October 2029Total euphoriaDRAIN ALL ✅
This document = your plan.
The plan = your edge.
Execution = your wealth.
🛡️ ADMIN CONSOLE
Owner-only control surface — kill switch, users, share tokens, system snapshot. Moderators get read-only access.
—
⏰ Trading Hours Report — UTC × BKK
WR + net PnL per hour (7d weekly · 30d monthly). Cron Mon 06:00 BKK + 1st of month. Live-hours whitelist (opt-in) restricts MEXC execution to your golden hours.
—
🚫 Bad Pairs Report — monthly audit
Pairs hard to read for the bots (low WR + net loss over 30d). Cron 1st of month 06:00 BKK. Blocklist is enforced in paper_fire + structure_correlator (no strikes emitted on listed pairs).
—
🚀 Launch
Before launch, every beta trial is pending — no countdown. Pressing Launch stamps the launch date, starts each pending trial's free window, and lets billing begin its countdown. Comps (owner & family) are never affected. One-time & irreversible.
Loading…
📋 Changelog Drafts
Edit, publish or delete unpublished entries — no more manual SQL. Delivered feedback (🚀) lands here as a draft. Published entries are immutable.
Click Refresh to load.
📊 Page Analytics
Visits by page — all users combined. Best-effort (client-side tracking).
Click Refresh to load.
📊 Page Feedback — 👍 / 👎 / 💬
Score = 👍 ÷ (👍+👎). All comments show below — click a row to filter to one page. Avg time from page analytics.
Loading…
📣 Weekly Telegram Digest
Top 5 new + top 5 upgrades from the last 7 days of published changelog · editable before send · « You ask for it, we deliver. »
Feature Flags
Loading…
🏆 KOLs — track record, audience & commissions
Every KOL, their verified track record, the users they brought, and what we owe them. Payouts are manual.
📈 CONTROLLED RAMP — affiliate KOLs open at 5 invites, +5 every Monday (04:33 UTC).
Partners (∞) are not capped — their slots are unlimited. The real ceiling is our weekly enrolment pace, not their quota.
Loading…
🔐 Early Adopter — price lock audit
Early Adopter prices are locked for life by DB trigger. Every attempt to modify one is logged here — blocked, timestamped, attributable.
Loading…
📊 Scaling headroom — does the system hold?
We enrol 5–10 users a week to measure. Sampled every 15 min — load, RAM, swap, disk, users. What matters is the slope, not the snapshot.
Loading…
BILLING COCKPIT
Loading…
UPCOMING PAYMENTS
Loading…
PAYMENT HISTORY
Loading…
RECONCILIATION
Loading…
Loading…
💵 Operating Costs & Profit Split
🤖 Claude Cost Monitor
Unified usage across all callers (Node + Python) · Haiku/Sonnet/Opus · per app / per user / per request type
MEXC AFFILIATE REVENUE
🏆 MEXC Affiliate — Qualifier & Invites
Users referred via mexc-PHANTOM ranked by trading volume + commission + recency. Generate PHTM-XXXX-YYYY codes (7d, single-use) for George to DM to qualified candidates.
📊 System Snapshot
DB counts · cron health · recent alerts · share tokens activity
Loading CRM…
USER MANAGEMENT
💳 Billing — manual confirmation
Confirm received payments by hand (TDI + Vault, per cadence). Milestone to Stripe at 60 paying users.
💰 Pricing & Subscription Tiers
Single source of truth · drives the profile widget, landing page price labels, and AI tier mapping · George fills the numbers.
🏆 Trading Rewards Tiers — volume-based discounts
More you trade via Phantom referral, less you pay. Volume thresholds + discount % per tier (VIP+ & VVIP separately). Whale tier can be 100% (free VIP+). George defines the thresholds.
⚠️ V1 = manual volume entry per user (via User Management). V2 once MEXC Affiliate API access is confirmed = auto-pull every billing cycle.
🎚️ Level Management — feature access matrix
Tick = enabled, untick = locked (shows 🔒 on the public Plans & Benefits page). Default after seed: ALL boxes ticked. Edit the value text to set the limit ("10 max", "1/h", "Phantom AI Pro"…). Drives the public Plans page in real time.
🛑 KILL SWITCH RUNNING
Live mode requires 2-step unlock per source (🔓 button + mode dropdown) — UI is the only path now.
⚔️ The Sacred Council — Bot Nomenclature
Each codename masks a strategic engine. Internal source identifiers are unchanged for backward compatibility — only the public-facing labels switch.
🗡️ Andúril
whale_trigger
Flame of the West. The reforged sovereign blade. Charges BTC and majors against directional whale flow detected by Kalhan VP + absorption ratio. Fires rare but heavy on institutional pressure setups.
🏹 Aeglos
oi_accumulation
Icicle, the spear of Gil-galad. Long reach, decisive piercer. Accumulates Open Interest while price stays flat, then fires on the first 15m HH/HL break. Invalidates instantly if OI reverses or 1H/4H flips.
📜 Narsil
structure_correlator
The Ancestral Blade. Correlates Kalhan VP with multi-timeframe structure (15m + 1H). The 1h-dominant rule decides direction. Currently the Council's sharpest edge — best win rate and reward-to-risk in the lineup.
🔮 Glamdring
accumulation_htf
Foe-Hammer of Gandalf. Patient HTF energy. State machine IDLE → WATCHING → STRIKE on 4H setups with sustained OI accumulation and HTF structure not opposing. Asymmetric reward, slow cadence.
💠 Sting
ltf_break_smart
The Elvish Blade that glows blue when danger is near. Snipes very fresh 15m HH/HL breaks (under 33min) with confirmation from OI, ATR expansion and buy ratio. Smart exit on 4H flip or OI fade.
⚔️ Hadhafang
decorrelator
Throng-cleaver. Catches decorrelation bounces — when an alt stays put while BTC flushes (≥3% divergence, 1h not bearish), Hadhafang strikes a LONG with tight TPs +1% / +2% / +3% and SL -1.5%. Dead-cat protection via 1h-bearish gate + DCB watch reject. Tuned 2026-06-03.
🪞 Palantír
claude_watcher_v2 · seer
The Seeing-Stone. No longer a striker — fire path disabled. Continuously scores all watched pairs through Phantom AI and Kalhan, feeding the Council with conviction signals. Pure observer / oracle.
⚡ SOW
v_bounce
Spirit of Whitewind. The V-bounce archetype — snipes V (LONG) / Λ (SHORT) reversal candles on fresh extreme swings (drop ≥3.5% then reclaim). Wide ladder 2% / 5% / 10% with the runner trailing under the swing. The Council's skew-capturer on whale-driven alts — best reward-to-risk of the strikers.
👁️ Shadow
whale_pure_shadow · paper
The Unseen Watcher. Pure whale-flow validator running in shadow — paper only, fires nothing real. Gated version: phase gate + empirical ladder (50/30/20) + 12h lockout + runner ratchet (BE after TP1, 3% trail post-TP2). High cadence — the Council's forward-validation engine on CAT2 alts.
📂 Other (relegated — kept for data, not promoted)
🌀 Funding Squeeze Probe · funding_alert 🛡️ Forecast Bridge · forecast_phantom · paused for later
🎓 Help & Training — Content Manager
Videos (YouTube unlisted) + Guides (Scribe/Arcade links). Feature flag OFF by default — enable below to surface the Training tab to users.
Feature flag Loading…
+ Add new item
Click Refresh to load.
MY BILLING
CURRENT PLAN
loading…
INVOICE HISTORY
loading…
Click any invoice to view details, print, or download.
PAYMENT METHODS
Current: USDT via NowPayments
🎨 Token Settings
⚙️ App
📊 My Activity
Loading…
🔔 HTF Level Alerts
Be alerted when a pair approaches a major HTF level. BOUNCE 1.5% · HEAVY 2.5% · DÉCISION 4%.
Loading…
Welcome to Phantom
How much trading experience do you have? This tailors how much we show you — you can change it anytime in Settings.
Your experience level
Token Analysis
Study a token before you trade it — structure, ICT zones, institutional HTF levels, bot context. Curated set (majors + gold), no volatile micro-caps.
Pick a token above to analyze.
Pattern Alerts
System-detected multi-timeframe patterns with a conviction score. Educational, not financial advice.
Loading system alerts…
Phantom Setups
Analyst trade setups — entries, targets, invalidation, auto-tracked. Educational, not financial advice.
Loading setups…
💬 Got a question?
Reach us directly on Telegram — we're happy to help.
📱 Message us on Telegram
📖 Glossary — every acronym in the app
Click any term anywhere in the app to jump here. Use search or category pills below.

Trading basics

SL Stop Loss. The price level at which the trade is closed to limit a loss. On Phantom TDI, SLs are client-side (held in the daemon, never sent to the exchange) to avoid MEXC stop-hunts. Example: LONG entry $100, SL at $98 = -2% max loss.
⚠️ Never enter a trade without an SL set first. Your SL distance defines your position size, not the other way around. Move SL only TIGHTER (towards entry as price moves in your favor), never wider to "give it room" — that's how small losses become liquidations. A 2% SL on 20× leverage = -40% of margin if hit; size accordingly.
TP / TP1 / TP2 / Moon Take Profit. Price levels at which a portion of the position is closed in profit. TP1 / TP2 / Moon = progressive levels (often 30% / 30% / 40% of the position).
⚠️ Don't open a trade without a clear target. If you can't name where you're taking profit BEFORE entering, you're not trading — you're hoping. Always plan TP1/TP2/Moon at entry; ideally each TP justified by structure (next swing high/low, FVG, key resistance), not arbitrary % steps. Take partials at TP1 — it locks in the win and removes pressure on the runner. Hoping for Moon on 100% of position = the classic "rode it back to BE" loss.
BE Break Even. The entry price — exiting at BE means no profit and no loss (excluding fees). "Move SL to BE" = lock in zero loss after price has moved in your favor.
⚠️ Don't move SL to BE too early. BE looks safe but causes the most regret trades — you get stopped out on normal noise then watch the move continue. Wait until at least TP1 hits OR price has moved 1.5× your initial SL distance in your favor. On HTF setups (12H/1D ICT) leave SL wider longer; the natural swing range is too large for tight BE plays.
PnL Profit and Loss. Net result of a trade, expressed in $ or %. Includes fees.
⚠️ Always look at NET PnL (after fees). A $1.60 round-trip fee on $800 notional eats 0.20% off any trade. Scalping for <1% moves on 20× leverage is fee-heavy — you need WR way above 50% to break even on fees alone.
WR Win Rate. % of trades closed in profit out of total trades. A 60% WR with 1:2 risk/reward beats an 85% WR with 1:0.3.
⚠️ WR alone is meaningless. Expectancy = (WR × avg win) − ((1−WR) × avg loss). A 40% WR strategy with 1:3 RR is HIGHLY profitable; an 80% WR with average wins half the size of losses is a slow bleed. Track expectancy, not WR.
RR / R:R Risk / Reward ratio. Expected gain divided by potential loss. 1:3 = if SL = $20, TP = $60. Higher RR allows lower WR to still be profitable.
⚠️ Target minimum 1:2 RR on every trade. Below 1:2 you need >55% WR just to break even with fees — hard in any market. The PRE-STRIKE alerts on Phantom TDI usually offer 1:2.5 to 1:4 (SL 1.5-2%, TP1 5%). If a setup gives you only 1:1 or worse, skip it.
LONG Long position. Bet that price goes up. Buy low, sell higher.
⚠️ LONG against a bearish macro (F&G < 30) is a counter-trend trade. Expect lower WR. The current Phantom TDI Narsil v2 rule blocks LONG on BEAR_BEARISH macro for that exact reason. Don't fight the dominant flow without an exceptional setup.
SHORT Short position. Bet that price goes down. Sell high (borrowed), buy back lower.
⚠️ SHORT in a bull market = squeeze risk. Crowded shorts get violently squeezed on positive news. Funding rate > +0.05% / 8h means too many longs are paying shorts — fine. But funding < -0.05% means shorts pay longs (= shorts crowded = squeeze setup AGAINST you).
Leverage Borrowed multiplier on position size. 20× leverage on $40 margin = $800 notional exposure. A 5% move = +/-100% on your margin.
⚠️ 20× leverage liquidates on a ~5% adverse move. With isolated margin you lose only the $40 — but you DO lose it. 50× / 100× leverage liquidates on 2% / 1% — one wick kills you. Don't chase higher leverage to "size up" — size up by increasing margin, not leverage. Phantom TDI's standard is 20× for a reason.
Notional Position size in $. margin × leverage. $40 × 20× = $800 notional. Used to compute fees and effective exposure.
⚠️ Notional is your REAL exposure on the market. A 1% move on $800 notional = $8 (= 20% of your $40 margin). Always think in notional terms when judging if a setup is worth the SL distance.
Margin Capital actually committed. On Phantom TDI all trades use $40 of margin × 20× = $800 notional. If you lose 100% of margin, you're liquidated.
⚠️ Never risk more than 1-2% of total capital per trade. On $4,000 portfolio, 1% = $40 = the standard Phantom TDI bet size. If you're tempted to "go bigger" on a high-conviction setup, ASK YOURSELF: would you take this same trade if you'd just lost the last 3? If no, the size is wrong.
Trail / Trailing stop Dynamic SL that ratchets up (LONG) or down (SHORT) as price moves in your favor, locking in progressive profit. Triggers exit only on a retracement of N% from the running peak.
⚠️ Trail too tight = killed on normal noise. A 1% trail on a 5%+ move gets stopped on every breath. Phantom TDI's Kalhan runner uses structural trail (last 15m HL for LONG / LH for SHORT) instead of fixed % — it lets the trade breathe but cuts on real direction change. Never trail BEFORE TP1 hits — you'll be stopped at -1% on the typical pre-move pullback.
Fees Trading costs. MEXC taker fee = 0.10% per side = ~0.20% round-trip on notional. $800 notional → ~$1.60 in fees.
⚠️ Fees compound silently. 10 trades/day × $1.60 = $16/day = $480/month gone just to fees. If you're a scalper, use limit orders (maker fees ≈ 0% on MEXC) instead of market orders. If you're a swing trader on HTF setups, fees are negligible vs the move size.

Setup metrics

MFE Maximum Favorable Excursion. The best move in your favor since the setup/trade was created. LONG = highest price reached. SHORT = lowest. Measured as % from entry. A setup with MFE +5% means price reached at one point 5% in your direction before the move was over.
⚠️ MFE is what you COULD have captured, not what you DID. If your TP1 was 2% and MFE was 5%, you took 2% — you didn't leave 3% on the table, you just had a different plan. Use MFE to retroactively assess if your TP placement was good (= near MFE = great) or too greedy (= TP never hit, MFE was lower).
MAE Maximum Adverse Excursion. The worst move against since the setup/trade was created. LONG = lowest price. SHORT = highest. Measured as % from entry. MAE +2% = at some point the trade was 2% in the red before recovering (or being stopped).
⚠️ MAE tells you if your SL was right-sized. If MAE keeps coming within 0.2% of your SL on winners, your SL is too tight — you're surviving by luck. If MAE rarely exceeds 0.5% on a 2% SL, you can size up. Track the MAE/SL ratio across 20+ trades to tune SL distance.
Move validation Did the setup work? Reads the order of MFE vs MAE: CLEAN = MFE>1% with no MAE>1%. MOVE FIRST = MFE>1% before MAE>1% (setup validated). STOP FIRST = MAE>1% before MFE>1% (you'd have been stopped). STOP ONLY = drawdown only. NO MOVE = flat.
RSI Relative Strength Index. Momentum oscillator (0-100). >70 = overbought, <30 = oversold. We use the 14-period RSI on multiple TFs for context.
EMA Exponential Moving Average. Trend-following average with more weight on recent prices. EMA 21 / 50 / 200 are common. Death cross = 50 crossing below 200 (bearish). Golden cross = inverse (bullish).
ATR Average True Range. Volatility measure — average size of recent candles. Used to size SL/TP relative to current volatility.
OI Open Interest. Total $ value of all open futures contracts on a pair. Rising OI + rising price = real new buyers. Rising OI + falling price = real new sellers. Falling OI = positions being closed.
VP Volume Profile. A measure of how strong a candle/move is relative to the past N candles. VP ≥ 1.5 = strong; VP < 0.75 = weak. Used as a filter on signal quality.
Funding Funding rate on perpetual futures — periodic fee between longs and shorts. Positive = longs pay shorts (crowd is long). Extreme positive funding = short-squeeze risk.
⚠️ Read funding as a CROWD POSITIONING indicator, not a directional signal. +0.05%/8h funding alone means nothing; +0.05% PERSISTENT for 24h+ means longs are stubborn and a flush is loading. Phantom TDI's FUNDING_SQUEEZE bot enters SHORT only when funding extreme persists AND 15m structure breaks down — never on funding alone.
IV Implied Volatility. Options market's forecast of how much a price will move. Higher IV = more premium = traders expect movement.

Market structure

HH / HL Higher High / Higher Low. Each new swing high is higher than the previous, and each pullback bottoms higher = bullish trend structure.
LH / LL Lower High / Lower Low. Each new swing high is lower, and each pullback bottoms lower = bearish trend structure.
TRANSITION Transitional structure. Just broke a previous LL (TRANSITION_BULL) or HH (TRANSITION_BEAR) — early sign of a regime flip, before full HH/HL or LH/LL is confirmed.
UNCLEAR Structure can't be classified — range / chop / no clean swings. Most filters reject UNCLEAR.
Pivot A confirmed swing high or low point — used to read structure (HH/HL...) and anchor entries/SLs.
Structure break Price crosses and closes past the previous swing high (bull break) or low (bear break) — used as an entry trigger.
HTF Higher Time Frame. 4H / 12H / 1D / 1W candles — used for trend / regime context.
LTF Lower Time Frame. 15m / 1H — used for precise entry timing once HTF context is clear.
TF Time Frame. Candle period: 15m, 1H, 4H, 12H, 1D, 1W.

ICT methodology

ICT Inner Circle Trader. Trading methodology focused on institutional order flow: liquidity pools, fair value gaps, order blocks, killzones. The Wraith bot uses ICT zones.
FVG Fair Value Gap. A 3-candle pattern where there's a price gap (high of candle 1 below low of candle 3, or vice-versa) — institutional displacement. Price often returns to "fill" the FVG before continuing.
⚠️ Not every FVG fills. Untested FVGs in strong trends often stay open for days. Use FVG as a HIGH-PROBABILITY zone, not a certainty. Anchor your SL OUTSIDE the FVG body (= candle high for SHORT, low for LONG) — if price closes through the FVG body, the institutional bias has flipped.
OB Order Block. The last opposing candle before a strong move — where institutions stacked orders. Used as an entry zone on retest.
Liquidity Stops/orders clustered at obvious levels (above swing highs = buy-side liquidity, below lows = sell-side). Price often sweeps these before reversing.
Displacement A strong impulsive move that breaks structure and leaves an FVG — sign of real institutional intent.
PD Array Premium / Discount Array. Above 50% of a swing = premium (look to short). Below 50% = discount (look to long).
Killzone ICT-defined high-probability trading windows: Asia 19:00-22:00 NY, London Open 02:00-05:00 NY, NY Open 07:00-10:00 NY. Most institutional moves happen here.
⚠️ Killzones = high volatility = high slippage. Market orders during NY Open can fill 0.3-0.8% off the displayed price. Prefer LIMIT orders during killzones. Also: the BIGGEST losses often come from chasing post-killzone breakouts that were the killzone's stop-hunt fakeout.
SMC Smart Money Concepts. Umbrella term for the structure / FVG / OB / liquidity reading approach (ICT + variants).

Macro & sessions

F&G Fear & Greed Index (alternative.me). 0-100 sentiment. <25 = extreme fear (often a bottom signal). >75 = extreme greed (often a top signal). Currently we're around 22 = a real fear market.
BTC.D / BTC Dominance BTC's share of the total crypto market cap. Rising = capital rotating into BTC (bad for alts). Falling = altseason setup.
Liqs / Liquidations Forced position closures when leverage runs out of margin. Big liquidation events accelerate moves and create stops cascade.
⚠️ Don't fade fresh liquidation cascades — chase them. A $100M+ long liquidation pulse usually overshoots by 2-3% in the squeeze direction before mean-reverting. Entering against that pulse early = max regret. Wait for the cascade to exhaust (= liq volume drops 50%+ in 5min) before counter-trading.
L/S Ratio Long/Short ratio. Top trader L/S vs retail L/S — divergence (retail long, pros short) flags potential squeezes.
CME Chicago Mercantile Exchange. Where institutions trade BTC/ETH futures. Open Mon-Fri 23:00-22:00 UTC (closed weekends). CME "gaps" (price differences from Friday close to Sunday open) often get filled.
NYO New York Open. 09:30 ET = 14:30 UTC = 21:30 BKK. Often the most volatile period of the day.
LO London Open. 03:00 ET = 08:00 UTC = 15:00 BKK. Sets the European session tone.
Asia session ~19:00-04:00 NY = 07:00-16:00 BKK. Typically lower volatility — accumulation / range.
Max pain Options expiry price where the most contracts expire worthless — strong magnet for spot price near expiry.
DXY US Dollar Index. USD strength vs basket of major currencies. Rising DXY usually bearish for risk assets (BTC, equities).
BKK Bangkok time (UTC+7). All Phantom TDI timestamps display in BKK by default.
UTC Coordinated Universal Time. Global reference time. BKK = UTC + 7.

Tokens & exchanges

MEXC The primary exchange Phantom TDI trades on. Centralized, supports perpetual futures. Stop orders are NEVER sent here (MMs hunt them) — all exits client-side.
WEEX Secondary exchange (bridge in progress). Covers pairs MEXC doesn't list.
BTC Bitcoin — reference crypto. Most pairs correlate to BTC moves.
ETH Ethereum — second-largest crypto, smart-contract platform.
USDT Tether — most-used stablecoin (USD-pegged). All futures pairs quoted in USDT.
USDC USD Coin — Circle's regulated stablecoin. Used in DCA Vault / yield strategies.
APY Annual Percentage Yield. Yearly return including compounding. 5% APY = $1,000 → $1,050 after 1 year.
DCA Dollar Cost Averaging. Buy a fixed $ amount on schedule regardless of price — smooths volatility, avoids timing risk.
MM Market Maker. Entity that provides liquidity. On MEXC, MMs are known to hunt stops resting on the orderbook — hence client-side stops only.
⚠️ Never put SL/TP orders directly on MEXC. Resting orders are visible to MMs who push price to sweep them, especially at obvious round numbers and prior swing highs/lows. Phantom TDI's entire exit pipeline (trade_manager, position_fast_tracker, Kalhan) holds stops CLIENT-SIDE and only sends a market close when triggered.
Perp / Perpetual Futures contract without an expiry. Trades around spot via the funding mechanism.
Spot Direct ownership of the underlying token (vs derivatives like perp futures).
`; const win = window.open('', '_blank'); win.document.write(html); win.document.close(); toast('Bot report opened — use the toolbar to Save as PDF or Close ✓'); } // ── CSV EXPORT ──────────────────────────────────────────────────────────── /* `opts` permet d'appeler l'export SANS les champs de la page Exports — le journal de trading n'en a pas. On ne duplique pas la génération : un second générateur de CSV serait un second lieu de naissance pour le même format, et les deux divergeraient au premier ajustement de colonnes. */ async function exportCSV(type, opts){ if (type === 'bot') return _exportBotReport('csv'); const o = opts || {}; const _el = id => document.getElementById(id); const m = o.month !== undefined ? +o.month : +(_el('report-month')||{value:new Date().getMonth()}).value; const y = o.year !== undefined ? +o.year : +(_el('report-year') ||{value:new Date().getFullYear()}).value; const period = o.period !== undefined ? o.period : (type === 'trading' ? (_el('trade-report-period')||{value:'month'}).value : 'month'); const d = getReportData(type, period, m, y); let csv = ''; const NL = '\n'; const filename_base = type === 'full' ? 'phantom_report_'+d.monthName+'_'+d.y : 'phantom_trading_'+d.monthName+'_'+d.y; if(type === 'full' || type === 'trading'){ csv += 'TRADES' + NL; csv += 'Date,Type,Symbol,Direction,Setup,Timeframe,Session,Result,PnL,RR,Risk,Note' + NL; d.trades.forEach(t => { csv += [ t.traded_at ? t.traded_at.split('T')[0] : '', t.type, t.symbol, t.direction, t.setup||'', t.timeframe||'', t.session||'', t.result, (+t.pnl).toFixed(2), t.rr ? (+t.rr).toFixed(2) : '', t.risk_usd ? (+t.risk_usd).toFixed(2) : '', (t.note||'').replace(/,/g,' ') ].join(',') + NL; }); } if(type === 'full'){ csv += NL + 'DCA VAULT' + NL; csv += 'Token,Symbol,Qty,Avg Price,Total Invested' + NL; d.cryptoToks.forEach(tok => { const { qty, cost, avg } = getStats(tok); csv += [tok.name, tok.symbol, qty.toFixed(6), avg.toFixed(4), cost.toFixed(2)].join(',') + NL; }); csv += NL + 'EQUITY SNAPSHOTS' + NL; csv += 'Date,Crypto Invested,USDC Balance,Trade PnL,Notes' + NL; d.snaps.forEach(s => { csv += [ s.snapshot_date, (s.crypto_cost||0).toFixed(2), (s.usdc_balance||0).toFixed(2), (s.trade_pnl||0).toFixed(2), (s.notes||'').replace(/,/g,' ') ].join(',') + NL; }); } // Download const blob = new Blob([''+csv], { type: 'text/csv;charset=utf-8;' }); const url = URL.createObjectURL(blob); const a = document.createElement('a'); a.href = url; a.download = filename_base + '.csv'; document.body.appendChild(a); a.click(); document.body.removeChild(a); URL.revokeObjectURL(url); toast('CSV exported ✓'); } // ── PDF EXPORT ──────────────────────────────────────────────────────────── async function exportPDF(type, opts){ if (type === 'bot') return _exportBotReport('pdf'); const o = opts || {}; const _el = id => document.getElementById(id); const m = o.month !== undefined ? +o.month : +(_el('report-month')||{value:new Date().getMonth()}).value; const y = o.year !== undefined ? +o.year : +(_el('report-year') ||{value:new Date().getFullYear()}).value; const period = o.period !== undefined ? o.period : (type === 'trading' ? (_el('trade-report-period')||{value:'month'}).value : 'month'); const d = getReportData(type, period, m, y); const allMetrics = calcMetrics(d.trades); const botMetrics = calcMetrics(d.botTrades); const manMetrics = calcMetrics(d.manTrades); const cryptoTotal = d.cryptoToks.reduce((s,t)=>s+getStats(t).cost,0); const usdcTotal = d.usdcTok ? getStats(d.usdcTok).cost : 0; const equityStart = d.snaps.length > 0 ? (d.snaps[0].crypto_cost||0)+(d.snaps[0].usdc_balance||0) : 0; const equityEnd = d.snaps.length > 0 ? (d.snaps[d.snaps.length-1].crypto_cost||0)+(d.snaps[d.snaps.length-1].usdc_balance||0) : 0; const equityGrowth= equityStart>0 ? ((equityEnd-equityStart)/equityStart*100) : 0; const setupRows = Object.entries(d.setupMap).map(([setup, s]) => `${setup}${s.wins+s.losses+s.be}${s.wins>0?Math.round(s.wins/(s.wins+s.losses+s.be)*100):0}% ${s.pnl>=0?'+':''}$${fmtD(s.pnl)}` ).join(''); const sessionRows = Object.entries(d.sessionMap).map(([sess, s]) => `${sess}${s.count}${s.count>0?Math.round(s.wins/s.count*100):0}% ${s.pnl>=0?'+':''}$${fmtD(s.pnl)}` ).join(''); const tradesRows = d.trades.slice(-30).map(t => ` ${t.traded_at?t.traded_at.split('T')[0]:''} ${t.type} ${t.symbol} ${t.direction} ${t.setup||'—'} ${t.session||'—'} ${t.timeframe||'—'} ${t.result} ${+t.pnl>=0?'+':''}$${fmtD(+t.pnl)} ${t.rr?(+t.rr).toFixed(2)+'R':'—'} ` ).join(''); const dcaRows = type === 'full' ? d.cryptoToks.map(tok => { const { qty, cost, avg } = getStats(tok); const p = getTokenPrice(tok); const liveVal = p && qty > 0 ? p.price * qty : null; const pnlUsd = liveVal !== null ? liveVal - cost : null; return ` ${tok.symbol} ${tok.name} ${fmtQ(qty)} $${fmtP(avg)} $${fmtD(cost)} ${liveVal!==null?'$'+fmtD(liveVal):'—'} ${pnlUsd!==null?(pnlUsd>=0?'+':'')+'$'+fmtD(Math.abs(pnlUsd)):'—'} `; }).join('') : ''; const reportTitle = type === 'full' ? `Full Monthly Report — ${d.monthName} ${d.y}` : `Trading Report — ${d.monthName} ${d.y}`; const html = `