Ganador, hándicap, total, carreras por equipo, primeras 5 y ponches. Datos del día,
tu fórmula, y la cuota justa de cada mercado.
Ajustes del modelo
Dónde apuestas
Sportsbook — cuota americana (−155)
Kalshi — precio del contrato (58¢)
Carreras → porcentaje
× 6 — lo que dio el backtest
× 13 — el teórico de Poisson
× 17 — tu número original
Encogimiento del total
× 0.45 — lo que dio el backtest
× 0.70 — a medio camino
Sin encoger — como estaba antes
Forma de la distribución
× 2.3 — lo que dio el backtest
× 2.5 — el borde de lo medido
× 2.0 — conservador
× 1.5 — a medio camino
Poisson — como estaba antes de la v19
ERA del abridor
Mezcla 70 temporada / 30 últimas 5
Solo temporada
Solo últimas 5
Cuánto le crees al ERA de un abridor nuevo
Normal — se jala con 40 innings de liga
Desconfiado — 80 innings
Muy desconfiado — 120 innings
Ofensiva del equipo
Mezcla 70 temporada / 30 últimos 14 días
Solo temporada
Escoge la fecha y dale a cargar.
Al gane
Todos los juegos del día ordenados por probabilidad pura, sin mirar cuota.
Cálculo a mano
Si la API falla o quieres probar números tuyos, mete los seis valores.
Calcular
Mis picks
Guarda el pick cuando lo tomes. Después vuelve: el resultado y, en los picks de ganador, la cuota de cierre
se rellenan solos (si ESPN la trae). En los demás mercados, escribe el cierre tú. El CLV te dice si tu número le gana al mercado, que es lo único que te dice la verdad
rápido: puedes perder tres semanas seguidas con CLV positivo y aun así estar haciéndolo bien.
Al guardar escoges del modelo o mío . Mío es cuando lo tomas por algo
que tú ves y el número no — que el abridor está tirando mejor de lo que dice su ERA, que el otro
viene de lesión, lo que sea. Con eso el registro puede decirte, con tus propios juegos, cuál de
los dos acierta más cuando se contradicen. Es lo único que mide al que decide y no al modelo.
Copiar respaldo
Pegar respaldo
Cómo funciona esta app — nota técnica
Cómo leer el Veredicto en 30 segundos.
1) «Tu número» es el porcentaje que sale de la fórmula. «El mercado cree» es lo mismo que
dice la cuota, ya sin la comisión de la casa (por eso las dos filas suman 100).
2) «EV» es cuánto ganas o pierdes de promedio por cada dólar apostado si tu número fuera
verdad: +5% quiere decir 5 centavos por dólar; negativo, que la cuota no paga lo suficiente.
3) Los puntos de ventaja son tu número menos el del mercado. Menos de 2 es ruido.
4) El problema es que tu propia medición dice que el número casi nunca le gana al mercado.
Por eso existe el Chequeo contra el mercado : mezcla los dos y pregunta si todavía queda
valor. Si no queda, el titular dice «Valor dudoso». Con el peso que midió tu backtest (5% tu número,
95% el mercado) eso pasa en casi todos los picks. No te lo prohíbe: te avisa que apuestas contra
un mercado que casi siempre tiene razón.
5) La única prueba de que le ganas al mercado es el CLV en Mis picks: si la cuota que
tomaste es mejor que la de cierre, de forma sostenida y con t de 2 o más, hay ventaja de verdad.
Los resultados de una semana no dicen nada.
6) El stake (¼ Kelly) sale de la mezcla con el mercado, no de tu número crudo: tu número
dice más de lo que después pasa, y apostar sobre él te hace apostar de más (abajo está la prueba).
Qué habría dicho la app en 6 temporadas (2021-2026, 12,311 juegos, contra el precio de DraftKings que guarda
ESPN: en 2024-2026 es la cuota de cierre y en 2021-2023 el último precio registrado; el informe completo está en
docs/MEDICION-6-TEMPORADAS-2026-10.md).
Los picks de «valor» (5,176): rindieron -1.9% por dólar (±1.6). Sin criterio se esperaba -3.9% por la comisión de
la casa; la diferencia (+2.0 pts) no se distingue de la suerte. Por temporada: -4.5%, -2.7%, -3.3%, -6.4%, +3.8% y +1.2%.
Tu número vs la realidad: en esos picks decía 49.7% de ganar y ganaron 44.2% (el mercado decía 43.3%).
«Precio imposible» (1,713 juegos): rindieron -5.6% y perdieron en 5 de las 6 temporadas. Cuando la app se
separa mucho del mercado, casi siempre le falta un dato.
Peso de tu número: mezclado con el mercado, lo que mejor funciona es ≈0.04 (por temporada va de -0.13 a +0.23, con
un error de ±0.2). Por eso la mezcla usa 5% de tu número y 95% del mercado.
Modo «Al gane»: está bien calibrado (cuando decía 63% ganaba 63%), pero acertar no es ganar dinero: a la cuota
de cierre esos grupos rindieron entre -5% y 0%, porque la casa ya sabe lo mismo.
Stake: el ¼ Kelly con tu número crudo habría convertido $1,000 en $10 (la banca se acaba). Sobre una mezcla con el
mercado al 24% terminaba en $914 con una caída de 12%, y aun así perdió en 5 de 6 temporadas. Con la mezcla al 5% casi
nunca queda valor, y entonces la app no te sugiere stake.
Cuántos picks hacen falta: para distinguir de la suerte un ROI verdadero de +3% hacen falta unos 5,700
picks (unas 6 temporadas completas con este ritmo). Por eso mira el CLV, que se mueve mucho más rápido.
Límites: es la cuota de cierre (la más difícil de ganar) y el abridor que de verdad lanzó, no el probable;
los cortes por tamaño de ventaja se miraron después de ver los datos, así que son pistas y no pruebas.
Datos: MLB Stats API. Los escudos de los equipos y las caras de los abridores también salen de la
MLB, por URL directa según el id que ya usa la app para pedir las estadísticas; si alguna
imagen no existe todavía (novato recién subido) queda el hueco y nada más.
El ganador sale de tu fórmula de ventaja. El hándicap, el total, las carreras por equipo, las
primeras 5 y los ponches salen de una distribución de Poisson montada sobre esas mismas carreras
esperadas, así que todos los mercados cuentan la misma historia. Si metes tu banca arriba, cada
mercado con valor te sugiere el stake con un cuarto de Kelly.
Qué está medido y qué no — léelo antes de apostar. No todos los mercados de esta app
valen lo mismo, y la app te lo dice con una marca junto a cada uno.
El ganador está calibrado sobre 3,077 juegos de 2025 y 2026: ahí el multiplicador ×6 salió
medido, no supuesto. El hándicap hereda esa calibración porque se ancla al porcentaje del
ganador por bisección.
El total se midió aparte sobre 3,887 juegos de las dos temporadas y el resultado fue duro:
correlación de 0.16 con el resultado real, y error medio de 3.6 carreras por juego contra 3.6 de
proyectar siempre el promedio de la liga sin mirar nada. O sea que distingue el orden de los
juegos — los que proyecta altos salen más altos — pero no lo bastante como para
ganarle a una línea. Se probaron cinco arreglos (innings reales del abridor, quitar el recorte,
buscar el multiplicador del staff, usar OPS en vez de carreras por juego, y encoger) ajustándolos
en una temporada y midiéndolos en la otra: ninguno movió la correlación más allá de 0.16.
Las carreras por equipo y las primeras 5 ya se midieron por separado, con el mismo
método y las mismas dos temporadas: 1,836 juegos de 2026 y 2,031 de 2025, usando solo las
estadísticas que existían antes de cada juego. Carreras por equipo dio correlación 0.116 y 0.111;
primeras 5 dio 0.104 y 0.099. O sea que los tres mercados de carreras andan entre 0.10 y 0.16 en
seis mediciones distintas, y eso ya no parece casualidad de un mercado: es el techo de lo que dan
ERA, carreras por juego y ERA de bullpen contra el resultado real. Repartir esa señal entre equipos
o cortarla en cinco entradas no crea señal nueva — la diluye, y por eso cada corte sale peor que el
anterior. Para mover eso de 0.16 no hace falta más matemática sobre los mismos números, hacen falta
datos que la app todavía no usa; el clima es el candidato con más chance, porque viento y
temperatura mueven las carreras de verdad y ahora mismo el viento se muestra pero no se calcula.
De esa medición sí salió un arreglo concreto, y está aplicado: la fracción de las primeras 5 estaba
en 0.53 por suposición y medida da 0.56, lo que estaba costando 0.14 carreras de proyección por
equipo en cada juego.
Los ponches ya se midieron: backtestk.html corrió 3,569 salidas de 2025 y 3,592 de 2026, proyectando con K/9 acumulado antes de cada salida × innings por salida × ajuste por el K% del rival. Correlación 0.379 en 2025 y 0.375 en 2026 — dos temporadas independientes casi en el mismo número, igual de firme que las otras constantes medidas de esta app. El ajuste por K% del rival sí aporta: sin él la correlación baja a 0.338 y 0.348. Esto pone a los ponches muy por encima del total (0.16), las carreras por equipo (0.11) y las primeras 5 (0.10) — tiene sentido, porque el K/9 de un abridor es una habilidad mucho más estable de un año a otro que las carreras permitidas, que dependen de defensa y suerte de secuencia. Quedan marcados «medido: flojo» como los otros tres, aunque de los cuatro son el que mejor se defiende.
La forma de la distribución, y por qué viene apagada. Todo lo que no es el ganador sale de
una Poisson montada sobre las carreras esperadas. Poisson tiene una propiedad que nadie escogió:
obliga a que la varianza sea igual a la media. En carreras de MLB la media de un equipo ronda 4.5 y
la varianza real anda por 9 — el doble. Hay muchas más blanqueadas y muchas más palizas de las que
Poisson admite, y el efecto va todo en la misma dirección: el modelo cree que los juegos son más
parejos de lo que son. De ahí sale el aviso de que da demasiados juegos de 1 carrera, que estaba en
la app desde antes sin explicación. También hace que «gana por 2+» salga bajo en los dos lados y
que el Over de líneas altas salga bajo.
Ya está medido, y desde la v19 está encendido en ×2.3. backtestforma.html lo
probó contra 4,628 juegos de 2025 y 2026 sin modelo de por medio — solo carreras anotadas, así que
no hay nada que discutir. La razón varianza ÷ media salió 2.32 en 2026 y 2.37 en 2025 , dos
temporadas independientes pidiendo el mismo número, igual de firme que la pendiente del
encogimiento. Lo que Poisson venía inventando: decía 25.5% de juegos de una carrera y pasan 28.5%;
decía que un equipo se queda en cero el 1.2% de las veces y pasa el 6.6%, cinco veces más; y decía
6.5% de palizas de 6 carreras o más cuando pasan el 20.6%, tres veces más. El error total de la
forma baja de 44 a 20 puntos.
Eso último es lo que más dolía: si el modelo cree que las palizas casi no existen, «gana por 2+»
sale raro y el −1.5 te salía bajo en los dos lados a la vez. El mejor ajuste salió 2.2 en 2026 y
2.5 en 2025 — ese 2.5 era el tope de la lista probada, así que el verdadero puede estar más
arriba. Se deja en 2.3, el medio del rango donde las dos temporadas coinciden, y en la pestaña de
Cuotas aparece lado a lado lo que habría dicho Poisson para que veas el tamaño del movimiento.
Poisson sigue en ⚙️ Ajustes para comparar, igual que el ×13 y el ×17.
Ojo con lo que esto NO arregla: la forma no le da poder de predicción al modelo. Las correlaciones
de 0.10 a 0.16 de los mercados de carreras siguen donde estaban, porque esas dependen de los
insumos. Lo que se arregla es que los porcentajes que ves ya no mienten sobre cómo se reparten los
resultados posibles.
El encogimiento sube el nivel, no aplasta la diferencia. Hasta la v13 el encogimiento se
aplicaba multiplicando las dos carreras esperadas por un mismo factor, y eso tenía un efecto que
nadie pidió: encogía también la diferencia entre los dos equipos, en la misma proporción.
En un juego de total alto eso llegaba a comprimir la ventaja del favorito casi un 20%, y falseaba
sobre todo el ganador de primeras 5. Ahora las carreras de cada equipo se reconstruyen con el
mismo diferencial que sacó la bisección — que viene del ganador calibrado — y solo se mueve el
nivel. Lo que el backtest midió fue el nivel; la diferencia entre equipos no se tocó nunca.
El encogimiento. El backtest encontró que la proyección del total se movía casi el doble
de lo que se mueve la realidad: cuando decía 11.4 salían 10.0, cuando decía 6.9 salían 7.6. La
pendiente medida fue 0.45 en 2026 y 0.44 en 2025 — dos temporadas independientes pidiendo
el mismo número, que es lo más sólido que salió de todo el ejercicio. Por eso el total y todo lo
que cuelga de él se encoge hacia el promedio de la liga: T = m + (T − m) × 0.45.
Eso no lo vuelve rentable, pero sí quita las ventajas de dos carreras que antes salían y no
existían. Se puede apagar arriba en Ajustes si quieres comparar.
El hándicap NO se encoge: va anclado al porcentaje del ganador, que sí está calibrado.
Cómo está organizada. Cada juego se abre en cinco pestañas — Veredicto, Cuotas, Números, Forma y Parque. Las secciones que no ves siguen en la página, así que las cuotas que escribiste cuentan igual aunque estés mirando otra pestaña. Solo se queda un juego abierto a la vez. La cabecera del juego y la barra de pestañas quedan pegadas arriba mientras haces scroll, igual que la cara del abridor sobre su tabla de salidas. El botón redondo de abajo a la derecha te lleva a la cabecera del juego abierto, y de ahí al principio de la lista.
El score de calidad de datos. Arriba de cada juego sale un número del 0 al 100 que mide
cuánto de lo que el modelo necesita está realmente disponible: muestra de los abridores, salidas
recientes, si el ERA de bullpen es el split real de relevistas o el del equipo completo, splits
contra la mano del abridor, si el parque está en la tabla, clima, ofensiva de 14 días y lineups
confirmados, que valen 11 de esos 100 y solo se suman cuando tocas «Revisar lineups». Bajo 60
el modelo está trabajando a ciegas en varias entradas y conviene no apostar ese juego por bonito
que se vea el número. Debajo del score te dice exactamente qué faltó.
Los candados de precio. Antes de calcular nada, la app revisa que los precios que escribiste
puedan existir. Dentro de un mismo mercado, «gana por 2+» tiene que pagar menos que «pierde por 1 o
gana»; los dos lados del mismo contrato tienen que sumar cerca de 100; y el precio de ganar el
juego tiene que quedar entre el de ganar por 2+ y el de no perder por 2. Si algo falla, la app no
calcula ventaja con esos números. Aparte, cualquier EV por encima de +20% por dólar se pinta en
rojo y no se deja guardar: en un mercado de MLB con volumen esa ventaja no existe, y cuando aparece
es porque un precio entró en la casilla equivocada.
El multiplicador de carreras a porcentaje viene por defecto en ×6 , y sale de correr esta misma
fórmula sobre 3,077 juegos terminados. El ×13 que traía antes inflaba el porcentaje: cuando el modelo
decía 70% ganaba 60%. Con ×6 el Brier baja de 0.2507 a 0.2459 en 2025 y de 0.2485 a 0.2452 en 2026.
Se dejan ×13 y ×17 arriba para comparar, pero el número medido es el 6.
También se probaron y se descartaron tres cambios más, porque ayudaron en una temporada y estorbaron en
la otra: subir el peso de la ofensiva a 0.80, sacar la localía de lo que va de temporada, y usar K-BB%
en lugar del ERA. Los pesos 0.65 / 0.50 / 0.25 y el 0.12 de localía se quedan.
Al total se le suman 0.18 carreras por los innings extra. Los venue_id de la tabla de parques están
verificados uno por uno contra /api/v1/teams?sportId=1 de la MLB.
Las carreras esperadas de cada equipo salen de multiplicar su ofensiva por lo que permite el staff rival
y dividir entre el promedio de la liga, no de promediar los dos números. El viento se muestra pero no se
calcula: hace falta la orientación del jardín central de cada parque.
Los splits L/R escalan las carreras por juego con tope de ±10%. El bullpen quemado descuenta carreras
al delta: −0.15 si dos o más relevistas lanzaron dos días seguidos, −0.08 si fue uno o si tres o más
lanzaron ayer. Va en carreras y no en puntos porcentuales a propósito, para que no cambie de peso al
cambiar el multiplicador. FIP = (13·HR + 3·(BB+HBP) − 2·K) ÷ IP + 3.15.
El abridor con pocos innings. Un novato con 2.54 de ERA en 10 innings y un veterano con 4.30
en 98 no son comparables, y la app nunca metió esos números crudos: eraUsado() le suma a
cada abridor 40 innings de promedio de liga antes de creerle. Ese novato entra al cálculo con ~3.77 y
el veterano con ~4.26, así que la diferencia real baja de 1.76 carreras a 0.49. Lo que faltaba no era
el ajuste, era verlo : el aviso vivía escondido en la pestaña de Números y solo salía si el
movimiento pasaba de 0.75 carreras. Ahora sale en el Veredicto, con los innings, el ERA crudo y el que de verdad entra.
El otro lado del problema es asimétrico y conviene tenerlo claro: al abridor con 100 innings no se le
mueve nada, así que en esos juegos buena parte de la ventaja que ves es la distancia entre lo que
sabemos de uno y lo que no sabemos del otro.
El 40 de ese ajuste es un supuesto, no una medición — a diferencia del ×6 y del ×0.45, que sí
se midieron. Por eso está en ⚙️ Ajustes con opciones de 80 y 120 innings para comparar, y por eso el
valor por defecto no se mueve hasta que un backtest diga cuál es. Lo que haría falta medir: agrupando
los juegos por los innings del abridor, ¿el modelo acierta igual cuando uno de los dos lleva menos de
30? Si acierta menos, el listón de esos juegos tiene que subir.
El descanso del abridor se muestra pero no toca el cálculo, y es deliberado: los ajustes que
circulan por ahí (+0.5 carreras con 4 días, −0.3 con 6) nunca se midieron sobre estos datos. Se
enseña como contexto para tus ojos, igual que el récord y las rachas.
Los cortes del veredicto van por ventaja en carreras y no por porcentaje, porque las carreras no
cambian cuando cambias el multiplicador: bajo 0.50 no hay pick, de 0.50 a 1.20 es zona gris, de 1.20 a
1.70 es ventaja sólida y sobre 1.70 es gran oportunidad.
Cuando metes las dos cuotas del ganador, la app le quita el vigorish al mercado y el veredicto se
recalcula por valor contra la línea: un 64% pagado a −200 es una mala apuesta y un 55% a +120 es buena.
El EV y el ¼ de Kelly se calculan contra la cuota real que te pagan.
Los campos de cuota son de texto y no numéricos a propósito: el teclado numérico del iPhone no
trae el signo menos, y sin él no se puede escribir −155.
El selector de arriba cambia cómo se leen los precios. En modo Kalshi escribes el contrato
en centavos tal como lo ves (58 = 58¢ = 58%). Kalshi no cobra vigorish, pero sí comisión por
operación, 0.07 × precio × (1 − precio) por contrato, que sobre lo que arriesgas sale al
0.07 × (1 − precio). Esa comisión se resta entera del EV y del Kelly porque se paga ganes o pierdas.
El modo Al gane ordena todos los juegos del día por probabilidad pura, ignorando la cuota. Las combinadas ya no están en la app: el backtest de 2025 mostró que juntar picks no aporta nada extra.
Al guardar un pick se marca si salió del modelo o de tu propio criterio, y el registro los separa
en dos grupos con su CLV y sus unidades. Esa es la única medición de toda la app que no mide al
modelo sino al que decide: el backtest te dice lo que da la fórmula sobre líneas inventadas, pero
no puede decirte nada sobre las veces que tú miras el número y decides lo contrario. Para que
signifique algo hacen falta unos 40 picks de cada lado, y la marca tiene que estar puesta desde el
primero — un pick guardado sin marca ya no se puede clasificar después.
Los picks se guardan solo en este teléfono, sin cuenta ni servidor. El CLV compara el implícito de la
cuota que tomaste contra el de la cuota de cierre del mismo lado. La calibración agrupa tus picks por el
porcentaje que les diste y compara lo que dijiste contra lo que pasó.
El Ranking del juego ordena por puntos de ventaja todas las proposiciones en las que
metiste cuota. Hasta la v30 ordenaba por EV, y eso tenía un sesgo que nadie escogió: el EV por dólar
es la ventaja dividida entre el precio, así que el contrato más barato ganaba siempre la lista aunque
la ventaja fuera idéntica — 7 puntos sobre 52¢ dan +13% y esos mismos 7 puntos sobre 80¢ dan +8.7%.
Eso no es una señal, es el denominador. Los puntos miden cuánto te separas del mercado y el EV cuánto
paga; los dos siguen impresos en cada línea.
Entran las que llegan a 2 puntos de ventaja, contados sobre lo que de verdad arriesgas. Las que no
llegan al listón de su mercado quedan marcadas dentro del ruido y caen al final, pero no
se botan. El listón sale de lo que midió cada uno: 2 puntos para el ganador y el hándicap, que están
calibrados; 8 para el total, las carreras por equipo y las primeras 5, que andan en correlación
0.10–0.16; 10 para los ponches, que nunca se han medido. Con esa precisión, una ventaja de 3 o 4
puntos en un total no se distingue de la fórmula redondeando.
El ganador aparece siempre , pase o no el filtro, para que puedas guardarlo cuando quieras jugar
al gane — es el único mercado calibrado y antes era el único que no se podía anotar. Lo mismo en el
modo Al gane: tocando el nombre de un equipo se abre la casilla de la cuota y el botón de guardar.
Y cuando dos o más proposiciones del ranking son del mismo lado (dos Unders, dos Overs), la app lo
avisa: no son dos oportunidades, es una sola proyección contada dos veces.
En una línea entera — total de 8, carreras de equipo de 4 — el empate devuelve el dinero, así que
sale del reparto: si el empate ronda el 13%, un 52% crudo tuyo es 60% entre los casos que se
resuelven. Hasta la v16 el filtro comparaba la probabilidad cruda contra el precio del book, que ya
viene condicionado, y con eso botaba del ranking picks con EV positivo de dos dígitos. En líneas de
.5 no hay empate y esto no cambia nada.
Fechas pasadas. Cargando un día que ya pasó, las estadísticas se recortan al día anterior:
ERA de temporada, carreras por juego, las últimas 5 salidas y el récord. Hasta la v16 se pedían
siempre hasta hoy, así que revisar un juego de hace dos semanas metía en el cálculo lo que pasó
después de ese juego — el mismo error que el backtest evita a propósito. El ERA de bullpen es la
excepción y queda en el del staff completo: el split de relevistas de la MLB no acepta rango de
fechas. Para hoy y mañana no cambia nada.
Los mercados de un mismo juego están correlacionados, así que jugar dos del ranking no diversifica.
El tope del porcentaje es 22–78%; si un juego lo toca, el moneyline sale del ranking.
El marcador en vivo. Cada juego que está en marcha muestra arriba lo que sale en la tele: carreras, entrada (▲ alta, ▼ baja), corredores en base, bolas, strikes y outs, más quién batea y quién lanza. Sale del mismo MLB Stats API de todo lo demás y se refresca solo cada 20 segundos mientras haya juegos en vivo; con la pantalla apagada o la app en segundo plano no consulta nada. Es solo información: no entra al cálculo de ningún mercado.El botón 🦈 Verificar con IA. Manda tu ranking a un modelo de lenguaje con acceso a internet para que busque lineup, lesiones y noticias del día y te diga si eso cambia el pick. No reemplaza el modelo de la app — lo complementa con lo que un número solo no puede ver. La clave de API NO vive en este archivo: está en tu Worker de Cloudflare (ova-ia), y cada toque del botón gasta crédito de esa cuenta. Ponle un límite de gasto mensual en console.anthropic.com y, en el Worker, acepta solo peticiones de tu propio sitio.