Files
ftdt-quant-lab/README.md
T

169 lines
7.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# FTDT Quant Lab
Production multi-strategy quant trading system running on Hyperliquid.
Live testnet node, paper trading simulator, historical backtesting, and real-time dashboard.
**Live:** https://ftdt.io/cv
---
## Stack
| Layer | Technology |
|-------|-----------|
| **Runtime** | Python 3.13 (async trading) |
| **API Client** | nautilus_trader (Hyperliquid SDK, Rust bindings) |
| **Dashboard** | Next.js 16 (static export) + shadcn/ui + Framer Motion |
| **Design System** | Hallmark Cobalt — Ubuntu font, hairline borders, cool paper palette |
| **Reverse Proxy** | Caddy → auto HTTPS |
| **WebSocket** | FastAPI (live/paper streaming) |
| **Data** | PostgreSQL 17 (`ftdt_quant`), JSON metrics files |
| **Backtesting** | Custom dollar-bar engine + numpy |
| **Infra** | OVH VPS (4 vCPU, 8GB RAM, Debian 13), 2GB swap |
~5,300 lines of Python + TypeScript. 67 commits since July 2026.
---
## Repository Structure
```
ftdt-quant-lab/
├── live/
│ ├── node.py # Live trading node — testnet, 9 strategies
│ └── paper_trader.py # Paper trading — mainnet data, 10 strategies
├── strategies/
│ ├── orderbook_imbalance.py # L2 bid/ask volume skew (OBI)
│ ├── iceberg_detection.py # Whale TWAP accumulation detection
│ ├── funding_arb.py # Delta-neutral carry — spot/perp funding
│ ├── pairs_trading.py # BTC/ETH ratio Z-score (1.5σ)
│ ├── avellaneda_stoikov.py # Dual-sided stochastic control MM
│ ├── kalman_pairs/ # Kalman-filter adaptive hedge ratio
│ ├── hawkes_ofi.py # Hawkes process order flow
│ ├── deep_lob.py # Deep LOB CNN feature extraction
│ ├── queue_imbalance.py # Weighted queue dynamics
│ ├── hurst_vpin.py # Hurst exponent + VPIN directional
│ ├── hurst_vpin_live.py # Lightweight Hurst/VPIN for live tick stream
│ └── quant_report.py # QF-Lib style quant analytics
├── dashboard/
│ ├── server.py # FastAPI backend — WS, REST, static files
│ └── next/
│ └── src/
│ ├── app/ # Main page + layout
│ ├── components/ # QuantReport, StrategyCard, L2Terminal
│ └── lib/ # Types, API client
├── backtests/
│ ├── run.py # Backtest runner
│ └── results/
│ └── historical/ # JSON backtest snapshots (32 entries)
├── common/ # Shared utilities
│ ├── risk.py, risk_manager.py
│ ├── hyperliquid_api.py
│ └── portfolio.py, metrics.py
├── config/
│ └── fee_tiers.py # Perp/spot fee schedules
└── infrastructure/
├── Caddyfile # Reverse proxy config
└── systemd/ # Service units (pending)
```
---
## Strategies — Current State
### Live Node (Hyperliquid Testnet — 9 strategies, $100 each)
| # | Strategy | Type | Asset | Size | PnL | Trades | Win |
|---|----------|------|-------|------|-----|--------|-----|
| 1 | Order Book Imbalance | reversal | BTC | 0.000200 | $0.00 | 0 | — |
| 2 | Iceberg Detection | momentum | BTC | 0.000210 | $0.00 | 2 | 0% |
| 3 | Funding Rate Arb | carry | BTC | 0.000220 | $0.00 | 0 | — |
| 4 | Pairs Trading | stat_arb | ETH | 0.006000 | **+$0.74** | 9 | 67% |
| 5 | Avellaneda-Stoikov | market_making | BTC | 0.000230 | -$1.35 | 32 | 0% |
| 6 | Momentum Breakout | momentum | ETH | 0.000500 | $0.00 | 0 | — |
| 7 | Mean Reversion | reversal | ETH | 0.000500 | $0.00 | 0 | — |
| 8 | Kalman Pairs | stat_arb | ETH | 0.005000 | $0.00 | 0 | — |
| 9 | Hurst VPIN | momentum | BTC | 0.000240 | $0.00 | 0 | — |
**Execution:** GTC POST-ONLY limit orders. Signals every 5 ticks (5s), dual-sided for A-S.
**Fee model:** Maker 0.02% (testnet).
### Paper Trader (Hyperliquid Mainnet data — 10 strategies, $100 each)
Same set + Queue Imbalance. Real mainnet orderbook + funding data. Fee model: taker 0.05% / maker 0.02%. Trades simulated with 1bps slippage.
---
## Historical Backtests
32 backtest snapshots across 8 strategies × 4 coins (BTC, ETH, HYPE, VVV).
Hurst/VPIN BTC: **46 trades, 96% win rate, +1.10%** on synthetic trending data.
---
## Priority Analysis
### Strategies showing real signal
| Strategy | Signal | Status |
|----------|--------|--------|
| **Pairs Trading** | ✅ | +$0.74, 67% win rate — only profitable live strategy |
| **Avellaneda-Stoikov** | ⚠️ | 32 trades but losing — spread capture not covering fees |
| **Iceberg Detection** | ⚠️ | 2 trades — rare signals, needs threshold tuning |
| **Hurst VPIN** | 🔬 | 96% win in backtest, 0 live trades — very selective |
| **Mean Reversion** | ⏳ | 0 trades — VWAP deviation not crossing 1.0σ |
| **Momentum** | ⏳ | 0 trades — Bollinger 1.2σ too tight for ETH |
### Recommendation: focus investment here
1. **Pairs Trading**`#1 priority`. Only live winner. Extend to more pairs (SOL, ARB, OP). Add Kalman dynamic hedge ratio. This is the clearest path to sustained PnL.
2. **Hurst/VPIN**`#2 priority`. Backtest shows strong edge (96% win). Needs real market data (not synthetic) and 3-day candle feed to trigger more signals. The selectivity IS the edge — don't dilute it.
3. **Avellaneda-Stoikov** — Needs inventory control. 32 trades losing because adverse selection. Add skew-aware quoting (update reserve price based on queue imbalance).
4. **Iceberg Detection** — Lower detection threshold. Currently requires 7/10 consecutive ticks same direction — too strict.
5. **Funding Rate Arb** — Real Hyperliquid funding data already plumbed. Test threshold from 3% → 1% APR. Prefunding detection (predict next rate before announcement).
6. **Backtest engine** — Replace synthetic data with real Hyperliquid candles. Add walk-forward optimization. The `hurst_vpin.py` infrastructure is ready.
### Skip for now
- OBI / Mean Reversion / Momentum — 0 trades. Signal thresholds need fundamental redesign, not just tuning.
- Cartea-Jaimungal / Gueant MM — academic models, not adapted to crypto microstructure.
- DeepLOB / Hawkes OFI — dependency-heavy, no live integration.
---
## Next Steps
```bash
# Clone and deploy
git clone https://git.ftdt.io/rams/ftdt-quant-lab.git
cd ftdt-quant-lab
python3 -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt # (pending — currently manual)
# Start services
python live/node.py & # Trading node
python live/paper_trader.py & # Paper simulator
python dashboard/server.py --port 9175 # Dashboard backend
```
---
## Roadmap
- [ ] Docker Compose for reproducible deployment
- [ ] Walk-forward backtest on real Hyperliquid candle data
- [ ] Extend Pairs Trading to BTC/SOL, BTC/ARB
- [ ] Hurst/VPIN 3-day candle feed → real live signals
- [ ] Memory leak proofing — current guard at 512MB RSS
- [ ] systemd service unit files for auto-restart
- [ ] Grafana + Prometheus monitoring dashboard
---
*Built with Hermes Agent · Hallmark Cobalt · Ubuntu fonts*