pnclPULSEObter acesso à API

DEDUPLICAÇÃO E COOLDOWNS

Deduplicando alertas de queda da Pinnacle.

Um único preço em queda pode gerar vários alertas da API de odds da Pinnacle: o motor reporta cada queda que cruza seu limite, mercados ao vivo se movem a cada poucos segundos, e um reinício pode entregar um lote que você já tinha tratado. Três chaves, uma regra de cooldown e um pequeno armazenamento de estado transformam isso em um alerta por decisão.

Por que uma seleção alerta mais de uma vez

O stream envia toda queda igual ou acima de min_drop dentro da sua própria janela de detecção. Um preço da casa que vai a 2.10, depois 1.98, depois 1.87 em vinte minutos cruza 5% duas vezes a partir de dois pontos de partida diferentes, e os dois cruzamentos são reais. Durante o jogo, a mesma seleção pode reprecificar a cada ponto de uma partida de tênis, então uma regra de 5% dispara de novo e de novo enquanto o favorito abre vantagem no set.

Reinícios acrescentam uma terceira fonte. Se o seu processo grava a posição antes de terminar de tratar um lote, os alertas desse lote são tratados de novo quando ele volta. A correção é de ordem, não de filtro: marque um alerta como concluído só depois que a mensagem que depende dele tiver saído.

Três chaves, três perguntas

Cada chave responde a uma pergunta diferente, e um relay normalmente precisa das três.

A regra do cooldown

Depois que um alerta de uma seleção sai, ignore os alertas seguintes dessa seleção até que um cooldown termine ou o preço tenha caído mais um limite inteiro em relação ao preço que você reportou por último, o que vier primeiro. A segunda cláusula importa: um cooldown sozinho esconderia um desabamento de 2.10 para 1.70 atrás de uma mensagem de 2.10 para 1.98 enviada um minuto antes.

state[key] = {last_price, alerted_at}

on alert for key:
    seen = state.get(key)
    if seen is None: send; store; return
    fresh = now - seen.alerted_at < COOLDOWN
    further = (seen.last_price - to_price)
              / seen.last_price >= MIN_DROP
    if fresh and not further: return
    send; store

Dez minutos servem para mercados pré-jogo, onde uma linha deriva ao longo de uma tarde. Sessenta segundos servem para mercados ao vivo, onde a mesma regra engoliria um set inteiro de tênis. Rode ao vivo e pré-jogo com valores separados, já que eles chegam por streams separados de qualquer forma. Para ver o que uma porcentagem significa em termos de probabilidade antes de escolher um limite, a calculadora de odds em queda no pnclDATA transforma qualquer par de preços na mudança que o mercado fez.

Um armazenamento que sobrevive a reinícios

O estado é minúsculo: um pequeno registro por seleção sobre a qual você já alertou, e um conjunto de ids de alerta. Redis com expiração de 24 horas serve, e uma tabela SQLite com uma coluna expires_at varrida uma vez por hora também. Carregue-o na inicialização antes de abrir o stream, para que os primeiros alertas depois de um reinício sejam julgados contra as mensagens de ontem e não contra uma memória em branco. Uma grade pré-jogo em um dia cheio produz alguns milhares de seleções, muito abaixo de qualquer coisa que precise de ajuste.

Agrupando o que chega junto

Os alertas chegam em listas, e um evento costuma aparecer com dois ou três resultados na mesma lista quando um mercado reprecifica por inteiro. Agrupe pela chave do evento dentro de cada lote e envie uma mensagem que liste cada lado que se moveu. Entre lotes, um buffer de cinco segundos recolhe os retardatários sem atrasar ninguém de forma perceptível. O lado da entrega, incluindo o que as plataformas de chat fazem quando você posta rápido demais, está na página do relay por webhook.

Meça o efeito

Conte os alertas lidos e os alertas enviados, por stream, por dia. Um relay que envia um quinto do que lê está se comportando; um que envia quase tudo tem um cooldown que nunca pega, e um que envia quase nada tem um limite alto demais para os esportes que acompanha. Registre as duas contagens uma vez por hora e as configurações certas aparecem em uma semana.

Perguntas que esta regra levanta

O stream deduplica alguma coisa por conta própria?

Ele não repete um alerta com o mesmo id, mas cada novo cruzamento do limite é um alerta novo com um id novo. A deduplicação por seleção é tarefa sua.

E os preços que sobem?

O stream de quedas só reporta quedas. Uma seleção cujo preço volta a subir depois de uma queda não faz barulho; se você precisa das duas direções, consulte o mercado por REST ou receba os frames brutos do WebSocket.

O cooldown deve ser por esporte?

Por fase primeiro, por esporte depois. Ao vivo e pré-jogo diferem muito mais do que tênis e futebol. Comece com um valor para ao vivo e um para pré-jogo, depois ajuste um esporte só quando o log dele mostrar um problema.

Obter acesso à API

O comportamento do stream segue a documentação publicada pelo fornecedor, conferida em 26 de setembro de 2026. Publicado em .