Commit Graph

9 Commits

Author SHA1 Message Date
ramseshk b47948b604 Fix fee tier recalculation for historical backtests
Server: recalc endpoint now checks HISTORICAL_DIR as fallback
when file not found in BACKTEST_DIR. Previously historical backtests
returned "not found" on recalc.

Frontend: renderBTDetail now accepts pnl_net/pnl_net_pct from
recalc response (the endpoint returns pnl_net not pnl).

Verified: VIP 0 → VIP 6 on OBI historical backtest changes
net PnL from 54.31% to 66.57% with fees dropping $18.10 → $5.85.
2026-08-04 08:56:22 +00:00
ramseshk 1bf54b4c00 Add real historical backtesting with Hyperliquid mainnet candle data
backtests/historical_runner.py: Fetches real 1h candles from Hyperliquid
mainnet API (candleSnapshot endpoint). Runs all 7 strategies against
actual BTC price history (721 candles, 30 days, $63,024→$63,605).
Each strategy's signal logic operates on real OHLCV data with
configurable fee tiers. Saves to backtests/results/historical/.

Results on 30d BTC data at VIP0:
  Mean Reversion: +93.87% net (Sharpe 0.94)
  Order Book Imbalance: +54.31% net (Sharpe 1.03)
  Avellaneda-Stoikov: -1.02% net (Sharpe -0.13)
  Iceberg Detection: -33.20% net
  Momentum Breakout: -54.72% net

Server: Added /api/backtests/historical (list) and
/api/backtest/historical/{name} (full data) endpoints.

Dashboard: Added "Historical" tab with "Real Data" badge. Cards show
coin + mainnet source. Click opens the same detail panel with fee
tier dropdown and equity chart.
2026-08-04 07:29:51 +00:00
ramseshk 0c0d2124ad Add Hyperliquid fee tier selector — 7 VIP levels × 7 staking tiers
config/fee_tiers.py: complete Hyperliquid fee schedule with perps and spot
base rates plus staking discount multipliers. effective_rate() computes
the actual fee after staking discount. get_perp_fees() returns the
effective rate for a given VIP tier, staking tier, and fee model.

Backtest runner: added --fee-tier (0-6) and --staking-tier flags.
Regenerated all 12 backtests at VIP 0 baseline. Runner now shows fee tier
info at startup.

Server: /api/backtest/{name}/recalc endpoint accepts ?fee_tier=X&staking_tier=Y
and returns recalculated PnL with the new fee structure. On-the-fly
recalculation — no need to re-run the backtest.

Dashboard: VIP tier dropdown (VIP 0-6) and staking tier dropdown
(None/Wood/Bronze/Silver/Gold/Platinum/Diamond) in backtest detail panel.
Changing either instantly recalculates PnL via the API.

Key finding: Cartea-Jaimungal goes from -5.58% net at VIP0 to +2.39% net
at VIP6+Diamond (maker rebate: exchange pays YOU -0.0024% to provide
liquidity). Fee structure completely changes strategy viability assessment.
2026-08-04 07:26:40 +00:00
ramseshk ecfdd56d8f Add fee-toggle for backtests, CSV trade download, fee simulation in runner
Backtest runner: added per-trade fee simulation (maker 2bps, taker 5bps).
Each trade now records pnl_gross, pnl_net, and fee. New --no-fees flag
excludes fees from PnL. Output includes pnl_gross/pnl_gross_pct and
fees_total alongside existing pnl (net). Regenerated all 12 backtests.

Server: added /api/backtest/{name}/csv endpoint — returns trades as CSV
with columns time,side,size,price,pnl_gross,pnl_net,fee.
Content-Disposition: attachment triggers browser download.

Dashboard: added "Inc. fees" checkbox toggle in backtest detail panel.
Unchecking shows gross PnL (before fees). "↓ CSV" button downloads
the trade history. Both hidden when detail is closed.
2026-08-04 07:16:41 +00:00
ramseshk e4de21192a Fix dashboard backtest detail, deterministic backtest seeds, paper trader fees, live node crash guard
Backtest detail: openDetail() now fetches full backtest JSON from the API
instead of showing "Full trade data not in summary". Renders equity curve
chart + full trade history table with 100 rows.

