10 de novembro de 2026 · dados

O teu backtest precisa de um registo de alterações dos dados, não apenas de um snapshot

O teu backtest precisa de um registo de alterações dos dados, não apenas de um snapshot

Um snapshot congelado de dados de mercado não basta para tornar um backtest fiável. Pode reproduzir o mesmo resultado e, ao mesmo tempo, ocultar que o fornecedor alterou os dados que lhe deram origem.

Guarda o snapshot. Depois, mantém um registo de alterações que indique o que mudou, quando mudou e se a estratégia foi afetada. Isto é especialmente importante quando a investigação usa transações corrigidas, dados fundamentais revistos, financiamento reconstruído ou um histórico que o fornecedor atualizou discretamente.

Como pode um backtest reproduzível continuar a induzir-te em erro?

Imagina que descarregas 5 anos de barras horárias na segunda-feira e executas uma estratégia. Na sexta-feira, o fornecedor já corrigiu uma transação incorreta, ajustou uma ação societária ou preencheu uma lacuna. O ficheiro que guardaste continua a produzir exatamente o resultado de segunda-feira. Isso é reprodutibilidade. Mas, se voltares a executar a estratégia com o histórico atual do fornecedor, podes obter um resultado diferente e não ter qualquer registo do motivo.

O problema não se limita a correções drásticas. Uma única máxima alterada pode acionar um stop; um fecho revisto pode fazer um indicador ultrapassar o seu limiar. Num universo amplo, o histórico de um símbolo pode alterar a sua classificação e excluir outro ativo da carteira. O Sharpe final pode variar mesmo que o código e a configuração da estratégia sejam idênticos.

Um hash de ficheiro diz-te que dois ficheiros são diferentes. Não te diz se um ajuste por split alterou 40 anos de preços, se o fornecedor corrigiu 3 transações ou se um parser converteu um campo vazio em zero.

O que deve incluir um registo de alterações dos dados de mercado?

Regista as alterações com a menor granularidade que seja útil e com contexto suficiente para voltares a executar a investigação afetada. Num feed de barras, isso costuma incluir o instrumento, o intervalo, a hora do evento, os valores anteriores e novos, a origem e a hora em que observaste a atualização. Guarda o payload original quando o fornecedor o disponibilizar.

RegistoPorquê guardá-loExemplo
Versão da origem ou hora de obtençãoIdentifica o estado do fornecedor utilizadoSnapshot obtido em 2026-11-02 08:15 UTC
Campo alterado e valores antigo/novoMostra o que mudou efetivamenteETHUSDT 1h máxima: 3,412.10 → 3,418.60
Classificação da alteraçãoDistingue correções de transformaçõesCorreção tardia de transação, ajuste por split, preenchimento retroativo
Versão do pipeline e do esquemaDistingue alterações na origem do processamento feito por tiNormalizador v7, esquema de barras ajustadas v3

Para conjuntos de dados grandes, guarda snapshots imutáveis e um manifesto compacto com os respetivos checksums, versões da origem e horas de obtenção. Acrescenta diferenças ao nível das linhas para as partições alteradas. Assim, tens uma solução intermédia prática: é possível reproduzir integralmente a análise sem escrever cada linha inalterada numa segunda tabela de auditoria.

Como meço se uma correção é relevante?

Não te limites a contar as linhas alteradas. Volta a executar a estratégia afetada com os dados antigos e os novos, mantendo o mesmo código, parâmetros, comissões e pressupostos de execução. Compara as decisões e o percurso até ao resultado.

  1. Identifica os instrumentos e as horas dos eventos afetados com base nas diferenças.
  2. Determina quais as features, sinais, ordens ou ponderações da carteira que usam esses registos.
  3. Repete a execução na menor janela válida, incluindo o lookback e o estado das posições abertas.
  4. Compara ordens, execuções, exposição, volume de negócios, drawdown e desempenho final.

Por exemplo, uma correção do fornecedor que altere uma máxima de 1 minuto em $0.02 pode afetar 1 milhão de linhas sem ter qualquer efeito numa estratégia de momentum diária. Uma única barra corrigida num nível de stop pode ter mais impacto. Mede o efeito nas decisões; a contagem de registos alterados é um indicador fraco desse efeito.

Mantém separadas estas duas perguntas: “Consigo reproduzir o resultado com os dados que guardei?” e “Esta versão dos dados estaria disponível para a estratégia naquela altura?” Um registo de alterações ajuda a responder a ambas, mas a segunda também exige registos de disponibilidade point-in-time.

Qual é o custo e quando compensa?

O acompanhamento de alterações exige armazenamento, trabalho de ingestão e decisões operacionais. Os fornecedores podem não disponibilizar versões estáveis e alguns feeds históricos são reconstruídos periodicamente sem aviso claro das correções. Não podes registar uma alteração que nunca observas.

Começa pelos dados cujas revisões podem alterar as conclusões da investigação: barras usadas pela lógica de stop, ações ajustadas por ações societárias, dados fundamentais point-in-time e séries de financiamento ou de open interest que são reconstruídas. Um manifesto diário e checksums por partição podem bastar para conjuntos de dados amplos e estáveis. Acrescenta diferenças ao nível dos campos onde as atualizações são frequentes ou as decisões de trading dependem de registos individuais.

Os críticos têm razão: um arquivo completo e permanente de todas as respostas dos fornecedores pode tornar-se dispendioso e, ainda assim, não registar o que a origem sabia na altura. A solução é limitar a auditoria aos dados e às decisões relevantes e documentar as lacunas. Um snapshot permite voltar a executar uma experiência. Um registo de alterações permite explicar por que mudou o resultado da experiência.

engenharia de dadosbacktestingreprodutibilidadeinvestigação quantitativa
← Todos os artigos