# UI Plan — Trading Mode + Calibrate Mode (FastAPI + SQLite + Chart.js + Tabler) ## Objetivo Construir una UI web para el bot con dos modos: 1) **Trading Mode** (read-only): - Visualizar estado del bot en tiempo real. - Inspeccionar posiciones abiertas/cerradas, trades, performance, eventos/logs. - Navegación por pestañas (tabs) y filtros por rango temporal. 2) **Paper Mode** (read-only) - Supervisión de simulación en tiempo real. - Similar, por no decir igual, que Trading Mode. 2) **Calibrate Mode** (workflow guiado): - Ejecutar un pipeline de calibración por pasos (tipo wizard por tabs). - En cada paso: - Ejecutar scripts/experimentos (controlados). - Mostrar outputs (tablas/estadísticas). - Mostrar gráficas (Chart.js o imágenes generadas). - Guardar artefactos (parámetros, resultados, reportes) para construir un “portfolio de estrategias” por símbolo. --- ## UX / Navegación global ### Selector de modo (Dropdown) En la barra superior (navbar): - Dropdown: **Mode** - Trading - Paper - Calibrate Regla: - El modo activo define completamente la UI. - Cada modo tiene su propio set de tabs. - Persistir el modo seleccionado en `localStorage`. - URLs separadas: - `/ui/trading/...` - `/ui/paper/...` - `/ui/calibrate/...` --- ## Trading Mode (Live) ### Propósito Supervisar **trading real** con foco en: - estabilidad - riesgo - latencia - seguridad Este modo debe ser **sobrio y conservador**. --- ### Tabs - Trading Mode #### Tab 1 — Overview **Propósito** > “¿Qué está haciendo el bot ahora y cómo va?” > ¿El bot está operando correctamente ahora mismo? **Componentes** - KPIs: - Equity actual - Realized PnL - Max DD (según rango) - Estado del bot (RUNNING/PAUSED/ERROR) - Latencia - exchange latency - data latency - execution latency (si existe) - Last heartbeat / last update timestamp - Gráfica: - Equity + Cash - DD shading toggle - Rango: 1h / 6h / 24h / ALL - Zoom/pan + reset - Markers BUY/SELL con tooltips ricos - Alerts: - Redis down - Latency > threshold - Exchange unreachable - No new data the last X minutes - Errors **Endpoints recomendados** - `GET /api/v1/bot/status` - `GET /api/v1/equity/state` - `GET /api/v1/equity/curve?range=1h|6h|24h|all` - `GET /api/v1/trades?limit=...` - `GET /api/v1/events?limit=...` --- #### Tab 2 — Positions **Propósito**: > “¿Qué tengo abierto y qué se cerró?” **Sub-tabs internos** - Open Positions - Closed Positions **Open Positions (tabla)** - Symbol - Side - Entry price - Qty / Notional - Unrealized PnL (si aplica) - Strategy (desde meta) - Stop/TP (si existen) - Duration **Closed Positions (tabla)** - Symbol - Side - Entry / Exit - Realized PnL - Fees - Strategy - Duration - Exit reason (si existe) **Datos** - Ideal: consumir `broker_snapshot` (fuente de verdad). - Alternativa: derivar positions desde trades (más costoso/menos fiable). **Endpoints recomendados** - `GET /api/v1/broker/snapshot/latest` - `GET /api/v1/broker/snapshot?range=...` (opcional) - Si no existe: crear `GET /api/v1/positions/open` y `GET /api/v1/positions/closed` --- #### Tab 3 — Trades **Propósito** > Inspección granular de ejecución. **Tabla con:** - timestamp - symbol - side - price - qty - fee - notional - realized_pnl - strategy (meta.strategy) **Filtros** - range - symbol - strategy **Endpoints recomendados** - `GET /api/v1/trades?range=...&symbol=...&strategy=...&limit=...` (recomendado) (ahora existe `limit`, se puede extender). --- #### Tab 4 — Performance / Risk **Propósito** > visión de métricas agregadas (sin ensuciar la gráfica principal). **Bloques** - KPIs: - Max DD (histórico / por rango) - Return % - Win rate - Avg trade - Expectancy - Exposure actual (si aplica) - Gráficas opcionales: - Drawdown % curve - Rolling returns - Distribución retornos (normalizada) **Endpoints recomendados** - `GET /api/v1/performance/summary?range=...` - o calculado frontend si el dataset no es enorme. --- #### Tab 5 — Events / Logs **Propósito** > debug operativo. - Stream/poll de eventos con niveles (INFO/WARN/ERROR). - Búsqueda (texto). - “Copy” rápido. **Endpoints recomendados** - `GET /api/v1/events?limit=...` - `GET /api/v1/events?range=...&level=...&q=...` (recomendado) --- ## Paper Mode (SIMULATION) ### Propósito Completar este apartado por la IA --- ### Tabs - Paper Mode #### Tab 1 — Overview **Propósito** > “¿Qué está haciendo el bot ahora y cómo va?” > ¿El bot está operando correctamente ahora mismo? **Componentes** - KPIs: - Equity actual - Realized PnL - Max DD (según rango) - Estado del bot (RUNNING/PAUSED/ERROR) - Latencia - exchange latency - data latency - execution latency (si existe) - Gráfica: - Equity + Cash - DD shading toggle - Rango: 1h / 6h / 24h / ALL - Zoom/pan + reset - Markers BUY/SELL con tooltips ricos - Alerts: - Redis down - Latency > threshold - Exchange unreachable - No new data the last X minutes - Errors **Endpoints recomendados** - `GET /api/v1/bot/status` - `GET /api/v1/equity/state` - `GET /api/v1/equity/curve?range=1h|6h|24h|all` - `GET /api/v1/trades?limit=...` - `GET /api/v1/events?limit=...` #### Tab 2 — Positions **Propósito**: > “¿Qué tengo abierto y qué se cerró?” **Sub-tabs internos** - Open Positions - Closed Positions **Open Positions (tabla)** - Symbol - Side - Entry price - Qty / Notional - Unrealized PnL (si aplica) - Strategy (desde meta) - Stop/TP (si existen) - Duration **Closed Positions (tabla)** - Symbol - Side - Entry / Exit - Realized PnL - Fees - Strategy - Duration - Exit reason (si existe) **Datos** - Ideal: consumir `broker_snapshot` (fuente de verdad). - Alternativa: derivar positions desde trades (más costoso/menos fiable). **Endpoints recomendados** - `GET /api/v1/broker/snapshot/latest` - `GET /api/v1/broker/snapshot?range=...` (opcional) - Si no existe: crear `GET /api/v1/positions/open` y `GET /api/v1/positions/closed` #### Tab 3 — Trades **Propósito** > Inspección granular de ejecución. **Tabla con:** - timestamp - symbol - side - price - qty - fee - notional - realized_pnl - strategy (meta.strategy) **Filtros** - range - symbol - strategy **Endpoints recomendados** - `GET /api/v1/trades?range=...&symbol=...&strategy=...&limit=...` (recomendado) (ahora existe `limit`, se puede extender). --- #### Tab 4 — Performance / Risk **Propósito** > visión de métricas agregadas (sin ensuciar la gráfica principal). **Bloques** - KPIs: - Max DD (histórico / por rango) - Return % - Win rate - Avg trade - Expectancy - Exposure actual (si aplica) - Gráficas opcionales: - Drawdown % curve - Rolling returns - Distribución retornos (normalizada) **Endpoints recomendados** - `GET /api/v1/performance/summary?range=...` - o calculado frontend si el dataset no es enorme. --- #### Tab 5 — Events / Logs **Propósito** > debug operativo. - Stream/poll de eventos con niveles (INFO/WARN/ERROR). - Búsqueda (texto). - “Copy” rápido. **Endpoints recomendados** - `GET /api/v1/events?limit=...` - `GET /api/v1/events?range=...&level=...&q=...` (recomendado) --- ## Calibrate Mode (Workflow Tabs) ### Filosofía Calibrar es un pipeline con pasos que producen: - Artefactos (parámetros, configs, datasets) - Resultados (tablas, métricas) - Gráficas / reportes Requisitos: - Cada paso debe ser **repetible**. - Guardar “run id” de calibración para reproducibilidad. - No mezclar runs. ### Estructura de tabs (propuesta) 1) **Select Asset** 2) **Download / Prepare Data** 3) **Market Regimes / Filters** (opcional) 4) **Stops / Risk Model** 5) **Strategy Selection** 6) **Parameter Search / Optimization** 7) **Walk-Forward Validation** 8) **Portfolio Builder** 9) **Export / Deploy** --- ### Step 1 — Select Asset Inputs: - symbol (BTC/USDT) - timeframe (1m/5m/1h) - date range (start/end) Output: - “Calibration session created” + session_id Endpoint: - `POST /api/v1/calibrate/session` - `GET /api/v1/calibrate/session/{id}` Persistencia recomendada: - tabla `calibration_sessions` en SQLite --- ### Step 2 — Download / Prepare Data Acciones: - descargar OHLCV - normalizar huecos - guardar dataset versionado Outputs: - tabla: coverage, missing bars, rango real - gráfico: velas + volumen (opcional) - log de ejecución Endpoints: - `POST /api/v1/calibrate/{id}/data/download` - `GET /api/v1/calibrate/{id}/data/status` - `GET /api/v1/calibrate/{id}/artifacts` --- ### Step 3 — Market Regimes / Filters (opcional) Acciones: - definir filtros (trend filter, volatility filter, etc.) Outputs: - gráficos de régimen - % tiempo en cada régimen --- ### Step 4 — Stops / Risk Model Acciones: - seleccionar modelo de stop (ATR, trailing, fixed %) - seleccionar sizing (percent risk, fixed notional) Outputs: - gráficos: ejemplo de stop sobre precio - tabla: distribución de distancias de stop, riesgo medio --- ### Step 5 — Strategy Selection Acciones: - elegir set de estrategias candidatas - activar/desactivar Outputs: - tabla: lista estrategias + descripción + inputs --- ### Step 6 — Parameter Search / Optimization Acciones: - grid search / random / bayesian (si existe) - constraints (drawdown max, trades min) Outputs: - tabla top N configs - gráfico: Pareto (return vs dd) (opcional) - export: “best params per strategy” --- ### Step 7 — Walk-Forward Validation Acciones: - definir train/test windows - ejecutar WF por estrategia/config Outputs: - gráficos: - equity acumulada WF - equity por ventana - distribución de retornos por ventana (normalizada) - tabla resumen WF --- ### Step 8 — Portfolio Builder Acciones: - seleccionar estrategias finalistas - asignar pesos/capital - reglas de conflicto (solo una posición por símbolo, etc.) Outputs: - equity combinada - correlaciones (opcional) - métricas agregadas --- ### Step 9 — Export / Deploy Acciones: - exportar configuración lista para paper/live - snapshot de parámetros, versiones y artefactos Outputs: - `portfolio_config.json` - `strategies_config.yaml` - reporte final (md/pdf opcional) --- ## Diseño técnico (Backend) ### Principio clave: “Calibrate Mode ejecuta jobs” No ejecutar procesos largos dentro del request normal. Recomendación: - jobs async (thread/process) o cola simple. - endpoints: - `POST /calibrate/{id}/run/{step}` - `GET /calibrate/{id}/run/{run_id}/status` - `GET /calibrate/{id}/run/{run_id}/logs` - `GET /calibrate/{id}/run/{run_id}/results` Persistencia mínima: - `calibration_sessions` - `calibration_runs` - `calibration_artifacts` Artifact storage: - carpeta `data/calibration/{session_id}/{run_id}/...` - SQLite guarda metadata + paths Seguridad: - whitelist de scripts/steps ejecutables - validar inputs (symbol/timeframe/fechas) - límites de recursos (duración/memoria si aplica) --- ## Diseño técnico (Frontend) ### Layout base - Navbar: Mode dropdown - Sidebar/Tabs: tabs del modo activo - Área principal: cards + tablas + charts ### Patrón de datos - Trading Mode: polling (ya lo tienes) - Calibrate Mode: jobs + polling de status/logs ### Componentes UI reutilizables - `KpiCard` - `DataTable` con filtros - `ChartPanel` (line/candles si introduces) - `LogViewer` (scroll + autoscroll + copy) - `ArtifactList` (descargas + previews) --- ## Plan de implementación (iterativo) ### Fase 1 — Trading UI “completa” 1. Tabs Trading (Overview / Positions / Trades / Performance / Events) 2. Endpoints mínimos para Positions 3. Filtros y rangos coherentes en todos ### Fase 2 — Calibrate UI “skeleton” 1. Session + wizard tabs 2. Step 1 y 2 funcionando (Select asset + Download data) 3. Artefactos + logs visibles ### Fase 3 — Calibrate “core” 1. Stops + Strategies + Params 2. Walk-forward 3. Portfolio builder ### Fase 4 — Export + versioning 1. Export configs 2. Reportes 3. Reproducibilidad total --- ## Decisiones pendientes (para cerrar antes de programar) - Fuente de verdad de posiciones: broker_snapshot vs derivación desde trades - Qué motor de jobs usar (simple threads vs celery/redis) - Formato de artefactos (json/csv/parquet) - Modelo de “portfolio” (capital fijo, pesos, conflictos) - Cómo versionar datasets y parámetros (hash + metadata)