Como otimizar um algoritmo de trading

Como otimizar um algoritmo de trading

Neste artigo vamos falar de como podemos otimizar um algoritmo de trading, com o objetivo de termos operações atualizadas na forma mais eficiente possível. No último artigo, vimos o indicador TD SEQUENTIAL de Tom DeMark e um algoritmo de trading foi programado para operá-lo. Basicamente, o algoritmo consistia em comprar seguindo os sinais do indicador e sair quando há lucro, implementado como um oscilador estocástico que atinge um determinado nível.

Como otimizar um algoritmo de trading

A parte baixista foi simétrica, os resultados não foram bons e estávamos otimizando as compradas e vendidas separadamente; ou seja, tínhamos um total de 6 variáveis ​​que podem ser alteradas para que o resultado seja o esperado. Isso soa familiar, certo? Estamos otimizando demais para que um algoritmo de trading acabe dando os resultados que esperamos.

Decidimos continuar a otimizar para mostrar que qualquer algoritmo de trading pode dar resultados muito bons se otimizarmos tudo: os seus parâmetros, os mercados em que opera, etc. Mas isso não vai funcionar em tempo real, infelizmente.

O mais importante é que perceba que há um momento no desenho do algoritmo em que os resultados não são o que esperava e começamos a mudar as coisas para que funcione. Uma pista importante é o número de parâmetros. Se 2 ou 3 não funcionarem, o algoritmo provavelmente não funcionará.

Resumindo, este algoritmo baseado no indicador TD Sequential, como propus, não parece funcionar, então vou superotimá-lo para obter bons resultados e para que veja o que NÃO fazer. Acho que será um exercício muito educativo e útil.

Abaixo, vemos uma otimização à qual adicionei 2 parâmetros para otimizar também o Sequencial TD, que por padrão assume os valores 9 e 4 na fórmula DeMark original. Com isso, tem um total de 8 parâmetros otimizáveis.

Como otimizar um algoritmo de trading: parâmetros

Os resultados ainda são ruins, conforme evidenciado pelo alto drawdown. Se forçarmos o otimizador a encontrar uma boa solução pelo Fator de recuperação, os seguintes resultados aparecerão:

Como otimizar um algoritmo de trading: resultados

Em outras palavras, para ter um Fator de Recuperação de 8, só precisa manter 71 operações. Esta é uma pista importante de que este sistema não está funcionando.

Quando a melhor solução tem poucas operações, estamos enfrentando um pico de lucro que o otimizador encontrou e não uma solução “todo-o-terreno” que funciona em uma ampla gama de parâmetros. Isso é importante.

Neste ponto, tenho que esclarecer que não é o sistema de Tom DeMarke que não funciona, mas minha implementação dessa ideia. Talvez, colocando de outra forma, teria funcionado, mas como eu disse no relatório de hoje, veremos as etapas que um mau projetista de
sistemas seguiria para chegar a uma solução que o satisfaça.

Faço tudo isso na hora e não sei muito bem como farei para melhorar, mas como já tenho bastante experiência com o Amibroker, tenho certeza de que no final poderei torturar os números o suficiente para obter um boa curva de capital.

Lembra-se das regras do sistema (explicadas no relatório anterior), o sistema tem um tempo de parada para que se uma operação não correr bem depois de um certo número de dias a gente fecha. Este número de dias é um parâmetro ajustável. Vou remover esta regra que parece não funcionar e vou colocar um stop loss “tradicional” com N desvios padrão e fazer a otimização para N.

Na verdade, essa mudança reduzirá o número de parâmetros em 1, mas também é superotimizada “tentando coisas até que funcione melhor”, então se isso melhorar os resultados eu irei incluí-la, e se não melhorar, não irei faça essa mudança. Suponho que aos poucos perceba como funciona um projeto de sistema ruim. Poderia ser resumido como: “tem que fazer essa ideia gerar boas estatísticas, seja lá o que for” … Ao iniciar o otimizador, recebo muitas soluções com perdas:

