Backtest é a simulação de uma estratégia de trading em dados históricos: você aplica as regras de entrada e saída candle a candle e mede quanto ela teria ganhado ou perdido, com que frequência e qual foi a pior queda do capital. É o primeiro filtro de qualquer robô ou setup, mas só vale se incluir custos e for validado em dados que não serviram para criar a estratégia.
Em resumo: um backtest honesto usa só a informação disponível em cada momento, desconta taxas, spread e slippage, separa dados de ajuste (in-sample) e de validação (out-of-sample) e olha para drawdown, não só para lucro. Ele serve para eliminar ideias ruins. Nunca garante resultado futuro.
Como funciona um backtest?
A lógica é a mesma em qualquer ferramenta:
- Escolha os dadosAtivo, período e tempo gráfico, de preferência com vários anos e diferentes fases do mercado.
- Codifique as regrasEntrada, saída, stop e tamanho de posição, sem margem para interpretação.
- Simule candle a candleEm cada barra, o sistema só "vê" o que já aconteceu e decide.
- Desconte custosTaxas, spread, slippage e, em alavancados, swap ou funding.
- Analise as métricasRetorno, drawdown, número de operações, taxa de acerto e payoff.
- Valide fora da amostraTeste em um período reservado, sem mexer nos parâmetros.
O verbete da Investopedia sobre backtesting resume a premissa: se a estratégia funcionou no passado, há alguma chance de funcionar no futuro, mas essa chance depende de como o teste foi feito.
Onde fazer backtest: TradingView, MetaTrader 5 e Python
| Ferramenta | Como funciona | Cuidado principal |
|---|---|---|
| TradingView (Pine Script) | Estratégia roda no gráfico; relatório com métricas e lista de trades | Configurar comissão e slippage no strategy() |
| MetaTrader 5 (MQL5) | Strategy Tester com modos de tick, otimização e forward | Usar “ticks reais” quando possível e simular atraso |
| Python (pandas, backtrader, vectorbt) | Você controla dados, regras e custos | Evitar olhar para o futuro sem perceber |
No TradingView, o simulador executa ordens a mercado no próximo tick disponível, normalmente a abertura do candle seguinte, e o relatório traz abas de métricas e de operações, segundo a documentação de estratégias. Veja o tutorial de Pine Script para montar sua primeira estratégia.
No MetaTrader 5, o testador oferece cinco modos: “Every tick based on real ticks”, “Every tick”, “1 minute OHLC”, “Open prices only” e cálculos matemáticos. Também permite simular atrasos de execução e reservar parte do período para forward test, conforme a ajuda oficial. O passo a passo está no guia de MQL5 Expert Advisor.
Um backtest percorre o histórico candle a candle, como este gráfico de EUR/USD de 2009, decidindo só com o que já havia acontecido. Crédito: Lyakhovskiy Pavel, licença CC BY-SA 3.0, via Wikimedia Commons.
Exemplo: backtest simples em Python com pandas
O código abaixo testa um cruzamento de médias simples de 20 e 50 períodos em um CSV de candles diários (colunas date e close). Ele já desconta 0,1% a cada troca de posição e mede drawdown:
import pandas as pd
df = pd.read_csv("btcusdt_1d.csv", parse_dates=["date"], index_col="date")
close = df["close"]
rapida = close.rolling(20).mean()
lenta = close.rolling(50).mean()
# 1 = comprado, 0 = fora; shift(1) faz a ordem sair no candle seguinte ao sinal
posicao = (rapida > lenta).astype(int).shift(1).fillna(0)
retorno_ativo = close.pct_change().fillna(0)
custo = 0.001 # 0,1% por troca de posição (taxa + slippage estimado)
trocas = posicao.diff().abs().fillna(0)
retorno_estrategia = posicao * retorno_ativo - trocas * custo
curva = (1 + retorno_estrategia).cumprod()
drawdown = curva / curva.cummax() - 1
print(f"Retorno da estratégia: {curva.iloc[-1] - 1:.1%}")
print(f"Retorno de comprar e segurar: {close.iloc[-1] / close.iloc[0] - 1:.1%}")
print(f"Drawdown máximo: {drawdown.min():.1%}")
print(f"Trocas de posição: {int(trocas.sum())}")
O detalhe mais importante é o shift(1): sem ele, o código compraria no mesmo candle em que o sinal só fica conhecido no fechamento, um erro chamado look-ahead bias que infla qualquer resultado. As médias usam rolling do pandas. Para baixar os dados de uma corretora e evoluir o teste, veja Python para trading. Bibliotecas como Backtesting.py já trazem stop, take profit e otimizador prontos.
Quais métricas olhar em um backtest?
| Métrica | O que mede | Sinal de alerta |
|---|---|---|
| Retorno total e anual | Quanto a estratégia rendeu | Comparar com simplesmente comprar e segurar |
| Drawdown máximo | Maior queda do pico ao fundo do capital | Queda que você não aguentaria ao vivo |
| Número de operações | Tamanho da amostra | Menos de algumas dezenas |
| Taxa de acerto | % de operações vencedoras | Alta demais com payoff baixo (típico de martingale) |
| Payoff | Ganho médio ÷ perda média | Abaixo de 1 exige acerto muito alto |
| Fator de lucro | Lucro bruto ÷ prejuízo bruto | Perto de 1 após custos é empate |
O drawdown merece atenção especial: uma queda de 50% exige alta de 100% para voltar ao ponto de partida. Os números estão em gestão de risco no trading.
Custos: o detalhe que transforma lucro em prejuízo
Considere uma estratégia de curto prazo com 200 operações por ano e ganho bruto médio de 0,25% por operação. Sem custos, o capital cresceria cerca de 65% no ano (1,0025 elevado a 200). Agora desconte custos realistas por operação completa: 0,1% de taxa na entrada e na saída mais 0,05% de slippage em cada ponta, total de 0,30%.
O ganho líquido vira -0,05% por operação, e o ano termina com queda de cerca de 9,5% (0,9995 elevado a 200). Quanto mais operações, mais o custo pesa. Por isso estratégias de scalping são as mais sensíveis. Em forex, a conta do spread está em pip, lote e spread; em futuros cripto, entra também o funding rate.
In-sample, out-of-sample e walk-forward
O erro mais comum é ajustar parâmetros até o backtest ficar lindo e chamar isso de prova. A pesquisa de Bailey, Borwein, López de Prado e Zhu mostra que, quanto mais configurações se testa, maior a chance de o melhor resultado ser puro acaso, e que raramente se informa quantas tentativas foram feitas (artigo no SSRN).
In-sample
- Período usado para criar e ajustar
- Resultado sempre otimista
- Pode ser testado quantas vezes quiser
Out-of-sample
- Período reservado, nunca usado no ajuste
- Testado uma única vez
- Mostra se a regra generaliza
Walk-forward
- Otimiza numa janela e testa na seguinte
- Avança e repete várias vezes
- Junta só os trechos de teste
O walk-forward foi apresentado por Robert Pardo em livro de 1992, segundo o verbete da Wikipedia. Exemplo prático: otimizar em 2019 e 2020, testar no primeiro semestre de 2021; otimizar em meados de 2019 a meados de 2021, testar no segundo semestre de 2021; e assim por diante até 2026. O desempenho que conta é o da soma dos semestres de teste. O tema completo está em overfitting no trading.
Para ver um passo a passo de backtest feito com método, em português, o vídeo abaixo cobre desde a coleta dos dados até a leitura dos resultados.
Erros que inflam o backtest
- Repintura: alguns indicadores mudam valores passados depois que novos candles chegam. No gráfico ficam perfeitos, ao vivo não.
- Viés de sobrevivência: testar só criptomoedas que existem hoje ignora as centenas que sumiram. Veja o que é altcoin.
- Regime único: um robô de tendência testado só em 2020 e 2021 parece genial; em mercado lateral, sangra.
Um bom backtest não tenta convencer você de que a estratégia funciona. Ele tenta, com honestidade, provar que ela não funciona. Se sobreviver, siga para conta demo e só depois para valores pequenos. Para o roteiro completo, veja como criar um robô de trading do zero.
Conteúdo informativo, não é recomendação de investimento.
Perguntas frequentes
O que é backtest?
É a simulação de uma estratégia de trading em dados históricos para ver como ela teria se comportado: lucro, perdas, número de operações e maior queda do capital.
Backtest positivo garante lucro?
Não. O passado não se repete igual, e um backtest pode estar inflado por excesso de otimização, ausência de custos ou erros como usar informação do futuro. Ele serve para descartar ideias ruins, não para garantir as boas.
O que é out-of-sample?
É o trecho do histórico que você não usou para criar ou ajustar a estratégia. Testar nele mostra se a regra funciona em dados novos ou se só decorou o passado.
Quantas operações um backtest precisa ter?
Não há número oficial, mas poucas dezenas de operações dizem pouco. Quanto mais operações e mais regimes de mercado (alta, queda, lateral) o teste cobrir, mais confiável a estatística.
Onde fazer backtest de graça?
No testador de estratégias do TradingView (Pine Script), no Strategy Tester do MetaTrader 5 ou em Python com pandas, backtrader, vectorbt ou backtesting.py.
Referências
Este conteúdo é informativo e não é recomendação de investimento. Encontrou um erro? Escreva para contato@boletimbitcoin.com.