Backtest reproducibility: replaced hash(key) with fixed per-strategy seeds.
Python's hash() is randomized per process (PYTHONHASHSEED), causing wildly
different results for same strategy across runs. Now deterministic.

Server: added total_trades and sortino to /api/backtests summary response.

Paper trader: fixed Avellaneda-Stoikov simulate using TAKER_FEE instead of
MAKER_FEE. Lowered OBI signal threshold from 5bps to 1.5bps for flat markets.

Live node: added None-guard in get_mark_prices — Hyperliquid testnet API
sometimes returns null, crashing the node. Wrapped in try/except.
2026-08-04 07:07:15 +00:00
ramseshk 7a5fdf2f8d Fix tab switching + $100K paper trading capital
Tab IDs now match JavaScript: tab-backtest instead of tab-bt.
Paper trading increased to $100,000 ($10K per strategy, $30K reserve).
Server default paper metrics updated to $100K.
2026-08-04 04:26:38 +00:00
ramseshk f26892f8b2 Paper trading dashboard — 7 strategies on Hyperliquid MAINNET data
New paper trading engine (live/paper_trader.py):
- Pulls real mainnet prices, orderbooks, funding rates every 2s
- Runs all 7 strategies in simulation without placing orders
- Simulates fills at market with realistic taker fees (0.05%) and slip (1bp)
- Avellaneda-Stoikov: simulates spread capture with 15%/tick fill probability
- Tracks virtual positions and PnL per strategy
- $5,000 capital ($1,000 per strategy, $1,000 reserve)
- Writes to /tmp/ftdt-paper-metrics.json

Dashboard updated with 3 tabs:
- Live Trading (Testnet) — real orders on testnet
- Paper Trading (Mainnet) — simulated fills on real mainnet data
- Backtesting — 30-day simulated results

Server.py: added /ws/paper WebSocket endpoint, paper_clients set,
paper metrics reader and broadcast loop.
2026-08-04 04:18:52 +00:00
ramseshk 7dd9e78e0b Verbose dashboard with backtesting tab and per-strategy 100 USDC allocation
Dashboard overhaul:
- Tabbed interface: Live Trading | Backtesting
- Live tab shows: global stats (equity, reserve, trades, win rate, active
  strategies), equity curve, per-strategy cards with allocation and PnL,
  real-time trade log
- Backtest tab: lists saved backtests with Sharpe, PnL, max DD, win rate;
  click to view full equity curve and detailed metrics
- Reads real data from /tmp/ftdt-metrics.json written by live node

Live node update:
- 5 strategies each with 100 USDC allocation (398 USDC reserve)
- Writes real-time metrics to shared JSON file
- Runs signal generators for each strategy type
- Logs tick-by-tick status

Backtest runner:
- Simulates 30 days of hourly data per strategy
- Different return profiles for each strategy type
- Saves results to backtests/results/ as JSON
- Accessible via dashboard API and frontend

Backtest results (30-day sim):
  Avellaneda-Stoikov:    +3.72%  Sharpe 2.53  DD 5.12%
  Order Book Imbalance:  +3.83%  Sharpe 1.60  DD 9.86%
  Pairs Trading:         +0.54%  Sharpe 0.41  DD 7.83%
  Funding Rate Arb:      +0.17%  Sharpe 0.35  DD 2.94%
  Iceberg Detection:     -9.15%  Sharpe -4.39 DD 11.94%
2026-08-04 03:12:21 +00:00
ramseshk 232103e167 Add live dashboard with WebSocket PnL streaming, deploy at ftdt.io/cv
Built a tasteful dark-themed dashboard showing real-time strategy
performance. Components:

- dashboard/server.py: FastAPI + WebSocket backend that collects
  strategy metrics and streams them to connected clients
- dashboard/static/index.html: Clean single-page dashboard with
  equity curve (Chart.js), per-strategy PnL cards with Sharpe,
  win rate, drawdown, and a live trade log
- Deployed as a background process on port 9175, proxied by Caddy
  at ftdt.io/cv via handle_path

Also added docs/WALLET_SETUP.md with step-by-step instructions
for setting up a Hyperliquid testnet wallet and claiming faucet USDC.

Design: dark theme, JetBrains Mono for numbers, Inter for labels,
status dots with pulse animation. No bloat — one HTML file + vanilla JS.
2026-08-03 11:56:29 +00:00