pnclDATA Clave gratuita

cuotas a la baja de pinnacle / bot de telegram / python

Cuotas de Pinnacle a la baja en Telegram

Un script corto de Python mantiene abierto el stream de caídas de la API de cuotas de Pinnacle y publica cada alerta en tu chat de Telegram: la línea que se movió, el precio antes y después y el precio justo. Tu móvil vibra mientras el hueco en otras casas sigue abierto.

El stream de caídas viene con Alertas de caída por 99 USD al mes, Alertas + escaneo y Volumen completo.

Del stream a tu chat, con la alerta de ejemplo documentada

lo que envía el stream

data: [{
  "home": "Sunshine Coast Phoenix",
  "away": "Cairns Dolphins",
  "league": "Australia - NBL1 Women",
  "sport": "Basketball",
  "sect": "Moneyline",
  "outcome": "Home",
  "from_price": 2.86,
  "to_price": 2.7,
  "nvp": 3.04,
  ...
}]

lo que muestra tu chat

Sunshine Coast Phoenix v Cairns Dolphins

Moneyline Local

2.86 -> 2.7 (-5.59%)

justo 3.04

Fútbol, tenis y baloncesto, caídas del 5% o más: ambos son ajustes al inicio del script.

bot.py
import json
import os
import requests

BASE = os.environ["ODDS_BASE_URL"]
KEY = os.environ["ODDS_API_KEY"]
BOT = os.environ["TG_BOT_TOKEN"]
CHAT = os.environ["TG_CHAT_ID"]
SPORTS = {"Soccer", "Tennis",
          "Basketball"}
SEND = ("https://api.telegram.org/bot"
        + BOT + "/sendMessage")


def send(text):
    requests.post(SEND,
                  data={"chat_id": CHAT,
                        "text": text},
                  timeout=10)


def line(a):
    was = a["from_price"]
    now = a["to_price"]
    pct = 100 * (was - now) / was
    return "\n".join([
        f"{a['home']} v {a['away']}",
        f"{a['sect']} {a['outcome']}",
        f"{was} -> {now} (-{pct:.2f}%)",
        f"fair {a['nvp']}",
    ])


r = requests.get(
    BASE + "/odds-drop",
    params={"min_drop": 5, "key": KEY},
    stream=True,
    timeout=(10, None),
)
r.raise_for_status()

for raw in r.iter_lines():
    if not raw.startswith(b"data:"):
        continue
    msg = json.loads(raw[5:])
    if isinstance(msg, dict):
        continue  # connected or error
    for a in msg:
        if a["sport"] in SPORTS:
            send(line(a))

El bot completo

Abre una solicitud al stream de caídas en vivo con tu umbral, lee cada línea data: y omite los mensajes de control como el saludo de conexión. Cada alerta de los deportes que listaste se convierte en un mensaje de cuatro líneas; el tamaño de la caída se calcula a partir de los dos precios, porque el stream envía los precios y no el porcentaje.

El stream no tiene filtro de deporte propio, y por eso el script comprueba sport. Para las caídas prepartido, apunta una segunda copia a /odds-drop-prematch: en vivo y prepartido tienen cada uno su propia conexión.

  1. Escribe a @BotFather en Telegram, crea un bot y copia su token.
  2. Envía cualquier mensaje a tu bot y luego lee tu ID de chat en la página getUpdates del bot.
  3. Exporta las cuatro variables de abajo y ejecuta el script en una máquina que permanezca encendida.
terminal
pip install requests
export ODDS_API_KEY="your key"
export ODDS_BASE_URL="https://..."
export TG_BOT_TOKEN="from BotFather"
export TG_CHAT_ID="your chat id"
python bot.py
  • Menos caídas, más grandesSube min_drop a 8 o 10 para un chat más tranquilo. El mínimo es 1.
  • Solo valorCompara el nvp de cada alerta con el precio de tu casa de apuestas antes de enviar, y publica solo las que estén por encima del justo.
  • Mantente conectadoEnvuelve la solicitud en un bucle que reconecte tras un error de red, esperando más después de cada fallo; las caídas durante el hueco no se repiten.

Tres cambios que vale la pena hacer

El script es deliberadamente pequeño. Estas son las ediciones que la mayoría hace en la primera semana.

Comprueba un precio frente al justo a mano

Cómo los umbrales y las ventanas definen una caída, en pnclPULSE

¿Ejecutas tu propio modelo? Toma los frames en bruto

El stream de alertas está procesado para ti: un mensaje por caída, con el precio justo adjunto. Si tu código mantiene su propio estado del mercado, el feed WebSocket en bruto envía cada frame en bruto y te deja el procesamiento a ti. Es un complemento de 99 USD cada 30 días en Alertas + escaneo y Volumen completo, no un plan aparte.

stream a bot.py a chat · justo 2.34 · caída 5,06%

El script es gratuito; el stream que escucha viene con Alertas de caída, Alertas + escaneo y Volumen completo