4.9 KiB
4.9 KiB
Task: CoinEx Trader Bot — Full Dashboard Control Suite
Priority: HIGH
Assigned: Glitch
Status: Spec
Date: 2026-03-01
Context
The live trader bot (coinex_live_trader.py) currently runs as a headless systemd timer with no UI control. D J wants ALL configuration and control moved into the CoinEx Dashboard (port 8891) before any more live trading happens.
Requirements
1. Master Controls (Top Priority)
- Global ON/OFF toggle — starts/stops the trading bot entirely
- Mode selector — LIVE / DRY-RUN / PAUSED
- Emergency Stop button — immediately halts bot + attempts to close all positions
- Lockfile status — show if circuit breaker is tripped, with a "Clear Lockfile" button
2. Position Management
- View all open positions — symbol, side, entry price, current price, P&L, P&L%, margin, leverage
- Close individual position button
- Close ALL positions button
- Position history — recent closed trades with P&L
3. Runtime Configuration (all hot-reloadable, no restart needed)
- Position size % (currently 5%)
- Max concurrent positions (currently 3)
- Max leverage (currently 10x)
- Kill switch drawdown % (currently 50%)
- TP threshold % (take profit)
- SL threshold % (stop loss)
- Circuit breaker failure count (currently 3)
- Scan interval (currently 5 min)
- Long signal threshold (currently 45 pts)
- Short signal threshold (currently 50 pts)
- Coin whitelist/blacklist — toggle which coins can be traded
4. Account Overview
- Total equity (available + margin)
- Available balance
- Margin in use
- Unrealized P&L total
- Starting balance and drawdown %
- Kill switch distance (how far from trigger)
5. Activity Log
- Trade log — every open/close with timestamps, prices, P&L
- Error log — API failures, circuit breaker events
- Signal log — what signals were generated and whether acted on
- Bot cycle log — last N cycle summaries (scanned, signals found, actions taken)
6. Configuration Persistence
- All settings saved to
trader_config.json - Bot reads config at start of each cycle (hot reload)
- Dashboard reads/writes same config file
- Default values match current hardcoded settings
Architecture
Backend
- New API routes in the dashboard:
GET /api/trader/status— bot state, positions, balance, configPOST /api/trader/config— update runtime configPOST /api/trader/control— start/stop/pause/emergency-stop/clear-lockfilePOST /api/trader/close-position— close specific positionPOST /api/trader/close-all— close all positionsGET /api/trader/logs— recent trade/error/signal logs
Config File: trader_config.json
{
"mode": "paused",
"position_size_pct": 5.0,
"max_positions": 3,
"max_leverage": 10,
"kill_switch_drawdown_pct": 50,
"tp_pct": null,
"sl_pct": null,
"circuit_breaker_threshold": 3,
"scan_interval_minutes": 5,
"long_threshold": 45,
"short_threshold": 50,
"coin_blacklist": [],
"coin_whitelist": []
}
Frontend
- New
/traderpage in the dashboard (linked from main nav) - Dark theme matching existing dashboard aesthetic
- Real-time updates via the existing WebSocket
Trader Bot Changes
- Read
trader_config.jsonat start of each cycle - Respect
modefield: "live" | "dry-run" | "paused" - If "paused", exit immediately (no API calls)
- All hardcoded values replaced with config reads
- Bot NO LONGER managed by systemd timer — dashboard API controls start/stop
Files
- Dashboard project:
~/.openclaw/workspace/projects/coinex-dashboard/ - Trader script:
~/.openclaw/workspace/projects/crypto-signals/scripts/coinex_live_trader.py - Trader state:
~/.openclaw/workspace/projects/crypto-signals/data/coinex-live/trader_state.json - Lockfile:
~/.openclaw/workspace/projects/crypto-signals/data/coinex-live/live-trader-lock.json - New config:
~/.openclaw/workspace/projects/crypto-signals/data/coinex-live/trader_config.json - CoinEx creds:
~/.openclaw/workspace/.credentials/coinex.env
Constraints
- Zero client-side CoinEx API calls — all CoinEx calls go through server-side API routes
- All existing scoring logic in
lib/indicators.tspreserved exactly - Use api.binance.us NOT api.binance.com (451 geo-blocking)
- Must include unit tests
- Context7 mandatory for any library usage
- Dark theme, monospace font aesthetic
- Standard stack: Next.js 16 + Tailwind v4 + Framer Motion + ShadCN + Lucide + TypeScript
Definition of Done
- All controls functional from dashboard UI
- Bot reads config from file each cycle (hot reload)
- Emergency stop works
- Position management works (view, close individual, close all)
- All settings persisted and reloadable
- Activity logs visible in UI
- Unit tests for API routes
- No live trading until D J explicitly flips the switch in the UI