Futuros
Acesse centenas de contratos perpétuos
TradFi
Ouro
Plataforma única para ativos tradicionais globais
Opções
Hot
Negocie opções vanilla no estilo europeu
Conta unificada
Maximize sua eficiência de capital
Negociação demo
Introdução à negociação de futuros
Prepare-se para sua negociação de futuros
Eventos de futuros
Participe de eventos e ganhe recompensas
Negociação demo
Use fundos virtuais para experimentar negociações sem riscos
Lançamento
CandyDrop
Colete candies para ganhar airdrops
Launchpool
Staking rápido, ganhe novos tokens em potencial
HODLer Airdrop
Possua GT em hold e ganhe airdrops massivos de graça
Pre-IPOs
Desbloqueie o acesso completo a IPO de ações globais
Pontos Alpha
Negocie on-chain e receba airdrops
Pontos de futuros
Ganhe pontos de futuros e colete recompensas em airdrop
Investimento
Simple Earn
Ganhe juros com tokens ociosos
Autoinvestimento
Invista automaticamente regularmente
Investimento duplo
Lucre com a volatilidade do mercado
Soft Staking
Ganhe recompensas com stakings flexíveis
Empréstimo de criptomoedas
0 Fees
Penhore uma criptomoeda para pegar outra emprestado
Centro de empréstimos
Centro de empréstimos integrado
Centro de riqueza VIP
Planos premium de crescimento de patrimônio
Gestão privada de patrimônio
Alocação premium de ativos
Fundo Quantitativo
Estratégias quant de alto nível
Apostar
Faça staking de criptomoedas para ganhar em produtos PoS
Alavancagem Inteligente
Alavancagem sem liquidação
Cunhagem de GUSD
Cunhe GUSD para retornos em RWA
Promoções
Centro de atividade
Participe de atividades e ganhe recompensas
Indicação
20 USDT
Convide amigos para recompensas de ind.
Programa de afiliados
Ganhe recomp. de comissão exclusivas
Gate Booster
Aumente a influência e ganhe airdrops
Anúncio
Atualizações na plataforma em tempo real
Blog da Gate
Artigos do setor de criptomoedas
AI
Gate AI
Seu parceiro de IA conversacional para todas as horas
Gate AI Bot
Use o Gate AI diretamente no seu aplicativo social
GateClaw
Gate Blue Lobster, pronto para usar
Gate for AI Agent
Infraestrutura de IA, Gate MCP, Skills e CLI
Gate Skills Hub
10K+ habilidades
Do escritório à negociação: um hub completo de habilidades para turbinar o uso da IA
GateRouter
Escolha inteligentemente entre mais de 40 modelos de IA, com 0% de taxas extras
Cálculo preciso de PnL na Polymarket: por que seus lucros e perdas podem estar incorretos?
Estou há meio ano desenvolvendo uma negociação automatizada própria na Polymarket, 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 ruim. É que o cálculo de PnL do PM é uma zona de armadilhas. Os números fornecidos pela API oficial estão incorretos, o ranking exibido por sites de análise de terceiros também está errado. Você escreve seu próprio script para calcular? 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 diferença de alguns pontos percentuais — é que o sinal de lucro e prejuízo foi invertido.
Este artigo destrincha cada erro que cometi. Para quem faz negociações, escreve ferramentas ou acompanha rankings, cedo ou tarde vai encontrar 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/prejuízo 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, diferença de 158 vezes
kch123: soma de cashPnl -$3,52 milhões, ranking real +$11,4 milhões, sinal invertido
gmanas: soma de cashPnl -$2,64 milhões, ranking real +$5,02 milhões, sinal invertido
Para esses três endereços, dois sinais de lucro/prejuízo estão invertidos.
Razão: a API /positions retorna o cashPnl sem incluir os lucros realizados que já foram liquidados. Quando uma posição vencedora é automaticamente resgatada em USDC, essa posição 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/prejuízo, 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/prejuízo do maker), que parece ser para calcular PnL. Mas não confie nele.
Percebi nos dados de market-making que a soma de makerPnl difere por um fator de pelo menos uma ordem de grandeza do resultado do fluxo de caixa na cadeia. O fator exato pode variar dependendo do cenário, mas a direção é sempre a mesma: a lógica interna de makerPnl não bate 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.
Não faça 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últiplos registros sob o mesmo txHash representam execuções reais distintas.
Antes, eu deduzia por txHash + ativo, e isso fez com que eu subestimasse US$ 133 na side de compra. Verificando na Polygon, uma única transação realmente tem 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 de paginação com 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 acima: GET /activity?offset=3100 retorna HTTP 400, com a mensagem de erro “max historical activity offset of 3000 exceeded”. Jogadores de alto volume podem ter dezenas de milhares de transações, 3000 não é suficiente.
Usar o parâmetro end (com o timestamp da última entrada da página anterior - 1) como cursor de paginação 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 diferença é menor que 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últiplos proxies vinculados 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, primeiro verifique se a paginação está completa (erro 4) e se está usando 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 da API de fluxo de caixa. Sem usar campos pré-calculados, apenas somando as transações originais.
Fórmula:
PnL = SOMA (TRADES onde side=SELL) + SOMA (REDEEM) + SOMA (MERGE) + SOMA (REBATAS_DO_MAKER) + SOMA (REWARD) - SOMA (TRADES onde side=BUY) - SOMA (SPLIT) + valor de mercado das posições
· TRADE BUY: gastar USDC para comprar token (saída)
· TRADE SELL: vender token para recuperar USDC (entrada)
· REDEEM: resgatar USDC de posições vencedoras (entrada)
· SPLIT: criar tokens a partir de USDC (saída)
· MERGE: juntar tokens de volta em USDC (entrada)
· REBATAS_DO_MAKER: reembolso do maker (entrada)
· REWARD: recompensas/airdrops (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 a API de ranking do Polymarket (lb-api.polymarket.com/profit?window=all&address=X), diferença < US$ 10. é aceitável. Diferenças maiores vêm da volatilidade do valor de mercado.
Validação: ranking top 15, teste real
Após calcular pelo método de fluxo de caixa, validar cruzando com a 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 para analisar centenas de endereços de topo, e os resultados de lucro/prejuízo real foram outros.
Resumo
SOMA(cashPnl) de /positions → não funciona, não inclui lucros realizados, sinais podem estar invertidos
Soma do campo makerPnl → não funciona, não condiz com fluxo de caixa na cadeia
Calculado deduzindo por txHash → não funciona, acima de US$ 100, elimina execuções reais
Paginação com offset + soma → não funciona, dados truncados, erro >3000
Método de fluxo de caixa da API → atualmente mais confiável, < US$ 10 de diferença
Para quem faz quant, o primeiro passo não é encontrar alpha. É garantir que seus cálculos estão corretos.
Tudo acima vem de experiências reais, não de teoria. A API do PM pode mudar a qualquer momento, por isso recomenda-se validar periodicamente com o ranking.
Clique para conhecer as vagas abertas na BlockBeats
Participe do grupo oficial da BlockBeats no Telegram:
Telegram assinatura: https://t.me/theblockbeats
Telegram grupo de discussão: https://t.me/BlockBeats_App
Conta oficial no Twitter: https://twitter.com/BlockBeatsAsia