31 de agosto de 2026 · mercados de previsão

O que falha ao fazer backtest de mercados de previsão: um diário de oito dias

O que falha ao fazer backtest de mercados de previsão: um diário de oito dias

Os mercados de previsão parecem a coisa mais fácil do mundo para fazer backtest. O preço está entre [0, 1]. O pagamento é um dólar ou nada. Sem alavancagem, sem financiamento, sem base, sem esquisitices de swaps perpétuos às 00:00 UTC. Já tínhamos um backtester que lidava com perps de cripto, com comissões, financiamento e impacto, e o plano era passar dois dias a adaptá-lo e depois começar a gerar estratégias.

Levou oito dias. Eis o registo, mais ou menos por ordem, incluindo o dia em que a curva de capital parecia incrível — e era mesmo.

Dia 1: o adaptador que devia ter sido trivial

O mapeamento inicial era direto e parecia simples. Um mercado é um instrumento. O preço de YES é o preço. Comprar YES é estar longo; comprar NO é estar curto. A resolução é um fecho forçado a 1.00 ou 0.00. Alimentar a série de preços horária ao mesmo ciclo de eventos e pronto.

Esse mapeamento sobrevive cerca de noventa minutos em contacto com dados reais. A primeira coisa a falhar foi a série de rendibilidades. Toda a nossa camada de risco — dimensionamento das posições, volatilidade alvo, relatórios de Sharpe — partia do princípio de rendibilidades logarítmicas de um instrumento contínuo. Um mercado que passa de 0.04 para 0.00 tem uma rendibilidade logarítmica indefinida e uma perda total bem definida. E um mercado a 0.04 três dias antes da resolução é um objeto completamente diferente de um a 0.04 quatro minutos antes, apesar de ambas as linhas indicarem 0.04.

Acabámos por reparametrizar toda a série com base no tempo até à resolução, em vez da hora do relógio, e por tratar o PnL como terminal, em vez de marcado a mercado. Foi a decisão certa e invalidou todo o código de relatórios a jusante.

Dia 2: a fórmula das comissões é a estratégia

Na Kalshi, a comissão de negociação não é um desconto em pontos base. É quadrática em função do preço: aproximadamente 0.07 × contracts × P × (1−P), arredondada para cima ao cêntimo ao nível da ordem. Isto significa que a comissão é maior precisamente onde um mercado de cara ou coroa é mais interessante, e quase gratuita nos extremos.

PreçoComissão por contratoVantagem necessária (pontos de prob.)Comissão como % da aposta
5¢0.33¢0.336.7%
10¢0.63¢0.636.3%
25¢1.31¢1.315.3%
50¢1.75¢1.753.5%
75¢1.31¢1.311.8%
90¢0.63¢0.630.7%
95¢0.33¢0.330.35%

Leia a terceira coluna como aquilo que realmente importa: para ficar no zero a zero ao comprar a 50¢ e manter até à resolução, a sua estimativa de probabilidade tem de superar a do mercado em 1.75 pontos. Não 1.75 por cento em termos relativos. Em termos absolutos. Se sair antes da resolução em vez de manter, paga a comissão duas vezes, além do spread.

3.5%comissão de sentido único a 50¢, como proporção da aposta
1.75ppvantagem de probabilidade necessária para ficar no zero a zero nesse preço
1resolução por instrumento, em toda a sua vida

Historicamente, o CLOB da Polymarket tem tido um perfil de comissões muito diferente, mais próximo de zero na própria negociação, o que transfere todo o custo para o spread e a profundidade. Assim, a mesma lógica de estratégia tem uma economia completamente diferente consoante a plataforma, e qualquer comparação entre plataformas que use um único modelo de comissões é ficção. Agora usamos uma função de comissão por plataforma, em vez de um valor único.

Se só ler uma linha de um relatório de backtest de mercados de previsão, leia a linha das comissões em pontos de probabilidade. Uma estratégia com uma vantagem de previsão alegada de 1.2 pontos em mercados a 50¢ dá prejuízo na Kalshi antes de qualquer outro custo. Isso deve estar visível na primeira página, sem obrigar o leitor a fazer as contas.

Dia 3: o livro é uma escada e é curto

O nosso modelo de impacto era uma função de raiz quadrada calibrada com livros de ordens de perps de BTC. A forma está errada. Com um tick de 1¢ num instrumento de $1, há apenas 99 níveis de preço possíveis em todo o livro, e um mercado de liquidez média pode ter algumas centenas de contratos na melhor cotação e depois um vazio.

Eis uma captura de um mercado de dados económicos que estávamos a amostrar, do lado YES, cerca de 30 horas antes da resolução:

NívelQuantidade (contratos)Custo acumulado da compra
42¢310310 @ média de 42.0¢
43¢85395 @ média de 42.2¢
45¢140535 @ média de 42.9¢
49¢6001,135 @ média de 46.1¢

Uma ordem de 1,000 contratos — quinhentos dólares de risco, um erro de arredondamento em cripto — faz o preço efetivo subir quatro cêntimos. Quatro cêntimos é mais do dobro da comissão. Não há aqui uma função suave que possamos ajustar; é preciso percorrer o livro nível a nível, senão estamos a inventar. Eliminámos o modelo de raiz quadrada para esta classe de ativos e escrevemos um algoritmo que percorre literalmente o livro. É mais lento e está certo.

