Backtest de uma estratégia quantitativa

No post anterior, eu introduzi um tipo simples de estratégia quant, o trade de pares, e dei um exemplo da estratégia para o par PETR3-PETR4. Mostrei os pontos de entrada e saída de dois trades de acordo com o critério de divergência adotado no exemplo, de acompanhar o spread entre as duas ações, padronizados pela média e desvio-padrão locais. Mas apenas dois trades positivos não são suficientes para decidir se o  par é realmente explorável. Além disso, escolhemos apenas um par entre muitos pares possíveis. Algumas perguntas que poderíamos fazer:

  • Que outros pares seriam bons para esta estratégia?
  • Qual o retorno esperado dos trades por par?
  • Qual(is) o(s) risco(s) das posições?
  • A estratégia dá retorno positivo consistentemente? Se não, é possível identificar em que períodos ela não funciona?
  • Como muda o desempenho da estratégia com mudanças nos parâmetros?

Essa perguntas podem ser respondidas fazendo-se o backtest¹ da estratégia. O backtest é simplesmente uma simulação histórica dos trades que uma estratégia teria feito ao longo do tempo, usando em cada ponto do tempo apenas os dados disponíveis até lá. No nosso exemplo de PETR3-PETR4, significaria percorrer a série temporal do spread entre as ações ao longo de um período pré-determinado, para um conjunto fixo de parâmetros, e anotar o desempenho de todos os trades gerados pelo modelo. As estatísticas desses trades nos ajudarão a responder as perguntas acima. Um bom backtest é um passo fundamental no desenvolvimento de uma estratégia de investimento bem sucedida, e muitos erros e problemas podem ser detectados neste estágio, antes de o trader colocar dinheiro em risco. O backtest depende, basicamente, de três fatores:

  • Dados
  • Plataforma
  • Modelo de trading\parâmetros
  • Custos

Vamos falar brevemente de cada um deles a seguir.

Dados

Uma estratégia de investimento quant é um algoritmo que toma como valores de entrada dados (por exemplo, preços de ações) e retorna como saída uma ação (comprar, vender, zerar) a ser executada. Para que a saída do algoritmo seja confiável, é preciso que os dados sejam confiáveis. Isso se chama de “Princípio GIGO” (Garbage-In, Garbage-Out). Se os dados tiverem problemas, a saída do algoritmo provavelmente também terá, e as conclusões do backtest perdem o sentido. Há muitos lugares onde é possível obter dados de ações, mas sempre cabe ao usuário checá-los. Em geral, usamos nos backtests os preços corrigidos das ações, que incorporam proventos como dividendos, splits etc. Sendo possível, é sempre melhor obter dados em alta frequência e o book de ofertas. Isso permite um grau de sofisticação maior no backtest, pois é possível chegar mais próximo do que se observaria na prática. Na realidade, tudo vai depender do tipo de estratégia que está sendo considerada. Para uma estratégia de trading em alta frequência, onde segundos podem fazer a diferença, é essencial ter dados no maior nível possível, de preferência os preços e livro de ofertas a cada negócio (tick-by-tick). Já para uma estratégia de mais longo prazo, onde o horizonte é de vários dias ou mesmo meses, podemos até usar os preços de fechamento. Um cuidado que se deve ter quando se testa uma estratégia com muitas ações é incluir um conjunto de ações o mais próximo possível do que teria sido realmente utilizado no período estudado, inclusive usando ações que podem ter “morrido” (a empresa deixou de existir). Um exemplo menos drástico: a ação NETC4, por volta de 1999, parecia valer muito e, alguns anos depois, seu preço foi quase a zero. Se o backtest contempla o período em questão, a decisão de excluir a ação da base de dados pode introduzir um viés na análise.

Plataforma

A plataforma é o motor no qual os testes serão rodados. Na prática, a plataforma é uma aplicação, um programa de computador que vai realizar a simulação. Quanto mais sofisticada a plataforma e o nível de conhecimento de programação do trader,  maior o nível de detalhe e realismo será possível alcançar no backtest. Além disso, será possível fazer a simulação de estratégias mais complexas, com maior número de ativos, e em menor tempo. Algumas plataformas possíveis:

  • Excel – uma das mais viáveis e baratas. Se o trader souber programar em VBA, ganhará bastante versatilidade. Além disso, algumas corretoras têm um link DDE que permite a visualização de preços, livro de ofertas etc diretamente na planilha, tornando o Excel uma possibilidade também como plataforma de execução.
  • Matlab – um dos preferidos no mundo quant, por sua versatilidade, facilidade de uso, interface gráfica e pelo grande número de ferramentas analíticas pré-instaladas. O grande senão é o preço: uma licença custa na casa de milhares de dólares. Mesmo assim, muitas universidades mantém licenças, e existe uma versão para estudante com preço reduzido. Existem alguns clones grátis ou mais baratos, como SciLab, Octave etc.
  • R – o R é um software livre com muitos pacotes estatísticos criados por usuários. É uma ótima opção, e de graça.
  • Plataformas dedicadas – de corretoras ou empresas especializadas. Eu já usei o Metastock, que tem uma grande quantidade de indicadores técnicos, mas como plataforma de backtest acho meio limitado.
  • C, C++, C# – para quem sabe programar nestas linguagens, é possível criar backtests muito eficientes e complexos.

