Neo traderBot

Neo traderBot

Você sabia?

Um backtesting adequado deve buscar simular situações práticas do mercado (slippage, custo de operação, etc...)

Conceitos básicos

Algoritmos, Segregação de dados e Overfitting

Leitura estimada: 11 minutos 167 views
Reproduzir vídeo

Antes de falarmos sobre algoritmos de otimização, precisamos abordar o tema de segregação de dados dados históricos disponíveis para permitir a adequada realização de otimização e de backtesting.

A separação de dados é fundamental e precisa ser realizada antes de iniciar a otimização. Normalmente, deixamos os dados mais recentes reservados para o backtesting e um intervalo de tempo que permita uma quantidade suficiente de operações para analisar o resultado do backtesting com significância estatística. Ainda abordaremos aspectos a backtesting em outros materiais…por enquanto, é preciso entender que backtesting é um processo de validação executado após a otimização.

Não existe uma fórmula mágica ou um percentual específico dos dados para separar para backtesting. Na literatura, vemos sugestão de percentuais entre 15% a 30%…isso geralmente depende de vários fatores e também da quantidade de dados históricos que se tem disponível. Por exemplo, se uma estratégia opera daytrade, seria recomendável ter, no mínimo, 100 dias de operação no backtesting. Para que haja uma significância estatística na validação, ou seja para que a estratégia tenha a oportunidade de  experimentar situações distintas de alta, baixa, correção, lateralização… Se o intervalo médio entre as operações de uma estratégia é de 2 dias…então é preciso, no mínimo, 200 dias. Observe que no primeiro caso, haverá possivelmente mais operações do que no segundo caso. Quanto maior a amostra de operações no backtesting melhor, o problema é que há uma limitação de tamanho dos dados de backtesting e, geralmente,  precisamos de mais dados para a otimização do que para backtesting.

O conjunto de dados que separamos para backtesting nós vamos esquecer que existe enquanto estivermos fazendo a otimização e vamos chamar de OUT OF SAMPLE… a razão disso vai ficar mais clara no decorrer da explicação sobre otimização. Os dados que iremos utilizar para otimizar vamos chamar de IN SAMPLE.

Vamos agora falar sobre dois algoritmos muito empregados na otimização de estratégias.

Grid Search

O primeiro algoritmo que vamos tratar se chama Grid Search. Isto é só um nome bonito para um processo de exploração do espaço de busca por força bruta! Ou seja, este algoritmo simula todas as possibilidades de combinação dos parâmetros da estratégia. Você viu no exemplo do vídeo anterior que uma estratégia de cruzamento triplo de média, com 7 graus de liberdade gerou aproximadamente 7 milhões de possibilidades.

É coisa pra caramba! Não dá pra simular isso tudo…fica muito caro! Imagina a quantidade de tempo, o custo de máquinas ou de aluguel de cloud computing para se obter os parâmetros otimizados de uma estratégia que pode no final resultar em uma estratégia não lucrativa.

A primeira lição é ponderar sobre os recursos que se tem a disposição para realizar a otimização. Você vai fazer a simulação e tabelamento dos resultados de forma automática, sem intervenção humana….tudo bem…você pode simular mais possibilidades. Se você vai fazer na mão o processo de otimização com Grid Search, você vai ter que reduzir o espaço de busca.

Vou te dar um exemplo básico de Grid Search. Suponha que iremos otimizar apenas 2 variáveis da nossa estratégia, sendo 5 possibilidades para a primeira variável X e 5 para a segunda variável Y. Têm-se então 25 pontos que representam as combinações dos valores das variáveis X e Y. O Grid Search consiste em rodar a estratégia para cada um desses 25 pontos. Mas em qual ordem? Como iremos testar tudo de qualquer  forma, achar a solução na força bruta, então tanto faz! Mas nada impede também de rodar e coletar o resultado em uma planilha ou aplicativo web em uma ordem que julgar mais interessante.

O Profit Chart, na versão de hoje (12/12/2022), não oferece nenhum funcionalidade de suporte ao processo de otimização. Ou seja, se você só usar o Profit, só poderá fazer uma otimização bem limitada com um espaço de busca pequeno. Para ampliar o espaço de busca e automatizar o processo você precisará utilizar outra plataforma ou framework.

A próxima pergunta que você deve estar fazendo é se existem formas mais elaboradas de se otimizar uma estratégia do que simular na força bruta cada possibilidade? Sim! E uma resposta é algoritmo genético!

Algoritmo Genético

Os algoritmos genéticos baseiam-se nos processos de evolução genética e seleção natural que observamos na natureza e consistem em uma forma de percorrer o espaço de busca.

Em uma explicação com termos bem simples….o algoritmo inicia com uma população de indivíduos gerados aleatoriamente que é a primeira geração. Cada individuo possui em seu DNA uma codificação de alguma possibilidade das variáveis de entrada. Cada individuo terá um resultado associado na simulação. Essa população irá reproduzir, escolhendo aleatoriamente casais, que devido à combinação genética dos pais, irão gerar filhos que terão em seu DNA uma codificação que é uma mistura do DNA de seus pais, consistindo em uma outra possibilidade de variáveis de entrada. Os filhos também terão um resultado associado na simulação, sendo a segunda geração do algoritmo. Daí, como acontece na vida, podem haver mutações nos indivíduos que nascerem, consistindo em pequenas alterações aleatórias e alguns indivíduos irão “morrer”, não passando para futuras gerações seu código genético, que são os indivíduos com pior resultado.

