Commit Graph

86 Commits

Author SHA1 Message Date
ramseshk cbbd0ef941 Fix Mean Reversion VWAP bug — was never firing
Root cause: VWAP weighted the current price highest so dev≈0 always.
- Use prior 19 prices (exclude current) for mean/std calculation
- Compare current price vs prior mean, normalized by prior std
- Paper trader: was using BTC prices instead of ETH (wrong coin)
- Threshold unified: 1.0σ (was 1.5σ in paper, 1.0σ in live)

Backtests show BTC Mean Reversion: +76.42% PnL, 91% win, 22 trades.
2026-08-06 07:28:31 +00:00
ramseshk ff3e68855c Repo cleanup: README with full stack summary + .gitignore + remove stale backups 2026-08-06 07:21:04 +00:00
ramseshk 3cc68cd46a Fix Hurst/VPIN exit logic — time-based exit (20 bars max holding)
Backtest on 6000 synth trades: 46 trades, 44 wins, +1.10% PnL.
Entry: H>0.52 + VPIN>0.15 + direction bias
Exit: after 20 bars OR Hurst decay below exit threshold
2026-08-06 07:13:17 +00:00
ramseshk b0eaee47db Hurst/VPIN backtest: 1 trade, 0% PnL (synthetic — selective by design) 2026-08-06 07:03:12 +00:00
ramseshk cf376f2995 Deploy Hurst/VPIN directional strategy to live + paper
Live node:
  - Added Hurst VPIN to STRATEGIES (BTC, 0.00024 size, 00)
  - Feed BTC price into dollar-bar Hurst/VPIN every 5 ticks
  - Signal: BUY/SELL when H>0.55 + VPIN>0.25 + direction bias

Paper trader:
  - Added Kalman Pairs, Avellaneda-Stoikov, Hurst VPIN strategies
  - All 00 allocation, matching live node asset distribution
  - Hurst/VPIN signal from BTC mid-price dollar bars

Strategy file: hurst_vpin_live.py (lightweight price-tick mode)
2026-08-06 06:51:51 +00:00
ramseshk a8ed3cafe0 Fix memory guard: remove RLIMIT_AS (blocks Python heap), VmRSS-only 2026-08-06 06:40:08 +00:00
ramseshk 298b9c8020 Memory guard: 512MB hard cap, GC at 256MB, 2GB swap 2026-08-06 06:31:16 +00:00
ramseshk 2176910fab QuantReport: handle API error responses, restart paper trader 2026-08-06 06:19:42 +00:00
ramseshk c98681c130 Fix historical cards + Hurst/VPIN strategy
Historical tab fix:
  - StrategyCard: handle BacktestSummary type (not Strategy)
  - Pass coin/badge/stats/pnlPct/status props for historical
  - Historical cards now show proper data

Hurst/VPIN directional strategy (Hyperliquid BTC-USD):
  - Dollar bars (constant-notional 0K)
  - Hurst exponent R/S analysis on 128-bar window
  - VPIN on 50-bucket volume imbalance
  - Quote-driven entry: both signals agree → BUY/SELL
  - Exit: Hurst decays below exit threshold
2026-08-06 04:49:00 +00:00
ramseshk 6a39125fee Fix detail view crash + QuantReport safety check
- QuantReport: handles empty backtestId gracefully (live/paper)
- QuantReport: only fetches for historical tab (has backtest data)
- Shows No data available for live/paper views
- Ubuntu font throughout: layout, header, tabs, cards
- Consistent Hallmark Cobalt light palette
2026-08-06 04:37:23 +00:00
ramseshk 6552511978 Hallmark Cobalt: unified light palette + Ubuntu fonts
Layout: Ubuntu + Ubuntu Mono (next/font/google), light mode
CSS: Hallmark Cobalt palette — cool paper bg, hairlines,
  electric cobalt primary, slate secondary
