Sistema de envio automático de value bets via Telegram com modelos estatísticos profissionais
O Lion QuantEdge Bot Manager é um sistema autónomo que lê os dados do scraper de futebol (ficheiro unified_data.json), aplica modelos matemáticos de probabilidade para calcular Expected Value (EV) real de cada mercado, compara com as odds disponíveis, e envia automaticamente as value bets que passam nos filtros configurados para um canal do Telegram.
unified_data.json gerado pelo scraper. Extrai para cada jogo: equipas, data, hora, λH/λA (médias de golos esperados) e odds por mercado.EV = (odd_real × prob_justa − 1) × 100%. Calcula também o stake recomendado via Critério de Kelly.| Componente | Versão | Notas |
|---|---|---|
| Node.js | ≥ 18 | LTS recomendado |
| npm | ≥ 9 | Incluído com Node.js |
| unified_data.json | — | Gerado pelo scraper do Lion QuantEdge |
# 1. Instalar dependências
cd /var/www/BotLionQuant
npm install
# 2. Iniciar o servidor do manager
node server.js
# Ou via PM2 (recomendado em produção)
pm2 start server.js --name lion-bot
pm2 save
http://seudominio.com:5562 (ou localhost:5562 localmente)admin@lionsportstrading.com · Senha: lion2026 — alterar imediatamente em Admin → Utilizadores/var/www/BotLionQuant/data/unified_data.json → GuardarCada utilizador tem as suas próprias credenciais Telegram — token e canal completamente independentes.
@BotFather → enviar /newbot → seguir as instruções. Guardar o token no formato 123456:ABC-DEF...@nomecanal. Para canal privado: adicionar o bot ao canal → enviar uma mensagem → aceder a api.telegram.org/bot{TOKEN}/getUpdates → copiar o chat.id (valor negativo, ex: -1001234567890)| Campo | Significado |
|---|---|
| 🔥 / ⚡ / ✅ | Badge de EV: 🔥 ≥ 15% · ⚡ ≥ 10% · ✅ ≥ 5% |
| Odd Real | Odd disponível na casa de apostas, lida do JSON |
| Odd Justa | 1 / probabilidade_modelo — sem margem da casa |
| Prob | Probabilidade calculada pelo modelo para este mercado |
| EV | Edge real em %: (odd_real × prob − 1) × 100 |
| Stake | Valor recomendado pela gestão de banca configurada |
| xG H — A | Golos esperados por equipa usados no modelo |
O bot partilha exatamente o mesmo motor matemático do Lion QuantEdge. A diferença é que no QuantEdge você explora os cálculos interativamente; aqui, o bot executa automaticamente com as configurações guardadas.
Cada mercado pode ter o seu próprio modelo independente, substituindo o modelo global. Esta funcionalidade permite, por exemplo:
| Mercado | Modelo Recomendado | Porquê |
|---|---|---|
| Over 2.5 Gols | Biv. Poisson (cov 0.15) | Captura correlação entre atacantes |
| BTTS Sim | Biv. Poisson (cov 0.10-0.20) | Correlação explica ambas marcarem |
| BTTS Não | Dixon-Coles (ρ -0.13) | Corrige sobre-representação de 0-0 |
| Under 1.5 | ZIP (π 0.15) | Inflação de zeros em ligas defensivas |
| Under 2.5 | Dixon-Coles | Melhor calibração geral nos baixos |
| Over 3.5+ | Poisson | Correlação irrelevante a placares altos |
| Contexto | Modelo | Parâmetros |
|---|---|---|
| Uso geral (padrão) | Dixon-Coles | ρ = −0.13 |
| Ligas top europeu | Dixon-Coles | ρ = −0.15 a −0.18 |
| Ligas defensivas / Sul América | ZIP | πH = πA = 0.12 a 0.18 |
| Ligas de gols / Copa | Biv. Poisson | cov = 0.10 a 0.20 |
| Alta imprevisibilidade | Neg. Binomial | φH = φA = 3 a 8 |
Cada mercado tem os seus próprios thresholds independentes. Esta configuração granular é a principal vantagem do sistema — permite exigir critérios diferentes para mercados com características distintas.
| Parâmetro | O que controla | Efeito |
|---|---|---|
| EV Mínimo (%) | Edge mínimo exigido | Mais alto = menos dicas, mais seletivo |
| Prob. Mínima (%) | Confiança do modelo | Mais alto = só eventos com prob. elevada |
| Odd Mínima | Filtra odds sem valor | Elimina mercados sobre-cotados pela casa |
| Odd Máxima | Filtra odds excessivas | Elimina eventos onde o modelo pode errar mais |
| EV Mínimo | Volume esperado | Perfil |
|---|---|---|
| +5% | Alto (20-50 dicas/dia) | Explorativo — confirmar edge real ao longo do tempo |
| +10% | Médio (5-15 dicas/dia) | Equilibrado — bom para começar |
| +15% | Baixo (1-5 dicas/dia) | Conservador — alta seletividade, baixa frequência |
| +20%+ | Muito baixo (<2/dia) | Ultra-seletivo — apenas grandes oportunidades |
| Fração | Risco | Crescimento | Recomendação |
|---|---|---|---|
| ¼ Kelly | Baixo | 75% do ótimo | ✅ Padrão recomendado para uso real |
| ½ Kelly | Médio | ~90% do ótimo | Só com histórico de edge confirmado |
| Kelly Pleno | Alto | 100% do ótimo | ❌ Não recomendado — draws elevados |
A stake por percentagem (ex: 1%) é ideal para quem ainda está a validar o sistema ou prefere uma gestão mais simples e controlada. Com 1%, mesmo 20 dicas perdidas consecutivas reduzem a banca em apenas ~18%, mantendo sempre capital para recuperar.
Os filtros globais aplicam-se antes das regras individuais de cada mercado. Atualmente o único filtro global disponível é o Nível de Liga.
Os níveis no sistema seguem a numeração do scraper. Deixar o campo vazio aceita todas as ligas.
| Nível | Tipo de competição | Exemplos |
|---|---|---|
| 1 | Top divisão nacional | Premier League, La Liga, Série A, Bundesliga |
| 2 | Segunda divisão | Championship, Segunda División, Série B |
| 3 | Terceira divisão | League One, Segunda B, Série C |
| 4+ | Divisões inferiores | Ligas regionais, semiprofissionais |
| 15 / Outros | Copas e torneios | Champions League, Copa do Rei, Copa do Brasil |
1,2,3 inicialmente.O painel Fechamento é onde se regista o resultado final de cada dica enviada. Cada utilizador tem o seu histórico completamente separado.
Para cada dica pendente, clicar no botão ✏️ Fechar e selecionar:
| Resultado | Quando usar |
|---|---|
| ✅ GREEN | A dica ganhou — o mercado apostado aconteceu |
| ❌ RED | A dica perdeu |
| ⚠️ VOID | Jogo cancelado, adiado ou resultado anulado — stake devolvida |
Ao fechar, é enviada automaticamente uma notificação ao canal Telegram do utilizador com o resultado. Se a mensagem original ainda estiver disponível, é editada no próprio Telegram.
| Filtro | Opções |
|---|---|
| Mercado | Botões dinâmicos gerados a partir das dicas existentes |
| Status | Todos · ⏳ Pendentes · ✅ Fechados |
| Período | Todos · Hoje · Ontem · 7 dias · Data específica |
| Ordenar | Data envio · Odds · EV · Mercado A-Z |
O sistema pode fechar dicas automaticamente usando resultados reais da API-Football. Configurado no painel Sistema.
api-football.com → plano gratuito inclui 100 chamadas/dia, suficiente para uso normalNo painel Fechamento, clicar em "📊 Ver Performance por Mercado" para ver ROI%, Win Rate e Lucro separados por mercado. Isto permite identificar rapidamente quais mercados estão a gerar retorno real e ajustar as configurações.
A API-Football usa nomes ligeiramente diferentes dos nomes no scraper. Exemplos comuns:
| Nome na dica | Nome na API-Football |
|---|---|
| Atletico Madrid | Atletico de Madrid · Atlético de Madrid |
| PSG | Paris Saint-Germain · Paris SG |
| Man City | Manchester City |
| Benfica | SL Benfica · Sport Lisboa e Benfica |
O sistema suporta múltiplos utilizadores com isolamento total. Cada utilizador tem os seus próprios:
| Recurso | Isolamento | Ficheiro |
|---|---|---|
| Configuração (modelo, mercados, stake) | ✅ Total | data/bot-config-{id}.json |
| Token e Canal do Telegram | ✅ Total | Dentro do bot-config |
| Log do bot | ✅ Total | data/bot.log-{id} |
| Histórico de dicas enviadas | ✅ Total | data/bot-history-{id}.json |
| Fechamento (resultados) | ✅ Total | data/fechamento-{id}.json |
| API-Football key e aliases | Partilhado (admin) | data/bot-system.json |
| Caminho do unified_data.json | Partilhado (admin) | data/bot-system.json |
O admin pode gerir a conta de qualquer utilizador sem fazer logout: no topo da sidebar existe um dropdown "A gerir". Ao selecionar outro utilizador, todas as operações (config, bot, fechamento) são executadas no contexto desse utilizador.
O Simulador lê o unified_data.json atual e passa todos os jogos pelos filtros configurados sem enviar nada ao Telegram. Ideal para testar e afinar configurações antes de ligar o bot.
| Coluna | Significado |
|---|---|
| Odd Real | Odd disponível no scraper |
| Odd Justa | 1/prob_modelo — sem margem da casa |
| Prob | Probabilidade calculada pelo modelo para este mercado |
| EV | Expected Value em % — verde ≥ threshold, vermelho abaixo |
| Modelo | Modelo usado (global ou override do mercado) |
| Status ✅ PASSA | Passaria todos os filtros e seria enviado |
| Status ✗ EV <10% | Falhou neste critério específico |
Configuração de referência para começar — baseada nos padrões usados em ambiente real.
Modelo global: Dixon-Coles ρ = -0.13
Stake: 1% da banca (ou Kelly ¼)
Intervalo: 30 minutos
Over 2.5 Gols
EV ≥ +15% | Prob ≥ 65% | Odd 1.48 – 2.20 | Modelo: Biv.Poisson
BTTS — Ambas Marcam
EV ≥ +15% | Prob ≥ 65% | Odd 1.50 – 2.20 | Modelo: Biv.Poisson
Under 3.5 Gols
EV ≥ +15% | Prob ≥ 70% | Odd 1.40 – 2.00 | Modelo: Dixon-Coles
Modelo global: Biv. Poisson cov = 0.15
Stake: 2% da banca
Intervalo: 30 minutos
Over 1.5 Gols
EV ≥ +8% | Prob ≥ 72% | Odd 1.20 – 1.80 | Modelo: global
Over 2.5 Gols
EV ≥ +10% | Prob ≥ 60% | Odd 1.40 – 2.50 | Modelo: global
BTTS — Ambas Marcam
EV ≥ +10% | Prob ≥ 60% | Odd 1.45 – 2.20 | Modelo: global
Under 2.5 Gols
EV ≥ +8% | Prob ≥ 50% | Odd 1.30 – 2.20 | Modelo: Dixon-Coles
| Indicador | Valor saudável | Ação se fora |
|---|---|---|
| Dicas por dia | 2–8 | Ajustar EV mínimo (subir para reduzir, descer para aumentar) |
| Win Rate (Fechamento) | ≥ 55% (após 50+ apostas) | Aumentar Prob. Mínima se abaixo |
| ROI real | Próximo do EV médio das dicas | Se muito abaixo, rever calibração dos xG |
| EV médio das dicas | +12% a +25% | Se abaixo de +8%, subir EV mínimo |