On the wire · 14:57:27 UTC Live 125 · Prematch 8,511 · Markets 34,149 Vol. I · No. 1 · Monday 9 November 2026 wss://pinnfeed.io/v1/stream
PinnFeed
Guia · Steam · Quedas de odds

Detecte quedas de odds e movimentos de steam na Pinnacle em tempo real

Atualizado em · PinnFeed · 4 min de leitura

Um movimento de steam é uma queda de preço rápida e forte numa casa que forma o mercado, como a Pinnacle, normalmente porque entrou dinheiro sharp de um lado. As casas soft costumam ficar segundos ou minutos atrás, e é por isso que alertas de steam estão entre os sinais mais úteis que você pode tirar de um feed ao vivo. Neste guia você monta um detector sobre o WebSocket da PinnFeed. É uma ferramenta estatística, não um sistema de palpites.

Passo 1 — Defina o que é steam#

Uma definição prática que você pode ajustar:

  • a odd decimal de um resultado cai pelo menos 5% em relação ao máximo dos últimos 2 minutos;
  • o limite máximo do mercado é de pelo menos 500, porque a Pinnacle aumenta os limites conforme ganha confiança num preço, então movimentos em mercados com pouca liquidez têm mais ruído;
  • você alerta uma vez por resultado e janela, não a cada tick.

Passo 2 — Receba o book em streaming#

Use o cliente Python do guia de Python e Node. Salve como pinnfeed_stream.py ao lado do script abaixo; ele chama on_market(old, new, event) toda vez que um mercado muda.

Passo 3 — Acompanhe o máximo móvel de cada resultado#

Guarde uma deque curta de (timestamp, price) por mercado e resultado, descarte o que for mais antigo que a janela e compare o preço atual com o máximo da janela:

# steam.py: sinaliza movimentos de steam na Pinnacle (quedas de odds rápidas e fortes) a partir do WebSocket ao vivo.
# Usa o pinnfeed_stream.py do guia de 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))        # janela de observação
MIN_DROP = float(os.environ.get("MIN_DROP", 0.05))  # alerta quando a odd cai 5% ou mais dentro da janela
MIN_STAKE = float(os.environ.get("MIN_STAKE", 500))  # ignora mercados com pouca liquidez: o limite máximo da Pinnacle é um sinal de confiança

history = collections.defaultdict(collections.deque)  # (id do mercado, resultado) -> 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))

Rode com python steam.py. Os limites são variáveis de ambiente; por exemplo, MIN_DROP=0.03 WINDOW_S=300 python steam.py para 3% em cinco minutos. Uma linha típica:

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 — Ou pergunte ao endpoint REST#

Se você só precisa de uma lista periódica, GET /v1/drops devolve as maiores quedas numa janela móvel, calculadas no servidor:

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

Cada linha traz o evento, o mercado, a linha, o resultado, from, to, dropPct e movedAt. Funciona em todos os planos, inclusive no Free com seus 30 segundos de atraso.

Passo 5 — De alertas a palpites#

  • Compare com casas soft. Um steam só é útil onde o preço da casa soft ainda não acompanhou. O guia de value bet mostra como medir essa vantagem com as odds justas da Pinnacle.
  • Prefira o pré-jogo para o atraso das casas soft; ao vivo, os movimentos costumam vir do placar e não de dinheiro sharp.
  • Meça seus resultados com o closing line value: se seus palpites de steam batem o fechamento em média, o sinal é real.
  • Publique: o bot de palpites no Telegram manda esses alertas para um canal.

Perguntas frequentes#

Qual a diferença entre queda de odds e steam?#

Queda de odds é qualquer redução de preço. Steam é uma queda rápida e significativa numa casa sharp, normalmente causada por dinheiro informado, que depois tende a se espalhar para outras casas.

Por que usar a Pinnacle para detectar steam?#

A Pinnacle aceita limites altos e move seus preços com a ação sharp, então os movimentos dela são o melhor sinal do mercado. As casas soft copiam ou ficam para trás.

Dá para fazer isso sem o WebSocket?#

Sim, fazendo polling em /v1/drops, que funciona em todos os planos. O WebSocket vê cada movimento quando acontece; o polling só vê na próxima requisição.

O plano WebSocket: Builder, €99/mês.

Odds da Pinnacle em tempo real por um único WebSocket: os 13 esportes, todos os mercados, odds justas sem margem e odds de fechamento. 3 dias grátis, cancele com um clique.

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.