P&L cerrado (liquidaciones) de la estrategia box-office-openings. Las posiciones abiertas aportan P&L no realizado, que se muestra aparte. Cualquier liquidación ajena a la estrategia se reporta por separado y no contamina estas cifras.
El retorno total del período se convierte en tasa diaria y se extrapola a mensual y anual asumiendo reinversión. Con pocas semanas de historia el anualizado es una extrapolación indicativa, no una promesa.
Descargas crudas para análisis offline.
Cada orden que de verdad salió al mercado, con la respuesta cruda del exchange. Los intentos simulados (dry run, o una regla en paper) NO aparecen acá: no salieron, así que no dicen nada sobre si la ejecución funciona. Sin llenado no es un error: la orden llegó y no había liquidez a nuestro tope.
Cada señal que la estrategia produjo — esto se registra siempre, en vivo y en papel. NO son apuestas dry-run. Las que de verdad se ejecutaron aparecen abajo en "Posiciones reales". Si una señal dice Skipped, el motivo explica por qué no se convirtió en orden real (ej. kill switch, spread, cap por evento).
These are real positions from your Polymarket account, not managed by the bot.
Los mercados de box office que el escáner encuentra ahora mismo, con su precio YES y volumen. No se cargan solos: tocá Actualizar.
Implícito vs realizado por regla, clusterizado por evento. El true_yes declarado es una hipótesis; acá se la confronta con los datos. Promover a live es SIEMPRE decisión manual.
Tildá los valores de cada eje para incluirlos; destildando todos en un eje se bloquea todo (grilla vacía). La grilla 2D combina los dos ejes elegidos arriba; las tablas de abajo son los marginales (cada eje por separado).
Fiabilidad del mercado por decil de precio sobre TODOS los brackets de cada evento resuelto, no sólo los que matchean una regla. No prueba que una regla tenga edge: dice si el mercado está valuando distinto que antes. Unidad = un (evento, bracket), con el precio medio de sus snapshots dentro de la ventana de horas a resolución.
Sobre los trades (hipotéticos en dry-run) que pasaron todos los filtros del bot, un conjunto angosto. El cross-filter de arriba usa el universo completo de snapshots.
Bitácora libre del bot. La fecha se guarda sola. Los cambios que guardás en Ajustes se registran solos también. Tocá Editar en cualquier nota para ampliarla.
Apuesta en los mercados de Polymarket sobre cuánto recauda una
película en su fin de semana de estreno (serie
box-office-openings), usando dos reglas que ya fueron
validadas con datos históricos. Por ahora corre en DRY RUN:
simula todo, no mueve plata real.
Por cada película, Polymarket abre un "evento" con 5 o 6 opciones tipo escalera: "menos de $200M", "entre $200M y $220M", ... "más de $280M". Exactamente UNA gana (la que contiene la recaudación real). Por eso, si sumás los precios YES de todas las opciones, debería dar aproximadamente 1.00 (100%). El mercado resuelve con las cifras finales de The Numbers (the-numbers.com), fin de semana de 3 días. La serie también trae eventos de 2do/3er fin de semana; el bot los trata igual.
Las dos vienen de POLY-SCOUT (mi proyecto que escanea el histórico de Polymarket buscando sesgos), medidas en el momento T-24h (entre 18 y 30 horas antes de que resuelva el mercado):
Importante: el bot NO asume que "0 de 42" significa probabilidad cero (sería arrogante con 42 casos y haría que Kelly aposte todo). Usa números "encogidos" hacia el medio: 3.5% para la pata NO y 96.5% para la YES. El edge que ves en pantalla ya está calculado con esos números conservadores.
Cada bracket tiene un precio de mercado del "Sí" (ej: 9¢ = el
mercado le da 9% de chance). Cada regla trae su propia probabilidad
estimada (true_yes: 3.5% para la NO, 96.5% para la YES).
El edge es la diferencia, en la dirección que apuesta la regla:
0.09 − 0.035 = +5.5 puntos. El mercado lo cobra 9% pero creemos
3.5%; apostar NO (a que NO gana) captura esa diferencia.0.965 − 0.93 = +3.5 puntos.
Solo dispara si el edge supera su umbral (2 puntos). Ese true_yes
no está clavado: la pestaña Salud lo recalcula con los datos propios y
sugiere uno actualizado (yo decido si lo adopto). Con el edge y
la probabilidad de ganar, Kelly fraccional calcula el tamaño de la apuesta;
cada regla puede además pedir su propio Kelly y su propio tope (así la pata YES
asimétrica se dimensiona más chica que la NO).
Para que el bot entre a un mercado, TODO esto tiene que cumplirse:
Después Kelly fraccional decide el tamaño y los límites de riesgo (pérdida diaria/semanal, kill switch por drawdown) pueden frenar todo.
El problema de todo bot con "edge histórico" es que el edge se puede morir y seguís apostando igual. Salud existe para eso. Por cada regla muestra:
El semáforo de arriba responde "¿el edge existe?". Esta otra parte responde la pregunta que de verdad importa para seguir apostando: "¿se está achicando?". Un edge así se comprime cuando llegan jugadores profesionales, y el promedio de 9 meses puede verse lindo mientras los últimos 2 meses ya no tienen nada.
El truco está en partir el edge en dos piezas, porque mueren de formas distintas:
Y acá viene lo bueno: en esta familia la realización hoy es "siempre igual" (0 de 42 longshots ganaron; 41 de 41 favoritos ganaron). Cuando esa pieza no se mueve, todo el edge vive en el precio. Y el precio es un número continuo que se puede mirar sin esperar a que resuelva nada: ya está en cada snapshot. Por eso el canario tiene dos velocidades:
Estados: SIN EROSIÓN / VIGILAR (bajó pero puede ser ruido) / EROSIÓN DETECTADA (bajó y la estadística lo confirma) / AÚN SIN VEREDICTO. Dos cosas que hace bien y conviene entender:
Está enchufado a la seguridad: para promover una regla a real ahora hacen falta las dos cosas — nivel READY y tendencia sin erosión. Un edge con 40+ casos pero cayendo es una trampa: sería entrar justo cuando el negocio se termina. El canario solo puede bloquear, nunca habilitar.
Estado del histórico (medido, no supuesto): sobre los 9 meses de POLY-SCOUT, ninguna de las dos patas se erosiona. Pendiente de la NO: +0.26pp por trimestre; de la YES: +0.24pp. Los dos intervalos de confianza incluyen el cero ⇒ planas, sin deterioro.
Ajustes → Motor de reglas: las reglas son un JSON editable.
Puedo cambiar bandas de precio, ventana horaria, umbral de edge, el Kelly o el
tope por regla, apagar una (state: "off") o agregar una nueva
descubierta en Calibración/Lab. Si guardo algo mal escrito, el backend lo
rechaza entero y me muestra el motivo exacto — no puede quedar una regla rota a
medias. El editor NO puede pasar una regla a live
a mano (da error): pasar a real es solo con el botón Promover de la pestaña
Salud, y solo si el semáforo está en READY.
Nunca se gradúa por racha de ganancias. Una regla se puede promover cuando su semáforo llega a LISTA PARA PROMOVER: (1) 40+ casos resueltos, y (2) la calibración calza (lo que el precio implicaba vs lo que realmente pasó, contado por evento). El P&L corto engaña, sobre todo en la pata YES asimétrica.
La plata real tiene dos llaves, y hacen falta las dos:
live: la promuevo con
el botón Promover (solo habilitado en READY). Puedo bajarla a paper cuando
quiera con Degradar.DRY RUN apagado (Ajustes →
Operación). Es el interruptor maestro.
Una regla en paper NUNCA gasta plata real, aunque apague DRY RUN.
Y con DRY RUN encendido, ninguna regla gasta aunque esté en live.
Recién opera en real una regla live con DRY RUN apagado.
Idea clave: acá "calibrado" y "saber si es rentable" son el mismo hito. No lo juzgo por la ganancia del dry-run (engaña); lo juzgo por la calibración clusterizada por evento. Cuando una regla llega a READY, esa ES la evidencia de que es rentable; si llega a DIVERGIENDO, es evidencia de que no.
El contador arranca de cero ahora: los eventos históricos que ya resolvieron no cuentan para el semáforo, porque el bot no tenía snapshots de cuando estaban vivos (necesita el precio en la ventana T-24h + el resultado). Cada estreno que pasa por su ventana suma casos:
Son estimaciones gruesas (dependen de cuántas películas tengan brackets en cada banda). El estimador evolutivo, en cambio, ya arranca con la evidencia de POLY-SCOUT como base y se va ajustando desde el primer caso propio.
Importante — eso es el plazo para PROMOVER, no para enterarme de que algo va mal. El canario de tendencia (más abajo) vigila los precios de la banda sin esperar resoluciones, así que si el mercado empieza a comprimir el edge lo veo en semanas. Y el backtest histórico ya me dio la evidencia retrospectiva hoy. Lo que tarda meses es la certificación para arriesgar plata real, que es lento a propósito.
not_box_office_bracket: la pregunta no es un bracket de box office legible.not_box_office: no es de la familia.event_structure: la suma S del evento está fuera de [0.85, 1.50], o el evento llegó incompleto (menos de 5 brackets), o sin event id.filter_rejected: pasó la identidad pero ninguna regla matcheó con edge suficiente (lo más común: el mercado no está en la ventana T-24h todavía).low_liquidity: libro de órdenes demasiado flaco.BOT_API_KEY. El dashboard la pide una vez y la guarda en el navegador. También sirve abrir /?api_key=LA_KEY./data del contenedor (volumen persistente): market_snapshots.jsonl (todo lo observado, una fila por bracket por ciclo), winner_history.json (qué bracket ganó cada evento, se refresca solo 1 vez al día desde Polymarket), hypothetical_trades.json (las apuestas simuladas), entry_records.json, setting_overrides.json (lo que cambio desde la UI, sobrevive reinicios).POLY-BOX-MOVIES del repo compota334/POLY-BIAS-BOT. Redeploy no borra /data.POLYMARKET_PRIVATE_KEY + POLYMARKET_FUNDER_ADDRESS, USDC en Polygon, DRY_RUN=false, y SOLO con el semáforo en verde.docs/box-office-openings-spec.md y los handoffs en docs/handoff/ del repo.