Backtesting Without Fooling Yourself
A step-by-step path from what your backtest really optimizes to proving an edge survives overfitting, multiple testing, and live execution. Read top to bottom — each part builds on the last.
- 01
Jun 28, 2026 #algotradingDesign da função objetivo: a métrica que você otimiza escolhe secretamente sua estratégia
Para buscar a 'melhor' estratégia é preciso primeiro definir 'melhor' — e esse escalar escolhe o vencedor em silêncio. Em dados sintéticos com um edge conhecido (600 seeds, T=2000, 80 limiares), um Sharpe por trade ingênuo coroa uma loteria: escolhe um vencedor com menos de 5% de exposição em 56% das seeds e degenera em 57% — na seed mais extrema, 8 trades produzem um Sharpe in-sample de 21.09 que desaba para 0.13 fora da amostra. O conserto honesto é quase entediante: medir na linha do tempo completa, que nunca degenera (out-of-sample 1.71). Um shrinkage por número de trades (conf_k) e um piso de exposição podem remendar uma métrica por trade, mas mesmo totalmente corrigidos eles apenas igualam o Sharpe de linha do tempo completa (1.70 contra 1.71) — nunca o superam. A lei de Goodhart, num backtest, com verdade fundamental controlada.
- 02
Jul 8, 2026 #negociação algorítmicaProvando a Ausência de Look-Ahead em Backtests Multi-Timeframe: Perturbe o Futuro, Prove que o Passado Não Pode Vê-lo
Backtests multi-timeframe vazam o futuro através de uma barra de timeframe superior ainda em formação, cujo fechamento final ainda não existe. Não se chega à confiança por revisão de código — é preciso testar. Reproduzimos exatamente a regra de barra fechada do bot ao vivo e depois provamos a ausência de vazamento com uma sonda de futuro deslocado: perturbamos cada barra futura e verificamos que todo sinal e trade passado permanece bit a bit inalterado. 25/25 verificações de paridade, e a sonda tem dentes.
- 03
Mar 15, 2026 #algotradingWalk-Forward Optimization: The Only Honest Strategy Test
Why a single train/test split does not protect against overfitting, how walk-forward optimization systematically verifies parameter robustness, and why a strategy with +3342% PnL@ML on 21 parameters is a ticking time bomb without WFO.
- 04
Mar 12, 2026 #algotradingAnálise de plateau: como distinguir um ótimo robusto de overfitting
Por que encontrar os melhores parâmetros de uma estratégia é apenas metade do trabalho. Como distinguir visual e quantitativamente um plateau estável de um pico frágil, e por que os gráficos de contorno do Optuna são uma etapa obrigatória antes de lançar uma estratégia otimizada em produção.
- 05
Mar 6, 2026 #algotradingMonte Carlo Bootstrap: como obter intervalos de confiança para um backtest em 10 linhas de código
Por que uma estimativa pontual de um backtest é uma ilusão perigosa. Como o bootstrap Monte Carlo, em 2 segundos de computação, fornece um intervalo de confiança de 95% para o PnL e o MaxDD, e por que esse é um passo obrigatório antes de lançar uma estratégia em produção.
- 06
Jul 1, 2026 #algotradingThe Probability of Backtest Overfitting: Did Your Search Beat a Coin Flip?
The Deflated Sharpe Ratio prices the winning strategy; PBO prices the search that picked it. Combinatorially Symmetric Cross-Validation runs C(16,8) = 12,870 train/test splits over a 1000x200 performance matrix and asks: does the in-sample winner land in the bottom half out of sample? The catch almost everyone misses — PBO's null is 0.5, not 1. On 200 zero-edge strategies the best in-sample annualized Sharpe of 1.98 collapses to 0.06 out of sample and PBO = 0.476: a coin flip, fully overfit. Plant a real edge (annualized Sharpe 2.38) and PBO drops to 0.001, the in-sample 3.73 surviving to an out-of-sample 2.34. A moving-average grid on a pure random walk has no out-of-sample skill either — PBO 0.463 averaged over 60 matrices, statistically indistinguishable from the null — and on one representative matrix the mirage is vivid: a best in-sample Sharpe of 2.33 collapses to a median out-of-sample -0.22, PBO 0.573, a 63% chance of a loss.
- 07
Jun 29, 2026 #algotradingO Deflated Sharpe Ratio: Quantos dos seus 'vencedores' de backtest sobrevivem ao multiple testing?
Uma busca de parâmetros é uma máquina de fabricar sorte. Em ruído puro — 1.000 estratégias com zero de edge real — o melhor Sharpe anualizado tem média de 1,63 e o teste de significância ingênuo aponta uma descoberta em 100% das vezes. Construímos uma verdade fundamental controlada e mostramos que o Deflated Sharpe Ratio, o haircut de Harvey-Liu e o Reality Check de White restauram a honestidade: os falsos positivos caem de 1,000 para 0,001-0,057, edges genuínos acima do teto de ruído são mantidos com poder ~1 — e uma armadilha real (grids correlacionados) onde o DSR bruto deflaciona em excesso e o veredito precisa ser lido em toda uma faixa de estimativas de trials efetivos, não em um único número.
- 08
Mar 7, 2026 #algotradingParidade backtest-live: por que seu bot opera diferente do backtest
Taxonomia completa das divergências entre backtesting e trading ao vivo: de slippage e execuções parciais até a dessincronização da base de código. Padrões arquiteturais para alcançar paridade, exemplos em Python de um módulo core compartilhado e uma checklist de monitoramento em produção.
- 09
Jul 9, 2026 #algotradingO Negativo Honesto: Dezenas de Milhares de Backtests, Cinco Majors, Nenhuma Vantagem Robusta
O ponto culminante do arco de busca-e-overfitting, e ele termina em um resultado negativo — o correto. Uma busca de timeframe duplo em um único símbolo no ETHUSDT encontrou uma configuração que valia +16,35% out-of-sample e +2,62% em um holdout intocado; o Deflated Sharpe Ratio, considerando ~37.000 tentativas, deflacionou-o para 0,00. Uma passagem cross-instrument sobre cinco majors (ETH/BTC/SOL/BNB/XRP, ~1,18M de barras de 1m cada), selecionando pela mediana out-of-sample, o mata de vez: DSR duplo 0,24 / PBO 0,264, DSR triplo 0,14 / PBO 0,327 — ambos falham nos limiares. O campeão é lucrativo em 1 de 5 símbolos e negativo no restante. É para isso que serve o aparato anti-overfitting: para impedir você de embarcar o melhor do ruído como alfa.