diff --git a/docs/dashboard-2026-07-06.png b/docs/dashboard-2026-07-06.png new file mode 100644 index 0000000..ce0ea14 Binary files /dev/null and b/docs/dashboard-2026-07-06.png differ diff --git a/docs/informe-final.md b/docs/informe-final.md new file mode 100644 index 0000000..aa44330 --- /dev/null +++ b/docs/informe-final.md @@ -0,0 +1,165 @@ +# Informe final de paper trading — polymarket-bot + +**Snapshot: 2026-07-06** · Generado desde la base de datos de producción con el bot +aún operativo, como parte de la Fase 1 del plan de decomisión (bloqueo ISP de +Polymarket en España, mayo 2026). + +--- + +## ⚠️ Advertencia de tamaño muestral (léase primero) + +**12 trades ejecutados, de los cuales solo 2 llegaron a resolución, no constituyen +evidencia estadística de nada.** Ni el P&L positivo demuestra que la estrategia +funcione, ni su ausencia lo habría refutado. El propio bot lo sabía: sus criterios +de promoción a dinero real exigían ≥10 mercados resueltos y ≥30 días de +observación (`promotion_ready: false`, win rate y Sharpe deliberadamente +reportados como `n/a (insufficient_sample)` en toda la instrumentación). + +El valor demostrable de este proyecto no está en el P&L: está en la +infraestructura de evaluación, el pipeline de datos y la disciplina de gates que +impidió que el bot tradease sin ventaja medible. Este informe presenta el P&L +como lo que es — **una anécdota** — y dedica el grueso al sistema. + +--- + +## 1. Resultados de trading (anecdóticos) + +Bankroll simulado: **$10.000** (USDC virtual) · Capital desplegado: **$2.447** · +Periodo de actividad: **14–22 de abril de 2026** (los 12 trades se abrieron en 9 +días; después, el endurecimiento de los gates de edge y confianza dejó el bot en +0 trades — funcionando, evaluando ~1.350 ciclos/día, sin encontrar ventaja neta +que superara sus propios umbrales). + +### P&L realizado: **+$247,78** (2 mercados resueltos) + +| Mercado | Dirección | Entrada | Resultado | P&L neto | +|---|---|---|---|---| +| Will Ken Paxton win the 2026 Texas Republican Primary? | BUY_YES | 0,618 | ✅ YES (2026-06-11) | **+$299,06** | +| Will NVIDIA be the largest company in the world…? | BUY_NO | 0,156 | ❌ YES (2026-06-30) | **−$51,28** | + +P&L neto de comisiones (2% simulado por lado). 1 acierto / 1 fallo: n=2. + +### P&L no realizado (mark-to-market): **+$809,59** (5 posiciones abiertas) + +Marcado a los precios reales de Polymarket (Gamma API) el 2026-07-06. Estas +posiciones **no están cerradas**: el número de abajo cambiaría cada día que los +mercados sigan moviéndose, y varios no resuelven hasta noviembre de 2026. + +| Mercado | Dirección | Entrada | Precio actual (lado) | Coste neto | MTM P&L | +|---|---|---|---|---|---| +| Karen Bass gana la alcaldía de LA 2026 | BUY_YES | 0,268 | 0,595 | $510,00 | **+$600,07** | +| OpenAI IPO antes del 31-dic-2026 | BUY_NO | 0,618 | 0,785 | $510,00 | **+$125,11** | +| Demócratas ganan el Senado de Texas 2026 | BUY_YES | 0,418 | 0,435 | $509,49 | **+$10,32** | +| Demócratas ganan gobernación de Ohio 2026 | BUY_NO | 0,458 | 0,520 | $407,74 | **+$46,12** | +| Republicanos ganan gobernación de Nebraska 2026 | BUY_NO | 0,158 | 0,170 | $510,00 | **+$27,97** | + +> Nota metodológica: el tracker interno reportaba `unrealized_pnl_est = +$522,73`, +> pero esa cifra es la **expectativa del propio modelo a fecha de entrada** +> (edge_net × coste), no un marcado a mercado. La tabla de arriba usa precios +> reales de mercado del día del snapshot, que es el criterio honesto. Ambas +> cifras coinciden en el signo; ninguna de las dos es un resultado realizado. + +### Los otros 5 cierres (sin P&L): la historia real de abril + +De los 7 trades cerrados, solo 2 cerraron por resolución. Los otros 5 los cerró +el propio bot al detectar defectos en su lógica — y son la parte más +instructiva del histórico: + +- **3 por conflicto de familia**: dos posiciones sobre mercados hermanos del + mismo evento (p. ej. YES-demócratas y YES-republicanos en la misma + gobernación) — el agrupador de familias los detectó y cerró el lado débil. +- **2 por el bug de inversión de Manifold**: la señal cruzada de Manifold se + aplicaba invertida en mercados espejo. Detectado por instrumentación, las + posiciones afectadas se cerraron y el matching se movió a modo + observacional-only con auditoría completa (165.538 filas en + `manifold_match_audit`). +- **1 excluido de métricas** (`invalid_manifold_match_legacy`, P&L $0,00). + +Después de esa semana el bot no volvió a operar: los gates endurecidos +(edge neto > mínimo por régimen, confianza ≥ 0,55, guardrail de noticias +prior±0,25) filtraron el 100% de las ~223.000 evaluaciones posteriores. +**Un sistema de paper trading cuyo resultado principal es "no tradees sin +ventaja" es un resultado**, y está instrumentado hasta el último skip. + +--- + +## 2. El sistema (el activo real) + +### Pipeline de señales + +| Métrica | Valor (snapshot 2026-07-06) | +|---|---| +| Ciclos de evaluación archivados | **5.356** (cadencia ~64 s) | +| Evaluaciones mercado-ciclo archivadas | **222.738** | +| Mercados distintos evaluados | 87 (events 114,9k · politics 96,0k · crypto/finance 7,7k · tech 4,2k evaluaciones) | +| Archivo `signals` operativo desde | 2026-07-02 (replay R0) — crece ~55k filas/día | +| Histórico de métricas diarias | **81 días** (2026-04-14 → 2026-07-06, `metrics_daily`) | +| Snapshots de contexto externo | 5.356 (BTC, dominancia, Fear&Greed por ciclo) | + +Cada evaluación archiva el prior, la probabilidad estimada, el edge bruto/neto, +la descomposición por feature (Fear&Greed, momentum, noticias, Manifold, +dominancia BTC en log-odds), el gate que la bloqueó y el contexto de mercado — +suficiente para reproducir la decisión completa offline. + +### Motor de replay (R0–R2, julio 2026) + +- Inyección de reloj + replay determinista de ciclos archivados: + **22.697/22.697 decisiones idénticas** al reproducir el histórico. +- Joiner diario de resoluciones (CronJob 00:30 UTC) contra la Gamma API: + cobertura de outcomes 9/87 mercados al snapshot, creciendo sola. +- Diseñado para calibrar sobre **todas** las evaluaciones (no solo trades), + esquivando el problema del n=12. + +### Estrategia (congelada desde 2026-07-03) + +Prior desde el precio de Polymarket → ajuste bayesiano en log-odds con señales +externas (GNews con presupuesto de 5 consultas/día y guardrail prior±0,25; +Fear&Greed; momentum BTC; Manifold observacional) → gates en cascada: prior +extremo, edge bruto por régimen de volatilidad, edge neto tras comisión 2% y +spread, confianza mínima 0,55, conflictos de familia, guard de reentrada. +Sizing por Kelly fraccionado con techo por posición. + +### Infraestructura + +3 imágenes (bot / API FastAPI / dashboard) construidas por Gitea Actions solo +cuando cambian sus fuentes, desplegadas por ArgoCD (prune + selfHeal) en k3s; +PostgreSQL 16 en StatefulSet; secrets vía Infisical operator; smoke test +PostSync contra la API; backups nocturnos con sync offsite (rclone → MEGA); +observabilidad en Grafana + uptime-kuma + notificaciones Telegram (deploys, +checkpoints del bot, fallos de sync). Retención de métricas y join de outcomes +como CronJobs. **88 días de uptime del StatefulSet al snapshot.** + +--- + +## 3. Estado de la base de datos al snapshot + +| Tabla | Filas | Contenido | +|---|---|---| +| `signals` | 222.549* | Archivo de evaluaciones por ciclo (desde 2026-07-02) | +| `manifold_match_audit` | 165.538 | Auditoría completa del matching Polymarket↔Manifold | +| `replay_decisions` | 22.697 | Decisiones reproducidas por el motor de replay | +| `ext_snapshots` | 5.353* | Contexto externo por ciclo | +| `metrics_daily` | 516 | Cierres diarios (81 días) + snapshots intradía de hoy | +| `markets` | 87 | Universo evaluado | +| `trades` | 12 | Ledger completo de paper trades | +| `market_outcomes` | 9 | Resoluciones UMA-final joineadas | +| `replay_runs` / `manifold_eval_cooldown` / `checkpoint_alerts` | 1 / 76 / 3 | Metadatos | + +\* La BD sigue viva; las tablas por ciclo crecen ~55k y ~1,3k filas/día +respectivamente. Backup verificado del 2026-07-06 en +`/data/backups/backups/polymarket-decommission/` (pg_dump -Fc + CSV.gz + +checksums; restore de prueba con recuentos idénticos 11/11 tablas). El dump +final se hará en la Fase 3, justo antes del apagado. + +--- + +## 4. Conclusión + +El proyecto se archiva por una causa externa (bloqueo regulatorio del origen de +datos), no por fracaso técnico. Lo que queda: un motor de evaluación bayesiano +determinista y auditable, un pipeline de datos que archivó cada decisión con su +contexto completo, y la evidencia — anecdótica en P&L, sólida en ingeniería — +de que el sistema prefería no operar antes que operar sin ventaja. Todos los +módulos centrales (edge, familias, replay, observabilidad) son agnósticos de la +fuente y quedan listos para un eventual pivote a Manifold +(`docs/pivot-manifold.md`, Fase 5). diff --git a/docs/portfolio-widget-2026-07-06.png b/docs/portfolio-widget-2026-07-06.png new file mode 100644 index 0000000..5cc7e1d Binary files /dev/null and b/docs/portfolio-widget-2026-07-06.png differ