pnclPULSEObter acesso à API

NOTAS SOBRE ALERTAS DE QUEDA

Limiares de queda por esporte em um único stream SSE

O min_drop é definido por conexão e você tem uma conexão por stream. Ajuste o piso baixo e aplique limiares por esporte no seu próprio código.

Um stream de quedas da API de odds da Pinnacle aceita um limiar, min_drop, definido quando a conexão abre. O stream não tem parâmetro de esporte, e cada conta mantém uma conexão por stream, então uma segunda conexão ao vivo com a mesma chave fecha a primeira. Se você quer futebol a 5% e tênis a 3%, a resposta não são dois streams. É um stream ajustado baixo, com regras por esporte no seu próprio código.

A restrição, dita com clareza

Três fatos documentados enquadram o problema, como o guia de configuração SSE os afirma, verificado em 2026-09-29. Primeiro, min_drop é uma configuração da conexão: o exemplo documentado usa 5 e ele desce até 1. Segundo, o stream não tem filtro de esporte. Terceiro, uma conexão por stream por conta.

Qualquer design que precise de dois limiares diferentes no lado do servidor em mercados ao vivo ao mesmo tempo está fora. O que resta é a filtragem no cliente, que acaba sendo o melhor design de qualquer forma.

Ajuste o piso baixo, depois filtre para cima

Abra o stream com min_drop no limiar mais baixo que você pretende usar em qualquer lugar, até o piso de 1 se for o que seu esporte mais sensível precisa. O stream então entrega toda queda igual ou acima desse piso, e seu código aplica a regra real por alerta:

RULES = {"Soccer": 5.0, "Tennis": 3.0}  # percent, per sport
DEFAULT = 4.0

def passes(alert):
    limit = RULES.get(alert["sport"], DEFAULT)
    was, now = alert["from_price"], alert["to_price"]
    drop_pct = 100 * (was - now) / was
    return drop_pct >= limit

Cada alerta é autocontido: nomeia o esporte, a liga, o mercado e o lado, e carrega o preço antes e depois da queda, então o filtro não precisa de uma segunda requisição. A fórmula da porcentagem, a descida dividida pelo preço antigo, é a mesma que o feed aplica, como o guia de alertas de queda documenta.

Limiares por fase vêm de graça

Quedas ao vivo e pré-jogo chegam em streams separados, e uma conexão ao vivo e uma pré-jogo podem rodar lado a lado em uma conta. Isso significa que a divisão de limiares mais importante, ao vivo contra pré-jogo, ganha seu próprio min_drop por conexão. Use-a: o tamanho e a cadência dos movimentos diferem tanto entre as duas fases que a maioria das aplicações as roda como regras separadas de qualquer jeito. O refinamento por esporte acontece então dentro de cada manipulador de fase com o filtro acima.

O que o piso baixo custa

Um min_drop mais baixo significa mais entregas, e cada alerta entregue é trabalho para o seu filtro, seu armazenamento de deduplicação e seus logs. As chaves e os cooldowns descritos no guia de deduplicação não mudam; eles rodam sobre o que sobrevive à sua regra de limiar, exatamente como antes.

Meça por uma semana antes de ajustar. Registre quantos alertas chegaram por esporte, quantos passaram pela sua regra e em quantos você agiu. Se um esporte inunda o log sem produzir uma única decisão, suba o número dele na sua tabela de regras, não na conexão. Se o stream inteiro é ruído, suba o min_drop e deixe o servidor filtrar de novo.

Uma conexão, um piso, muitas regras. O stream entrega; seu código decide.