HISTÓRICO DE ODDS
Armazene o histórico de odds da Pinnacle você mesmo.
A API de odds da Pinnacle serve os preços atuais e diz claramente que não tem arquivo histórico. O histórico de uma linha, um preço de fechamento, a forma de um mercado ao longo de uma semana: tudo isso só existe se você gravou enquanto fazia polling. Esta página traz um desenho de tabelas, uma regra de deduplicação e a aritmética de retenção para um armazenamento que continua pequeno.
O que gravar
Duas tabelas bastam. Uma guarda os eventos, escritos uma vez e atualizados quando o horário de início ou o status muda: event_id, sport_id, league, home, away e starts. A outra guarda as mudanças de preço, uma linha cada vez que o preço de uma seleção difere da última linha que você tem dela: qual evento, qual período, qual mercado, qual lado, o preço e quando você o observou.
CREATE TABLE price_changes (
event_id bigint NOT NULL,
period smallint NOT NULL,
market text NOT NULL, -- money_line, spread, total
side text NOT NULL, -- home, draw, away, over, under
points numeric(6,2), -- spread or total line, else NULL
price numeric(8,3), -- NULL when the market closed
observed_at timestamptz NOT NULL,
cursor_last bigint NOT NULL, -- the response's last value
PRIMARY KEY (event_id, period, market, side, points, observed_at)
);
Armazene o preço como odds decimais exatamente como servido, e mantenha o nulo quando um mercado está suspenso ou fechado. Uma linha nula é informação: ela registra quando o mercado sumiu, que é o que uma consulta de preço de fechamento precisa.
Escreva só o que mudou
O cursor since já limita um polling aos eventos que mudaram, mas dentro de um evento alterado a maioria das seleções costuma estar igual a antes. Compare cada seleção com a última linha que você tem e insira só quando houver diferença. Um pequeno mapa em memória com o último preço por seleção torna a comparação gratuita; reconstrua-o a partir da tabela na inicialização. Sem essa regra, um quadro de futebol ao vivo escreve todas as seleções a cada polling, e a tabela cresce pela taxa de polling e não pelo movimento real do mercado.
Capturando o fechamento
O preço de fechamento é o último preço observado antes do horário de início do evento, e ele só existe no seu armazenamento se o poller estava rodando naquele momento. Faça polling dos quadros pré-jogo até o início, já que o cursor mantém o custo baixo, e deixe um job que roda alguns minutos depois de cada início marcar a última linha pré-jogo de cada seleção como o fechamento. Por que o fechamento merece uma coluna própria está explicado no guia de valor da linha de fechamento no pnclDATA: é a referência contra a qual a maioria dos apostadores mede seus preços.
Aritmética de retenção
O crescimento do armazenamento depende do movimento, não do polling, uma vez que a deduplicação está no lugar. Os números abaixo ilustram a aritmética, não medem o feed; substitua pelas suas próprias contagens depois de uma semana de registro.
| Premissa | Valor | Resultado |
|---|---|---|
| Mudanças de preço escritas por dia, cinco esportes, ao vivo e pré-jogo | 200,000 | Linhas por dia |
| Bytes por linha com índice | 120 | 24 MB por dia |
| Linhas brutas mantidas | 90 dias | Cerca de 2,2 GB |
| Último preço por hora por seleção além de 90 dias | 1 linha por hora | Bem abaixo de um décimo do tamanho bruto |
Particione a tabela de mudanças por mês e descarte partições em vez de apagar linhas. Mantenha as linhas de eventos enquanto existirem as mudanças que as referenciam.
Lacunas continuam lacunas
Nada na API reproduz o passado. Um poller que ficou fora por uma hora tem uma hora sem linhas, e o polling seguinte devolve o estado atual, não o caminho que levou até ele. Registre as interrupções em uma tabela separada para que uma consulta ao histórico distinga um mercado parado de um mercado ausente, e trate o dia em que começou a gravar como o primeiro dia que seu histórico cobre. O que verificar antes de confiar no arquivo de outra pessoa com esses preços está no guia de dados históricos de odds no pnclAPI.
Perguntas antes da primeira linha
O endpoint de quedas pode preencher o histórico retroativamente?
Só alguns minutos dele. O endpoint REST de quedas devolve movimentos recentes dentro de uma janela limitada, o que ajuda depois de uma interrupção curta e não além disso.
Devo armazenar a resposta inteira como JSON?
Guarde uma cópia comprimida das respostas brutas por alguns dias se quiser rederivar linhas depois de um bug no parser, mas consulte a tabela normalizada. O JSON bruto cresce com a taxa de polling; a tabela de mudanças cresce com o mercado.
A chave gratuita permite isso?
Para um quadro consultado a cada 15 minutos, sim, e o histórico será grosseiro. Um histórico de linha útil precisa dos planos REST pagos, cuja taxa por segundo é o número a partir do qual dimensionar.
A ausência de arquivo e o comportamento do cursor seguem a documentação publicada pelo fornecedor, conferida em 26 de setembro de 2026. Publicado em .