A certa altura, dei por mim irritado por estes mercados serem «pequenos demais para interessar». São pequenos porque aquilo que está a ser cotado é uma única questão do mundo real com um prazo, e só há um número limitado de pessoas com uma opinião sobre os pedidos iniciais de subsídio de desemprego nos EUA numa quarta-feira. A dimensão é o mercado. Queixarmo-nos disso é como queixar-nos de uma mesa de póquer com lugar para apenas nove pessoas.

Dia 4: o dia em que a curva de capital ficou linda

Sharpe 4.1 em 1,400 mercados. Suave. Qualquer investigador devia sentir um aperto no estômago ao ver isto. Eu senti, mas só uns quarenta minutos depois de já ter feito uma captura de ecrã.

O erro estava no reamostrador. O histórico de preços dos mercados ilíquidos chega com marcas temporais irregulares, por isso reindexámos os dados numa grelha horária uniforme. O último ponto de cada série arquivada é o valor de liquidação, 1.00 ou 0.00. A nossa reindexação usava um preenchimento pelo vizinho mais próximo sem restrição de direção. Assim, em qualquer mercado cuja última negociação tivesse ocorrido horas antes da resolução, o valor de liquidação propagava-se para trás pelo intervalo. O modelo lia a resposta de amanhã na linha de hoje, precisamente nos mercados ilíquidos onde podia aumentar a posição sem atingir os limites de profundidade.

O preenchimento pelo vizinho mais próximo funciona bem num instrumento contínuo. Num instrumento cuja última observação é a verdade final, transforma-se numa máquina de antecipação. Agora garantimos que todos os preenchimentos só avançam no tempo e que a linha de liquidação está identificada e excluída de qualquer cálculo de variáveis. Essa asserção tem nove linhas e é o código mais valioso que escrevemos durante toda a semana.

Dias 5–6: 1,412 mercados, cerca de 180 apostas

A dimensão da amostra nos mercados de previsão é uma armadilha com um ar simpático. Resolvem-se 1,412 mercados, parece que temos 1,412 observações e calcula-se um t-stat em conformidade. Mas catorze jogos da NFL no mesmo domingo partilham um sistema meteorológico, a divulgação dos relatórios de lesões e um fluxo comum de apostadores. Cinquenta e um mercados eleitorais ao nível dos estados partilham uma única oscilação nacional. «X acontecerá até 31 de março» e «X acontecerá até 30 de junho» são a mesma aposta, com datas de expiração diferentes, e resolvem-se ao mesmo tempo.

Agrupámos os mercados por origem do evento subjacente e data de resolução e obtivemos uma contagem efetiva de observações independentes próxima de 180. Não chega para distinguir uma vantagem real do ruído, tendo em conta a dimensão dos efeitos que analisávamos. E nenhuma quantidade de bootstrapping por mercado resolve o problema, porque o bootstrap tem de reamostrar grupos, não linhas. Se isto for feito mal, a significância aumenta discretamente por um fator de dois ou três.

Dia 7: a resolução também é uma distribuição de probabilidades

As coisas que ainda não tínhamos modelado, descobertas da maneira mais difícil:

Adicionámos ao simulador um termo de custo de manutenção e uma variação aleatória da data de resolução. Nenhum dos dois é preciso. Ambos são melhores do que assumir implicitamente que a resolução ocorre exatamente na data indicada e com certeza.

Dia 8: o que saltar e o que fazer primeiro

  1. Ignore por completo a estrutura baseada em rendibilidades. Não adapte uma camada de risco com volatilidade alvo a um instrumento com pagamento terminal. Escreva uma camada de dimensionamento de apostas que trabalhe com probabilidades e montantes apostados. Perdemos dois dias a tentar adaptar a antiga.
  2. Construa a função de comissões antes da estratégia. Apresente a curva da vantagem necessária para atingir o ponto de equilíbrio para cada plataforma onde pretende negociar e coloque-a à vista da equipa. Elimina cerca de metade das ideias antes de gastarem tempo num backtest.
  3. Percorra o livro desde o primeiro dia. Qualquer modelo paramétrico de impacto importado de um mercado contínuo estará errado de uma forma que lhe será favorável.
  4. Agrupe antes de contar. Decida a chave de agrupamento para calcular a dimensão efetiva da amostra ao mesmo tempo que define o universo, e não depois de obter um Sharpe de que gosta.
  5. Garanta a direção do preenchimento. Uma linha por junção. Se uma série termina na verdade final, trate o preenchimento para trás como um erro por definição, em vez de esperar que alguém o detete numa revisão.

Os oito dias valeram a pena, sobretudo porque os mercados de previsão eliminam a ambiguidade que torna tão fácil enganar-nos com backtests de cripto. Não há uma taxa de financiamento que possamos descartar com ligeireza nem uma convenção de preço de referência para discutir. Há apenas uma pergunta, um prazo e uma resposta. Quando o backtest está errado aqui, é possível apontar exatamente para o erro.

mercados de previsãobacktestingcomissõesmicroestrutura de mercadoengenharia de dados
← Todos os artigos