Ou seja, parte da população da geração atual vai permanecer, parte não irá prosseguir para futuras gerações, novos indivíduos serão gerados por combinação dos pais, alguns dos novos indivíduos sofrerão mutações permitindo maior variabilidade genética. Na próxima etapa, os filhos já irão reproduzir, e esse processo irá ocorrer de forma iterativa, regido pela seleção natural daqueles que apresentarem melhores resultados, até que uma condição de parada seja atingida, por exemplo, não tenha surgido nenhum individuo nas últimas 5 gerações com resultado melhor do que o melhor resultado já encontrado.

Qual é o benefício almejado pelos algoritmos genéticos? Reduzir o esforço computacional exigido na força bruta, reduzindo a probabilidade de ter que calcular todas as possibilidades do espaço de busca, pois o algoritmo genético irá percorrer o espaço de forma mais eficiente! Uma vez encontrado a solução ótima, é improvável que haja uma solução melhor do que aquela, no espaço de busca não explorado.

Explicados os dois algoritmos mais utilizados para otimização de estratégias, vamos falar enfim do principal risco da otimização: Overfitting.

Overfitting

Como o nome diz overfitting é um ajuste excessivo ou sobre-ajuste. No caso da otimização é a obtenção de variáveis de entrada da estratégia que funcionam muito bem para os dados IN SAMPLE, mas quando executado o backtesting a estratégia apresenta uma deterioração muito significativa do resultado. Ou seja, o ajuste do modelo encontrado possui baixa capacidade de generalização.

Este é o maior risco da otimização: deterioração de desempenho com dados novos. E quais são as possíveis causas de overfitting? Excesso de graus de liberdade e dados com viés. Vamos entender isso melhor:

Quanto mais variáveis de entrada a otimização estiver calculando, mais graus de liberdade você estamos dando para que a otimização ajuste a estratégia aos dados apresentados. Isto significa que podemos estar otimizando um modelo muito específico que utilize mais indicadores do que precisa ou colocando na otimização muitas variáveis. As configurações que apresentarem os melhores resultados em otimização podem ter chance grande de estarem com overfitting. Algumas pessoas recomendam descartar os melhores resultados, mas é recomendável rodar todas eles em backtesting para certificar se realmente houve ou não overfitting.

Outra forma de incorrer em overfitting é fazer a otimização em um conjunto de dados muito específico, ou seja, dados que tenham, por exemplo, apenas uma tendência de alta no plano mais macro e baixa volatilidade. A otimização vai gerar a melhor configuração para esta situação. Se o backtesting tiver dados, por exemplo, de uma tendência de baixa ou maior volatilidade, é bem provável que o modelo não terá bom desempenho porque a otimização não presenciou esse tipo de situação no ajuste das variáveis.

É bom ressaltar a diferença entre overfitting e otimização focada em situação de mercado. Haverá situações em que desejamos que uma estratégia tenha desempenho equilibrado tanto em mercado de alta como de baixa ou lateralizado. E pra isso precisamos garantir que os dados in sample contenham essa diversidade de cenários.

Mas também podem haver situações, em que queremos fazer a otimização apenas com dados de mercado em alta, por exemplo. Porque iremos colocar para rodar o robô apenas nesta situação. Então é interessante fazer a otimização focada neste cenário, mas sem incorrer em overfitting. O overfitting nesse caso seria ter um desempenho ruim, mesmo quando o backtesting é aplicado em cenário semelhante aos dados de otimização. Isto significa que a otimização fez um sobreajuste para a situação de mercado de alta dos dados de treino, apresentando pouca capacidade de generalização.

É importante observar que a identificação de overfitting é feita no backtesting com dados OUT OF SAMPLE, ou seja, não utilizados na otimização. E por isto a importância de separarmos os dados no início do processo!

O problema do overfitting é que quando ele não é percebido, o elaborador da estratégia cria a falsa expectativa de desempenho da estratégia baseado em resultados de otimização que não vão se repetir com dados novos, o que pode representar prejuízos financeiros que apenas cessarão quando decidir-se parar de rodar a estratégia. E talvez a causa desse prejuízo nem seja corretamente identificada pelo elaborador da estratégia.

Conclusão

Muito bem! Vimos assuntos importantes tais como algoritmos de otimização, cuidados devidos a segregação de dados e o problema mais temido da otimização: overfitting.

Vamos lançar uma pergunta para motivar o próximo texto sobre otimização. Uma vez que tenhamos econtrado uma configuração ótima para a estratégia sem overfitting. Até quando esta configuração deve ser utilizada De quanto em quanto tempo devemos reavaliar a configuração dos parâmetros da estratégia?

Veja o próximo material de otimização para aprender mais sobre robustez no processo de otimização por meio de técnicas de validação cruzada.

Leave a Comment

CONTENTS