BikeControl (SwiftControl)
使用 Zwift Click、Zwift Play、Shimano Di2 或任何藍牙控制器,搭配 MyWhoosh、Rouvy、Zwift 等。iOS、Android、Windows、macOS 均可免費試用。
AI 翻译
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证制作者的介绍仅有上面的一句话。 更多详情请阅读仓库 README。 仓库 README ↗
正在加载完整 README。
查看完整 README ↗Apps de análisis de apuestas (MLB, fútbol, NBA, NHL, NFL y tenis) publicadas en GitHub Pages e instaladas en la pantalla de inicio del iPhone. Todo corre en el navegador: no hay servidor propio salvo dos Workers de Cloudflare y un servidor opcional en Railway (ver «Piezas externas»).
Página pública: https://osvaldoalvarez0113-source.github.io/ODDX/
| Ruta | Qué es |
|---|---|
hub.html | Pantalla de inicio: seis tarjetas (MLB, Fútbol, NBA, NHL, NFL, Tenis). Es lo que abre el icono del iPhone (manifest.json → start_url). |
index.html | App de MLB (la más grande). Fórmula de ventaja en carreras, cuotas, ranking por valor, registro de picks con CLV. |
futbol.html | App de fútbol: Poisson / Dixon-Coles, ligas de clubes, copas y (vía selecciones.js) selecciones. |
nba.html | App de NBA: rating tipo Elo de margen, márgenes y totales. |
nhl.html + nfl.html + usdeporte.js | Apps de NHL y NFL. Comparten usdeporte.js (partidos de hist-<dep>.json + ESPN, mercado de Pinnacle o DraftKings, picks y cierre); cada una trae su modelo: modelo-nhl.js (Poisson de goles, tiempo extra/shootout, back-to-back) y modelo-nfl.js (Elo de margen, números clave 3 y 7, descanso). Medidas en docs/MEDICION-NHL-NFL-2026-10.md: el mercado manda, el modelo pesa 5%. |
tenis.html + tenis.js + modelo-tenis.js | App de tenis (ATP y WTA, individuales). Partidos y marcador en vivo de ESPN; ganador con Elo general + Elo de superficie (25% superficie, medido); sets, primer set, hándicap y total de games salen de tablas de lo que pasó de verdad con un favorito de ese mismo % (no Markov: el Markov daba menos 2-0 de los reales). Pestañas: Partidos, Picks (ordenados por lo que ganó el favorito en la medición), Registro (guarda solo el pick antes del partido y lo resuelve; W.O./retiro no cuenta) y Medición. Medición: docs/MEDICION-TENIS-2026-11.md y la batería completa (huecos, fórmula, Kalshi, picks ganadores, patrones) en docs/MEDICION-TENIS-BATERIA-2026-11.md. Con precio de Kalshi manda el mercado (LAM_M = 0.05), como en las otras apps. |
scripts/tenis_datos.js + .github/workflows/tenis.yml + ratings-tenis.json | A diario baja de ESPN los partidos nuevos (historial completo desde 2023 en la rama datos-tenis), recalcula ratings, repite la medición y escribe ratings-tenis.json. No usa OddsPapi. |
scripts/valor3.js + .github/workflows/valor-nhl-nfl.yml | Escáner de Pinnacle para NHL y NFL (pinnacle-nhl.json, pinnacle-nfl.json), con su propio tope de 70 llamadas al mes (MLB 100 + fútbol/NBA 80 + NHL/NFL 70 = 250, el plan de OddsPapi). |
scripts/kalshi.js + .github/workflows/kalshi.yml | Precio de compra de Kalshi para NBA, NHL y NFL (rama kalshi, cada 30 min, API pública). El Veredicto lo muestra junto a la cuota justa con OVAKalshi (prediccion.js). Solo se muestra: no entra a ningún cálculo. |
scripts/adelante.js + .github/workflows/adelante-nhl.yml | Prueba hacia adelante de totales en NHL y NFL: reglas fijadas el 3-nov-2026, medidas solo con juegos nuevos (rama adelante; se ve en Auto). No gasta OddsPapi. |
scripts/correr_nhl_nfl.js, datos_nhl_nfl.js, archivo_nhl_nfl.js, lib_medir.js | Medición contra el mercado (workflow Medir NHL y NFL, resultado en la rama resultados-nhl-nfl) y archivo diario de partidos (hist-nhl.json, hist-nfl.json). |
panel.html | Panel de respaldo y resumen del día. No está enlazado desde el hub a propósito. |
sw.js, manifest.json, icon-*.png | Service worker (red primero, sin internet usa copia), manifest e iconos de la app instalada. |
ovaedge.js | Matemática de apuestas en un solo archivo, sin dependencias (window.OVAEdge): quitar el vig (Shin, power, multiplicativo), Kelly fraccional con margen de error, CLV contra el cierre sin vig y su prueba t, calibración (Brier, Platt, isotónica) y Monte Carlo del juego (ML, hándicap, totales, carreras por equipo y F5 de una sola simulación). En MLB lo usan el Chequeo contra el mercado del Veredicto (plegado) y, en Mis picks, la prueba t del CLV y el Brier. El Monte Carlo no está conectado a ningún cálculo: coincide con matriz() (ver docs/MEDICION-OVAEDGE-2026-10.md). |
ovaextra.js | Respaldo de picks en IndexedDB, exportar/importar y resumen «Hoy». Lo cargan las cinco páginas. |
interior2.js | Diez diseños con cabecera propia: Historias (un juego por pantalla, se desliza de lado), Duelo (cartelera de pelea en diagonal), Bento (recuadros de colores y resumen), Agenda (línea de tiempo con AHORA), Radar de valor (mapa del día de burbujas), Cromos (carta coleccionable con borde holográfico), Campo (el juego sobre el diamante), Telemetría (aguja de probabilidad y letra de máquina), Marcador (fichas que giran, ámbar sobre negro) y Recibo (recibo de caja con sello y código de barras). Leen las tarjetas con OVALeerJuego (diseno.js), no calculan nada. |
ganadores.js | Pestaña Al gane de las cinco apps: ordena los juegos por % del mercado desde el registro automático, con historial del tramo, cuántas victorias borra una derrota, alerta del modelo y marcador del mes. Solo lee. Arriba, semáforo de los últimos 30 días (ganó vs esperado del favorito del mercado y del pick del modelo; rojo con z ≤ −2) y filtro 💪 Solo fuertes (mercado ≥ 65% en MLB/fútbol/NHL, ≥ 75% en NBA/NFL, sin alerta del modelo; se recuerda en ova_gane_filtro). En NHL, lo que pegó el hándicap ±1.5 en ese tramo (docs/MEDICION-HANDICAP-2026-11.md). |
ganadores.js (arriba de Mis picks) | Aciertos de la app en MLB, fútbol, NBA, NHL y NFL, igual que en tenis: % de aciertos, ganados-perdidos y por jugarse del registro automático (favorito del mercado; si no había precio, el del modelo), con la tabla por tramo plegada. Debajo, «Tus apuestas». |
todas.html + top5.js | 🎯 Lo mejor de hoy: primera tarjeta del inicio (Oro negro y Paneles). Junta los juegos de las próximas 24 h de MLB, fútbol, NBA, NHL, NFL y tenis (precio de Pinnacle > registro automático > línea de ESPN; tenis desde su registro, solo con precio de Kalshi), los ordena por % del mercado, marca los fuertes y arma la combinada de 2 (p1 × p2, pago justo, cuenta regresiva; nunca dos patas del mismo equipo; se rearma sola cuando una pata empieza). Ya no va dentro de cada app. Solo lee. |
ajustes.js | Ajustes de MLB como menú: Apariencia, Modelo y apuestas, Cálculo a mano y Cómo funciona, cada uno en su ventana con «‹ Ajustes» para volver. Mueve los bloques que ya existen (no los recrea), así que ningún ajuste ni cálculo cambia. En fútbol y NBA, Ajustes → Apariencia abre la hoja 🎨. Dentro de Apariencia hay dos pestañas: Diseño de adentro (18 diseños en 3 categorías) y Tema de color. |
asistente.js | Mesa (botón flotante en las cinco apps): lee todos los juegos y todas las pestañas sin que los abras, los ordena con reglas fijas y sin internet, calcula si una cuota que tú escribes tiene valor (pide +5% por el ruido del modelo) lee el mercado del servidor (pinnacle-datos/futbol/nba.json) y marca si modelo y mercado coinciden o chocan, verifica en MLB con la API oficial (lineups, abridor probable, estado, clima, lesionados; solo MLB) sin gastar IA (si chocan baja el nivel y manda el mercado), y, si quieres, manda todo lo leído (≤ 11,500 caracteres) al mismo Worker de la 🦈 IA para que busque lineups, lesiones y noticias y devuelva una SENAL por juego. Solo lee: no escribe en tus registros ni toca ningún cálculo. |
autoregistro.js | Registro automático (window.OVARegAuto): cada vez que abres MLB, Fútbol o NBA guarda solo cada juego antes de que empiece (lo que dijo el modelo y lo que decía Pinnacle sin margen), baja el resultado de ESPN unas 3 h después y lo resume en Herramientas → 🤖 Auto: acierto, ROI a precio justo y con margen de 3%, quién acierta cuando modelo y mercado chocan, y Brier. Vive aparte (ova_auto_v1, entra en el respaldo): no toca Mis picks, CLV, banca ni ningún cálculo. En fútbol guarda la liga que tengas en pantalla. |
herramientas.html + herramientas.js + banca.js | Pantalla Herramientas (enlace en el pie del hub): Marcador (resultados reales de las cinco apps con curva de unidades, ROI y CLV), Banca (lo que apuestas, con topes diario/semanal/mensual; banca.js pone un aviso ámbar al 80% y rojo al llegar al tope en las demás páginas), Casas (misma cuota en varias casas: mejor precio, EV contra tu número, arbitraje) y Avisos. Todo sale de tu teléfono (localStorage), sin servidor. |
interior.js, obsidiana.js, hubestilos.js | Ocho diseños de adentro (Clásico, Cristal, Broadcast, Pro, Boleto, Boleto noche, Prensa y Radar; la lista de los 19 vive en interior.js; se eligen con pulsación larga en el logo o en 🎨), tema «Oro negro» y los 6 estilos del hub. Prensa y Radar traen sus propios colores (no cambian con el tema de color) para garantizar que se lean. |
diseno.js | Barra de abajo igual en las cinco apps (Juegos · Al gane · Combo · Mis picks · Ajustes), lo técnico (Backtest, Ratings, Diagnóstico) en Ajustes → Avanzado, versión visible en Ajustes y carga automática de MLB. No cambia ningún cálculo. |
historial.js | MLB v47-v64: historial del abridor a 3 años y FIP del abridor (los dos opcionales, apagados por defecto), botón 🦈 de IA con análisis completo, y la etiqueta de versión que se ve junto al título. |
railway.js | Compara (o aplica) el cálculo del servidor Railway sobre el Veredicto de MLB. Única copia de ese parche. |
pinnacle.js + pinnacle-datos.json | Muestra lo que dice el mercado (Pinnacle sin margen). El JSON lo escribe el escáner de GitHub Actions. |
mejoras.js, selecciones.js | Lesionados + clima (fútbol) y selecciones (ESPN). |
scripts/fuerza_copas.js, fuerza-copas.json, hist-copas.json | Champions: fuerza de equipos con Champions, Europa y Conference juntas. El workflow Fuerza de copas europeas la actualiza con ESPN y futbol.html la lee; si no baja, sigue el modelo básico. Medición: docs/MEDICION-FUTBOL-COPAS-2026-11.md. |
pruebas.js | Pruebas automáticas. node --expose-internals pruebas.js |
backtests/ | Páginas de medición (se abren en el navegador). Cada decisión de la fórmula salió de una de ellas. Índice en backtests/index.html. |
scripts/ | Lo que corre en GitHub Actions o a mano: valor.js (escáner Pinnacle, ahora también avisa movimientos de cuota con mov.js), avisos.js (abridor cambiado, alineación oficial y clima por ntfy), correr_mercado.js, correr_deportes.js, ova_formula.py. |
worker/ova-ia.js | Versión endurecida del Worker de Cloudflare del botón 🦈 (ver abajo). |
docs/AUDITORIA-2026-10.md | Informe de la auditoría de octubre 2026. |
docs/AUDITORIA-2-2026-10.md | Segunda auditoría: nombres de ESPN limpios en el origen, peticiones compartidas en MLB, botones tocables. |
docs/MEDICION-PICKS-APP-2026-10.md | Qué habría dicho la app en 2024-2026 y cuánto habría rendido (6,171 juegos de MLB, cuota de cierre): ningún titular gana de forma comprobable, el número de la app dice más de lo que pasa (50.5% vs 45.8%) y el stake sobre el número crudo hundía la banca ($1,000 → $524; sobre la mezcla con el mercado, $981). Scripts en scripts/medicion/picks_app.js y analisis_picks.py. |
docs/MEDICION-MESA-2026-10.md | Medición con datos reales de las reglas de la Mesa (cortes, coincidencia con el mercado, mezcla modelo+mercado). Scripts en scripts/medicion/. |
docs/MEDICION-FUTBOL-PENDIENTES-2026-11.md | Fútbol: Ambos anotan, cuota previa, alineaciones, copas y selecciones. |
docs/MEDICION-FUTBOL-MOTOR-REAL-2026-11.md | Medición vigente de fútbol: motor real de futbol.html, datos hasta 2026-27. Se repite con el workflow «Medir futbol con el motor real». |
docs/MEDICION-FUTBOL-LOCAL-ELO-2026-10.md | Medición de ratings local/visita, Elo, mezcla con el mercado y descanso en fútbol (ninguno aporta lo suficiente). Se repite con el workflow «Experimento de futbol». |
.github/workflows/ | Ver la tabla «Workflows de GitHub Actions» más abajo. |
subir_*.html con tu token).?v=NUMERO al final de la dirección, o borra el icono y vuelve a añadirlo. La versión que se ve junto al título de MLB confirma qué cargó.Regla práctica: nunca pongas espacios ni guiones bajos en nombres de archivo al subir desde el iPhone (los cambia y da 404). pruebas.js lo vigila.
node --expose-internals pruebas.js
Revisa sintaxis de todas las páginas, nombres usados sin existir, el service worker, el respaldo de picks, el marcador en vivo, el combo de fútbol, el modelo NBA, el cierre automático de picks de MLB y que el repo no tenga archivos rotos o duplicados. Corre sola en cada subida (pruebas.yml); una X roja en GitHub significa que algo se rompió.
index.html)| Constante | Valor | De dónde salió |
|---|---|---|
MULT | 6 | backtests de 2025 y 2026 (ganó al 13 y al 17) |
BONO_LOCAL | 0.59 | backtest contra el mercado, temporada 2025 completa (backtests/backtestmercado.html) |
PRIOR_ERA | 40 innings | medido contra el mercado en 2021-2026: 20 a 120 no cambia nada (±0.001 de pérdida log) (docs/MEDICION-MERCADO-MLB-2026-10.md) |
DISP | 2.3 | backtests/backtestforma.html (razón varianza/media de 2.32 y 2.37) |
ENCOGE | 0.45 | backtest del total (pendiente medida 0.45 en 2026 y 0.44 en 2025) |
F5_FRAC | 0.56 | backtests/backtestequipo.html (0.558 y 0.562) |
| Tope de probabilidad | 22 % - 78 % | |
W_MODELO | 0.05 | peso del modelo al mezclarlo con el mercado: Chequeo del Veredicto y stake (valor()). Medido en 6 temporadas (12,311 juegos): óptimo junto ≈0.04, por temporada de -0.13 a +0.23 (docs/MEDICION-6-TEMPORADAS-2026-10.md); con 3 temporadas se había puesto 0.24 |
Las páginas de backtests/ y scripts/ova_formula.py replican estas constantes. Si cambias una en index.html, cámbiala allí también o los números dejarán de coincidir.
ova-ia (Cloudflare, repo Ova-worker): recibe la petición del botón 🦈 y le pone la clave de Anthropic. La clave vive como secreto del Worker, nunca en el código. Usa worker/ova-ia.js como base: acepta solo peticiones desde tu página, fija el modelo y topa los gastos por petición.kalshi-ova (Cloudflare, repo Kalshi-ova): proxy de solo lectura hacia la API pública de Kalshi.worker-production-be04.up.railway.app, repo Betbot): cálculo de MLB en segundo plano. Su fórmula debe usar las mismas constantes que index.html (sobre todo BONO_LOCAL = 0.59).Todos en .github/workflows/. «OddsPapi» = gasta llamadas del plan (250 al mes en total para toda la cuenta; los topes por escáner suman 250).
| Workflow | Cuándo corre | Qué hace | OddsPapi |
|---|---|---|---|
fuerza-copas.yml | a diario y las noches de copa | actualiza fuerza-copas.json con los partidos terminados de copas europeas | no |
medir-cambios.yml | a mano o al subir a la rama medir-cambios | mide Kalshi contra las casas y cambios de jugadores en NBA (resultado en resultados-cambios) | no |
medir-huecos.yml | a mano o al subir a la rama medir-huecos | mide clima de MLB y NFL, mariscal de NFL y viaje de NBA contra la línea (resultado en resultados-huecos) | no |
futbol-pendientes.yml | a mano o al subir a la rama medir-pendientes | mide Ambos anotan, cuota previa, alineaciones, copas y selecciones (resultado en resultados-futbol-pendientes) | no |
futbol-actual.yml | a mano o al subir a la rama futbol-actual | mide fútbol con el motor real y datos al día (resultado en resultados-futbol-actual) | no |
pruebas.yml | en cada subida a main y en pull requests | corre pruebas.js (sintaxis, nombres, modelos, hub, respaldo…). Una X roja = algo se rompió | no |
valor-pinnacle.yml | 2 veces al día, de marzo a octubre | escáner MLB → pinnacle-datos.json (tope 100 al mes) | sí |
valor-futbol-nba.yml | 1 vez al día; lunes a miércoles también Champions | escáner fútbol y NBA → pinnacle-futbol.json, pinnacle-nba.json (tope 80) | sí |
valor-nhl-nfl.yml | NHL 2 veces al día, NFL jueves/domingo/lunes | escáner NHL y NFL → pinnacle-nhl.json, pinnacle-nfl.json (tope 70) | sí |
lesiones.yml | cada 3 horas | scripts/lesiones.js baja los lesionados de ESPN (NBA, NHL, NFL) a archivos chicos en la rama datos (lesiones-<dep>.json); el Escáner de cada app los muestra y marca 🆕 lo nuevo. Si existe manda un aviso con los Out/Doubtful nuevos |
| Secreto | Para qué |
|---|---|
ODDSPAPI_KEY | Escáner Valor vs Pinnacle (OddsPapi). |
NTFY_TOPIC | Tema privado de ntfy para los avisos al teléfono. Si no existe, el escáner NO manda avisos (ya no cae a un tema público) y el workflow lo avisa; ponle un nombre largo y aleatorio. |
En Settings → Actions → General → Workflow permissions debe estar Read and write (el escáner guarda pinnacle-datos.json).
ventaja_picks_v1 de localStorage (ahí viven tus picks). Se llama así por historia; cambiarla los borra.pinnacle-datos.json: lo reescribe el escáner.NTFY_TOPIC| no |
avisos-mlb.yml | cada 30 min en horas de juego, marzo a noviembre | avisos por ntfy: abridor cambiado, lineup, clima | no |
archivo-espn.yml | 4 veces al día | archivo de partidos de fútbol/NBA/MLB desde ESPN | no |
archivo-nhl-nfl.yml | diario 09:40 UTC | hist-nhl.json, hist-nfl.json (3 temporadas completas + la actual) | no |
medir-nhl-nfl.yml | al tocar el modelo o el medidor de NHL/NFL | mide los modelos contra el mercado → rama resultados-nhl-nfl | no |
mercado.yml, deportes.yml, backtest-fip.yml, experimento-futbol.yml, medir-mesa.yml | a mano | backtests y mediciones puntuales (resultados en ramas resultados-*) | no |
sonda.yml | a mano | diagnóstico de OddsPapi (no correr sin necesidad: gasta llamadas) | sí |