Como otimizar um algoritmo de trading: ganhos e perdas

Esta é outra pista importante. Se quando começa a otimizar um sistema apenas curvas negativas saem e o otimizador precisa de algum tempo para encontrar curvas positivas, então está enfrentando um sistema que não funciona.

Se deixá-lo por um tempo no final, as curvas ruins ficam bem abaixo e tem a impressão de ter bons resultados, mas bons resultados devem ser a regra e não a exceção.

Os resultados que obtenho após a otimização são os seguintes:

Como otimizar um algoritmo de trading: resultados otimizados

Isso não inclui comissões. Agora vou adicionar $ 100 de comissões por operação completa para ver o que acontece. O resultado é:

E sai negativo. Perfeito, não há necessidade de adicionar comissões Se adicionarmos altas comissões, o sistema não funciona.

Espero que entenda a ironia, um mau projetista de sistema pensaria que é uma má ideia adicionar comissões e operaria o sistema com a ilusão de que será capaz de ter execuções de ordens como na teoria e comissões baixas o suficiente para que não afetar. E é claro que eu não esperaria uma única contingência diária, como atraso em um pedido, pouca liquidez, computador lento, falhas de internet, etc. Tudo isso nós ignoramos.

Uma vez que as comissões tenham sido removidas, o problema do levantamento máximo que é muito alto deve ser resolvido. Já que otimizar os parâmetros não resolveu, vou listar os mercados e só vou manter aqueles com o menor drawdown :

Como otimizar um algoritmo de trading: drawdown

A tabela mostra os mercados ordenados por drawdown decrescente. Vamos ficar com os 10 primeiros, todos com drawdown de menos de $ 30.000.

Na lista vejo que tem Farinha de Soja (ZM) e também Óleo de Soja (ZL), dois mercados altamente correlacionados, mas como pode imaginar, vou fingir que não vi. A ideia é não usar muito bom senso neste design.Eu

crio uma lista de observação com os 10 principais mercados e esse é o meu universo de mercados onde irei operar o trading system. Agora faço um backtest e vejo que “coincidentemente” o drawdown caiu muito:

Mas é claro, agora tenho mercados diferentes, então tenho certeza de que, se eu passar o otimizador para ele novamente, os resultados melhorarão ainda mais. Quando eu faço isso, o resultado é o seguinte:

Agora, alcancei um Fator de Recuperação de 10; ou seja, uma redução 10 vezes menor que o lucro do sistema. O fator de lucro é baixo, 1,22, o que nos diz que o sistema não é muito eficiente, mas novamente fecho os olhos e finjo que não o vi.

Estamos indo bem. Há até uma taxa de sucesso de 64% após 3.391 operações. Alta confiabilidade estatística! E, finalmente, temos a curva de capital (próxima página, no final) que nos diz que estamos diante de um sistema excecional. A sua evolução retilínea é impecável. Tem apenas dois anos negativos e a redução é mínima.

Como otimizar um algoritmo de trading: capital final

Como poderia ser de outra forma, a análise de Monte Carlo desse maravilhoso sistema de trading saiu muito bem.

O percentil de 1% é um lucro de mais de $ 200.000, portanto, mesmo se não tivermos sorte com este sistema, devemos acabar tendo lucro no final.

Partimos de uma ideia que inicialmente não funcionou e no final conseguimos que funcionasse. Espero que este relatório tenha sido útil para saber o que
não fazer ao projetar um sistema de trading.

Como otimizar um algoritmo de trading: sistema TD-Sequencial

Sobre o autor

Henrique Garcia

Analista de Mercados

Responder a este tópico

Bem-vindo(a) à comunidade!

Selecione os temas que lhe interessa e personalize a sua experiência no Rankia

Enviaremos uma Newsletter cada quinze dias com as novidades de cada categoría que escolheu


Quer receber notificações dos nossos eventos/webinars?


Ao continuar, aceita a política de privacidade