Futuros
Aceda a centenas de contratos perpétuos
TradFi
Ouro
Plataforma de ativos tradicionais globais
Opções
Hot
Negoceie Opções Vanilla ao estilo europeu
Conta Unificada
Maximize a eficiência do seu capital
Negociação de demonstração
Introdução à negociação de futuros
Prepare-se para a sua negociação de futuros
Eventos de futuros
Participe em eventos para recompensas
Negociação de demonstração
Utilize fundos virtuais para experimentar uma negociação sem riscos
Lançamento
CandyDrop
Recolher doces para ganhar airdrops
Launchpool
Faça staking rapidamente, ganhe potenciais novos tokens
HODLer Airdrop
Detenha GT e obtenha airdrops maciços de graça
Pre-IPOs
Desbloquear acesso completo a IPO de ações globais
Pontos Alpha
Negoceie ativos on-chain para airdrops
Pontos de futuros
Ganhe pontos de futuros e receba recompensas de airdrop
Investimento
Simple Earn
Ganhe juros com tokens inativos
Investimento automático
Invista automaticamente de forma regular.
Investimento Duplo
Aproveite a volatilidade do mercado
Soft Staking
Ganhe recompensas com staking flexível
Empréstimo de criptomoedas
0 Fees
Dê em garantia uma criptomoeda para pedir outra emprestada
Centro de empréstimos
Centro de empréstimos integrado
Promoções
Centro de atividades
Participe de atividades para recompensas
Referência
20 USDT
Convide amigos para recompensas de ref.
Programa de afiliados
Ganhe recomp. de comissão exclusivas
Gate Booster
Aumente a influência e ganhe airdrops
Announcements
Atualizações na plataforma em tempo real
Blog da Gate
Artigos da indústria cripto
AI
Gate AI
O seu parceiro de IA conversacional tudo-em-um
Gate AI Bot
Utilize o Gate AI diretamente na sua aplicação social
GateClaw
Gate Lagosta Azul, pronto a usar
Gate for AI Agent
Infraestrutura de IA, Gate MCP, Skills e CLI
Gate Skills Hub
Mais de 10 mil competências
Do escritório à negociação, uma biblioteca de competências tudo-em-um torna a IA ainda mais útil
GateRouter
Escolha inteligentemente entre mais de 40 modelos de IA, com 0% de taxas adicionais
Cálculo preciso do PnL na Polymarket: por que o seu lucro e prejuízo podem estar incorretos?
Tenho trabalhado com automação de negociações na Polymarket há seis meses, e o maior erro que cometi não foi uma estratégia falha, mas sim não conseguir calcular corretamente quanto ganhei ou perdi.
Não sou incompetente. O problema está na própria fórmula de cálculo de PnL da PM. Os números fornecidos pela API oficial estão incorretos, e os rankings exibidos por sites de análise de terceiros também estão errados. Você escreve seu próprio script? Provavelmente também está errado.
Quão grande é a discrepância? O terceiro colocado no ranking, kch123, calculou uma perda de US$ 3,5 milhões usando um método errado, enquanto o lucro real foi de US$ 11,4 milhões. Não é uma questão de alguns pontos percentuais — o símbolo de lucro e perda está invertido.
Este artigo detalha cada erro que cometi. Se você faz negociações, desenvolve ferramentas ou acompanha rankings, cedo ou tarde enfrentará esses problemas.
Erro 1: cashPnl não inclui lucros realizados já liquidados
A abordagem mais intuitiva: usar a interface /positions, somar o campo cashPnl (lucro/perda em dinheiro).
Testando com os três endereços no top 15 do ranking:
swisstony: soma de cashPnl +$35 mil, ranking real +$5,6 milhões, discrepância de 158 vezes
kch123: soma de cashPnl -$3,52 milhões, ranking real +$11,4 milhões, símbolo invertido
gmanas: soma de cashPnl -$2,64 milhões, ranking real +$5,02 milhões, símbolo invertido
Para esses três endereços, os sinais de lucro e perda estão invertidos em dois casos.
Razão: a API /positions retorna cashPnl sem incluir os lucros realizados que já foram liquidados. Quando uma posição vencedora é automaticamente resgatada em USDC, ela desaparece da resposta da API. O que fica são posições não liquidadas — geralmente com prejuízo flutuante.
Você acha que está calculando todo o lucro e perda, mas na verdade só está considerando a parte não liquidada.
Erro 2: o campo makerPnl não condiz com o fluxo de caixa na cadeia
No arquivo JSONL de dados de negociação há um campo makerPnl (lucro/perda do maker), que parece ser para calcular PnL. Mas não confie nele.
Percebi que, ao somar o makerPnl no dado de market making, o resultado difere de uma magnitude do fluxo de caixa na cadeia. A multiplicidade exata pode variar dependendo do cenário, mas a direção é sempre a mesma: a lógica interna do makerPnl não condiz com o fluxo real de USDC.
Por maior que seja a discrepância, a conclusão é a mesma: não use esse campo para calcular PnL.
Erro 3: não deduzir por txHash individualmente
Isso é contra a intuição.
Se um txHash (hash da transação) aparece várias vezes, a reação natural é: dados duplicados, remover.
Mas não pode fazer isso. O CLOB ( livro de ordens on-chain ) da PM pode combinar várias ordens maker em uma única transação na cadeia, e múltiplas entradas com o mesmo txHash representam execuções reais distintas.
Antes, eu deduzia por txHash + ativo, e isso fez eu subestimar US$ 133 na parte de compra. Verificando na Polygon, uma única transação realmente contém múltiplos eventos de transferência de USDC, cada um correspondendo a uma negociação real.
Conclusão: não deduza apenas por txHash. Para calcular PnL, some diretamente os dados brutos de /activity.
Erro 4: limite na paginação por offset
Na API /activity, usar offset para paginação? Se passar de 3000, dá erro 400. O documento não informa isso.
Testei com os três endereços: GET /activity?offset=3100 retorna HTTP 400, com a mensagem de erro “max historical activity offset of 3000 exceeded”. Jogadores com dezenas de milhares de transações, 3000 não é suficiente.
Usar o parâmetro end (passando o timestamp da última entrada da página anterior - 1) para paginação por cursor não tem limite.
Erro 5: diferenças na métrica de PnL do ranking
Depois de calcular o PnL de um endereço, ao comparar com o ranking, há uma pequena diferença.
Na maioria dos casos, a discrepância é inferior a US$ 10 (devido à volatilidade do valor de mercado das posições). Mas se a diferença for maior, as razões podem incluir: janela de agregação do ranking, atraso na atualização do cache ou múltiplas carteiras proxy vinculadas ao usuário.
Na prática, usando o método de fluxo de caixa, o PnL de um endereço individual bate quase exatamente com o valor retornado pela API lb-api. Se a sua diferença for grande, verifique se a paginação foi completa (erro 4) e se usou os campos corretos (erros 1-2).
Método correto
Depois de testar várias abordagens, a mais confiável que validei é a soma direta dos dados brutos de /activity, sem usar campos pré-calculados, apenas somando as entradas de transações originais.
Fórmula:
PnL = SOMA (negociações com side=SELL) + SOMA (REDEEM) + SOMA (MERGE) + SOMA (REBATE_MAKER) + SOMA (REWARD) - SOMA (negociações com side=BUY) - SOMA (SPLIT) + valor de mercado das posições
· TRADE BUY: gastar USDC para comprar tokens (saída)
· TRADE SELL: vender tokens para recuperar USDC (entrada)
· REDEEM: resgatar USDC de posições vencedoras (entrada)
· SPLIT: criar tokens a partir de USDC (saída)
· MERGE: consolidar tokens de volta em USDC (entrada)
· REBATE_MAKER: comissão de maker (entrada)
· REWARD: recompensas/audições (entrada)
· Fonte de dados:
GET /activity?user=<endereço>&limit=500, paginar com end, somar por tipo após obter todos os dados.
· Valor de mercado das posições:
GET /positions?user=<endereço>, tamanho × preço atual.
· Validação cruzada:
Comparar o resultado com o API de ranking da Polymarket (lb-api.polymarket.com/profit?window=all&address=X), diferença < US$ 10 é aceitável. A discrepância vem da volatilidade do valor de mercado.
Validação: top 15 do ranking, teste real
Após calcular pelo método de fluxo de caixa, validar com o API do ranking:
swisstony: fluxo de caixa +$5,601,000, ranking +$5,601,000, diferença < US$ 10
kch123: fluxo de caixa +$11,396,000, ranking +$11,396,000, diferença < US$ 10
gmanas: fluxo de caixa +$5,024,000, ranking +$5,024,000, diferença < US$ 10
As diferenças entre os três endereços estão dentro de US$ 10, devido à volatilidade do valor de mercado.
Depois de validar o método, apliquei-o para analisar o lucro e perda de centenas de endereços de destaque. E aí, a história mudou completamente.
Resumo
SOMA(cashPnl) de /positions → Não funciona, não inclui lucros realizados, o símbolo pode estar invertido.
Soma do campo makerPnl → Não funciona, não condiz com o fluxo de caixa na cadeia.
Calculado deduzindo por txHash → Não funciona, acima de US$ 100, elimina execuções reais.
Paginação por offset + soma → Não funciona, dados truncados, erro >3000.
Método de fluxo de caixa na API → Atualmente o mais confiável, com diferença inferior a US$ 10.
O primeiro passo na quantificação não é encontrar alpha. É garantir que seus cálculos estejam corretos.
Tudo acima vem de experiências reais, não de teoria. A API da PM pode mudar a qualquer momento, por isso recomenda-se validar periodicamente seus resultados com o ranking.
Clique para conhecer as vagas na BlockBeats
Participe do grupo oficial da BlockBeats:
Telegram: https://t.me/theblockbeats
Telegram: https://t.me/BlockBeats_App
Twitter oficial: https://twitter.com/BlockBeatsAsia