Com quantos trades se faz um backtest?

Afinal, o que é um backtesting?

Backtesting é o teste de um modelo de predição utilizando dados históricos. No mercado financeiro, e mais especificamente em algotrading, backtesting se refere ao teste de uma estratégia de investimento utilizando dados passados do mercado, e seu objetivo é estimar como essa estratégia teria se comportado em um determinado período do passado.

Para melhor atingir esse objetivo, o backtesting precisa simular as condições passadas do mercado com o máximo de detalhamento possível. Isso traz alguns desafios e limitações:

  • A necessidade de ter dados corretos e detalhados armazenados para o período de teste em questão. Dependendo da estratégia de investimento, será necessário ter também dados de ajuste/normalização, e a granularidade dos dados pode variar desde candles (menos detalhes) até informações completas de formação do book de ofertas (maior detalhamento possível.
  • O grande volume de dados que se têm conforme o detalhamento dos dados é maior; esse volume gera desafios de armazenagem, recuperação e processamento (mais detalhes sobre isso a seguir).
  • A impossibilidade de tratar de maneira adequada o impacto da estratégia de investimento no mercado. Esse impacto varia conforme o volume negociado pela estratégia, e até hoje nenhuma modelagem de qualidade foi desenvolvida (e não se sabe se algum dia isto será possível).
  • Alto potencial de overfitting: ao procurar a melhor estratégia de investimento para um determinado período de testes no passado, se não for tomado um extremo cuidado na seleção da estratégia e de seus parâmetros, existe uma grande chance de obtermos uma estratégia que funcione excepcionalmente bem somente no período de testes utilizado, mas que tenha desempenho ruim em qualquer outro período.

A análise dos resultados de um backtesting deve ser feita com grande cuidado, pois uma análise superficial pode acabar escolhendo uma estratégia que não terá bom desempenho no futuro. Primeiro, deve-se ter sempre em mente que o objetivo é encontrar uma boa estratégia de investimento para qualquer situação que se encontre, e não selecionar a melhor estratégia no período testado. Outro ponto importante é analisar outras métricas do resultado e não somente o retorno da estratégia naquele período.

Em um estudo feito pela empresa Quantopian analisando os dados de vários backtestings e do desempenho da estratégia de investimento após o período dos testes, foi descoberto que não há relação entre o retorno de um investimento em um backtesting e o retorno do investimento no futuro. Ou seja, isso significa que um backtesting que teve lucro tem a mesma chance (50%) de ter lucro ou prejuízo em um período futuro. No mesmo estudo foi mostrado que podemos utilizar outras métricas sobre o backtesting para prever com maior eficácia o desempenho daquela estratégia de investimento no futuro.

Na SmarttBot, a tela de relatório dos robôs disponibiliza várias dessas métricas que consideramos importantes na hora de analisar os resultados de uma simulação, como por exemplo: drawdown máximo, percentual de trades com lucro e fator de lucro. Recomendamos que todos traders procurem analisar melhor esses números pois acreditamos que essa é a melhor maneira de encontrar as melhores estratégia de investimento.

Quantos trades são processados em um backtesting?

Existem vários níveis de granularidade dos dados que podemos utilizar para um backtesting:

1– Candles: somente os candles necessários pela estratégia, e um trade por candle no valor de fechamento de cada candle.

2– Candles mais trade por minuto: somente os candles necessários pela estratégia, e um trade no valor de fechamento de cada candle de minuto.

3– Candles de minuto: 4 trades por minuto, um para cada valor de abertura, máxima, mínima e fechamento.

4– Trades separados por distância mínima: trades consecutivos somente quando a diferença de preço entre eles é maior que um valor calculado em função da variância do preço naquele minuto.

5– Trades com preço consecutivo diferente.

6– Todos trades.

Podem existir outras granularidades, essas são algumas das mais comuns. A tabela a seguir mostra a quantidade de trades em cada nível para o ativo WINM17 no dia 12/06/2017:

Assim, se o tempo do backtesting dependesse unicamente da quantidade de trades, teríamos por exemplo que se o backtesting do período de 1 ano demorasse 1 hora no nível 6, o mesmo demoraria somente 6 segundos no nível 2.

Acredito que o nível 4 é o que oferece o melhor custo benefício, e consegue simular suficientemente bem a maioria das estratégias de investimento.

O tempo de execução de uma estratégia não é determinado unicamente pelo número de trades analisados, porém podemos ver que para ativos com um grande número de trades, a quantidade de candles é muito pequena em relação ao total de trades, mesmo considerando uma quantidade de nível 4 (2.4%). Sendo o tempo de processamento de um candle similar ao de um trade, podemos desconsiderar os candles em várias análises de tempo de execução.

Para ativos com uma quantidade menor de trades, a situação pode ser um pouco diferente. Vamos analisar as quantidades de trades para o ativo BVMF3, que no dia 12/06/2017 foi o 15º ativo mais negociado na BM&FBovespa:

Aqui podemos ver que a quantidade de candles em relação a quantidade de trades de nível 4 é mais de 10% (10.6%), e portante não deve ser ignorada em análises de tempo de execução de backtesting.

Quanto tempo leva para executar um backtesting?

A cada trade durante um backtesting várias operações deve ser feitas: calcular os ganhos/perdas diários e da posição atual (no caso de posição aberta), verificar se as ordens pendentes foram executadas, atualizar a posição caso alguma ordem tenha sido executada, verificar stops pendentes, entre outras.

Em um backtesting do ativo WINM17 para o dia 12/06/2017, medimos aproximadamente 46 bilhões de instruções executadas para tratar 22310 trades (quantidade de trades do nível 4) em uma estratégia que não utilizada candles abertos. Como nossas estratégias são implementadas em Python e estimando cerca de 200 instruções para cada operação Python, temos cerca de 10 mil operações Python por trade. Se considerarmos um processador de 3GHz, teremos que um trade levaria por volta de 0.69 milissegundos para ser processado em média. Isso nos daria 15.4 segundos para execução de um backtesting de 1 dia (utilizando trades no nível 4) para um ativo com muitos trades.

Ao executar um backtesting temos alguns custos extras a se considerar como por exemplo tempo de acesso a rede (para pegar os dados do servidor de dados), tempo de acesso ao disco (para pegar dados ou persistir informações sobre o backtesting sendo executado) e operações do sistema operacional. Observamos um tempo de execução de cerca de 20 segundos para o backtesting para o qual
estimamos 15.4 segundos.

Se considerarmos 20 segundos por dia e 249 pregões em um ano (quantidade de pregões em 2016), teremos 83 minutos para executar um backtesting dessa estratégia para o ano de 2016. Comparativamente, se fossem utilizados 2140 trades (nível 3), teríamos o mesmo backtesting executado em apenas 8 minutos, porém com grande perda de informações.

Vale a pena executar backtestings?

Na SmarttBot, utilizamos extensivamente backtestings curtos para testar a execução de nossas estratégias e garantirmos a execução correta das mesmas. Por outro lado, o processo de análise de resultados do backtesting para encontrar boas estratégias e parâmetros ainda é pouco utilizado, pois os resultados devem ser minuciosamente estudados e avaliados para que possam ter grande relevância, além do fato de várias estratégias serem altamente sensíveis à quantidade de dados utilizados. Apesar disso, acreditamos que o backtesting pode ter grande valor uma vez que seja muito bem executado e analisado por alguém capacitado utilizando técnicas adequadas de análise dos resultados.

Felipe Machado

Co-founder & CTO da SmarttBot. Mestre em Ciência da Computação pela UFMG. Além de tecnologia, também é apaixonado pelo mercado financeiro e Kung Fu.