BikeControl (SwiftControl)
Zwift Click과 Shimano 컨트롤러를 MyWhoosh와 Rouvy와 Zwift에서 쓴다
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 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í |