Qualquer que seja a plataforma de execução, o importante é tomar muito cuidado na hora do backtest para não deixar passar erros. A maior parte do tempo, quando uma estratégia parece boa demais para ser verdade, há um erro de programação ou na base de dados.

Modelo de Trading e Parâmetros

Uma vez que temos os dados e escolhemos uma plataforma para realizar o backtest, é hora de traduzir a ideia de trading em regras analíticas, quantitativas e sem ambiguidade. No nosso exemplo anterior, decidimos visualmente (e de maneira um tanto subjetiva) onde entrar nos trades. Na realidade, o processo de construção de uma estratégia desse tipo passaria por uma etapa em que os cálculos a serem feitos serão especificados, assim como os parâmetros do modelo. No exemplo anterior, teríamos pelo menos três parâmetros: o tamanho da janela para calcular a média e desvio padrão do spread, o valor para entrar nos trades, e o valor para sair. Uma das vantagens do backtest é que podemos estudar como a estratégia se comporta quando estes parâmetros são alterados. Claro que sempre gostaríamos de escolher o “melhor” conjunto de parâmetros (ou seja, o que dá maior retorno por unidade de risco), mas é preciso muito cuidado, pois às vezes, alguns pontos no espaço paramétrico de um modelo parecem bons demais devido a apenas um pequeno número de trades, ou ao período escolhido. O ideal é que a estratégia funcione bem para várias escolhas diferentes dos parâmetros. A introdução de mais critérios e parâmetros, em geral, melhora o desempenho de um modelo, mas é preciso atenção para não deixar o modelo complexo demais, a ponto de ele começar a capturar idiossincrasias do período estudado. Quando isso acontece, o modelo pode se sair muito bem no período usado no backtest, mas performar mal no futuro (ou seja, quando o dinheiro estiver no jogo). Isso se chama overfitting. É sempre bom definir parâmetros, regras etc usando um pedaço da amostra, reservando uma parte mais recente para fazer um teste “fora da amostra”.

Custos

Existem vários custos envolvidos em qualquer estratégia de investimento. Os de operação incluem não só corretagem, emolumentos, aluguel de ações, como também a diferença entre o preço observado e o que será realizado no trade (o chamado slippage). Dependendo da estratégia, os custos de operação são extremamente significantes ou até insignificantes. Para uma estratégia de alta frequência, onde o ganho por trade é baixo e o número de trades é alto, o custo tem alto impacto e pode fazer a diferença entre uma estratégia lucrativa e outra perdedora. De maneira geral, quanto maior o horizonte do trade, menor o impacto dos custos transacionais. Um bom backtest inclui o custo de operação nas contas.

Resultados

Uma vez que as regras de trading (isto é, o modelo) foi definido (e programado em alguma plataforma), o backtest será rodado, e o resultado será uma lista com os trades, e os respectivos P&Ls (profit and loss), ou seja, quanto dinheiro cada trade ganhou ou perdeu. A análise da estratégia é feita em cima desses números. Existem inúmeras medidas de performance que podem ser usadas. Algumas delas:

  • retorno (ou P&L – profit and loss) médio por trade – quanto de retorno a estratégia dá?
  • drawdown – mede o pior período em termos de perda. Deve ser o mais baixo possível.
  • razão de informação – retorno médio dividido pelo desvio padrão; mede o retorno por unidade de risco.
  • razão de Sharpe – se a estratégia usa caixa, este poderia estar investido em títulos do governo, isso é, rendendo CDI. A razão de Sharpe mede a diferença entre o retorno médio da estratégia e o retorno de um ativo sem risco, divido pelo desvio padrão.
  • razão de Sortino – similar a de Sharpe, mas com risco definido pelo desvio padrão apenas dos retornos negativos. Não penaliza variância devido a ganhos.
  • % de trades positivos

Bom, espero que o post seja útil. No futuro pretendo postar algum exemplo de backtest em Excel. ¹ Eu prefiro sempre que possível usar termos em português, mas desconheço um termo adequado para backtest. Estou tentado a usar “simulação”. Se alguém tiver alguma outra ideia, favor avisar.

Anúncios

9 comentários sobre “Backtest de uma estratégia quantitativa

  1. Gostei do que li. Criei um sistema próprio em Java com objetivo de criar análises em grande massa de dados que adquiri, minuto a minuto, com todos os papéis da Bovespa, por 10 anos. São 60GB de informações. Ficou muito bom, rodo uma estratégia em todos os papéis num tempo total de cerca de 20 segundos. Tive a idéia de uma estratégia muito interessante que me parece bastante assertiva. No entanto, precisarei da base de dados histórica da bovespa tick a tick, de preferência com o livro de ofertas. Sabe onde consigo tais dados? Tem interesse de se juntar a mim para compartilharmos idéias?

    • Oi Nelson. A Bovespa não vende os dados tick-by-tick? Os caminhos que eu conheço são caros e nem sempre a qualidade dos dados é boa. Por exemplo, qq vendor tipo Bloomberg tem dados tick-by-tick, mas custa na casa de milhares de dólares. Outro caminho é pedir para alguma corretora, mas acho muito difícil a não ser para clientes institucionais. Dentro de uma asset você conseguiria esses dados, por um caminho ou pelo outro. Podemos trocar ideias sim, mas não estou focado em estratégias no momento.

      Abs

  2. Seu post tem me ajudado bastante a entender mais sobre mercado financeiro e a estar melhor preparado para as oportunidades que surgem. Obrigado.

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google

Você está comentando utilizando sua conta Google. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s