On the wire · 14:56:51 UTC Live 119 · Prematch 8,510 · Markets 34,179 Vol. I · No. 1 · Monday 9 November 2026 wss://pinnfeed.io/v1/stream
PinnFeed
Guida · Steam · Dropping odds

Rileva dropping odds e steam move su Pinnacle in tempo reale

Aggiornato il · PinnFeed · 4 min di lettura

Uno steam move è un calo di quota rapido e marcato presso un bookmaker che fa il mercato, come Pinnacle, di solito perché è entrato denaro sharp su un lato. I bookmaker soft spesso restano indietro di secondi o minuti, ed è per questo che gli alert di steam sono tra i segnali più utili che puoi ricavare da un feed live. In questa guida costruisci un rilevatore sul WebSocket di PinnFeed. È uno strumento statistico, non un sistema di pronostici.

Passo 1 — Definisci cos'è uno steam#

Una definizione pratica che puoi regolare:

  • la quota decimale di un esito scende almeno del 5% rispetto al massimo degli ultimi 2 minuti;
  • la puntata massima del mercato è almeno 500, perché Pinnacle alza i limiti man mano che si fida di un prezzo, quindi i movimenti nei mercati poco liquidi sono più rumorosi;
  • mandi un alert una volta per esito e finestra, non a ogni tick.

Passo 2 — Ricevi il book in streaming#

Usa il client Python della guida Python e Node. Salvalo come pinnfeed_stream.py accanto allo script qui sotto; chiama on_market(old, new, event) ogni volta che un mercato cambia.

Passo 3 — Segui il massimo mobile di ogni esito#

Tieni una deque corta di (timestamp, price) per mercato ed esito, scarta ciò che è più vecchio della finestra e confronta il prezzo attuale con il massimo della finestra:

# steam.py: segnala gli steam move di Pinnacle (cali di quota rapidi e forti) dal WebSocket live.
# Usa pinnfeed_stream.py della guida Python/Node. pip install websockets
import asyncio, collections, os, time
from pinnfeed_stream import stream, SIDES

WINDOW_S = int(os.environ.get("WINDOW_S", 120))        # finestra di osservazione
MIN_DROP = float(os.environ.get("MIN_DROP", 0.05))  # alert quando la quota scende del 5% o più nella finestra
MIN_STAKE = float(os.environ.get("MIN_STAKE", 500))  # ignora i mercati poco liquidi: la puntata massima di Pinnacle è un segnale di fiducia

history = collections.defaultdict(collections.deque)  # (id mercato, esito) -> deque[(ts, decimal)]
alerted = {}


def on_market(old, new, event):
    if not event or (new.get("maxStake") or 0) < MIN_STAKE:
        return
    now = time.time()
    for o in new["outcomes"]:
        if o["name"] not in SIDES:
            continue
        h = history[(new["id"], o["name"])]
        h.append((now, o["decimal"]))
        while h and now - h[0][0] > WINDOW_S:
            h.popleft()
        high = max(p for _, p in h)
        drop = 1 - o["decimal"] / high
        key = (new["id"], o["name"])
        if drop >= MIN_DROP and now - alerted.get(key, 0) > WINDOW_S:
            alerted[key] = now
            pts = o.get("points")
            line = "" if pts is None else f" {pts:g}" if new["type"] == "total" else f" {pts:+g}"
            print(f'STEAM {event["sport"]} | {event["home"]} v {event["away"]} | {new["type"]}{line} {o["name"]}: '
                  f'{high:.3f} -> {o["decimal"]:.3f} (-{drop:.1%} in {WINDOW_S}s) fair {o["fair"]:.3f} max stake {new["maxStake"]}')


asyncio.run(stream({"sports": ["soccer", "tennis", "basketball"], "markets": ["moneyline", "spread", "total"],
                    "main": True, "specials": False}, on_market))

Eseguilo con python steam.py. Le soglie sono variabili d'ambiente; per esempio MIN_DROP=0.03 WINDOW_S=300 python steam.py per un 3% in cinque minuti. Una riga tipica:

STEAM tennis | Sebastian Baez v Daniil Glinka | moneyline away: 2.260 -> 2.050 (-9.3% in 120s) fair 2.143 max stake 975

Passo 4 — Oppure interroga l'endpoint REST#

Se ti basta una lista periodica, GET /v1/drops restituisce i cali più forti in una finestra mobile, calcolati lato server:

curl -H "x-api-key: $PINNFEED_KEY" "https://pinnfeed.io/v1/drops?sport=soccer&live=true&minutes=10&min_pct=5"

Ogni riga contiene evento, mercato, linea, esito, from, to, dropPct e movedAt. Funziona su tutti i piani, anche su Free con i suoi 30 secondi di ritardo.

Passo 5 — Dagli alert ai pronostici#

  • Confronta con i bookmaker soft. Uno steam serve solo dove il prezzo soft non si è ancora mosso. La guida al value betting mostra come quantificare quel vantaggio con le quote eque di Pinnacle.
  • Preferisci il pre-match per il ritardo dei bookmaker soft; nel live i movimenti dipendono spesso dal punteggio più che dal denaro sharp.
  • Misurati con il closing line value: se i tuoi pronostici di steam battono in media la chiusura, il segnale è reale.
  • Pubblicali: il bot di pronostici per Telegram invia questi alert a un canale.

Domande frequenti#

Che differenza c'è tra dropping odds e steam?#

Le dropping odds sono qualsiasi quota in calo. Lo steam è un calo rapido e significativo presso un bookmaker sharp, di solito provocato da denaro informato, che poi tende a propagarsi agli altri bookmaker.

Perché usare Pinnacle per rilevare lo steam?#

Pinnacle accetta limiti alti e muove i prezzi in base all'azione sharp, quindi i suoi movimenti sono il miglior segnale del mercato. I bookmaker soft li copiano o arrivano dopo.

Posso farlo senza il WebSocket?#

Sì, facendo polling su /v1/drops, che funziona su tutti i piani. Il WebSocket vede ogni movimento quando avviene; il polling lo vede solo alla tua richiesta successiva.

Il piano WebSocket: Builder, 99 €/mese.

Quote Pinnacle in tempo reale su un unico WebSocket: tutti i 13 sport, tutti i mercati, quote eque senza margine e quote di chiusura. 3 giorni gratis, disdici con un clic.

Form K-1 · Free API key

Get your free API key.

No password. We email you a link; click it and your key is on screen.

One free key per email. Link valid for 20 minutes.