Um único processo Node.js reunia o robô e a API do painel. A cada ciclo, o orquestrador lia o livro de cada mercado habilitado na API da Vero, calculava o preço-alvo com a referência da Polymarket, aplicava os limites de risco e enviava ordens em lotes por conta. O painel, servido pelo mesmo processo atrás do nginx, permitia ligar e pausar o robô, ajustar parâmetros por mercado e acompanhar patrimônio, ordens e logs.
- Serviço
- Node.js 22 com Express 5, axios, express-rate-limit, jsonwebtoken, bcryptjs e dotenv. Processo único gerenciado por PM2, com reinício automático e limite de memória.
- Estratégia
- Preço médio do livro combinado com a referência da Polymarket (70% livro e 30% referência na estratégia v2), spread dinâmico, desvio por inventário para não ampliar posição já carregada, ordens em dois níveis e recusa de cotar perto de 0 ou de 100.
- Orquestração
- Pool de contas carregado de arquivo restrito fora do repositório, um cliente da API por conta, envio em lotes de 20 ordens com novas tentativas respeitando Retry-After, cancelamento faseado de ordens antigas e defesa que recolhe ordens quando o mercado é suspenso.
- Risco
- Kill switch por patrimônio (caixa, valor reservado em ofertas e posições a valor de liquidação), teto de posição total e por mercado, validade das ordens e robô em espera ao reiniciar, salvo se o estado gravado for ligado.
- Dados
- SQLite via better-sqlite3 com tabelas de configuração, configuração por mercado, histórico de ordens, logs e registro de patrimônio por ciclo com a variação de cada componente.
- Painel
- React 19, React Router 7, Recharts, Tailwind CSS 3 e Vite 6, compilado e servido pelo próprio serviço. Login em página separada, fora do build.
- Operação
- nginx com certificado Let's Encrypt, PM2 e cron de backup diário com snapshot consistente do SQLite enviado a outro servidor.