<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[devtrader - Medium]]></title>
        <description><![CDATA[Programação e Trading - Medium]]></description>
        <link>https://medium.com/devtrader?source=rss----7001f66167af---4</link>
        <image>
            <url>https://cdn-images-1.medium.com/proxy/1*TGH72Nnw24QL3iV9IOm4VA.png</url>
            <title>devtrader - Medium</title>
            <link>https://medium.com/devtrader?source=rss----7001f66167af---4</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Sun, 31 May 2026 19:59:44 GMT</lastBuildDate>
        <atom:link href="https://medium.com/feed/devtrader" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com" rel="hub"/>
        <item>
            <title><![CDATA[O efeito da progressão de lote em um portfólio de estratégias automatizadas]]></title>
            <link>https://medium.com/devtrader/o-efeito-da-progress%C3%A3o-de-lote-em-um-portf%C3%B3lio-de-estrat%C3%A9gias-automatizadas-f0d04811e574?source=rss----7001f66167af---4</link>
            <guid isPermaLink="false">https://medium.com/p/f0d04811e574</guid>
            <category><![CDATA[trading]]></category>
            <category><![CDATA[python]]></category>
            <category><![CDATA[algotrading]]></category>
            <category><![CDATA[metatrader-5]]></category>
            <category><![CDATA[day-trading]]></category>
            <dc:creator><![CDATA[Kaio Valente]]></dc:creator>
            <pubDate>Tue, 25 Jun 2024 18:40:27 GMT</pubDate>
            <atom:updated>2024-06-25T18:40:27.919Z</atom:updated>
            <content:encoded><![CDATA[<h4>Como multipliquei o retorno de um portfólio em 6x utilizando progressão de lote em resultados reais de live trading</h4><p>O objetivo inicial desse estudo é analisar como variações na progressão de lote impactariam a curva de capital em um track record real.</p><p>Para isso, coletei o resultado de de todas as operações feitas em uma conta real no período de 11/08/2022 até 18/06/2024, aproximadamente 23 meses.</p><p>Abaixo o resultado de um portfólio que executa 6 robôs operando no ativo mini índice, sempre executando todas as operações com 4 contratos por operação</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*khAo6NoZnQYtF10QgEeMyQ.png" /></figure><p>O drawdown médio histórico deste portfólio, obtido em simulação de Monte Carlo, foi de R$ 2.000 utilizando 1 lote por operação. Então, para ter um risco projetado máximo de 25%, o capital necessário para alocação seria de R$ 8.000 por contrato. Como estávamos operando com 4 contratos por operação, utilizamos de margem inicial R$ 8.000 x 4 = R$ 32.000.</p><p>Para iniciar o estudo de progressão de lote, precisamos normalizar a curva considerando que todas as operações fossem feitas com lote mínimo: 1 contrato por operação.</p><blockquote>Todo o estudo estatístico apresentado neste artigo foi construído com scripts em Python</blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*xvktYgxoMB0lb3C6clTlZw.png" /><figcaption>Curva normalizada — 1 Lote por operação — Resultado Financeiro R$ 14.986,50</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*k4B8-cUkuBWjl8QZVNViFg.png" /><figcaption>Curva normalizada — 1 Lote por operação — Resultado percentual: R$ 187,33% (para Margem Inicial de R$ 8.000)</figcaption></figure><h4>Métricas da curva original com 1 contrato por operação</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/308/1*9wOiHQ5I3kRRkrmvw_8Qdg.png" /></figure><p>O drawdown máximo observado em relação a margem inicial (R$ 8.000) foi de R$ -1891,50 representando 23,64% de rebaixamento máximo e fator de recuperação igual a 7,92.</p><p>Entretanto, o drawdown relativo ao capital já acumulado no momento do rebaixamento foi de -14,82% (relativo ao valor acumulado de R$ 12.761,25).</p><h4>Regras para progressão de lote</h4><p>A análise que gostaríamos de executar é: o que acontece com a curva de capital a medida que aumentamos o volume de contratos uma vez que exista lucro acumulado pelas estratégias? Qual será o comportamento da curva? O retorno aumenta ou diminui? A volatilidade aumenta ou diminui? O risco aumenta ou diminui?</p><p>A regra para avaliarmos será bem simples: sempre que o lucro acumulado estiver acima de ‘R$ X’, vamos adicionar 1 lote em cada operação. Da mesma forma, se o capital acumulado voltar ao patamar estipulado, o lote será reduzido ao valor anterior.</p><p>Dessa forma, conseguimos aplicar o efeito do juros composto na curva capital. Uma vez que a estratégia está ganhando dinheiro, aumentamos o lote. Quando a estratégia começar a perder, diminuímos o lote. Simples assim.</p><h4>Resultado da progressão de lote</h4><p>O primeiro teste executado foi realizando uma progressão de lote, sempre que 1 unidade de risco médio era obtida como lucro, ou seja, a cada R$ 2.000 de lucro acumulado aumentamos em 1 contrato por operação.</p><p>Estes foram os resultados:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*TqXKyIAIthAWb1OenZxgDw.png" /><figcaption>Progressão de Lote a cada R$ 2.000 acumulado — Resultado financeiro: R$ 54.243,50</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*aZ9G1uk_KunjODNTjUSwJg.png" /><figcaption>Progressão de Lote a cada R$ 2.000 acumulado — Resultado percentual: R$ 678,04% — Margem Inicial: R$ 8.000</figcaption></figure><p>Podemos observar que aplicando esta regra simples, já conseguimos evoluir um resultado de 187% para 678%, no mesmo período. Também é visível que a curva ficou mais volátil. Os períodos de rebaixamento agora são mais acentuados, o que é natural, uma vez que o lote está mais pesado.</p><h4>Diferentes progressões</h4><p>O objetivo agora foi avaliar diferentes progressões, sempre com a mesma regra. Testamos os seguintes valores de lucro acumulado para ativar a progressão de lote:</p><ul><li>R$ 1.000</li><li>R$ 2.000</li><li>R$ 4.000</li><li>R$ 8.000</li><li>R$ 10.000</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*IFtBMMQBWgY_moFWKcfp7Q.png" /><figcaption>Eixo Y: Valor Financeiro Acumulado</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*adzMrxlLZz-Gpf6GRUGEbw.png" /><figcaption>Eixo Y: Valor Percentual Acumulado</figcaption></figure><p><em>Legenda, de cima para baixo: R$ 1.000, R$ 2.000, R$ 4.000, R$ 8.000, R$ 10.000, Curva original (sem progressão)</em></p><p>Notoriamente a curva com progressão de lote a cada R$ 1.000 de lucro acumulado apresentou o resultado mais expressivo de todos. Dado que o efeito do incremento de lote é alcançado mais rapidamente.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*xUxZ_Z1Xw6IeLoKmv11dzg.png" /><figcaption>Progressão de Lote a cada R$ 1.000 acumulado — Resultado Financeiro: R$ 92.242</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*jWtWch3OU1BK1ajNa9rvsg.png" /><figcaption>Progressão de Lote a cada R$ 1.000 acumulado — Resultado Percentual: 1.178% / Margem Inicial: R$ 8.000</figcaption></figure><p>Dessa vez, conseguimos multiplicar o retorno de 187% para 1.178%, no mesmo período</p><h4>Evolução de Lote</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/667/1*Rh3COMaZAeuNyL6_pWP3wA.png" /><figcaption>Eixo Y: Contratos por operação | Eixo X: Dias</figcaption></figure><h4>Evolução do Saldo Necessário para Progressão de Lote</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/696/1*cFCfD1RnORnQyhPmxg5lfg.png" /><figcaption>Eixo Y: Capital Acumulado para Habilitar Progressão de Lote | Eixo X: Dias</figcaption></figure><h4>Comparativo entre progressões</h4><p>Já vimos que utilizar progressões de lote representam um aumento no retorno acumulado uma vez que conseguimos ver o efeito do juro composto a medida que o capital acumulado avança positivamente. Porém, para uma análise de investimento séria, não podemos falar somente de retorno, sem avaliar o risco envolvido.</p><p>Vamos fazer uma análise comparativa das métricas de todas as progressões avaliadas neste estudo:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/308/1*9wOiHQ5I3kRRkrmvw_8Qdg.png" /><figcaption>Métricas da curva original, sem progressão</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/307/1*PyTPFlFzIm1nZ8pZYDSrYw.png" /><figcaption>Métricas para cada progressão de Lote</figcaption></figure><p>Avaliando a progressão de lote mais agressiva: a cada R$1.000, observamos que o rebaixamento máximo relativo ao capital acumulado foi de R$ -22.587, ou -31,93% do capital acumulado até o momento.</p><p>O retorno acumulado foi 6,29 vezes maior em relação a curva sem progressão e o risco foi 2,15 vezes maior. Em aproximadamente 2 anos um capital inicial de R$ 8.000 evoluiu para R$ 94.242,75, com um rebaixamento máximo de R$ -22.587.</p><p>Todas as progressões, mesmo as menos agressivas, apresentaram um lucro acumulado maior ao da curva original.</p><h4>Conclusão</h4><p>Concluímos que adotar um sistema de progressão de lote pode maximizar bastante o resultado de um portfólio de estratégias. Entretanto, deve-se estar atento para o risco de exposição não ultrapassar os limites de risco mínimos do portfólio, especialmente não se expor ao risco de ruína.</p><p>Se você gostou desse tipo de análise e gostaria de aprender mais sobre análise de dados aplicada ao trading e mercado financeiro, convido você a conhecer a <a href="https://dqlabs.com.br">DQ Labs</a> e o meu perfil no instagram <a href="https://instagram.com/devtrader">@devtrader</a>.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=f0d04811e574" width="1" height="1" alt=""><hr><p><a href="https://medium.com/devtrader/o-efeito-da-progress%C3%A3o-de-lote-em-um-portf%C3%B3lio-de-estrat%C3%A9gias-automatizadas-f0d04811e574">O efeito da progressão de lote em um portfólio de estratégias automatizadas</a> was originally published in <a href="https://medium.com/devtrader">devtrader</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Limitar as perdas financeiras diárias em um portfólio, faz sentido?]]></title>
            <link>https://medium.com/devtrader/limitar-as-perdas-financeiras-di%C3%A1rias-em-um-portf%C3%B3lio-faz-sentido-86f87d150873?source=rss----7001f66167af---4</link>
            <guid isPermaLink="false">https://medium.com/p/86f87d150873</guid>
            <category><![CDATA[quant-trading]]></category>
            <category><![CDATA[metatrader-5]]></category>
            <category><![CDATA[portfolio]]></category>
            <category><![CDATA[backtesting]]></category>
            <category><![CDATA[algo-trading-software]]></category>
            <dc:creator><![CDATA[Kaio Valente]]></dc:creator>
            <pubDate>Wed, 20 Sep 2023 15:35:04 GMT</pubDate>
            <atom:updated>2023-09-20T15:35:04.388Z</atom:updated>
            <content:encoded><![CDATA[<p>Fiz um estudo com mais de 1 ano de operações em conta real e é isso que vamos descobrir neste artigo.</p><p>Limitar as perdas financeiras diárias de uma estratégia de trading é uma boa ou não?</p><blockquote>Pra começar, o que seria o limite de perda diário?</blockquote><p>Sempre que uma estratégia atingir determinando valor financeiro <strong>negativo </strong>no dia, ela pararia de operar e só estaria habilitada novamente no dia seguinte.</p><p>Em tese, esse controle limitaria as perdas em um dia ruim para a estratégia.</p><p>É relativamente simples testar se o resultado de uma estratégia seria melhor adicionando um limite diário de perda financeira.</p><p>Basta adicionar essa opção em nosso robô, executar o backtest nos últimos anos e comparar os resultados: com ou sem limite, qual foi o melhor? O próprio relatório de backtest do Metatrader 5 nos daria a resposta.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/536/1*vwqOy_G-AY1TJaF3L15-Ig.png" /><figcaption>Exemplo de robô (SDK) com limites diários</figcaption></figure><h4>Desafio</h4><p>O desafio é quando temos um portfólio de estratégias, ou seja, várias estratégias rodando simultaneamente. Como os resultados das operações que acontecerem durante o dia, positivos ou negativos, impactam no resultado global do portfólio, diariamente?</p><p>O pensamento lógico é:</p><p>É melhor deixar todas as estratégias operarem livremente, já que todas possuem expectativa matemática positiva no longo prazo, então o resultado de uma não deve impactar nas operações das outras.</p><p>Realmente, isso faz todo sentido. Mas será que podemos melhorar o resultado? O que gostaríamos de validar é:</p><blockquote>Sempre que um limite financeiro X for alcançado, todos os robôs (estratégias) devem parar de operar neste dia? Isso trará melhores resultados para o portfólio no longo prazo?</blockquote><p>E para validar este cenários temos algumas variações possíveis. Imagine o seguinte cenário:</p><ul><li>3 robôs estão com operações abertas no momento</li><li>Uma delas é finalizada no prejuízo</li><li>O limite financeiro diário é alcançado.</li><li>O que fazer com as operações que continuam em aberto? Podemos:</li></ul><ol><li>Não encerrar as operações em aberto e aguardar até que elas fechem em seus pontos de saída</li><li>Encerrar todas as operações em aberto imediatamente, afinal o limite financeiro já foi alcançado.</li><li>Encerrar as operações em aberto, somente se estiverem negativas no momento.</li><li>Encerrar as operações em aberto, somente se estiverem positivas no momento.</li></ol><p>Note que todas as opções poderão fazer o prejuízo no dia aumentar ou diminuir, a depender do saldo das operações em aberto.</p><p>Para tornar este teste possível, o ponto inicial é termos todas as informações necessárias disponíveis, no momento em que o limite financeiro foi atingido. Ou seja, para cada operação finalizada, precisamos:</p><ul><li>Saldo da operação</li><li>Saldo diário acumulado</li><li>Demais estratégias posicionadas no momento</li><li>Saldo em aberto das estratégias posicionadas no momento</li></ul><p>De posse desses dados, conseguimos calcular qual das hipóteses levantadas anteriormente seria a melhor.</p><p><a href="https://dqlabs.com.br">DQLabs - Escola de Quant Trading</a></p><h4>Metodologia</h4><p>Foi exatamente este teste que eu fiz, em dados de conta real (live trading) exatamente em 274 pregões. Mais de um ano de operações catalogados diariamente, trade a trade. Óbvio que não fiz isso tudo manualmente, implementei um robô que registra todos esses dados em tempo real para mim.</p><p>Vou compartilhar abaixo algumas das conclusões que cheguei. <strong>E já adianto, os resultados foram surpreendentes.</strong></p><p>Para nivelarmos o escopo do teste, todas as operações foram realizadas por 6 diferentes robôs (estratégias) em uma conta controle, no ativo mini índice, utilizando lote mínimo: 1 contrato por operação.</p><p>Ao todo foram analisados neste estudo 1.591 operações.</p><p>A coleta dos dados foi feita utilizando um robô implementado na linguagem MQL5 e a análise dos dados foi feita utilizando a linguagem Python.</p><p>A métrica utilizada para avaliar os resultados foi o <strong>Fator de Recuperação = Lucro / Drawdown Máximo</strong>. Dessa forma, conseguimos avaliar tanto o retorno quanto o risco.</p><h4>Resultados</h4><p>Ao testar 6 variações de limites financeiros diários, variando de R$ -100 até R$ -200 (passo -20), obtive estes resultados (em relação a não usar limite de perda):</p><ul><li><strong>Não encerrando as operações em aberto após o limite ser atingido:</strong> 67% dos resultados foram piores</li><li><strong>Encerrando todas as operações em aberto após o limite ser atingido:</strong> 67% dos resultados foram piores</li><li><strong>Encerrando as operações em aberto, somente quando o saldo em aberto estava positivo:</strong> 50% dos resultados foram piores</li><li><strong>Encerrando as operações em aberto, somente quando o saldo em aberto estava negativo:</strong> 33% dos resultados foram piores</li></ul><p>Utilizando limites financeiros entre R$ -100 e R$ -200 ao <strong>não encerrar as operações após o limite ou encerrando todas</strong>, os resultados foram piores em relação a curva original (sem limite de perda).</p><p>Ao testar 11 variações de limites financeiro diários, variando de R$ -200 até R$ -300 (passo -10), obtive estes resultados (em relação a não usar limite de perda):</p><ul><li><strong>Não encerrando as operações em aberto após o limite ser atingido:</strong> 90% dos resultados foram piores</li><li><strong>Encerrando todas as operações em aberto após o limite ser atingido:</strong> 18% dos resultados foram piores</li><li><strong>Encerrando as operações em aberto, somente quando o saldo em aberto estava positivo:</strong> 10% dos resultados foram piores</li><li><strong>Encerrando as operações em aberto, somente quando o saldo em aberto estava negativo:</strong> 100% dos resultados foram piores</li></ul><p>Utilizando limites financeiros entre R$ -200 e R$ -300, 2 cenários apresentaram resultados piores em relação a curva original (sem limite de perda). O destaque positivo foi para: <strong>encerrar as operações em aberto somente quando lucrativas.</strong></p><h4>Comparativo</h4><p>Vamos comparar os números da curva original com os novos números, aplicando o limite de perdas e encerrando as operações em aberto, somente quando o saldo em aberto estivesse positivo.</p><p><strong>Curva Original</strong></p><p><strong>Lucro Total:</strong> 10.890</p><p><strong>Drawdown Máximo:</strong> -2.192</p><p><strong>Fator de Recuperação:</strong> 4.97</p><p><strong>Utilizando Limite de Perda Diária igual a R$ -220</strong></p><p><strong>Lucro Total:</strong> 12.644</p><p><strong>Drawdown Máximo:</strong> -1.427</p><p><strong>Fator de Recuperação:</strong> 8.86</p><p>Podemos observar que o <strong>lucro aumentou 16%</strong> e o <strong>risco diminuiu 35%</strong>, proporcionando uma <strong>melhoria de 78% na relação risco retorno</strong>. Em outras palavras, com menos capital em risco, foi possível obter um lucro ainda maior.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*bFf-GtUqwfPbCDx42GwVJw.png" /><figcaption>Comparativo da curva original com o melhor resultado utilizando limite de perda</figcaption></figure><p>Para evitar que este seja um resultado isolado, também analisei os resultados com limites financeiros próximos ao selecionado. Todas as curvas utilizando limite de perda ficaram acima da curva original.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*tYumVffX4tf2h1Qrd4X6Qg.png" /><figcaption>Comparativo da curva original com vários resultados utilizando limite de perda diferentes</figcaption></figure><h4>Conclusão</h4><p>Aplicar um limite diário de perda financeira pode melhorar a curva de capital no longo prazo, tanto aumentando o lucro, como diminuindo o risco. Porém não é possível estender o resultado deste estudo para qualquer tipo de portfólio. É necessário analisar como a correlação das estratégias pode impactar nesta decisão, além de outras variáveis como tamanho de stop loss e horários de operações.</p><p>Sugiro que antes da tomada de decisão um estudo semelhante a este seja aplicado com informações do seu próprio portfólio, dessa forma, você estará sempre embasado nos dados.</p><p>Este estudo só possível de ser feito com domínio das técnicas de trading quantitativo e de automação de estratégias de trading. Fica claro como utilizar dados e estatística podem melhor exponencialmente a forma como operamos no mercado financeiro.</p><p>Se quiser aprender mais sobre estes assuntos, te convido a conhecer <a href="https://dqlabs.com.br">nossa escola de Quant e Algo Trading.</a></p><p>Se você gostou desse tipo de conteúdo e gostaria de acompanhar, siga <a href="https://www.instagram.com/devtrader/">@devtrader</a> no instagram.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=86f87d150873" width="1" height="1" alt=""><hr><p><a href="https://medium.com/devtrader/limitar-as-perdas-financeiras-di%C3%A1rias-em-um-portf%C3%B3lio-faz-sentido-86f87d150873">Limitar as perdas financeiras diárias em um portfólio, faz sentido?</a> was originally published in <a href="https://medium.com/devtrader">devtrader</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Como automatizar seu Walk Forward Analysis (WFA)]]></title>
            <link>https://medium.com/devtrader/como-automatizar-seu-walk-forward-analysis-wfa-82580580e31?source=rss----7001f66167af---4</link>
            <guid isPermaLink="false">https://medium.com/p/82580580e31</guid>
            <category><![CDATA[wfa]]></category>
            <category><![CDATA[expert-advisor]]></category>
            <category><![CDATA[botspot]]></category>
            <category><![CDATA[metatrader]]></category>
            <category><![CDATA[crossvalidation]]></category>
            <dc:creator><![CDATA[Kaio Valente]]></dc:creator>
            <pubDate>Fri, 29 Jul 2022 12:34:54 GMT</pubDate>
            <atom:updated>2022-11-18T12:11:32.958Z</atom:updated>
            <content:encoded><![CDATA[<h4>Como automatizar a execução do seu teste WFA utilizando a ferramenta Extreme Forward Analysis e quais os benefícios dessa abordagem</h4><p>No artigo “<a href="https://medium.com/devtrader/o-guia-definitivo-do-walk-forward-analysis-wfa-e755c2c33542?source=collection_home---4------0-----------------------">O guia definitivo do Walk Forward Analysis (WFA)</a>” apresentei todo o racional da abordagem, passando pelos seus objetivos, como executá-lo manualmente e suas boas práticas. Recomendo que leia-o antes de iniciar neste artigo.</p><p>Ao final do artigo comentei brevemente sobre a necessidade de expandir o teste para cobrir a maior combinação possível de configurações de Steps, períodos In Sample e Out of Sample. E sobre a dificuldade de executar todos os passos necessários manualmente: backtests, otimizações e coleta de dados.</p><p>É exatamente este ponto que vamos tratar neste artigo.</p><blockquote>É possível automatizar todo esse processo?</blockquote><p>Felizmente sim, é possível. E o ganho de produtividade é absurdo.</p><p>Quem é acostumado a executar WFAs manualmente, sabe que o processo pode demorar horas, dependendo da quantidade de steps. Com a utilização da ferramenta, a execução de todas as combinações do WFM é feita em poucos minutos. E tudo isso, integrado ao Metatrader 5 (MT5).</p><h4>Vamos Começar</h4><p>Tudo começa com uma simples otimização no MT5. Selecionamos o período total que queremos validar e os parâmetros de otimização, assim como o range de cada um. Conforme o exemplo abaixo:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/997/1*qRtJSu2-a_MuoUqMMgeKVw.png" /><figcaption>Exemplo de configuração de otimização no Metatrader 5</figcaption></figure><p>No exemplo acima, utilizamos o robô desenvolvido <a href="https://medium.com/devtrader/criando-um-rob%C3%B4-trader-do-zero-com-mql5-parte-1-a21cebaa9b0e">neste artigo</a>. Selecionamos 2 parâmetros para otimização:</p><ul><li>Média: de 5 períodos até 20 períodos, variando de 1 em 1.</li><li>Take Profit: de 500 pontos até 1000 pontos, variando de 100 em 100.</li></ul><p>Você não precisa se preocupar em definir a quantidade de steps ou a proporção de In Sample e Out of Sample, a ferramenta fará isso tudo automaticamente.</p><p>Ao término da otimização, um arquivo .wfa será gerado na pasta compartilhada do seu MT5.</p><p>Vamos fazer upload deste arquivo no BotSpot.</p><h4>Conhecendo o Extreme Forward Analysis</h4><p>As principais funcionalidades presentes na ferramenta são:</p><ul><li>Separação de períodos In Sample, Out of Sample e cálculo de Steps</li><li>Processamento do WFA</li><li>Exibição dos melhores parâmetros em cada step</li><li>Análise de Significância Estatística</li><li>Cálculo automático de Walk Forward Efficiency (WFE)</li><li>Diferentes métricas de avaliação para cálculo de WFE</li><li>Processamento completo de Walk Forward Matrix (WFM)</li><li>Geração de gráficos Out of Sample</li><li>Distribuição de resultados de todos os parâmetros da otimização</li><li>Exibição de todos os períodos IS e OOS</li><li>Walk Forward Timeline</li></ul><p>Vamos detalhar cada algumas.</p><p><a href="https://dqlabs.com.br/">Trading</a></p><h4>Analisando o WFA</h4><p>Ao iniciar o processamento, dado o histórico utilizado durante a otimização, automaticamente a ferramenta calcula as quantidades possíveis de combinações, levando em consideração a relação IS x OOS e Steps.</p><p>No máximo, 12 combinações serão executadas:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/242/1*GxBcILkMMmoDA-RLkBzLpQ.png" /><figcaption>IS e OOS em meses</figcaption></figure><p>A quantidade de Steps vai variar de acordo com o tamanho do histórico disponível.</p><p>Para cada combinação a ferramenta processa todo o WFA, calculando os melhores resultados em período IS, obtendo a melhor parametrização e calculando seu respectivo resultado em OOS. Além de calcular o WFE para cada Step e o WFE da execução geral.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*w-KJkgaYcZv1Wcy-PxmsSw.png" /><figcaption>Exemplo de WFA na configuração: Steps 6 | IS: 24 meses | OOS: 6 meses. Métrica: Lucro Médio</figcaption></figure><p>Na imagem acima, conseguimos visualizar quanto a estratégia fez de lucro médio mensal no meses em período de otimização (In Sample) e o lucro médio em meses de períodos não otimizados (Out of Sample). A relação entre OOS e IS (WFE), quantidade de operação em cada período e qual a melhor combinação de parâmetros que produziram o resultado de cada step.</p><p>Dessa forma, conseguimos avaliar se o WFE foi satisfatório ou não, seguindo as recomendações mencionadas <a href="https://medium.com/devtrader/o-guia-definitivo-do-walk-forward-analysis-wfa-e755c2c33542">aqui</a>.</p><p>A ferramenta também fornece os parâmetros que foram mais frequentes entre todos os steps de execução:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/670/1*lPFuVQSNyyuXIRdFxlYckg.png" /><figcaption>Parâmetros mais frequentes do WFA</figcaption></figure><p>Neste caso, é uma otimização de Stop Loss e Take Profit em pontos. Notem que o Stop Loss de 500 pontos foi o melhor em todos os steps.</p><h4>Métricas de Avaliação</h4><p>No exemplo acima, estamos utilizando Lucro médio como métrica de avaliação para cálculo do WFE. Mas a ferramenta permite utilizar outras duas opções:</p><ul><li>CAGR / Média do Drawdown</li><li>CAGR / Máximo Drawdown</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/368/1*aCoDTp8ZN3uMr4rJUwWGVw.png" /><figcaption>Métrica de Avaliação</figcaption></figure><h4>Analisando o WFM</h4><p>Como mencionamos anteriormente, todas as combinações possíveis de Steps, IS e OOS (em meses) são processadas. É nesta sessão que conseguimos visualizar o resultado de todas elas.</p><p>A ferramenta exibe a quantidade de steps que foram executados em cada passo.</p><p>A significância estatística é calculada com base na quantidade de operações executadas em cada período de otimização e pode ser: baixa, média ou alta.</p><p>Por padrão, o melhor resultado de WFE já vem selecionado.</p><p>Também é possível visualizar a média do WFE entre todas as combinações e a média de lucro gerada entre todas a curvas OOS.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*6BF-bNkRtC63cgt68VXh1g.png" /><figcaption>Walk Forward Matrix</figcaption></figure><p>É selecionar e possível ver os detalhes de cada uma destas execuções.</p><h4>Analisando Curvas Out of Sample</h4><p>Ao selecionar uma execução, os gráficos com a curva de capital e períodos out of sample serão gerados.</p><p>A quantidade de meses, anos e períodos com resultados negativos também são informados.</p><p>Estes gráficos são particularmente importantes, pois exibem os resultados em períodos onde a estratégia não foi otimizada. É o que podemos esperar que vá acontecer em live trading.</p><p>Estratégias com sinais de overfitting irão apresentar curvas erráticas em períodos OOS.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/996/1*lo-BFlxU6L2qCAxZKyPgLA.png" /><figcaption>Gráficos de resultados em períodos não otimizados</figcaption></figure><p>Este é um dos principais recursos visuais da ferramenta. Aqui você consegue identificar facilmente se a curva de capital foi gerada com resultados outliers ou se teve períodos negativos consecutivos.</p><h4>Distribuição de Resultados</h4><p>Outra feature muito importante é a distribuição de resultados. Neste gráfico conseguimos visualizar a performance de todos os conjuntos de parâmetros da otimização. Cada linha representa o capital acumulado de uma combinação específica de parâmetros.</p><p>No eixo X do gráfico, temos a passagem do tempo medida em períodos Out of Sample.</p><p>O objetivo é entender o comportamento geral da estratégia utilizando diferentes parâmetros. Quanto mais curvas positivas, melhor.</p><p>Essa análise pode ser feita de forma objetiva pelo cálculo da média e desvio padrão. O Z-Score é a relação Média/Desvio Padrão, quanto maior, melhor.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/753/1*MAXNbMr3JXp4_QM316Qw8g.png" /></figure><p>Caso este gráfico apresente muitas linhas negativas, também temos um sinal de overfitting. Já que boa parte das parametrizações não estarão gerado resultados satisfatórios.</p><h4>WFA Timeline</h4><p>Também é possível visualizar de forma gráfica o intervalo de datas em cada peíodo In Sample e Out of Sample. É só passar o mouse em cima.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/740/1*uU8hhG2Hq3hGYy4JzuRtuA.png" /><figcaption>WFA Timeline</figcaption></figure><p>Ou atráveis da tabela de períodos:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/736/1*tGWr7Ly3Ay1HSQmDN_cjmw.png" /><figcaption>Períodos In Sample x Out of Sample</figcaption></figure><p>Se você deseja executar testes de robustez das suas estratégias de maneira profissional, a ferramenta Extreme Forward Analysis está disponível <a href="https://botspot.com.br/wfa-lp/wfa-index.html">aqui</a>.</p><p>Se você gostou desse tipo de conteúdo e gostaria de acompanhar, siga <a href="https://www.instagram.com/devtrader/">@devtrader</a> no instagram.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=82580580e31" width="1" height="1" alt=""><hr><p><a href="https://medium.com/devtrader/como-automatizar-seu-walk-forward-analysis-wfa-82580580e31">Como automatizar seu Walk Forward Analysis (WFA)</a> was originally published in <a href="https://medium.com/devtrader">devtrader</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[O guia definitivo do Walk Forward Analysis (WFA)]]></title>
            <link>https://medium.com/devtrader/o-guia-definitivo-do-walk-forward-analysis-wfa-e755c2c33542?source=rss----7001f66167af---4</link>
            <guid isPermaLink="false">https://medium.com/p/e755c2c33542</guid>
            <category><![CDATA[metatrader]]></category>
            <category><![CDATA[wfa]]></category>
            <category><![CDATA[algotrading]]></category>
            <category><![CDATA[expert-advisor]]></category>
            <category><![CDATA[quant]]></category>
            <dc:creator><![CDATA[Kaio Valente]]></dc:creator>
            <pubDate>Sat, 23 Jul 2022 19:28:59 GMT</pubDate>
            <atom:updated>2022-11-18T12:13:58.265Z</atom:updated>
            <content:encoded><![CDATA[<h4>Vamos entender o objetivo, como executar e avaliar o método de validação mais efetivo para testar a robustez de estratégias de trading</h4><p>Começaremos pelo problema.</p><blockquote>Qual problema um WFA tenta resolver?</blockquote><p>Sabemos que o processo de otimização de uma estratégia tem suas vantagens e desvantagens. A vantagem é a capacidade de encontrar o melhor conjunto de parâmetros para uma estratégia, com base em uma métrica de avaliação: maior lucro, menor risco, maior estabilidade, etc.</p><p>A desvantagem é quando otimizamos demais uma estratégia e o algoritmo de otimização se ajusta tanto aos ruídos que encontra resultados ótimos no passado, mas não necessariamente com capacidade de generalização em dados diferentes, este processo é conhecido como <em>overfitting </em>ou <em>curvefit</em>.</p><p>Falamos em detalhes sobre este processo <a href="https://medium.com/devtrader/otimizando-um-rob%C3%B4-no-metatrader-5-parte-1-1f254f2c515b">aqui</a>.</p><p>Dito isso, o objetivo principal da aplicação do método <em>Walk Forward Analysis</em> (WFA), é identificar de forma objetiva se uma estratégia tem sinais de <em>overfitting </em>ou não. Particularmente, considero o WFA uma das abordagens mais efetivas para este fim.</p><p>Além da identificação de <em>overfitting</em>, um WFA tenta elucidar as seguintes questões:</p><ul><li>A estratégia é Robusta? É capaz de ganhar dinheiro em conta real?</li><li>Qual taxa de performance posso esperar em conta real comparado aos resultados de teste/otimização?</li><li>Como as mudanças nos ciclos de mercado afetam a performance da estratégia?</li><li>Quais os melhores parâmetros para executar a estratégia em live trading?</li><li>Quando devo atualizar os parâmetros da estratégia?</li></ul><p>Ao longo deste artigo, vamos entender como responder estas perguntas aplicando o método.</p><h4>Mas afinal, o que é um WFA?</h4><p>É uma técnica de validação cruzada (<em>cross validation</em>), proposta originalmente por <strong>Robert Pardo</strong> em seu livro <em>The Evaluation and Optimization of Trading Strategies</em>.</p><p>Consiste em executar uma bateria de testes e validações consecutivas, separando o histórico total de dados em janelas menores para avaliar a capacidade da estratégia em se ajustar a diferentes ciclos de mercado e a diferentes parametrizações.</p><p><a href="https://dqlabs.com.br/">Trading</a></p><h4>Passo a Passo</h4><p>Vou descrever todas as etapas necessárias para aplicação do método.</p><ol><li><strong>Definir variáveis/parâmetros e range de otimização</strong></li></ol><p>Como em uma otimização normal, é necessário definir o escopo de otimização da estratégia, quais parâmetros deseja-se otimizar: gatilhos de entrada, stop loss, stops gain, manejo de posição, break even, stop móvel, trailling stop, horário de operação, etc. As possibilidades são inúmeras e variam de estratégia para estratégia. Lembre-se de manter as boas práticas que também foram discutidas <a href="https://medium.com/devtrader/otimizando-um-rob%C3%B4-no-metatrader-5-parte-1-1f254f2c515b">aqui</a>. A principal, é manter baixo o número de parâmetros otimizados simultaneamente, preferencialmente entre 2 e 3.</p><p><strong>2. Definir a função de avaliação</strong></p><p>Função de avaliação é a métrica que indica para o otimizador o que ele deve buscar. O algoritmo de otimização vai ranquear os melhores resultados de acordo com a função de avaliação, a métrica padrão que gosto de usar é Fator de Recuperação. Mas é possível criar suas próprias métricas customizadas de performance. Entrei em detalhes sobre este assunto <a href="https://medium.com/devtrader/otimizando-um-rob%C3%B4-no-metatrader-5-parte-2-fe1d76f0ba9e">aqui</a>.</p><p><strong>3. Separar os dados entre In Sample e Out of Sample</strong></p><p>Nesta etapa vamos separar nosso histórico de dados em janelas menores. Cada uma destas janelas vai ser divida em 2 períodos: In Sample (IS) e Out of Sample (OOS)</p><p>In Sample é como chamamos o período onde vamos otimizar a estratégia. Out of Sample é o período onde vamos validar os parâmetros obtidos no período In Sample.</p><p>O racional dessa prática é entender se os parâmetros otimizados em uma janela de tempo, continuam gerando bons resultados em um período que não foi usado pelo otimizador, ou seja, em dados desconhecidos.</p><p>Neste ponto do processo, precisamos definir qual padrão de configuração iremos adotar para dividir os períodos. Os mais comuns são:</p><ul><li>80% teste / 20% validação (4:1)</li><li>75% teste / 25% validação (3:1)</li><li>66% teste/ 33% validação (2:1)</li></ul><p>Essa decisão é importante pois ela define o peso que queremos dar para cada etapa do processo. Isso está diretamente relacionado com a significância estatística dos resultados gerados durante a otimização, e vai variar para cada estratégia.</p><p>Estratégias com frequência mais alta de operações podem ter um período de otimização menor, e vice-versa.</p><p><strong>4. Separar o histórico total em steps</strong></p><p>Já sabemos qual relação de In Sample e Out of Sample vamos usar. Então agora podemos definir quantos steps (ou stages/janelas/windows) iremos utilizar.</p><p>Dado que sabemos o tamanho total do histórico, precisamos dividir em quantos passos vamos quebrar o histórico em pequenas porções, cada uma delas contendo X meses In Sample e Y meses Out of Sample. Conforme a imagem abaixo:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/772/1*BQB5BF1U_oRt4J_oB7b4fQ.png" /><figcaption>Exemplo de configuração WFA: 6 steps (4:1) — Divididos Semestralmente</figcaption></figure><p>Em amarelo: Período In Sample. Em azul: Período Out of Sample</p><p>No exemplo acima temos a seguinte configuração:</p><ul><li>Histórico Total: 5 anos (60 meses)</li><li>In Sample: 24 meses</li><li>Out of Sample: 6 meses</li><li>Steps: 6</li></ul><p>Você pode variar essas configurações, alterando todos esses parâmetros. Quanto menor a quantidade de meses em In Sample x Out of Sample, maior a quantidade de steps. Assim como, se o histórico de dados for maior, será possível montar diversas configurações diferentes.</p><p>Aqui não existe certo e errado. Apenas fique ligado em algumas boas práticas que eu gosto de usar:</p><ul><li>Não usar períodos Out of Sample menores que 3 meses.</li><li>Não usar menos do que 6 steps</li></ul><p><strong>Atenção para Significância Estatística</strong></p><p>Neste ponto, que precisamos ter em mente é o seguinte:</p><blockquote>A quantidade de operações geradas durante a otimização é o suficiente para gerar resultados com significância estatística aceitável, capaz de produzir resultados confiáveis em período Out of Sample?</blockquote><p>Pense nisso.</p><h4>Executando um WFA</h4><p>Agora que definimos todos os 4 passos necessários para planejar a execução do nosso WFA, podemos meter a mão na massa e iniciar o teste de fato.</p><p><strong>Otimização — Validação</strong></p><p>Esta é a etapa mais trabalhosa do processo. Para cada step vamos executar uma otimização dentro do período In Sample. Quando a otimização for concluída, a melhor combinação de parâmetros deve ser executada no período Out of Sample.</p><p>Ao concluir um step, catalogamos os resultados (com auxílio de uma planilha) tanto da execução IS, quanto da OOS. Vamos usar esses dados pra auferir os resultados e compará-los mais pra frente.</p><p><strong>Mas quais dados devemos catalogar?</strong></p><p>Este é um ponto importante e depende de um conceito primordial: Qual métrica será usada para avaliar o WFA?</p><p>Como já discutimos, o objetivo de um WFA é avaliar se os melhores resultados de uma otimização continuam gerando bons resultados em dados não otimizados.</p><p>Para medir isso, precisamos definir quais métricas devemos avaliar entre IS e OOS. A métrica mais clássica é <strong>Lucro</strong>.</p><p>O Lucro gerado na otimização é maior ou menor ao Lucro gerado em OOS?</p><p>Mas lembre-se que estamos testando 24 meses em IS e 6 meses em OOS. Para fazer uma comparação justa, precisamos normalizar esses dados. Comparar os valores na mesma base de cálculo. Uma forma de fazer isso, é comparar o Lucro Mensal, por exemplo.</p><p>Dessa forma, tiramos a média mensal do período IS e a média mensal do período OOS. Agora sim podemos compará-las.</p><p>Outras métricas podem ser usadas para comparar os resultados IS e OOS. Principalmente aquelas que envolvem risco, e não somente retorno. Tenha em mente que essas métricas precisam estar sempre normalizadas na mesma base de cálculo para que a comparação seja justa e faça sentido. Algumas métricas que gosto de usar:</p><ul><li>CAGR / Média do Drawdown</li><li>CAGR / Máximo Drawdown</li></ul><p>Repita esse processo de Otimização — Backtest — Coleta de dados para todos os steps.</p><h4>Avaliando um WFA</h4><p>Com os dados todos coletados, agora podemos avaliar se os resultados do WFA foram satisfatórios ou não. Em outras palavras, a estratégia está <em>overfitada</em>? A estratégia é robusta?</p><p>Avaliamos o resultado através de uma métrica chamada <em>Walk Forward Efficiency</em> (WFE)</p><p><strong>Calculando o WFE</strong></p><p>O cálculo do WFE é bem simples. Para cada step devemos dividir o resultado obtido em OOS pelo obtido em IS. Dessa forma temos uma relação percentual de quanto a estratégia performou em dados não otimizados em relação ao período otimizado.</p><p>No final, calculamos o WFE geral, que é a média do WFE de cada step.</p><p><strong>Avaliando WFE</strong></p><p>WFE abaixo de 50% indica que a estratégia não conseguiu gerar bons resultados em períodos não otimizados. É um sinal claro de <em>overfitting</em>.</p><p>Particularmente, gosto de usar como ponto de corte WFE de 70%.</p><p>WFE acima de 100% indica que a estratégia conseguiu performar melhor em períodos não otimizados. Este é um sinal excelente.</p><p><strong>Análise de Outliers</strong></p><p>Outro ponto interessante para avaliar nos resultados de um WFA é o comportamento de <em>outliers, </em>ou pontos fora da média. Se você obteve um WFE satisfatório, acima de 70% mas este resultado foi construído em poucos períodos, muito fora da média, este é um cenário ruim. Exemplo:</p><p>Em 6 steps, 4 foram negativos e em 2 deles tiveram valores absurdamente altos.</p><p>Este resultado foi construído através de outlier. A curva de capital obtida é totalmente instável e com grandes períodos de estagnação.</p><p><strong>Curva Out of Sample</strong></p><p>Os resultados OOS obtidos formam uma curva de capital importante. É o resultado da sua estratégia somente em dados não otimizados e ela deve ser analisada. Particularmente, não gosto de obter períodos consecutivos negativos em resultados OOS.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*AG_K0J5YqV0eLhULtThrcg.png" /><figcaption>Resultados Out of Sample</figcaption></figure><p>Pronto, se você chegou até aqui, você consegue finalizar um teste WFA de ponta a ponta. Com um WFE satisfatório, outliers controlados e curva OOS estável a estratégia passou no teste.</p><p>Mas será que ainda podemos melhorar a robustez? Adicionar ainda mais rigor estatístico? Claro que sim :)</p><p>Aqui lhe apresento o conceito de <em>Walk Forward Matrix</em> (WFM)</p><h4>Walk Forward Matrix</h4><p>Lembra da etapa de definição de períodos IS, OOS e quantidade de Steps? Nesta etapa é possível montar inúmeras configurações possíveis, somente variando estes parâmetros.</p><p>O que acabamos de fazer foi executar apenas 1 das combinações possíveis do WFA: 6 steps, 24 meses IS e 6 meses OOS para um histórico de 5 anos.</p><p>Mas qual seria o resultado se a configuração fosse: 12 steps, 12 meses IS e 4 meses OOS para um histórico de 5 anos? Ou então 18 steps, 9 meses IS e 3 meses OOS?</p><p>Esta variedade de configurações, chamamos de <em>Walk Forward Matrix</em>.</p><p>Quanto maior a combinação de testes <em>Walk Forward</em> fizermos, maior será o grau de robustez de uma estratégia.</p><p>Mas temos que concordar que executar otimizações, backtests e catalogar os dados para uma grande quantidade de steps em diferentes combinações é um trabalho árduo e nem um pouco produtivo.</p><p>Para resolver este problema, podemos executar o processo de WFA de forma automatizada de ponta a ponta. Incluindo cálculo de WFE em diversas configurações de WFM. Na próxima série deste artigo, vou apresentar como fazer isso, utilizando uma ferramenta que automatiza todo o processo.</p><p>Se você gostou desse tipo de conteúdo e gostaria de acompanhar, siga <a href="https://www.instagram.com/devtrader/">@devtrader</a> no instagram.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=e755c2c33542" width="1" height="1" alt=""><hr><p><a href="https://medium.com/devtrader/o-guia-definitivo-do-walk-forward-analysis-wfa-e755c2c33542">O guia definitivo do Walk Forward Analysis (WFA)</a> was originally published in <a href="https://medium.com/devtrader">devtrader</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Otimizando um Robô no Metatrader 5 — Aplicando Testes de Robustez— Parte 3]]></title>
            <link>https://medium.com/devtrader/otimizando-um-rob%C3%B4-no-metatrader-5-aplicando-testes-de-robustez-parte-3-8b61b9bab714?source=rss----7001f66167af---4</link>
            <guid isPermaLink="false">https://medium.com/p/8b61b9bab714</guid>
            <category><![CDATA[trading]]></category>
            <category><![CDATA[metatrader]]></category>
            <category><![CDATA[otimização]]></category>
            <category><![CDATA[wfa]]></category>
            <category><![CDATA[robo]]></category>
            <dc:creator><![CDATA[Kaio Valente]]></dc:creator>
            <pubDate>Mon, 24 Jan 2022 17:35:32 GMT</pubDate>
            <atom:updated>2022-11-18T12:17:49.663Z</atom:updated>
            <content:encoded><![CDATA[<h3>Otimizando um Robô no Metatrader 5 — Aplicando Testes de Robustez— Parte 3</h3><h4>Dando continuidade a série sobre otimizações, nesta parte vou apresentar diferentes tipos de testes de robustez, com objetivo de diminuir a probabilidade de executar estratégias que não irão performar bem em live trading.</h4><p>Na <a href="https://medium.com/devtrader/otimizando-um-rob%C3%B4-no-metatrader-5-parte-1-1f254f2c515b">primeira parte</a> desta série, vimos qual o objetivo de uma otimização e também o principal problema que ela gera, o overfitting. Assim como algumas boas práticas para evitá-lo.</p><p>Na <a href="https://medium.com/devtrader/otimizando-um-rob%C3%B4-no-metatrader-5-parte-2-fe1d76f0ba9e">segunda parte</a>, falamos sobre conceitos fundamentais de teste e validação, testes forward e métricas customizadas de performance.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/748/1*Dtj-GEFQallYqG-FyXD4CA.png" /></figure><p>Nesta terceira e última parte, vou apresentar os principais testes de robustez que aplico para identificar se uma estratégia tem capacidade de ganhar dinheiro em live trading ou não. São eles: <strong>Distribuição de Resultados, Distribuição de Parâmetros, Walk Forward Analysis (WFA).</strong></p><h4>Distribuição de Resultados</h4><p>O objetivo principal deste teste é avaliar se diferentes configurações de uma estratégia geram curvas lucrativas, de um modo geral.</p><p>Na prática, executamos uma otimização simples, variando os parâmetros que desejamos testar, seguindo as recomendações descritas na <a href="https://medium.com/devtrader/otimizando-um-rob%C3%B4-no-metatrader-5-parte-1-1f254f2c515b">Parte 1</a>. O resultado esperado é que a grande maioria das configurações gerem curvas positivas. Não necessariamente todas as curvas precisam ser ótimas, o importante aqui é observar o grau de generalização da estratégia em diferentes configurações, ao longo do tempo. Para isso, fazemos a avaliação do resultado através de algumas métricas:</p><ul><li>Média dos Resultados</li><li>Desvio Padrão</li><li>Z-Score (média/desvio padrão)</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*c22b9OOx9qkDOBB7G1TTIA.png" /><figcaption>Exemplo de análise de uma Distribuição de Resultados</figcaption></figure><p>Avaliamos e coletamos os números de todas as execuções de uma otimização. Geralmente, aplica-se a análise em cima dos Lucros da estratégia, mas é possível executar em cima de qualquer outra métrica, o Drawdown, por exemplo.</p><p>Idealmente, buscamos estratégias que tenham pelo menos 90% dos resultados positivos e um Z-Score de pelo menos 3.</p><p>Na distribuição de resultados, é importante ter cuidado com o histórico de dados utilizado para executar a otimização, bem como a quantidade de parâmetros otimizados e seus ranges de variação. Todos esses pontos podem impactar na qualidade do teste.</p><p><a href="https://dqlabs.com.br/">Trading</a></p><h4>Distribuição de Parâmetros</h4><p>Já na Distribuição de Parâmetros, queremos entender como cada input/variável/parâmetro da estratégia se comporta a medida que variamos seus valores (range de otimização). O principal objetivo é identificar se a estratégia consegue generalizar além dos parâmetros “ótimos”.</p><p>Imagine uma estratégia de cruzamento de médias, que gera uma curva de capital positiva com as médias de 8 e 20 períodos.</p><p>E se alterarmos as médias para 9 e 21 períodos e a curva se tornar perdedora? Péssimo sinal, certo? Esse tipo de configuração não tem chance de performar bem em live trading. Este é um exemplo clássico de overfitting, onde o processo de otimização simplesmente encontrou a melhor configuração no passado, porém sem capacidade de generalização.</p><p>Dessa forma, na Distribuição de Parâmetros queremos encontrar <em>Clusters de Configuração,</em> são as regiões onde cada variável apresenta resultados satisfatórios. Quanto mais estável for a região, maior a chance da estratégia funcionar em diferentes cenários no live trading.</p><p>Essa análise pode ser feita visualmente observando os resultados da otimização geradas pelo Metatrader 5</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*ZvuGqH1kWTRo2uZyw90oyA.png" /><figcaption>Análise de Distribuição de Parâmetros</figcaption></figure><p>Na imagem, exemplo de um período de média móvel sendo otimizado utilizando o Fator de Recuperação como função de avaliação. Cada ponto representa o resultado da otimização e seu valor pode ser observado na coluna a direita. Note que nas regiões entre 23 e 29 estão os melhores resultados. Porém, também conseguimos identificar outros clusters com resultados bons, entre 47 e 53. Entretanto, quando começamos a aumentar os períodos, o resultado começa a deteriorar.</p><p>O desafio desse teste é identificar se de fato há regiões estáveis para cada parametrização da estratégia e evitar a utilização de resultados outliers.</p><p>Aqui também devemos nos atentar para as boas práticas de otimização e evitar uma grande quantidade de parâmetros simultaneamente.</p><h4>Walk Forward Analysis (WFA)</h4><p>Sem dúvida, este é o teste mais importante e responde duas questões importantes:</p><ul><li>Minha estratégia tem capacidade de generalização ao longo do tempo?</li><li>Qual a melhor configuração para executar em live trading?</li></ul><p>Vários conceitos que já vimos até aqui devem ser aplicados para executarmos um WFA. Um teste <em>Walk Forward Analysis</em>, nada mais é do que uma bateria de testes <em>Walk Forward</em> executados em sequência.</p><p>Na prática, vamos quebrar nosso histórico de dados em diferentes períodos In Sample/Out of Sample e executar diferentes otimizações e validações. O objetivo é avaliar como a estratégia se comporta ao longo do tempo levando em consideração diferentes ciclos de mercado.</p><p>Alguns pontos devem ser definidos antes de iniciar um WFA:</p><ul><li>Histórico total do teste</li><li>Quantos steps/windows serão executados</li><li>Tamanho de cada janela de otimização (Período In Sample)</li><li>Tamanho de cada janela de validação (Período Out of Sample)</li></ul><p>Estas questões definem o que chamamos de <em>Walk Forward Matrix (WFM)</em></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/778/1*_8PCRPQWrgJjoQek3OwB8w.png" /><figcaption>WFM com 6 steps — 2 anos In Sample / 6 meses Out of Sample</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*kMziPjwDICq6xubemPbUhw.png" /><figcaption>WFM com 12 steps — 1 ano In Sample / 4meses Out of Sample</figcaption></figure><p>Este é um assunto complexo e extenso. Basicamente a escolha da configuração do WFM envolve algumas variáveis: Significância Estatística e Adaptação ao Ciclo de Mercado. A decisão depende da natureza de cada estratégia e da quantidade de histórico disponível.</p><p>Algumas questões que devem ser avaliadas neste ponto:</p><ul><li>A quantidade de operações em cada período é suficiente para ter resultados confiáveis?</li><li>Quero aumentar a significância estatística da minha otimização?</li><li>Quero ter mais adaptação aos ciclos de mercado?</li></ul><blockquote>E como avaliamos se uma estratégia sobreviveu ao WFA ou não?</blockquote><p>Através do cálculo de uma métrica chamada Walk Forward Efficiency (WFE). Ela nos diz, por meio de uma análise individual de cada step se o resultado obtido no final é aceitável. Alguns autores consideram que WFEs acima de 50% já são capazes de gerar bons resultados em conta real. Particularmente, gosto de usar como ponto de corte WFEs acima de 70.</p><p>Geralmente estratégias com sinais de overfitting não irão sobreviver ao WFA, gerado resultados insuficientes na análise do WFE.</p><p>Este é um teste extenso e trabalhoso de ser executado. Meu objetivo aqui é apenas apresentar uma introdução da sua utilidade e importância.</p><p>É possível executar WFAs manualmente utilizando o Metatrader 5, com auxílio de planilhas para catalogar os dados e calcular o WFE. Ao longo do tempo desenvolvi algumas rotinas para automatizar e tornar este processo mais produtivo.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*-X7lCUb3UsRcx0cpOUQsmw.png" /><figcaption>Exemplo de um WFA executado automaticamente</figcaption></figure><p>Na imagem acima, exemplo da execução de um WFA com 10 steps. Cada cor representa um período Out of Sample diferente. A curva gerada foi 100% de dados não otimizados. O que mostra a capacidade de generalização da estratégia em dados desconhecidos.</p><p>Finalizamos aqui a série sobre otimização de robôs utilizando o Metatrader 5.</p><p>Se você tem interesse de aprender em detalhes como aplicar todo o processo de validação e construir estratégias de trading robustas, a turma para <strong>Mentoria Backtest Efetivo</strong> está aberta. Todos os detalhes estão neste <a href="http://devtrader.com.br/mentoria">link</a>.</p><p>Se você gostou desse tipo de conteúdo e gostaria de acompanhar, siga <a href="https://www.instagram.com/devtrader/">@devtrader</a> no instagram.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=8b61b9bab714" width="1" height="1" alt=""><hr><p><a href="https://medium.com/devtrader/otimizando-um-rob%C3%B4-no-metatrader-5-aplicando-testes-de-robustez-parte-3-8b61b9bab714">Otimizando um Robô no Metatrader 5 — Aplicando Testes de Robustez— Parte 3</a> was originally published in <a href="https://medium.com/devtrader">devtrader</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Otimizando um Robô no Metatrader 5 — Parte 2]]></title>
            <link>https://medium.com/devtrader/otimizando-um-rob%C3%B4-no-metatrader-5-parte-2-fe1d76f0ba9e?source=rss----7001f66167af---4</link>
            <guid isPermaLink="false">https://medium.com/p/fe1d76f0ba9e</guid>
            <category><![CDATA[optimization]]></category>
            <category><![CDATA[backtest]]></category>
            <category><![CDATA[expert-advisor]]></category>
            <category><![CDATA[otimização]]></category>
            <category><![CDATA[metatrader]]></category>
            <dc:creator><![CDATA[Kaio Valente]]></dc:creator>
            <pubDate>Thu, 12 Aug 2021 17:55:42 GMT</pubDate>
            <atom:updated>2022-11-18T12:18:17.138Z</atom:updated>
            <content:encoded><![CDATA[<h3>Otimizando um Robô no Metatrader 5 — Parte 2</h3><h4>Continuando a série sobre otimizações, neste texto vou abordar a diferença entre teste e validação, o que são métricas customizadas de performance e a importância dos testes de robustez.</h4><p>Como vimos na <a href="https://medium.com/devtrader/otimizando-um-rob%C3%B4-no-metatrader-5-parte-1-1f254f2c515b">primeira parte</a> desta série, um dos problemas de executar otimizações em estratégias automatizadas de trading, é incorrer em <em>overfitting</em>. Encontrar boas parametrizações no passado, porém sem <em>Predictive Power</em>, isto é, sem capacidade de generalização em dados reais, no <em>live trading</em>.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*yIRxHa-POAu1NyeScCZpAQ.jpeg" /><figcaption><a href="https://www.freepik.com/vectors/watercolor">https://www.freepik.com/vectors/watercolor</a></figcaption></figure><p>Para tentar mitigar este problema, aplicamos uma abordagem bastante difundida na Ciência de Dados. Separamos todo o histórico em período de teste e período de validação.</p><h4>In Sample x Out of Sample</h4><p>In Sample, é o nome dado ao período de teste, onde a estratégia será otimizada, isso é, o Metatrader 5 buscará a melhor parametrização de acordo com a função de avaliação informada, apenas nesse conjunto de dados.</p><p>Out Of Sample, é como chamamos o período de validação, onde a estratégia não será otimizada, para que não tenhamos o risco de sobreajustar (<em>“overfitar”</em>) a estratégia em todo histórico de dados disponível.</p><p>O objetivo final dessa abordagem é auferir se uma configuração proveniente da otimização, continua apresentando bons resultados em dados onde ela não foi otimizada.</p><p>No Metatrader 5, conseguimos aplicar esse tipo de teste de forma automática, ele se chama<em> Forward Test</em></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/797/1*F1WSnUDLDUyWoHhb2p_oMw.png" /><figcaption>Exemplo de Forward Test no Metatrader 5</figcaption></figure><p>Para executar um teste <em>Forward</em>, deve-se selecionar a opção “Para Frente”, no <em>Strategy Tester. </em>As opções: 1/2, 1/3, 1/4, representam a proporção do período Out of Sample, em relação a todo período selecionado. Neste caso, o período de teste é de 01/01/2016 até 01/08/2021. Caso seja selecionada a opção “1/2”, metade do período será destinado para otimização (In Sample) e a outra metade para validação (Out of Sample).</p><p>Também podemos informar um período específico, conforme a imagem. Neste exemplo, será executada uma otimização de 01/01/2016 até 01/01/2020 (In Sample), em seguida, será executado um backtest de 01/01/2020 até 01/08/2021 (Out of Sample). Ao final, conseguimos relacionar os melhores resultados da otimização, com os resultados não otimizados (Para Frente)</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*0uOXBm-N2nS7C01JiKDovQ.png" /><figcaption>Resultado “para Frente” da otimização</figcaption></figure><p>Note que em testes <em>Forward</em>, uma nova aba chamada “Resultados para frente” é gerada no Metatrader 5, nela conseguimos comparar os resultados da otimização com os resultados do período Out of Sample.</p><p>Novamente, o objetivo final de todo esse processo é encontrar configurações que sejam boas no período otimizado, mas que permaneçam lucrativas no período de validação. Dessa forma, diminuímos a possibilidade do resultado estar com overfit.</p><p><a href="https://dqlabs.com.br/">Trading</a></p><h4>Métricas Customizadas de Performance</h4><p>Agora vamos dar uma pausa nos testes para falar de uma das funcionalidades mais importantes do Metatrader 5.</p><p>Na <a href="https://medium.com/devtrader/otimizando-um-rob%C3%B4-no-metatrader-5-parte-1-1f254f2c515b">parte 1</a> desta série, comentamos para que serve uma função de avaliação.</p><p>É possível criar funções de avaliação customizadas. Isso é, você pode dizer para o metatrader exatamente como ele deve avaliar os resultados de cada execução de backtest/otimização e ranqueá-las de acordo com as suas regras específicas.</p><p>Embora, por padrão, já existam algumas métricas: Saldo máximo, Mínimo Rebaixamento, Fator de Recuperação, etc, todas elas possuem limitações. E você ter a possibilidade de informar seus próprios critérios de avaliação, pode gerar resultados bastante interessantes e direcionados ao que você está buscando.</p><p>Para isso, você deve ter acesso ao código do EA (Expert Advisor) e implementar suas regras na função <em>OnTester(). </em>Ao selecionar a opção “Critério Máximo do Usuário”, o Metatrader vai entender que ele deve aplicar a métrica customizada de performance para avaliar os resultados durante a otimização.</p><p>Eu costumo usar bastante este recurso, e estes são alguns exemplos de métricas que eu gosto de avaliar:</p><ul><li>Estabilidade da curva ao longo do tempo</li><li>CAGR (Compound annual growth rate)</li><li>Drawdown Médio ao longo de toda série</li><li>CAGR/Máximo Drawdown</li><li>CAGR/Média do Drawdown</li><li>Período de estagnação da curva</li></ul><p>Futuramente, pretendo escrever artigos específicos mostrando a implementação e aplicação de algumas dessas métricas.</p><h4>Testes de Robustez</h4><p>Como vimos anteriormente, separar o histórico de dados em período de teste e validação é uma boa prática para mitigar a chance de overfitting. Entretanto, apenas essa abordagem não é o suficiente para assegurar a robustez de uma estratégia. Precisamos executar outros tipos de testes com o mesmo objetivo: avaliar a probabilidade de um modelo performar bem, além dos dados otimizados.</p><p>Estes testes são conhecidos como <strong>Testes de Robustez.</strong></p><p>Em meu processo de desenvolvimento de robôs/estratégias automatizadas, basicamente aplico 4 testes principais, são eles: <strong>Distribuição de Resultados, Distribuição de Parâmetros, Walk Forward Analysis (WFA) e Simulação de Monte Carlo</strong>.</p><p>Cada um deles possui um objetivo específico e juntos são capazes de identificar vários cenários de overfitting, antes que uma estratégia seja executada em conta real.</p><p>É nesta fase do processo que boa parte das estratégias morre, ou deve ser ajustada para seguir em frente. Sem dúvida essa é a etapa mais importante do processo, pois evita de executarmos estratégias que perfomarão mal no live trading.</p><p>No próximo artigo da série, irei detalhar cada um dos testes de robustez.</p><p>Se você gostou desse tipo de conteúdo e gostaria de acompanhar, siga <a href="https://www.instagram.com/devtrader/">@devtrader</a> no instagram.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=fe1d76f0ba9e" width="1" height="1" alt=""><hr><p><a href="https://medium.com/devtrader/otimizando-um-rob%C3%B4-no-metatrader-5-parte-2-fe1d76f0ba9e">Otimizando um Robô no Metatrader 5 — Parte 2</a> was originally published in <a href="https://medium.com/devtrader">devtrader</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Otimizando um Robô no Metatrader 5 — Parte 1]]></title>
            <link>https://medium.com/devtrader/otimizando-um-rob%C3%B4-no-metatrader-5-parte-1-1f254f2c515b?source=rss----7001f66167af---4</link>
            <guid isPermaLink="false">https://medium.com/p/1f254f2c515b</guid>
            <category><![CDATA[otimização]]></category>
            <category><![CDATA[metatrader]]></category>
            <category><![CDATA[robôs]]></category>
            <category><![CDATA[backtest]]></category>
            <category><![CDATA[metatrader-5]]></category>
            <dc:creator><![CDATA[Kaio Valente]]></dc:creator>
            <pubDate>Tue, 13 Jul 2021 18:17:03 GMT</pubDate>
            <atom:updated>2022-12-29T12:40:06.404Z</atom:updated>
            <content:encoded><![CDATA[<h3>Otimizando um Robô no Metatrader 5 — Parte 1</h3><h4>Neste texto vou apresentar o objetivo de uma otimização em uma estratégia automatizada de trading, quais os problemas dessa abordagem e as boas práticas, utilizando a plataforma Metatrader 5.</h4><p>Quando falamos em aplicar uma Otimização em uma estratégia de trading, estamos falando em encontrar a melhor combinação de parâmetros dentro do conjunto de possibilidades possíveis. Isto é, testar a maior quantidade possível de combinações no passado, e auferir quais delas tiveram os melhores resultados. No Metatrader 5 conseguimos executar todo esse processo em poucos cliques.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*ZzTXCj01EkLTXU3xCOzVKQ.png" /></figure><h4>Objetivo de uma Otimização</h4><p>O objetivo principal de uma otimização é encontrar o melhor conjunto de parâmetros para a execução de uma estratégia. Mas qual a definição de <strong><em>“melhor”</em></strong>?</p><blockquote>Os parâmetros mais lucrativos? com menor risco? com maior taxa de acerto? com maior payoff? com a curva de capital mais estável?</blockquote><p>Essa pergunta deve guiar a primeira etapa de uma otimização: <strong>definir a função de avaliação.</strong></p><p>Quando executamos uma otimização, estamos dizendo para o algoritmo do Metatrader 5 ranquear os resultados com base na função de avaliação. Ou seja: “Encontre pra mim os melhores parâmetros dessa estratégia no passado, buscando pelo maior lucro final”, ou então, “Encontre pra mim os melhores parâmetros dessa estratégia no passado, buscando pelo menor rebaixamento na curva de capital”. É através da função de avaliação que o Metatrader 5 entende o que você está querendo buscar.</p><p><strong>Exemplo de uma Otimização</strong></p><p>Para executar uma otimização no Metatrader 5, na ferramenta <em>Strategy Tester</em>, você deve selecionar em “Otimização”: Algoritmo Completo Lento, ou Algoritmo baseado em genética rápida.</p><p>Na primeira opção, exatamente todas as possibilidades da análise combinatória serão executadas. Na segunda opção as combinações serão feitas por amostragem, de acordo com um algoritmo de seleção das combinações, este é um assunto complexo e não pretendo detalhar neste momento. Por hora, vamos usar o “Algoritmo baseado em genética rápida”, por ser mais rápido. Embora, se você está selecionando um range pequeno de parâmetros e variações, não haverá diferença entre as duas opções.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/717/1*Wz2fQc9evA6cFBmVulBfKA.png" /><figcaption>Exemplo de Otimização no Metatrader 5</figcaption></figure><p>Ao lado, você deve selecionar a função de avaliação, em outras palavras, qual métrica você gostaria que o Metatrader use para avaliar e ranquear os seus resultados. Vamos usar o Fator de Recuperação, que é a relação entre Lucro Líquido/Rebaixamento Máximo.</p><p>O próximo passo é selecionar quais variáveis você deseja otimizar e qual o range de cada parâmetro que você deseja testar.</p><p>Neste exemplo vamos usar uma estratégia que utiliza o indicador Bandas de Bollinger, que apresenta dois principais parâmetros: Período e Desvio.</p><p>Na imagem abaixo podemos selecionar todos os parâmetros que desejamos otimizar. Na coluna “Iniciar”, informamos o valor inicial do parâmetro que será testado. Na coluna “Passo”, informamos quanto cada iteração deverá variar o valor da variável em questão. Na coluna “Parar”, o valor final do parâmetro.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/741/1*Z95FbSPCvZdO5eA773SwYw.png" /><figcaption>Exemplo de parametrização de uma otimização</figcaption></figure><p>Na coluna “Passos”, podemos ver a quantidade de testes que serão executados para cada parâmetro selecionado. No exemplo acima, serão executados um total de 231 testes. (11 x 21). O algoritmo de otimização irá testar todas as combinações de Período e Desvio, variando o Período de 2 em 2, começando em 20 e terminando em 40. E o Desvio começando em 1 e terminando em 3, variando a cada 0.1.</p><p>Na imagem abaixo, podemos ver o resultado desta otimização. A melhor combinação de parâmetros, isto é, o maior fator de recuperação, foi executando a estratégia com as Bandas de Bollinger em 22 Períodos e 2.2 Desvios. O Metatrader também disponibiliza outras métricas para serem verificadas, como Lucro, Total de Negociações, Fator de Lucro, % de Rebaixamento, etc. Este teste foi executado em todo histórico de dados (aproximadamente 5 anos), o período da otimização deve ser definido na configuração do <em>Strategy Tester</em>.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*eAQMJOx99zxx6W6QYS2gBQ.png" /><figcaption>Resultado da Otimização</figcaption></figure><p><a href="https://dqlabs.com.br/">Trading</a></p><h4>Problemas de uma Otimização</h4><p>Aplicar um processo de otimização em uma estratégia automatizada parece resolver todos os problemas. Afinal, saberemos qual foi a melhor parametrização no passado, para uma determinada estratégia, agora é só executá-la e ganhar dinheiro em conta real.</p><blockquote>Não. Não é tão simples assim.</blockquote><p>Neste ponto, precisamos entender o conceito de <strong><em>Overfitting.</em></strong></p><p>Overfitting significa sobreajuste, também é comumente chamado de <strong><em>Curve Fit.</em></strong> Este cenário acontece quando o processo de otimização encontra um conjunto de parâmetros que apresentou uma curva de capital excelente no passado, mas não necessariamente tem capacidade de generalização para os dados do futuro, no live trading.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/218/1*cIJi_czyDx08e5C0xP8uUQ.png" /></figure><p>Em outras palavras, nem sempre o resultado de uma otimização será confiável o suficiente para afirmarmos que aquela melhor parametrização encontrada será a melhor para ganhar dinheiro em um mercado real, fora da simulação.</p><h4>Boas Práticas no processo de Otimização</h4><p>Para executar uma otimização e mitigar as chances de resultados com overfitting, podemos seguir algumas boas práticas, tais como:</p><ul><li><strong>Otimização por contexto</strong></li></ul><p>Separar os parâmetros otimizados por funcionalidades dentro da estratégia e otimizá-los por contexto, separadamente. Exemplo: parâmetros de indicadores, parâmetros de stop loss e take profit, parâmetros de manejo de posição (break even e stop móvel), etc.</p><ul><li><strong>Limitar o número de parâmetros otimizados simultaneamente</strong></li></ul><p>Otimizar no máximo 3 parâmetros ao mesmo tempo, preferencialmente 2. Quanto mais parâmetros você otimizar simultaneamente, maior a chance do algoritmo encontrar cenários com overfit.</p><ul><li><strong>Exclusão de outliers</strong></li></ul><p>Desconsidere resultados muito bons, totalmente discrepantes do restante dos resultados ou fora da média.</p><ul><li><strong>Encontrar clusters de configuração</strong></li></ul><p>Encontre regiões de parametrizações estáveis. Quanto maior for a estabilidade de resultados em torno de uma região, maior a chance de performar bem em dados desconhecidos (não otimizados).</p><ul><li><strong>Otimizar no maior histórico de dados disponível</strong></li></ul><p>Utilize a maior quantidade de ciclos de mercado possível, quanto mais informação você tiver sobre sua estratégia, maior será o entendimento do seu comportamento em diferentes regimes de mercado.</p><p>Esta foi a primeira parte da série sobre Otimizações. Na <a href="https://medium.com/p/otimizando-um-rob%C3%B4-no-metatrader-5-parte-2-fe1d76f0ba9e">segunda parte</a> trato sobre a importância de usar períodos de teste e validação (In Sample x Out of Sample), métricas customizadas de performance e testes de robustez.</p><p>Se você gostou desse tipo de conteúdo e gostaria de acompanhar, siga <a href="https://www.instagram.com/devtrader/">@devtrader</a> no instagram.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=1f254f2c515b" width="1" height="1" alt=""><hr><p><a href="https://medium.com/devtrader/otimizando-um-rob%C3%B4-no-metatrader-5-parte-1-1f254f2c515b">Otimizando um Robô no Metatrader 5 — Parte 1</a> was originally published in <a href="https://medium.com/devtrader">devtrader</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Analisando correlação em estratégias de trading]]></title>
            <link>https://medium.com/devtrader/analisando-correla%C3%A7%C3%A3o-em-estrat%C3%A9gias-de-trading-fde931952727?source=rss----7001f66167af---4</link>
            <guid isPermaLink="false">https://medium.com/p/fde931952727</guid>
            <category><![CDATA[python]]></category>
            <category><![CDATA[correlação]]></category>
            <category><![CDATA[trade]]></category>
            <category><![CDATA[robôs]]></category>
            <category><![CDATA[metatrader]]></category>
            <dc:creator><![CDATA[Kaio Valente]]></dc:creator>
            <pubDate>Mon, 23 Nov 2020 23:56:42 GMT</pubDate>
            <atom:updated>2022-11-18T12:19:59.111Z</atom:updated>
            <content:encoded><![CDATA[<h4>Neste texto vou mostrar como analisar a correlação de estratégias automatizadas com exemplos práticos para composição de portfólios vencedores</h4><p>Quando iniciamos no mundo de automação de estratégias nossa primeira preocupação é em desenvolver uma estratégia lucrativa no longo prazo, neste contexto, olhamos para métricas como: Fator de Lucro, Payoff, Expectativa Matemática, Drawdown, entre outras. Quando passamos de nível e começamos a ter uma série de estratégias lucrativas, nossa preocupação deve se voltar ao conjunto delas, é o que chamamos de portfólio de robôs. Cada vez mais as estatísticas isoladas de cada estratégia perdem importância e passamos a pensar no todo, com o objetivo de melhorar o desempenho do portfólio, sempre com o objetivo de diminuir o risco e maximizar o lucro. Para isso, devemos entender muito bem o conceito estatístico de correlação.</p><p>Em sua definição:</p><blockquote>Correlação significa uma semelhança ou relação entre duas coisas, pessoas ou ideias. É uma semelhança ou equivalência que existe entre duas hipóteses, situações ou objetos diferentes.</blockquote><blockquote>No campo da estatística e da matemática a correlação se refere a uma medida entre duas ou mais variáveis que se relacionam.</blockquote><p>No nosso contexto, queremos saber se uma estratégia é muito correlacionada com outra(s). Estratégias muito correlacionadas tendem a ganhar e perder juntas. Não é essa característica que buscamos em um portfólio de robôs, queremos que elas protejam-se entre si, enquanto uma estiver perdendo, quero que outras estejam ganhando, dessa forma, meu risco será mitigado.</p><p>Gosto muito de fazer a analogia com um time de futebol. Um portfólio balanceado de robôs é como um time muito bem equilibrado, cada um em sua posição. Imagine um time cheio de craques. Porém todos são atacantes, não há zagueiros, laterais, nem meios de campo, todos jogam de forma ofensiva, esse time provavelmente faria muitos gols. Em contrapartida também levariam muitos, já que não sabem se defender. Será que esse time seria vencedor jogando contra times mais equilibrados? Tenho minhas dúvidas.</p><p>O cenário é o mesmo quando falamos de robôs/estratégias. E como podemos montar um time (portfólio) equilibrado de robôs? Diversificando entre modelos operacionais: Seguidores de tendência; contra tendência; scalpers; etc.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/666/1*LCvQJdoNc0_2qO806dYx4Q.png" /></figure><p>Além de diversificar as estratégias, precisamos medir a correlação entre elas. Como podemos fazer isso?</p><p><a href="https://dqlabs.com.br/">Trading</a></p><h4>Correlação no Excel</h4><p>O jeito mais básico e simples, mas não tão eficiente, é usando o bom e velho Excel. Através da fórmula “CORREL”, podemos medir a correlação entre dois conjuntos de dados</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/557/1*XDoobhZvjzPGAjQO0QKxpg.png" /><figcaption>Correlação calculada no Excel</figcaption></figure><p>Para isso, só precisamos ter conjuntos com a mesma quantidade de dados. Neste exemplo estamos comparando o resultado da Variável A com a Variável B. Em azul, temos baixa correlação, em cinza correlação inexistente e em laranja alta correlação. Utilizando coeficiente de Pearson, este valor vai de -1 até 1.</p><p>Utilizei nesse exemplo um range de valores de 1 a 50. Veja que no primeiro exemplo, os resultado são opostos, por conta disso, temos uma correlação negativa (-0,92). Já no segundo exemplo, os resultados mostram-se aleatórios, sem relação entre si (-0,03). Já no terceiro, são muito parecidos, resultados próximos em ambas as variáveis, caracterizando alta correlação (0,97).</p><p>Para trazer este exemplo pro nosso contexto, podemos pegar os resultados de vários trades e agrupá-los por estratégias: Estratégia A e Estratégia B, utilizando a função “CORREL(Conjunto 1; Conjunto 2)” saberemos a correlação entre elas. Lembre-se que os conjuntos precisam ter a mesma quantidade de dados. Exemplo: 500 trades para Estratégia A e 500 trades para Estratégia B, ou o resultado de 100 dias para a Estratégia A e Estratégia B.</p><h4>Correlação em Python</h4><p>Se você tem alguma familiaridade com linguagens de programação, podemos fazer isso de forma bem simples utilizando Python. Carregando um <em>pandas dataframe</em> com os dados das estratégias que seja comparar e usando a função corr()</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/660/1*y1lcUkYQ3eEARKhxIKuSKw.png" /></figure><p>Nesta matriz de correlação, a análise é feita comparando Eixo X com Eixo Y: CONTRA TENDENCIA x TREND; CONTRA TENDENCIA x SCALPER, e assim em diante.</p><h4>Correlação no BotSpot</h4><p>Para facilitar a vida de quem deseja analisar a correlação de várias estratégias, mas não quer ter o trabalho de organizar todo esse conjunto de dados, é possível analisar a correlação de vário robôs simulando um portfólio no <a href="https://botspot.com.br/">BotSpot</a>.</p><p>Para exemplificar a importância da correlação na composição de um portfólio, vou simular 2 portfólios, com apenas 2 estratégias cada. Neste cenário, vamos usar a métrica <strong>“Fator de Recuperação”</strong> como medida de avaliação para estabelecer a melhor estratégia/portfólio.</p><p>Fator de Recuperação é a relação entre Lucro / Drawdown. Em outras palavras, mede o nível de lucro em relação ao risco. Quanto maior seu valor, significa que a estratégia lucrou mais em relação ao sua perda máxima.</p><p>Para compor os portfólios, vamos usar 3 estratégias diferentes, todas com dados carregados de 10/15 até 10/2020:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*2nJzobDJb-jqfOcQaCjc-Q.png" /><figcaption>Scorpion 15 — Fator de Recuperação: 11.90</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*XuaOLljTXCGkKWxIXCqX2A.png" /><figcaption>Fisherman — Fator de Recuperação: 14.84</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*pV5ZeDxyOt5eSdqu7OtrhA.png" /><figcaption>Trench — Fator de Recuperação: 13.25</figcaption></figure><ul><li>Scorpion 15 — Fator de recuperação 11.90</li><li>Fisherman — Fator de recuperação: 14.84</li><li>Trench — Fator de recuperação: 13.25</li></ul><p>A composição dos portfólios, será a seguinte:</p><ul><li>Portfólio 1: Scorpion 15 e Fisherman</li><li>Portfólio 2: Scorpion 15 e Trench</li></ul><p>Note que a estratégia Fisherman tem um Fator de Recuperação (FR) maior que o da estratégia Trench. Então, esperamos que o Portfólio 1 apresente um resultado melhor que o Portfólio 2. Vamos aos resultados:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*oq4XEJ-DHxE2SHQPoR0fhg.png" /><figcaption>Portfólio 1 — Scorpion 15 x Fisherman — Fator de recuperação: 19.15</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*l1OP2u560P4QcIz6Q8k3JA.png" /><figcaption>Portfólio 2 — Scorpion 15 x Trench — Fator de recuperação: 19.69</figcaption></figure><p>Podemos observar alguns pontos importantes:</p><ul><li>O Portfólio 1 lucrou mais que o Portfólio 2. (R$ 35.132 x R$ 30.996)</li><li>O Portfólio 1 correu mais risco (Drawdown) que o Portfólio 2. (R$ -1.835 x R$ -1.574)</li></ul><p>Entretanto, como estamos levando o Fator de Recuperação como métrica principal de comparação, o Portfólio 2 ganha do Portfólio 1, por uma pequena diferença: FR 19.69 x FR 19.15</p><blockquote>Mas como isso foi possível, já que no Portfólio 1, está a estratégia Fisherman, que tem melhores resultados que a estratégia Trench do Portfólio 2?</blockquote><p>Resposta: por conta da correlação. Vamos analisá-las:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/825/1*RkjrVtMN78CFAJxVoPm5rQ.png" /><figcaption>Correlação do Portfólio 1</figcaption></figure><p>Veja que a estratégia Scorpion 15 é altamente correlacionada com a estratégia Fisherman. Isso indica que quando uma está perdendo a outra também tende a perder. Dessa forma, aumentando o Drawdown do portfólio.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/819/1*brXUFxEig8iLE-vfhC7HAA.png" /><figcaption>Correlação do Portfólio 2</figcaption></figure><p>Já no Portfólio 2, a estratégia Scorpion 15 não tem correlação com a estratégia Trench. Logo, em períodos de drawdown, elas não costumam perder juntas, gerando uma curva de capital mais suavizada.</p><h4>Conclusão</h4><p>Fazer esse tipo de análise para um portfólio de robôs é essencial para a construção de times vencedores no longo prazo. Para isso, a diversificação de estratégias é o ponto chave.</p><p>Você pode executar 50 robôs em um portfólio e ter resultados melhores rodando apenas 5. Tudo vai depender da correlação entre eles.</p><p>Se você gostou desse tipo de conteúdo e gostaria de acompanhar, siga <a href="https://www.instagram.com/devtrader/">@devtrader</a> no instagram.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=fde931952727" width="1" height="1" alt=""><hr><p><a href="https://medium.com/devtrader/analisando-correla%C3%A7%C3%A3o-em-estrat%C3%A9gias-de-trading-fde931952727">Analisando correlação em estratégias de trading</a> was originally published in <a href="https://medium.com/devtrader">devtrader</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Processo de desenvolvimento de um robô/estratégia de trading]]></title>
            <link>https://medium.com/devtrader/processo-de-desenvolvimento-de-um-rob%C3%B4-estrat%C3%A9gia-de-trading-d301ad7e4b4f?source=rss----7001f66167af---4</link>
            <guid isPermaLink="false">https://medium.com/p/d301ad7e4b4f</guid>
            <dc:creator><![CDATA[Kaio Valente]]></dc:creator>
            <pubDate>Thu, 15 Oct 2020 15:55:24 GMT</pubDate>
            <atom:updated>2022-11-18T12:20:30.867Z</atom:updated>
            <content:encoded><![CDATA[<h4>Vou apresentar um passo a passo do processo de desenvolvimento que eu uso para desenvolver novos robôs, da concepção da estratégia até a execução em conta real.</h4><p>No mundo da programação existe uma área conhecida como <em>Engenharia de Software</em>, na qual alguns processos devem ser seguidos para que se construa sistemas de maneira eficaz, confiável e metodológica. Como profissional da área, adaptei alguns processos e trouxe para o mundo do trading algumas etapas para me ajudar a construir estratégias/robôs de investimento que sejam lucrativos no longo prazo. Vou apresentá-las a seguir.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*IWKGSeEbx91b3WmZ77Gr4g.jpeg" /><figcaption><a href="https://www.freepik.com/vectors/idea">https://www.freepik.com/vectors/idea</a></figcaption></figure><ol><li>Codificar a estratégia inicial, gatilhos de entrada/saída</li><li>Teste de funções secundárias: Break Even, Stop Móvel, Horários de negociação, etc…</li><li>Otimização com Walk Forward Analysis (WFA)</li><li>Análise de resultados/estatísticas</li><li>Teste em conta demo</li><li>Validação e cruzamento de resultados: Execução Real x Backtest</li><li>Executar em conta conta real com lote mínimo</li><li>Acompanhar e monitorar</li><li>Simular portfólio de estratégias/robôs</li><li>Planejar gerenciamento de risco</li></ol><p>Vou detalhar cada uma das etapas</p><h3>Codificar a estratégia inicial, gatilhos de entrada/saída</h3><p>Este é o ponto de partida de qualquer estratégia. Você já deve ter em mente as regras da estratégia que deseja testar, quais serão os critérios para entrada de novas operações, quais os critério de saída. Quais indicadores usar ou qual modelo quantitativo usará como tomada de decisão.</p><p>Nesta etapa é mão na massa. Testar o código usando o modo visual do strategy tester do metatrader ajuda a encontrar possíveis problemas, você consegue identificar se as entradas e saídas estão acontecendo nos pontos previstos. Outro ponto importante nesta etapa é saber debugar seu código, para encontrar e corrigir possíveis bugs de codificação.</p><h3>Teste de funções secundárias: Break Even, Stop Móvel, Horários de negociação</h3><p>Após a lógica de compra e venda estar concluída, começo a testar vários cenários que comumente são usados em estratégias de trading, tais como:</p><p><strong>Break Even</strong>: Mover o stop da operação para o ponto de entrada, quando o preço se movimenta a favor da operação.</p><p><strong>Stop Móvel</strong>: Mover o stop da operação para além do ponto de entrada, quando o preço se movimenta a favor da operação</p><p><strong>Horários de negociação</strong>: Testar horários de inicio para abertura de novas ordens, horário limite para abertura de ordens, horário de encerramento de ordens, etc.</p><p>Essas são as funcionalidades mais básicas, mas dependendo da complexidade da estratégia, inúmeras funcionalidades podem ser testadas nesta etapa, a exemplo: limites de ganho/perda, aumento de posição (a favor ou contra), etc.</p><p>Nesta etapa eu não estou preocupado em descobrir qual é o melhor ponto para ativar meu break even, ou qual o melhor ponto para mover meu stop móvel, ou quais os melhores horários de negociação da estratégia. Minha intenção é apenas codificar estas funcionalidades da maneira correta. Estas perguntas serão respondidas na fase de otimização.</p><p><a href="https://dqlabs.com.br/">Trading</a></p><h3>Otimização com Walk Forward Analysis (WFA)</h3><p>Esta é a etapa mais importante de todo o processo. Se esta etapa não for feita da maneira correta, o resultado pode ser um falso positivo, um robô que parece ter bons resultados nos testes, mas que não irá performar bem em conta real. Em outras palavras, na otimização é possível encontrar o que chamamos de overfitting.</p><p>A otimização é o processo de encontrar os melhores parâmetros para uma estratégia. O próprio metatrader faz uma análise combinatória entre os parâmetros especificados para exibir os resultados de cada um deles. E aqui está a maior confusão entre os iniciantes: O que é o melhor parâmetro? A resposta parece simples, é o que ganha mais dinheiro. Errado.</p><p>Os melhores parâmetros são os que deixam sua estratégia mais robusta. Em outras palavras, é o que faz a sua curva de capital ser a mais estável possível ao longo do tempo. E muitas vezes, os parâmetros mais lucrativos são exatamente os que não devem ser buscados, pois ali pode estar escondido o overfitting.</p><p>Walk forward analysis é uma técnica que implementa conceitos que ajudam a diminuir a possibilidade de super otimização. Em resumo, consiste no seguinte: Os parâmetros são otimizados em parte do período selecionado (in-sample, para trás) em seguida os resultados são testados em um período para frente (out of sample). Dessa forma, os resultados obtidos tendem a ser mais realistas, pois não foram otimizados em todo o período disponível. No metatrader, usamos a opção “Para frente”.</p><h3>Análise de resultados/estatísticas</h3><p>De posse dos resultados da otimização, agora o objetivo é analisar os relatórios que apresentam os melhores resultados, de acordo com suas necessidades. As opções quem podem ser buscadas são basicamente: Maiores potencial de lucro, consequentemente maior risco (drawdown); Baixo risco, menor potencial de lucro; ou um equilíbrio entre lucro e risco, esta é a opção que eu busco.</p><p>Os principais dados que analiso são: fator de lucro, drawdown, fator de recuperação e relação taxa de acerto / média de ganhos e perdas. Este processo foi detalhado <a href="https://medium.com/devtrader/entendendo-um-backtest-31945d601c1f">aqui</a>.</p><h3>Teste em conta demo</h3><p>Não há muito o que detalhar nesta etapa, o objetivo é executar o robô em conta demo para verificar se tudo que foi programado está de acordo com o esperado. A ideia é encontrar bugs de programação e validar a execução da estratégia em si. Porém, este passo tem uma importância fundamental na etapa seguinte.</p><h3>Validação e cruzamento de resultados: Execução Real x Backtest</h3><p>No meu processo de desenvolvimento esta etapa é essencial pra validação da estratégia. Meu objetivo é comparar o resultado da execução real de um dia específico com o backtest do mesmo dia. Não espero que os valores financeiros sejam exatamente os mesmo, por questões do mercado, book, slippage, etc. Mas quero que a quantidade de trades seja a mesma, as entradas, stops, e todas as outras funcionalidades devem estar de acordo com o esperado. O que acontece em uma situação real de mercado deve acontecer no backtest.</p><p>Dessa forma, eu tenho certeza que meu backtest é confiável e posso acreditar nas estatísticas que foram analisadas. Repito este processo por alguns dias, até chegar em uma conclusão, positiva ou negativa.</p><h3>Executar em conta conta real com lote mínimo</h3><p>Assim que você chegar a conclusão que os dados do seu backtest são confiáveis e as estatísticas auferidas são realistas, você está pronto pra por o robô pra executar em conta real. Faço isso sempre com o lote mínimo (volume financeiro), afinal o processo de validação ainda não acabou.</p><h3>Acompanhar e monitorar</h3><p>Esta etapa também é fundamental e muitas vezes negligenciada, você acabou de colocar uma estratégia nova para rodar e agora dinheiro de verdade está em jogo. Ainda podem acontecer problemas não previstos por você em backtest ou conta demo, como problemas comunicação com a corretora, quedas de conexão, gaps, ou qualquer outro tipo de problema inerente ao mercado.</p><p>Para acompanhar e monitorar meus robôs eu uso o board real time do <a href="https://botspot.com.br/">BotSpot</a>. Lá é exibido em tempo real, com atualização automática todas as operações abertas e encerradas da minha conta. Dessa forma, consigo acompanhar se alguma coisa não esperada está acontecendo. Abaixo algumas imagens:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*1fV7YzqD9jcqGXz4dWCvfg.png" /><figcaption>Operações abertas e principais estatísticas da conta (BotSpot)</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*jlYQyIwBGzYmX3lXQ3ngaw.png" /><figcaption>Operações encerradas no dia (BotSpot)</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/540/1*g_WKlnzFeT_ifVJzyU3nYw.png" /><figcaption>Timeline de operações (BotSpot)</figcaption></figure><h3>Simular portfólio de estratégias/robôs</h3><p>Se você está criando sua primeira estratégia, essa etapa não é necessária. Porém, se você usa mais de um robô é essencial que você saiba como todos os seus robôs irão performar em conjunto. Você precisa entender a correlação entre as estratégias, se seu risco está aumentando ou diminuindo adicionando uma nova estratégia, para poder planejar o seu gerenciamento de risco. Este processo eu também faço através do <a href="https://botspot.com.br/">BotSpot</a>.</p><h3>Planejar gerenciamento de risco</h3><p>Esta é a etapa final, onde você vai calcular quanto de capital você precisa pra rodar seu portfólio, qual será o seu potencial de lucro e quanto de risco você gostaria de se expor, baseado nas estatísticas auferidas na simulação do portfólio.</p><p>Se você gostou desse tipo de conteúdo e gostaria de acompanhar, siga <a href="https://www.instagram.com/devtrader/">@devtrader</a> no instagram.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=d301ad7e4b4f" width="1" height="1" alt=""><hr><p><a href="https://medium.com/devtrader/processo-de-desenvolvimento-de-um-rob%C3%B4-estrat%C3%A9gia-de-trading-d301ad7e4b4f">Processo de desenvolvimento de um robô/estratégia de trading</a> was originally published in <a href="https://medium.com/devtrader">devtrader</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[A melhor forma de medir o risco de uma estratégia de trading]]></title>
            <link>https://medium.com/devtrader/a-melhor-forma-de-medir-o-risco-de-uma-estrat%C3%A9gia-de-trading-2b17348390c?source=rss----7001f66167af---4</link>
            <guid isPermaLink="false">https://medium.com/p/2b17348390c</guid>
            <dc:creator><![CDATA[Kaio Valente]]></dc:creator>
            <pubDate>Thu, 27 Aug 2020 23:29:06 GMT</pubDate>
            <atom:updated>2023-04-19T16:02:07.756Z</atom:updated>
            <content:encoded><![CDATA[<h4>Vamos fazer uma simulação de monte carlo para descobrir o drawdown médio baseado em milhares de simulações</h4><p>Uma das principais vantagens em desenvolver uma estratégia de trading automatizada é poder analisar seu comportamento baseado em dados passados. Porém uma das frases mais conhecidas no mercado é</p><blockquote>Rendimentos passados não são garantia de lucros futuros</blockquote><p><em>Ou qualquer variação dela…</em></p><p>Sabemos que resultados de backtests não são 100% precisos. Além das questões de <em>overfitting, </em>quando uma curva de capital é ajustada ao cenário em que ela foi testada. Embora existam técnicas como <em>walk forward analysis </em>(WFA), para mitigar essas questões, ainda assim, testes no passado não podem garantir performance semelhante no futuro. Seus dados e as métricas coletadas servem para ancorar nossa expectativa de resultados em um mercado real, ou seja, em um período posterior ao teste.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*bMpilKM7avhJahuEKfiQ1g.jpeg" /><figcaption><a href="https://www.freepik.com/free-photo/risk-word-scrabble-tiles_4974611.htm#page=1&amp;query=risk&amp;position=16">Background photo created by freepik</a></figcaption></figure><p>Vou apresentar agora uma das abordagens que eu utilizo nas minhas estratégias para aumentar a robustez e a confiança nos resultados obtidos em backtest.</p><p>Um dos principais pilares na prática do trading está no gerenciamento de risco e no controle de posição. Em outras palavras, o mais importante não é saber quanto eu posso ganhar. Mas, quanto eu posso perder?</p><p>Existem diversas formas de chegar nesse número. A mais comum é usar um fator de multiplicação em cima do rebaixamento máximo (drawdown) auferido em backtest. Vejamos um exemplo:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Bk2Yb_NBx4XcrZO0zxbhKA.png" /><figcaption>Estatísticas do portfólio</figcaption></figure><p>Estes resultados são do meu portfólio de robôs, nos últimos 5 anos, utilizando 1 contrato por robô no ativo mini indice (B3).</p><p>Podemos observar que o drawdown máximo foi de R$ -2.773. Então, o meu risco máximo rodando este portfólio foi de aproximadamente 3 mil reais.</p><p>De posse desses dados, um iniciante no mercado pode pensar da seguinte forma:</p><blockquote>“Eu preciso de apenas 3 mil reais para obter estes retornos”</blockquote><p>De fato, este pensamento não está errado, mas vou mostrar que a realidade não é tão simples assim.</p><p><a href="https://dqlabs.com.br/">Trading</a></p><p><a href="https://medium.com/data-hackers/simula%C3%A7%C3%A3o-de-monte-carlo-em-estrat%C3%A9gias-de-trading-68074da67ca4">Neste artigo</a> apresentei a simulação de Monte Carlo. Ela consiste em realizar diversas combinações baseadas nos dados existentes, buscando simular padrões que podem facilmente acontecer no futuro.</p><p>Coletei os mesmos resultados apresentados na imagem acima e rodei 1.000 simulações pra gerar curvas de capital totalmente novas, baseadas nos dados que foram auferidos no passado. Em seguida, calculei o drawdown máximo de cada uma dessas curvas</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*g6KR5lyi6QOWFzQLmLyWtg.png" /><figcaption>Simulação de Monte Carlo</figcaption></figure><p>Claramente é possível visualizar que cada curva de capital tem um rebaixamento diferente. Meu objetivo é auferir a média destes rebaixamentos. Fiz um script em python para isso. Veja os resultados:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/233/1*k9ULfYFPP704em_2RTqSEQ.png" /></figure><p>Após 1.000 simulações, com base em todos os trades dos últimos 5 anos:</p><p>O melhor cenário foi um drawdown de R$ -1.761. Na melhor das hipóteses esse seria o máximo de capital que eu perderia em algum momento da execução da estratégia.</p><p>O pior cenário foi uma perda máxima de R$ -6.772. Note que foi mais do que o dobro do apresentado no backtest inicial.</p><p>Mas o resultado que eu estava buscando era a média do drawdown, que foi de R$ -3097,81. Ou seja, eu posso me basear neste valor para aplicar um fator de multiplicação nele. É isso o que eu faço.</p><p>Este é um ponto pessoal e depende do apetite ao risco de cada pessoa. Mas eu, gosto de assumir 30% de risco para o meu capital especulativo, isso quer dizer que para rodar esse portfólio eu precisaria de no mínimo 10 mil reais. Desta forma, meu risco médio seria de 30% do meu capital (R$ -3097,81). Ficou claro?</p><h4>Conclusões</h4><p>Lembram do iniciante que considerou alocar exatamente o drawdown máximo auferido em backtest? Nas simulações tivemos o pior rebaixamento muito maior do que aquele drawdown inicial. Pior ainda, 46,9% (469 das 1.000 simulações) dos resultados de drawdown foram maiores do que R$ -3.000. Ou seja, essa pessoa teria quase 50% de chance de quebrar a conta e precisar aportar mais capital para continuar executando a estratégia.</p><p>Entender este aspecto é ponto chave pra você nunca mais passar aperto no trading, seja em operações manuais ou automatizadas.</p><p>E cuidado ao contratar qualquer robô ou serviço por ai, onde a pessoa que está lhe vendendo não sabe dizer qual é o risco máximo inerente à execução de determinada estratégia.</p><p>Se você gostou desse tipo de conteúdo e gostaria de acompanhar, siga <a href="https://www.instagram.com/devtrader/">@devtrader</a> no instagram.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=2b17348390c" width="1" height="1" alt=""><hr><p><a href="https://medium.com/devtrader/a-melhor-forma-de-medir-o-risco-de-uma-estrat%C3%A9gia-de-trading-2b17348390c">A melhor forma de medir o risco de uma estratégia de trading</a> was originally published in <a href="https://medium.com/devtrader">devtrader</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
    </channel>
</rss>