Cards: white bg, hairline borders, muted type badges
Header/tabs: Ubuntu Mono labels, Ubuntu tab buttons
Removed: dark mode, Inter/JetBrains Mono, purple gradients
2026-08-06 04:22:50 +00:00
ramseshk 98ee58dfaa Hallmark redesign + QuantReport fix
Header/Tabs: Hallmark Cobalt aesthetic
  - Hairlines, cool paper bg, JetBrains Mono + Inter
  - Electric cobalt accent on active tab
  - No branding, no purple badges, no gradients

QuantReport: inline in strategy detail view
  - Renders below trade history on every tab
  - API maps strategy name -> file prefix
  - Proper backtestId from historical data

Server: strategy-name-to-prefix lookup
  ofi, avellaneda, iceberg, momentum, mean_rev,
  funding_arb, kalman_pairs, pairs
2026-08-06 04:14:21 +00:00
ramseshk 8cb59239c6 Hallmark Cobalt header: clean professional nav
Removed: FTDT Quant Lab branding, purple badges, green pulse dot,
  shadcn Tabs dependency, backdrop blur noise
Replaced with: Hallmark Cobalt engineered aesthetic
  - Hairline borders (#e0e4ec), cool paper (#f8f9fb)
  - JetBrains Mono header labels, Inter tab buttons
  - Electric cobalt (#0ea5e9) signal accent on active tab
  - Flat text labels: Live · Paper · Historical
  - Status dot + CONNECTED/OFFLINE subtle indicator
  - No shadows, no gradients, no rounded cards
2026-08-06 03:59:41 +00:00
ramseshk 232d2dae10 Quant Report inline: embed in strategy detail view
Removed: popup button + fullscreen overlay
Added: QuantReport renders directly below trade history
  in every strategy detail view (live, paper, historical).
  White background, 6-panel layout, QF-Lib header.
2026-08-06 03:56:23 +00:00
ramseshk 79870925f7 Fix QuantReport: fuzzy file matching + proper backtestId from historical data
- API: fuzzy matcher resolves files by strategy name substring
- Frontend: backtestId now uses historical[name].name (the filename)
- Server restarted with quant_report endpoint
2026-08-06 03:50:28 +00:00
ramseshk 0e08543823 QF-Lib Quant Report: full strategy performance analytics
Backend: strategies/quant_report.py
  - equityCurve: daily PnL from trade history
  - monthlyReturns: heatmap matrix (years x months)
  - yearlyReturns: bar chart data with mean
  - monthlyReturnDistribution: histogram bins
  - qqPlot: theoretical vs observed quantiles
  - rollingStats: 6-month rolling return + volatility

API: /api/quant-report/{name}
  Computes full report from any backtest JSON file

Frontend: QuantReport.tsx
  - Strategy Performance chart (equity curve, blue line)
  - Monthly Returns heatmap (blue saturation)
  - Yearly Returns bar chart with mean line
  - Distribution histogram
  - Normal QQ plot with diagonal reference
  - Rolling Statistics (6-month, dual line)
  - QF-Lib header with logo and metadata
  - Access via QF-Lib Report button in detail view
2026-08-06 03:37:25 +00:00
ramseshk 03ebe9e795 Paper trader: 00 per strategy, match live node 8-strategy set
- Capital: 00,000 -> 00 (8 x 00)
- 12 old strategies -> 8 core strategies matching live node
- Asset distribution: 4 BTC + 4 ETH
- Removed Hawkes/DeepLOB/Cartea/Gueant/QueueImbalance imports
- Added Kalman Pairs signal generation
- All strategies share same signal logic as live node:
  BTC: OBI, Iceberg, Funding, A-S
  ETH: Pairs, Momentum, Mean Reversion, Kalman
2026-08-06 03:22:05 +00:00
ramseshk 0b8943c926 PostgreSQL persistence layer + seen_fills fix
New: strategies/persistence.py
  Tables: strategies_snap, trade_log, equity_history, fill_tracker
  Auto-creates on first use, batches inserts per tick

Fix: seen_fills loads from PG (not 2000 API fills)
  Before: every restart loaded all 2000 fills from API into
  seen_fills, blocking new fills with matching TIDs for ~20min
  After: only loads last 100 from API + full history from PG.
  New fills saved to PG immediately - survives restarts.

Live node integration:
  - write_metrics() → save_strategies() every tick
  - On fill → save_trade() to trade_log
  - On fill → TID saved to fill_tracker for cross-restart dedup
2026-08-06 03:12:10 +00:00
ramseshk 162c535c7c Lower thresholds for silent strategies:
- Funding: 3% -> 1% APR (BTC funding ~0.87%, still below)
- Kalman: Z-entry 2.0 -> 1.5 sigma
- Momentum: 1.2σ -> 1.0σ Bollinger bands
- Mean Reversion: 1.0σ -> 0.8σ VWAP deviation
2026-08-05 10:23:37 +00:00
ramseshk 941c07fe32 Per-strategy type badges with color coding + asset labels
reversal:    blue    (OBI, Mean Reversion)
  momentum:    amber   (Iceberg, Momentum Breakout)
  stat_arb:    purple  (Pairs, Kalman Pairs)
  carry:       cyan    (Funding Rate Arb)
  market_making: emerald (Avellaneda-Stoikov)

Each card now shows: [TYPE badge] [ASSET] [status] [maker/taker]
2026-08-05 10:05:43 +00:00
ramseshk bf137a08a3 Comprehensive live strategy review and fixes
Strategy asset redistribution:
  BTC-USD-PERP: OBI (0.000200), Iceberg (0.000210), A-S (0.000230), Funding (0.000220)
  ETH-USD-PERP: Pairs (0.006), Momentum (0.0005), Mean Reversion (0.0005), Kalman (0.005)

Bug fixes:
  - OBI size: 0.000200504030201000 -> 0.000200 (garbage from bad replace)
  - Iceberg: up>=7 BUY, up<=3 SELL (was both firing at up==5)
  - Kalman: unique ETH size 0.005 (was 0.006 colliding with Pairs)
  - Momentum: switched to ETH data, tighter 1.2sigma bands
  - Mean Reversion: switched to ETH data, higher vol = more signals
  - Pairs: sharper Z threshold 1.2 (was 1.5)

Strategy types (for dashboard viz):
  reversal: OBI, Mean Reversion (equity + PnL cards)
  momentum: Iceberg, Momentum (breakout visualization)
  stat_arb: Pairs, Kalman (spread + hedge ratio charts)
  carry: Funding Rate Arb (funding rate gauge)
  market_making: Avellaneda-Stoikov (quote tracking)
2026-08-05 10:03:36 +00:00
ramseshk d31d301822 Clean dashboard: remove footer links + positions panel
Removed:
  - Three footer link cards (ftdt.io, Quant Lab, Git Repo)
  - Open Positions & Orders collapsible panel
  - Unused imports (Activity, Database, TrendingUp, Collapsible)

Positions already shown live on each strategy card (Pos: 0.0000).
Dashboard is now cleaner: strategies grid + L2 Terminal button only.
2026-08-05 09:55:56 +00:00
ramseshk f198d2ccf6 L2 Terminal: full-screen SOTA order book depth map
Replaces the cramped 480px component with a full-screen
production-grade trading terminal:

  DOM Ladder (25%):
    - 40 price rows centered on mid
    - Bid/ask volume bars with opacity scaling
    - Floating mid price, volume text on both sides

  Depth Heatmap (75%):
    - Cumulative volume profile (filled gradient areas)
    - Green bid fill, red ask fill
    - Yellow dashed mid line with floating labels
    - Price axis, volume scale, imbalance gauge

  Trade Tape (30% bottom):
    - Amber trade path with colored markers
    - Sized dots (trade size proportional)
    - Latest trade callout with direction

  Header bar:
    - Live connection indicator, mid, spread, imbalance
    - Real-time trade count

Access: click L2 Depth Map button on main dashboard
Fullscreen overlay with close button, ESC to dismiss
2026-08-05 09:45:54 +00:00
ramseshk 9b1d46526b Fix strategy isolation: unique sizes + testnet meta fallback
- 6 BTC strategies now have unique sizes (0.000200-0.000250)
- Fill attribution uses tighter tolerance (1e-6) for unambiguous matching
- Testnet meta API returns null -> fallback to mainnet for perp loading
- All strategies placing orders with correct isolation
2026-08-05 09:29:29 +00:00
ramseshk e9629b698b Fix Hyperliquid WebSocket subscribe format: type -> method 2026-08-05 09:04:40 +00:00
ramseshk bfc3214967 Fix L2 tape visibility: add to OBI detail component
Root cause: OrderBookDepthMap was only in non-OBI detail branch.
When user clicked Order Book Imbalance card, the OBIDetail component
replaced the entire detail view, and the tape was never mounted.

Fix: Added OrderBookDepthMap to OBIDetail component below trade history.
Now visible in ALL strategy detail views (both OBI and non-OBI).
2026-08-05 08:58:11 +00:00
ramseshk fb231eef7c Strategy isolation fix: unique sizes + tighter fill matching
Root cause: 6 BTC strategies shared size=0.0002. Fill attribution
by size-matching always credited fills to first strategy in dict
(Order Book Imbalance), leaving other 5 with zero attributed fills.

Fix:
  OBI:     0.000200 (unchanged)
  Iceberg: 0.000210 (+5%)
  Funding: 0.000220 (+10%)
  A-S:     0.000230 (+15%)
  Momentum:0.000240 (+20%)
  MeanRev: 0.000250 (+25%)

Matching tolerance tightened 1e-5 → 1e-6 for unambiguous attribution.
Also fixed MAINNET_INFO → TESTNET_API undefined variable.
2026-08-05 08:43:48 +00:00
ramseshk 2f74e076b4 Live L2 Order Book + Trade Tape visualization (Bookmap-style)
New components:
  - hyperliquid-ws.ts: WebSocket hook for Hyperliquid L2 + trades
    - Auto-reconnect, ring buffer (500 trades)
    - Computes imbalance, total bid/ask volume, mid, spread
    - Type-safe interfaces: L2Snapshot, TradeTapeEntry

  - orderbook-depth-map.tsx: Dual-panel Canvas 2D visualization
    - Top panel (~55%): L2 volume profile histogram
      - Green bid bars (#00C853), red ask bars (#FF1744)
      - Yellow mid line (#FFEB3B) with floating price labels
      - Price axis, volume scale, orange mid marker
      - Quant overlay system: fair value, VWAP, signals
    - Bottom panel (~45%): Live trade tape
      - Amber trade path (#FFAB00)
      - Buy/sell markers (green/red dots sized by trade size)
      - Latest trade callout with side + price
    - Dark theme (#000000), monospace fonts, zero flicker

Integration:
  - Added to all strategy detail views (live tab only)
  - Renders below trade history table
  - WebSocket connects on mount, reconnects on error

Visual specification per user request:
  - Bid/ask bars: neon green/red on pure black
  - Mid line: yellow dashed with floating labels
  - Trade path: amber staircase with colored markers
  - No grid clutter, professional trading terminal aesthetic
2026-08-05 07:42:27 +00:00
ramseshk f7f47b5484 Fix Kalman Pairs historical backtest: real BTC/ETH pair data
Root cause: Kalman filter needs a cointegrated pair, but the
historical runner was feeding it synthetic noise (close vs SMA).
The Kalman filter found no mean-reverting spread, producing 0 signals.

Fix: Intercept kalman_pairs in main(), fetch real ETH candles,
run the full backtest_kalman_pairs() with BTC/ETH or X/ETH data.

Results (30-day, 720h candles, BTC/ETH pair):
  BTC: 35 trades, -0.36% PnL
  ETH: 34 trades, -0.01% PnL  (ETH/BTC pair)
  HYPE: 27 trades, -0.00% PnL (HYPE/BTC pair)
  VVV: 33 trades, -0.01% PnL  (VVV/BTC pair)

Total: 32 historical backtests (8 strategies x 4 coins)
2026-08-05 07:32:41 +00:00
ramseshk 803a38b237 Funding Rate Arb: historical backtests running (was pass/skip)
Historical runner:
  - funding_arb was just "pass" — replaced with hourly trend proxy
  - Annualizes 1h return as funding rate: rate = ret_1h * 365 * 24
  - Entry when |annual_rate| > 3%, scales strength with rate

Backtest results (30-day, 720h candles):
  BTC: +146.94% net, 75% win, 72 trades
  ETH: -13.76% net, 69% win, 87 trades
  HYPE: -0.95% net, 73% win, 63 trades
  VVV: +0.10% net, 78% win, 86 trades

Total: 32 historical backtests (8 strategies x 4 coins)
Cleaned 4 duplicate files from old names
2026-08-05 07:10:39 +00:00
ramseshk 70d43fefe0 Complete Funding Rate Arb: real API data for live + paper
New module: strategies/funding_arb.py
  - get_funding_rates(): fetches predicted funding from Hyperliquid
    Uses metaAndAssetCtxs (primary) + predictedFundings (fallback)
  - funding_arb_signal(): generates entry/exit signals
    Entry: |annual_rate| > threshold (3% testnet, 5% mainnet)
    Exit:  rate drops below 2% or flips sign
  - 30s cache to avoid rate-limiting

Live node:
  - Replaced proxy-based funding (20-period return) with real API
  - Calls get_funding_rates(use_testnet=True) every compute_signals()
  - Lowered threshold to 3% APR for testnet (lower liquidity)

Paper trader:
  - Replaced manual funding calc with unified funding_arb_signal()
  - Proper entry/exit logic with position tracking
  - 5% APR threshold for mainnet data

Current rates: BTC +0.87% APR, ETH -0.82% APR
(Arb fires when rates exceed threshold during volatility)
2026-08-05 07:09:29 +00:00
ramseshk 84efb4014a Add Kalman Pairs to all three systems: live, paper, historical
Live node:
  - Registered in STRATEGIES dict (8th strategy)
  - Signal: KalmanPairsTrader.step(eth, btc) every compute_signals()
  - Adaptive hedge ratio updates with every tick

Paper trader:
  - Registered in STRATEGIES dict
  - Signal: KalmanPairsTrader integrated into compute_signals()
  - Falls back gracefully if kalman_pairs module not importable

Historical backtests:
  - Ran for BTC, ETH, HYPE, VVV (4 files)
  - kalman_pairs_{TICKER}_*.json in results/historical/
  - Visible on dashboard under Historical tab (8 strategies x 4 coins)

Dashboard: now shows Kalman Pairs card on all three tabs.
2026-08-05 07:05:00 +00:00
ramseshk 5004b23331 Fix live node: all 7 strategies now firing (was only 1/7)
Root cause analysis:
  - Round-robin bottleneck: each strategy got attention every ~28s
  - Orders cancelled immediately: POST-ONLY orders lived <=28s, near zero fill prob
  - 5 strategies had over-tight thresholds (Iceberg 7/10, Momentum 2σ, etc.)
  - No position management: no take-profit, no opposing signal close

Fixes applied:
  1. ALL strategies execute every 4s (for name in names: parallel)
  2. Orders rest 60s before refresh (was: cancelled every round)
  3. Take-profit at 0.1% move + close on opposing signal
  4. Aggressive 0.03% offset inside spread for higher fill probability
  5. Iceberg: 7/10 -> 5/10 consecutive ticks
  6. Momentum: 2σ -> 1.5σ Bollinger breakout
  7. Mean Reversion: 1.5σ -> 1.0σ VWAP deviation
  8. Funding Arb: uses real Hyperliquid API funding rate
  9. OFI threshold kept at 0.04% (was 0.08%)

Verification:
  Post-patch log shows all 7 strategies placing orders every 4 seconds.
  Order Book Imbalance, Iceberg Detection, Funding Rate Arb, Pairs Trading
  all confirmed active in tick 12680 output.
2026-08-05 07:00:07 +00:00
ramseshk f4c8bca15a Kalman Filter Pairs Trading System — full production-grade implementation
Core engine (pure NumPy, zero external deps beyond NumPy):
- kalman_filter.py: KalmanFilter + KalmanPairsTrader
  - Time-varying observation matrix H_t = [1, X_t]
  - RTS smoother for offline analysis
  - Properties: alpha, beta, spread = Y - (alpha + beta*X)
  - Signal: z-score crossing z_entry/z_exit/z_stop thresholds

Pair discovery (pure NumPy):
- pair_discovery.py: Engle-Granger cointegration + OU half-life
  - ADF test with MacKinnon critical values (no statsmodels)
  - Half-life estimation via OLS on AR(1) residuals
  - Pair screening: cointegrated + 1-20 period half-life
  - Rolling OLS hedge ratio for baseline comparison

Production system:
- trading_system.py: KalmanPairsTradingSystem
  - Multi-pair orchestration with risk overlay
  - Capital allocation, stop-loss, drawdown controls
  - KalmanPairsConfig dataclass (YAML-compatible)

Backtesting:
- backtest.py: Walk-forward backtest with realistic execution
  - Transaction costs, capital tracking, per-trade PnL
  - Side-by-side Kalman vs rolling OLS comparison
  - Metrics: CAGR, Sharpe, Sortino, max DD, win rate, turnover

Tuning:
- tuning.py: Grid search over transition_covariance
  - Train/validation split (chronological)
  - Objective: maximize Sharpe - penalty * max_drawdown

Regime-shift test results:
  Kalman: Sharpe 2.17, beta adapts from 2.0 -> 0.5 in ~50 bars
  OLS 60d: Sharpe 0.17 (stuck on old beta)
  OLS 120d: Sharpe 0.66 (even slower adaptation)

Integration: Added to historical_runner.py as kalman_pairs strategy
2026-08-05 06:47:33 +00:00
ramseshk 5c41d232c1 Fix OBI depth map: single unified 3D surface, no subplots
- Single surface spanning -50 to +50 bps (bid left, ask right)
- Clean warm amber/gold colorscale with contour projection
- NaN/Infinity filtering on Z matrix for clean rendering
- ResizeObserver for responsive canvas sizing
- uirevision v2 for stable camera across updates
- Removed dual-subplot approach (single colorbar, single scene)
- Imbalance overlay: +0.051 style with wall detection + formula
- L2RingBuffer unchanged, l2SnapshotsToSurface produces 60-row matrix
2026-08-05 06:30:40 +00:00
ramseshk 7fd289f562 3D Order Book Depth Map: Plotly subplots (bid/ask split) + remove Three.js
- Replaced single surface with dual synchronized 3D subplots:
  Left: BID depth (green colorscale, -50 to 0 bps)
  Right: ASK depth (red colorscale, 0 to +50 bps)
- Independent colorbars per side with proper labeling
- Camera sync via scene anchor mirroring
- Contour projection on both surfaces
- Live imbalance overlay centered between subplots

Data pipeline:
- l2SnapshotsToDualSurface() splits bid/ask into separate matrices
- L2RingBuffer unchanged (60 snapshots, O(1) append)

Removed:
- depth-map-three.tsx (Three.js alternative)
- Engine toggle buttons from OBI detail
- Three.js CDN loading
2026-08-05 06:24:09 +00:00
ramseshk 8855c013a6 3D Order Book Depth Map: Plotly.js + Three.js live visualization
Architecture:
- depth-map-utils.ts: L2RingBuffer, l2SnapshotsToSurface, computeImbalance
  └─ O(1) ring buffer, 60-snapshot capacity
  └─ Surface matrix: ±50 bps × 100 resolution
  └─ Imbalance formula: I = (V_b-V_a)/(V_b+V_a) with wall detection

- depth-map-plotly.tsx: Plotly.js 3D Surface
  └─ 7-stop warm colorscale (dark→amber→gold)
  └─ contour projection, ambient+diffuse lighting
  └─ Live imbalance overlay: gauge bar + formula
  └─ uirevision for stable camera on updates

- depth-map-three.tsx: Three.js high-perf alternative
  └─ BufferGeometry + vertex colors + OrbitControls
  └─ 60fps suitable, WebGL renderer with alpha
  └─ Warm gradient matching Plotly colorscale
  └─ Double-sided faces, dark grid helper

- obi-detail.tsx: Combined strategy detail panel
  └─ Engine toggle: Plotly.js ↔ Three.js
  └─ Synthetic data generation for testing
  └─ 6-stat metrics row (PnL, BTC B&H, Sharpe, Hit Rate, Max DD, Signal)
  └─ Equity curve comparison + trade history table

- Page integration: OBI strategy triggers dedicated 3D view
2026-08-05 06:11:33 +00:00
ramseshk 156ea40e78 Add multi-ticker historical backtests: 28 results (7 strategies × 4 coins)
- Cleaned old timestamp-named files
- New files with proper ticker naming: {strategy}_{TICKER}_{timestamp}.json
- BTC, ETH, HYPE, VVV backtests for all 7 strategies
- Mean Reversion BTC: +76.42%, VVV: +0.04%, ETH: -0.12%, HYPE: -0.02%
2026-08-05 05:11:32 +00:00
ramseshk 6665d0cd2a Multi-ticker historical backtests: ticker filter + per-coin grouping
- Historical cards now deduplicated by strategy+ticker (28 entries: 7×4)
- Ticker filter bar: ALL | BTC | ETH | HYPE | VVV
- Coin badge on each card
- BacktestSummary.coin now required string field
- fetchHistorical groups by strategy · coin composite key
2026-08-05 05:11:32 +00:00
ramseshk 96ca132fa2 Fix historical runner: store actual ticker name (BTC/ETH/HYPE/VVV) not timestamp
- Added HYPE and VVV to --coin choices
- Fixed coin field to store ticker name instead of first candle timestamp
- Added coin_name parameter to simulate_strategy_on_candles
2026-08-05 05:11:32 +00:00
ramseshk a09954017e Recreate Next.js source — shadcn components, chart, types, hooks
Source files were untracked and lost during reset. Recreated:
- page.tsx (full 3-tab dashboard), layout.tsx, globals.css (shadcn theme)
- types.ts, api.ts, utils.ts
- strategy-card.tsx, equity-chart.tsx, positions-panel.tsx
- ui/ (7 shadcn wrappers: card, badge, button, table, tabs, sheet, collapsible, select)
- Config files: next.config.ts, tsconfig.json, postcss.config.mjs, components.json
2026-08-05 05:05:26 +00:00
ramseshk ac1b33a014 gitignore: exclude Next.js build artifacts from tracking 2026-08-05 04:52:43 +00:00
ramseshk eb2dc32c53 FTDT Dashboard: Next.js shadcn SOTA UI
- Next.js 16 + React + TypeScript static export
- shadcn/ui components: Card, Tabs, Badge, Sheet, Collapsible, Table
- Claude Blu 2 dark theme via oklch CSS variables
- lightweight-charts v4 for equity curve rendering
- Framer Motion for layout animations
- 3 tabs: Live Testnet, Paper Mainnet (00K), Historical
- Full-page strategy detail with equity chart + trade history
- Fee tier selector (7 official Hyperliquid tiers + staking)
- API routes prefixed with /api/ for clean Caddy proxying
- _next/ mount for Next.js static assets
- WebSocket data flowing for live metrics and paper trader
2026-08-05 04:51:58 +00:00
ramseshk e6dd16908c shadcn/ui design system — Claude Blu 2 dark theme
- Full oklch color space from tweakcn/r/themes/cmmea3qbd000004jvb99v39cd
- Semantic tokens: --background, --foreground, --card, --primary, etc.
- Backward compat mappings (--bg, --srf, --ln, --tx, --hi, etc.)
- Dark shadows with proper opacity (--shadow-xs through --shadow-xl)
- 8px scrollbar, focus rings, backdrop blurs
- Cleaner card styling with subtle borders and hover lift
- All existing JS functionality preserved
2026-08-05 03:31:10 +00:00
ramseshk 9be02b47f9 Clean architecture: Paper=Mainnet, Live=Testnet, Historical=Mainnet
- Live node: testnet-only API for prices/orderbook/instruments
  (removed mainnet fallback, added resilience wrappers)
- Paper trader: mainnet-only API — simulates with real Hyperliquid data
  $120K paper capital, 12 strategies, mainnet mark prices
- Historical backtests: mainnet candle API (unchanged, already correct)
- All three tiers: strategy_equity tracking, dynamic perp lookup,
  win_rate fix (pnl_net/pnl_gross), CSS contrast improvement
2026-08-05 03:02:50 +00:00
ramseshk 4457cdffc5 Comprehensive fix: live node resilience + CSS contrast + win_rate + equity curves
- Mainnet API fallback when testnet unavailable (prices, orderbook, instruments)
- Bypassed broken SDK instrument loading, uses raw mainnet meta API
- Dynamic BTC/ETH perp ID lookup (handles "-USD-PERP" suffix changes)
- Strategy-level equity tracking for per-strategy detail charts
- Win rate fixed: checks pnl_net/pnl_gross not just pnl field
- CSS contrast improved: --tx #6b6b7b→#9e9eae, borders/highlights brightened
- Equity curve recalculated on fee tier change (chart adjusts visually)
- Added Open Positions & Orders panel placeholder
2026-08-05 02:53:31 +00:00
ramseshk f45417c105 feat(dashboard): add REST metrics endpoints for Next.js polling
- GET /metrics — live trading metrics
- GET /metrics/paper — paper trading metrics
- Enables polling from Next.js quant-lab page via Caddy proxy
2026-08-04 18:21:13 +00:00
ramseshk 9360296ef4 Add volume requirements to fee tier dropdown labels
Each tier now shows the 14-day rolling volume threshold from the
official Hyperliquid fee schedule:
  Tier 0 → Tier 1 >$5M → Tier 2 >$25M → Tier 3 >$100M
  → Tier 4 >$500M → Tier 5 >$2B → Tier 6 >$7B
2026-08-04 09:12:55 +00:00
ramseshk 526a40b01e Rename VIP→Tier, recalculate equity curve on fee tier change
Renamed all "VIP N" to "Tier N" in config, server, and HTML dropdowns.

Added recalc_equity_curve() that rebuilds the equity curve with new
fee rates. Previously the equity curve was passed through unchanged
when switching tiers, so the chart visually stayed identical even
though PnL numbers changed. Now each tier produces its own curve.

Example OBI historical: Tier 0 equity ends at 141.5, Tier 6 at 149.7 —
the chart visibly shifts up as fees drop from 4.5bp to 2.4bp taker.
2026-08-04 09:12:07 +00:00
ramseshk 055da97a79 Fix fee tiers to match official Hyperliquid docs
Perps tiers 4-6 had wrong volume thresholds, taker rates, and
incorrect negative maker rebates (HL only has rebates via staking).

Changes (matching https://hyperliquid.gitbook.io/.../trading/fees):
  Tier 4: $250M→$500M vol, taker 0.025%→0.028%
  Tier 5: $750M→$2B vol, taker 0.020%→0.026%, maker -0.002%→0.000%
  Tier 6: $2.5B→$7B vol, taker 0.015%→0.024%, maker -0.004%→0.000%

UI dropdown labels updated to match. Chart refresh enhanced with
resize+fitContent after recalc for smooth transitions.
2026-08-04 09:04:05 +00:00