10 de novembro de 2019

CANTOR 3.12 –  PLATAFORMA DE OTIMIZAÇÃO

por Hindemburg Melão jr.

 

O Saturno V T-274f  quando otimizado em Cantor 3.12, no período de 1/1/1993 a 1/1/2009, e validado em backtest tick-by-tick, usando série histórica da Dukascopy, entre 1/7/2004 e 15/10/2019, com atrasos nas execuções variando entre 5 e 6 minutos para cada grupo de 20 operações, obteve, de longe, os melhores resultados entre todas as versões e configurações do Saturno V em tais condições. 
 
Quando os volumes negociados eram menores, e as execuções eram praticamente instantâneas, mesmo assim nunca houve uma configuração com resultados comparáveis aos desta. A nova versão já está nas contas reais e as expectativas são excelentes, não apenas em relação à performance, mas também em relação à uma redução substancial no período de máxima estagnação. 
 

 

Grande parte dos méritos por esses resultados são devidos ao excepcional trabalho desenvolvido por João Antonio e a equipe que ele selecionou, contratou e está coordenando. Esta equipe trabalha na plataforma “Cantor”. O nome da plataforma é uma homenagem ao matemático Georg Cantor, autor da teoria dos conjuntos transfinitos e do conceito de cardinais infinitos. O número Aleph-0 é o menor cardinal infinito, Aleph-1 é o segundo menor cardinal infinito e é infinitamente maior que Aleph-0. 
 
Até onde pudemos apurar, Cantor é a melhor e mais completa plataforma para otimização de estratégias que existe. Com apenas 2 anos de desenvolvimento, já ultrapassou com larga margem todas as melhores ferramentas que existiam nesse segmento, e continua sendo aprimorada diariamente. 
 
Cantor ficou “quase” pronta para uso no início de 2019, mas ainda havia alguns detalhes a serem finalizados antes de que se tornasse plenamente funcional. Ao longo dos últimos meses, paralelamente a esses detalhes, continuaram a ser implementados diversos outros recursos. Há poucos dias, os itens que estavam pendentes foram finalizados e Cantor começou a ser utilizado nas otimizações do
Saturno V. As impressões preliminares são absolutamente extraordinárias. 
 
No primeiro dia de uso, em cerca de 20h de otimização, Cantor conseguiu encontrar genótipos melhores do que os melhores já encontrados com Metatrader nos últimos 9 anos! Mas não apenas isso. É provável que nos próximos 90 anos ou mesmo 900 anos, o Metatrader continuasse não encontrando genótipos tão bons quanto os encontrados com o uso de Cantor em menos de 1 dia. Isso porque o número de possibilidades a serem testadas é gigantesca, e a maneira como o Metatrader tenta reduzir o número total de possibilidades a uma seleta fração mais promissora, que merece ser testada, é bastante simplório e bem pouco eficiente, se comparada à maneira como Cantor realiza essa tarefa. 
 
Não estou dizendo que o Metatrader seja uma ferramenta ruim. Na verdade, é uma excelente ferramenta, uma das melhores do mundo. Porém quando se tenta comparar com Cantor, a diferença é abismal. O Metatrader seria como uma Ferrari Enzo ou um Bugatti Chiron, enquanto Cantor é como uma aeronave HTV-2 (Hypersonic Technology Vehicle 2), que além de ser 50 vezes mais rápida que uma Ferrari ou Bugatti, possibilita chegar onde não é possível com um veículo terrestre, fazer manobras que não são possíveis com veículos terrestres, além de vários recursos extras. Essa analogia não é de todo adequada, porque o HTV-2 não faz tudo que uma Ferrari faz, mas Cantor faz tudo que o MT4 faz, faz melhor e mais rápido, e ainda faz muita coisa que o MT4 não faz. 
 
Em breve pretendo gravar um vídeo mostrando na prática algumas das principais funcionalidades de Cantor. Nesse artigo farei apenas algumas comparações com o Metatrader 4 e Metatrader 5. 
 
Antes de tudo, acho importante fazer uma breve comparação entre Metatrader 4 e Metatrader 5, para explicar porque o MT4 é superior ao MT5 e continua sendo mais utilizado que o MT5, embora o MT5 já esteja no Mercado há mais de 8 anos. Se você já é usuário experimente dessas ferramentas, pode pular essa parte e começar a leitura no subtítulo em que Cantor é comparado ao Metatrader. Se você nunca utilizou o Metatrader para otimizar estratégias nem implementou estratégias em MQL4, pode ser de seu interesse saber um pouco mais sobre os poderosos recursos que o Metatrader oferece: 
 
O MT4 foi lançado em 2005 e, desde então, ocupa uma posição de destaque entre as principais plataformas de investimentos. Grande parte do prestígio de que desfruta se deve ao seu otimizador equipado com um algoritmo genótipo. Esse recurso possibilita automatizar qualquer estratégia, bem como testá-la exaustivamente, de forma sistemática, ao longo de várias décadas, e verificar se ela funciona adequadamente antes de usá-la em contas reais. Se a pessoa aprende uma estratégia num livro, ou num site, ou num curso, ela pode implementar essa estratégia usando a linguagem MQL4, pode importar uma série histórica com vários anos de cotações reais, e testar se a estratégia realmente produziria lucros se fosse executada naquele histórico. 
 
Isso representa uma vantagem muito importante, porque a pessoa não precisa simplesmente acreditar que a estratégia recomendada no livro funciona, não precisa acreditar nos exemplos apresentados no livro ou nos relatos de pessoas que usaram essa estratégia durante alguns meses. A pessoa pode testar por si mesma, utilizando dados históricos reais, e verificar quais resultados essa estratégia produziria ao longo de vários anos ou décadas, e então decidir se seria vantajoso ou não utilizar essa estratégia numa conta real. 
 
Mas não apenas isso. A pessoa pode testar também variações nos parâmetros da estratégia. Digamos que um livro recomenda o uso de IFR da seguinte forma: quando IFR<20, compre. Quando IFR>80 venda. A pessoa pode utilizar dados históricos de EURUSD, minuto a minuto, desde 1986, e verificar se essa estratégia realmente produz lucros. 
 
Essas séries históricas são registros gigantescos, contendo informações sobre 4 cotações (abertura, máximo, mínimo e fechamento) a cada minuto, desde 1986, com data, horário e preço. São mais de 17 milhões de linhas de informação com 5 colunas em cada linha. Isso permite realizar testes exaustivos, detalhados e bastante completos. 
 
A pessoa pode começar testando em timeframe de 1 minuto e colocar para rodar em 1/1/1987 até 01/11/2019. O MT4 preencherá os candles de 1 minuto com ticks e executará a estratégia seguindo rigorosamente os critérios estabelecidos, atualizando o cálculo do IFR a cada tick. Toda vez que o IFR ficar abaixo de 20, o MT4 registrará uma operação de compra, com data, horário, cotação, volume negociado, e atualizará o balanço da carteira depois da operação. Cada vez que IFR ficar acima de 80, o MT4 registrará uma operação de venda, com data, horário, cotação, volume negociado, e atualizará o balanço da carteira depois da operação. 
 
O MT4 prosseguirá lendo cada uma das 17 milhões de cotações, desde 1987, atualizando os cálculos de IFR a cada minuto (ou cada tick, dependendo da configuração), simulando as execuções das compras e vendas cada vez que os critérios forem atendidos e registrando quanto cada operação produziu de lucro ou de prejuízo, datas, horários e cotações em que cada operação foi executada. Para estratégias mais complexas, pode levar vários minutos ou horas. Ao terminar de testar a estratégia no histórico inteiro, de quase 33 anos, o MT4 permite, com poucos cliques no mouse, gerar um relatório detalhado com todas as datas, horários, cotações, lucros e prejuízos de cada operação, bem como o balanço final e algumas estatísticas. Também exibirá um gráfico com evolução do balanço da carteira ao longo desses 33 anos. Todo esse processo dura alguns segundos, e a pessoa consegue saber quanto de lucro ou de prejuízo ela teria se tivesse utilizado determinada estratégia naquele período de 33 anos. Tudo isso sem precisar correr riscos com dinheiro real. 
 
O gráfico abaixo mostra um exemplo de backtest utilizando o Metatrader 4 para executar uma estratégia baseada em IFR com 9 períodos, comprando quando IFR<30 e vendendo quando IFR>70, em EURUSD, timeframe 15 minutos, usando cotações reais minuto a minuto, entre 1/1/2019 e 4/10/2019, com spread = 0, corretagem = 0, swap = 0. 

 

O resultado parece muito animador e com uma estratégia bem simples. O lucro gerado foi de 13,28% e ainda nem terminou o ano. O máximo drawdown foi de apenas 2,33%, com cerca de 72% de operações lucrativas. Uma pessoa que tivesse começado a operar exatamente em janeiro de 2019 e usando rigorosamente essa estratégia, poderia ficar com uma excelente impressão, e com a ilusão de que é muito fácil ganhar no Mercado. Mas vamos ver como essa mesma estratégia teria performado para alguém que tivesse começado a operar 1/1/2015: 

 

O resultado líquido ainda estaria positivo, mas o total de lucro acumulado em quase 5 anos seria 6,54%, muito menor do que o lucro em 10 meses de 2019, enquanto o máximo drawdown seria de 17,06%, muito maior que o máximo drawdown de 2019. Além disso, a ilusão da curva crescente seria demolida com uma visão bem mais realista de oscilações aproximadamente aleatórias para cima e para baixo, com alguns períodos de ganhos, outros de perdas. Isso deixa claro que os ganhos de janeiro a outubro de 2019 teriam sido por sorte, devido a flutuações aleatórias. Basta verificar que um fato semelhante ocorreu entre setembro de 2015 e agosto de 2016:

 

Alguém que tivesse começado a usar essa mesma estratégia em 1/9/2015 e continuasse até 1/8/2016 teria lucrado 20,63% com máximo drawdown de 6,89%. O que podemos constatar é que 10 meses, ou até mais de 1 ano, é muito pouco para que se possa avaliar a qualidade de uma estratégia. Na verdade, até um período de alguns anos pode ser insuficiente. 
 
Para ter uma ideia melhor sobre a eficiência da estratégia, é necessário testá-la a longo prazo. Vejamos como ela performa entre 1/1/1987 a 4/10/2019: 
 

 

Agora os fatos começam a ficar bastante claros. A longo prazo, tomando como referência um intervalo de quase 33 anos e mais de 10.000 operações realizadas, embora haja alguns períodos com lucros, e esses períodos podem durar vários meses ou até alguns anos, o resultado predominante são as perdas. 
 
Até aqui, já se pode perceber a gigantesca vantagem de testar uma estratégia no Metatrader, em vez de simplesmente confiar nas recomendações de um livro ou de um site. Bem como já se pode notar o perigo que seria usar essas recomendações antes de testá-las. 
  
Diante a esses resultados, alguém poderia se perguntar: bom, se a estratégia gerou prejuízo a longo prazo, se utilizar os critérios opostos ela deveria gerar lucro? Façamos um teste: em vez de comprar quando IFR<30 e vender quando IFR>70, vamos comprar quando IFR>70 e vender quando IFR<30. O resultado é apresentado no gráfico abaixo: 

 

Ok, agora gerou um pouco de lucro, cerca de 28,45% ao longo de 33 anos, menos de 1% ao ano. Mas por que gerou 28% de lucro se a estratégia oposta gerou 46% de prejuízo? Isso acontece devido à assimetria entre ganhos e perdas percentuais. Se perder 10% de $ 100 ficará com 90%. Se ganhar agora 10% de $ 90, isso representará $ 9, portanto subirá para $ 99. Para conseguir alcançar os anteriores $ 100 precisaria ganhar 11,11%. Se a perda tivesse sido de 20%, cairia para $ 80, então precisaria ganhar 25% para voltar ao valor inicial. Mas ainda assim, 1-1/(1+0,46) ~ 0,315. Por que o lucro foi 28% em vez de 31,5%? Isso acontece porque as operações representavam variações discretas na carteira. Se fossem variações contínuas, então o lucro seria com a estratégia inversa seria mais perto de 31,5%. 
  
Portanto, mesmo usando spread = 0, corretagem = 0, swaps = 0, o efeito predominante são as perdas. Para que fosse possível igualar ganhos e perdas, seria necessário aplicar valores fixos de lotes, em vez de utilizar uma porcentagem fixa da carteira. Mas o uso de lotes fixos conduz à ruína, conforme já foi demonstrado em Teoria dos jogos. O Critério Kelly, por exemplo, serve justamente para (teoricamente) evitar o risco de ruína e maximizar os lucros em casos nos quais se tem uma probabilidade fixa de sucesso em cada operação (o que não é aplicável ao Mercado). 
 
Digamos que a pessoa tem $ 100 e investe sempre $ 10 em cada operação. Se ela enfrentar uma série de 10 perdas consecutivas, ela perderá tudo. Mas se em vez do valor fixo de $ 10 ela usasse a porcentagem fixa de 10% da carteira, na primeira perda ela perderia $ 10, na segunda perda ela perderia $ 9, na terceira perderia $ 8,1 e assim sucessivamente, perdendo cada vez menos, e ao final das 10 perdas consecutivas, ela ainda teria $ 3,49. Mesmo que fossem 20 perdas consecutivas, ela ainda teria $ 1,22. Depois de 30 perdas consecutivas, ela ainda teria $ 0,42. Se o dinheiro fosse uma variável contínua, ela nunca chegaria a perder tudo, mesmo depois de 100 perdas consecutivas ou 10.000.000 de perdas consecutivas. Mas como o dinheiro é discretizado em centavos, depois de 46 perdas consecutivas ela já não teria como continuar apostando 10% e teria que parar de jogar, ou teria que passar a apostar mais de 10%, porque lhe restaria menos de $ 0,10 e se ela apostasse $ 0,01 isso já representaria mais que 10%. 
 
Usar uma porcentagem fixa tem outra vantagem importante se a estratégia for lucrativa, porque os ganhos crescem em progressão geométrica, mas se operasse um número fixo de lotes, o crescimento seria em progressão aritmética. 
 
Portanto, para evitar o risco de perda total (ou pelo menos minimizar esse risco), não se pode fazer apostas de valores fixos. Em vez disso, é melhor aplicar uma porcentagem da carteira em cada operação. Se, por um lado, isso evita a ruína, por outro lado isso gera uma assimetria entre ganhos e perdas e o efeito é mais acentuado se tanto maiores forem as apostas, conforme mostrado nos gráficos acima. 
 
Outro ponto que precisa ser considerado é que os exemplos acima foram usando spread = 0, corretagem = 0, swap = 0, mas no Mercado real os spreads e taxas não são 0. Embora essas taxas possam parecer pequenas, quando se considera o efeito cumulativo em muitas centenas ou milhares de operações, o resultado é muito marcante. No caso da estratégia oposta de IFR, por exemplo, que gerou 28,45% entre 1/1/1987 de 4/10/2019, se fosse usada exatamente da mesma forma, porém com spread = 0.3 pip, corretagem = $7 por lote de $ 100.000, swap de compra = -9,54 pontos, swap de venda = +6,03 pontos, o resultado ficaria assim: 
 

 

Em vez de 28% de lucro, o resultado seria 64% de prejuízo. 
 
Em apenas alguns segundos de backtest, já temos a resposta à pergunta se a estratégia de IFR 30 e 70 funciona. Ok, não funciona. Mas se em vez de 30 e 70, fossem utilizados outros valores para o IFR? Alguns sites recomendam 20 e 80. Vamos testar: 

 

Piorou bastante... Mas se usando 20 e 80 piorou, quem sabe melhore usando 40 e 60? Vamos testar: 

 

Realmente melhorou muito, mas não o suficiente para ficar positivo. Na verdade, ficaria positivo se não houvesse taxas e spreads. Uma estratégia tão simples quanto comprar com IFR abaixo de 40 e vender acima de 60, seria capaz de gerar lucros consistentes durante décadas, se não houvesse taxas e spreads, conforme podemos ver no gráfico abaixo: 
 

 

O gráfico acima foi gerado usando histórico open-bar, isto é, só 1 cotação a cada candle, sem considerar os ticks internos, que é mais rápido para testar, porém menos acurado e menos representativo da situação real. Repetindo o mesmo backtest numa base tick-by-tick, muito mais acurada e mais representativa da situação real, o resultado continuaria muito bom, conforme podemos ver abaixo: 

 

Lembrando que o uso de ticks tornaria os resultados mais realistas no que diz respeito à exatidão dos pontos de execução, mas não seria realista nesse caso porque está usando spread=0, corretagem=0, swaps=0. Se não fosse por esse detalhe, o lucro acumulado em 32,75 anos teria sido de 446,86%, isto é, teria média anual de 5,32%. Isso é o que teria produzido essa estratégia de IFR 40-60 se as corretoras não cobrassem nenhuma taxa, se não existisse spread, se não houvesse diferentes taxas de juros nos diferentes países e se a liquidez fosse infinita. Como no mundo real isso não acontece, o resultado de utilizar IFR 40-60 seria prejuízo de 58,89%. 
 
Vimos que IFR 30-70 não funciona, 20-80 fica pior, 40-60 fica melhor, mas insuficiente para deixar positivo. Mas será que existe alguma combinação de valores para o IFR que poderia gerar lucro? Para responder a essa pergunta, o Metatrader tem uma ferramenta muito interessante que é o otimizador de estratégias. Basta implementar a estratégia em MQL4, depois estabelecer o intervalo de valores que gostaria que fossem testados, a discretização de cada variação dentro do intervalo, e o Metatrader testará todos os valores e registrará os resultados de cada teste. 
 
O otimizador é uma ferramenta para fazer uma série de alterações automáticas nos valores dos parâmetros da estratégia e testar no histórico inteiro de 33 anos a cada nova configuração dos valores. Por exemplo: a pessoa pode configurar o MT4 para usar todos os valores entre 5 e 35 no critério de compra, variando de 1 em 1, e todos os valores de 65 a 95 no critério de venda. Então o MT4 vai executar a estratégia minuto a minuto desde 1987 até 2019, usando o critério de compra para IFR<5 e venda para IFR>95, vai registrar todas as operações, data, horário, cotação, balanço etc. Ao terminar, o MT automaticamente repetirá tudo, porém usando valores diferentes para o IFR, e ao terminar repetirá novamente, e novamente, e novamente... até testar todas as combinações de valores dentro dos intervalos estabelecidos pela pessoa. 
 
Serão testados valores como comprar quando IFR < 22 e vender quando IFR > 71, mantendo esses valores desde o início de 1987 até 2019. Depois repetirá tudo de novo, desde 1987 até 2019, mas dessa vez comprando quando IFR < 17 e vendendo quando IFR > 81, e assim por diante, até testar todas as combinações de valores possíveis para IFR entre 5 e 35 na compra e entre 65 e 95 na venda. Cada nova configuração de valores é testada de ponta a ponta no histórico de 1987 a 2019. Como o intervalo (5 a 35) tem 31 valores possíveis e o outro (65 a 95) também tem 31 valores possíveis, no total há 31x31 configurações diferentes a serem testadas, ou seja, 961 possibilidades. Isso significa que o Metatrader vai executar 961 vezes essa estratégica no histórico inteiro, de 1987 até 2019, analisando minuto a minuto. 
 
Como cada backtest leva alguns segundos, em cerca de 1 hora a pessoa já saberá qual combinação de valores produz melhor resultado, e saberá também se algum desses resultados é suficiente para ficar positivo. Isso já é bastante extraordinário, mas não termina por aí. 
 
Depois de fazer o teste com todas as 961 diferentes combinações de valores, a pessoa verá que alguns resultados ficam positivos. A primeira impressão poderia ser de que essas configurações de valores são eficientes, mas na verdade não são. Isso é o que se conhece como “overfitting”. É quando um teste exaustivo utiliza uma variedade excessiva de configurações diferentes e, por sorte, algumas dessas combinações de valores acabam gerando resultados positivos naquele intervalo específico no qual a otimização foi realizada. Mas quando se utiliza essa mesma configuração num intervalo diferente, digamos, nos dois anos seguintes, o que se constata é a ineficiência e o prejuízo. 
 
Para evitar se iludir com esses falsos positivos, é recomendável que a otimização seja feita utilizando uma pequena parte da série histórica e depois que se encontrou algumas configurações que parecem ser promissoras, estas precisam ser testadas num parte diferente da série histórica. Por exemplo: utiliza-se o período de 2010 a 2015 para otimizar os valores da estratégia, testando todos os valores possíveis até encontrar alguns que fiquem positivos nesse intervalo. Digamos que funcione com os valores 58 e 26. O passo seguinte é rodar essa estratégia com os valores 58 e 26 num intervalo diferente, algo como 1987 a 2000, e verificar se continua gerando resultados positivos num intervalo diferente daquele no qual a otimização foi feita. Em caso afirmativo, e se tiverem sido realizadas dezenas ou centenas de operações, se a série histórica for tick-by-tick, com spreads reais, corretagens reais, swaps reais, então é uma forte evidência de que a estratégia realmente pode funcionar. 
  
O que se verifica, na prática, é que quase nunca funcionam ao rodar num intervalo diferente. 
 
Mas os recursos do Metatrader ainda não terminam por aí. Além de o otimizador oferecer a possibilidade de testar todos os valores possíveis, existe o algoritmo genético, que é a ferramenta mais preciosa do Metatrader. 
 
Sem o algoritmo genético, a pessoa pode testar todos os valores de 1 a 99 para compra e 1 a 99 para venda, e constatar que nenhuma dessas 9801 configurações é capaz de gerar lucro. Esse teste pode levar várias horas. Se a pessoa quiser testar também mudanças no período, que estava em 9 candles, digamos que ela queira testar entre 3 e 100, haverá 98 possibilidades diferentes, portanto no total será 98 x 9801 = 960.498 combinações diferentes. Isso levaria centenas de horas para ser testado. A pessoa pode adicionar mais alguns parâmetros: além de variar os valores do IFR na compra e na venda, a pessoa pode variar o timeframe, pode adicionar um stop loss, um take profit e um trailing stop. 
 
Então a estratégia fica assim: 
 
Comprar quando IFR < 20, vender quando IFR > 80. Se o prejuízo ultrapassar 5%, fechar a operação. Se o lucro chegar a 2%, mover o stop loss para a posição de 1% de lucro e ir atualizando o stop a cada novo tick, mantendo 1% abaixo da cotação no momento enquanto a cotação estiver subindo, mas não descer se a cotação cair, ou seja, se cair até o ponto onde está o stop, fechar com o lucro acumulado até aquele momento. Se o lucro chegar a 10% e não for acionado o stop nem fechar pelo critério do IFR, então fechar por take profit. 
 
Agora a estratégia que tinha 2 parâmetros tem 6 parâmetros: IFR para compra, IFR para venda, stop loss, take profit, trailing stop e ponto de entrada do trailing stop. Além disso, pode ser somado mais um parâmetro: o timeframe. Além de testar com timeframe de 1 minuto, a estratégia pode ser testada com 5, 15, 30, 60, 240 e 1440 minutos. Os valores do IFR podem ser testados entre 1 e 99, de 1 em 1, os valores para stop loss pode ser testados entre 10 e 100 pips, de 1 em 1, take profit de 10 e 300 pips, de 1 em 1, o trailing stop de 5 a 150 pips, de 1 em 1, e o ponto de entrada do trailing stop de 1 a 100 pips, de 1 em 1 (isso supondo que o período seja mantido fixo em 9). 
 
Assim, temos 99 possibilidades em cada IFR, 7 time frames, 91 valores de top, 291 valores de take profit, 146 valores de trailing stop, 100 valores de ponto de entrada de trailing stop. Ao todo são 99 x 99 x 7 x 91 x 291 x 146 x 100 possibilidades diferentes. Isso representa mais de 26,5 trilhões de configurações (26.525.000.000.000). Mesmo que rodasse 1 backtest a cada segundo, levaria 26 trilhões de segundos. Cada ano gregoriano tem 31.556.952 segundos, então levaria mais de 840.000 anos para testar todas as possibilidades dessa estratégia. Uma estratégia extremamente simples, diga-se de passagem. 
 
Para lidar com esse tipo de situação, uma das possibilidades é usar intervalos de 5 em 5, em vez de usar intervalos de 1 em 1. Com essa mudança, em vez de 26,5 trilhões de configurações diferentes, haveria “apenas” 1,445 bilhões (1.445.140.760) e o teste terminaria em pouco mais de 45 anos. Com intervalo de 5 em 5, a precisão já estaria um pouco comprometida e não daria para melhorar muito isso. Poderia estreitar os intervalos. Em vez de testar todos os IFR de 1 a 99 (ou de 5 a 95), poderia testar de 5 a 40 na compra e de 60 a 95 na venda. O trailing stop não deveria ter valores maiores que os do take profit, então poderia representar o trailing stop como uma fração do take profit e cortar alguns valores desnecessários no teste, entre outros detalhes. Mas mesmo com tudo isso, ainda não se conseguiria finalizar o teste em menos que algumas semanas. E isso para uma estratégia extremamente simples. 
 
Para resolver esse tipo de situação, o MT4 oferece um algoritmo genético. O algoritmo genético não testa todos os valores possíveis. Em vez disso, o algoritmo genético tenta estimar quais valores são mais promissores para cada parâmetro da estratégia com base nos lucros e prejuízos obtidos nos testes com configurações anteriores. Graças a esse recurso, o Metatrader permite testar estratégias cujos valores dos parâmetros possam ser combinados de até 9,22 quintilhões de maneiras diferentes, sem que para isso precise experimentar cada uma de todas essas configurações. Em vez de testar tudo, o MT4 tenta selecionar cerca de 10.000 configurações mais promissoras e testa exclusivamente estas 10.000. Em algumas horas, consegue encontrar resultados que levariam bilhões de anos se fossem testados todos os valores possíveis, e com boas chances de que uma desses 10.000 configurações testadas esteja entre as melhores de todas as configurações possíveis. 
 
Para usar o algoritmo genético, a pessoa precisa estabelecer um objetivo para a otimização (por exemplo: encontrar a configuração que maximize o lucro) e pode estabelecer algumas condições (por exemplo: o máximo drawdown não pode ser maior que 60%). Em seguida, o Metatrader executará uma série de backtests consecutivos, usando diferentes configurações para cada um dos parâmetros da estratégia em cada backtest, mas não testará todos os valores para cada parâmetro, como no exemplo anterior (sem o algoritmo genético). Em vez disso, na primeira e na segunda configurações, usará valores aleatórios. A partir da terceira, tentará se basear nos resultados (lucros) obtidos nos backtests anteriores para determinar quais valores são mais promissores para serem testados nas próximas tentativas. 
 
Quanto mais resultados anteriores estiverem disponíveis para servir como referência, melhores são as probabilidades de produzir uma configuração eficiente. 
 
Os critérios exatos utilizados pelo algoritmo genético do Metatrader para decidir quais valores são promissores não são divulgados pela MetaQuotes, mas boa parte desses critérios pode ser inferida a partir dos resultados e ao longo do processo de otimização. 
 
Para explicar a partir daqui, será necessário introduzir alguns conceitos habitualmente utilizados na área: 

•    Genótipo (ou indivíduo) é cada configuração. 
•    Gene é cada parâmetro da configuração. 

•    Geração é cada população testada num mesmo período de testes. Uma geração pode ter população de 1 ou mais indivíduos. 

•    População histórica é o conjunto de todas as gerações testadas desde o início da otimização. 
 
O processo de otimização com algoritmo genético se dá por meio de sucessivos cruzamentos de indivíduos que trocam genes, geram um descendente que herda alguns genes e sofre pequena mutação, esse novo indivíduo é testado, recebe um escore, esse escore determina sua probabilidade de cruzar e gerar novos descendentes, é realizado um sorteio entre os indivíduos para determinar quais vão cruzar, aqueles que são sorteados trocam genes etc. Isso pode ser feito de muitas maneiras diferentes, com diferentes níveis de sofisticação e de eficiência. O Metatrader utiliza alguns dos métodos mais simples, menos customizáveis e com diversas limitações. 
 
Para 2005, essa era uma ferramenta excepcional, e ainda hoje continua sendo uma das melhores. Mas à medida que um usuário se acostuma com determinadas facilidades, vai se tornando mais exigente e começa a sentir necessidade de funcionalidades que a ferramenta não é capaz de atender. Por exemplo: digamos que a taxa de mutação seja de 5%, mas o usuário queira utilizar 15% ou 20%. Ou então queira utilizar uma taxa de mutação que comece em 3,5% e vá aumentando em 0,5% a cada 100 gerações a partir da 500ª geração, e estabilize num limite máximo de 22%. O aumento na taxa de mutação é um dos recursos importantes para evitar que a evolução fique presa em máximos locais. Nas primeiras gerações, não é bom que a mutação seja muito alta, porque tornará a evolução lenta. Mas depois que já se atingiu um patamar no qual os indivíduos estão ficando muito semelhantes entre si e pararam de evoluir, torna-se importante que a taxa de mutação aumente para incrementar a diversidade genética e escapar de máximos locais. O Metatrader não permite configurar isso. Aliás, o Metatrader não permite configurar nada em relação ao método utilizado no algoritmo genético. 
 
Cantor permite configurar praticamente tudo que se queira, com diversos recursos prontos e ampla possibilidade para implementar alternativas personalizadas. Veremos uma comparação mais detalhada sobre isso mais adiante. Antes faremos uma comparação entre Metatrader 4 e Metatrader 5, com algumas eventuais citações de Cantor, mas a comparação sistemática com Cantor será feita depois. 
 
Os avanços no MT4 em comparação ao MT3 foram muitos e muito importantes, o que projetou essa plataforma como uma das melhores do mundo. Mas quando a MetaQuotes lançou o Metatrader 5, em 2011, o resultado foi absolutamente frustrante. O MT5 é inferior ao MT4 em quesitos fundamentais, motivo pelo qual o MT4 continua sendo mais utilizado que o MT5, mesmo transcorridos 8 anos desde o lançamento do 5 e mesmo o MT5 oferecendo algumas funcionalidades adicionais. 
 
Algumas das vantagens do MT5 em comparação ao MT4 são: 
 
1. O MT5 permite utilizar multiprocessamento para otimizações, enquanto o MT4 utiliza 1 processador de cada vez. Mas é possível rodar vários MT4 simultâneos, executando várias otimizações independentes. Não é a mesma coisa que usar vários processadores numa mesma otimização, mas é uma forma alternativa de usar multiprocessamento no MT4 e isso reduz a desvantagem em relação ao MT5 nesse item. 
 
2. O MT5 permite customizar o objetivo da otimização. Essa é uma vantagem importante, talvez a mais importante, porque o MT4 oferecia apenas 5 alternativas: 
 
2.1. Maximizar o balanço
2.2. Maximizar o profit fator
2.3. Maximizar o expected payoff
2.4. Minimizar o máximo drawdown 
2.5. Minimizar o máximo drawdown percentual
 
E destas 5 alternativas, apenas 1 delas é útil: o balanço. Se tentar otimizar qualquer uma das outras opções, os resultados vão convergir para genótipos com 0 ou 1 ou poucas operações. Por exemplo: para minimizar o MDD, basta não fazer nenhuma operação e o MDD será 0. Com isso o MT atinge o objetivo, mas o resultado não é o que seria desejado. Para maximizar o profit factor, basta realizar 1 operação positiva e nenhuma outra. Com isso, novamente o MT atinge o objetivo, mas o resultado também não é o que seria desejado. Enfim, o MT4 só oferecia um objetivo útil a ser otimizado, que era maximizar o balanço. Mas há objetivos muito melhores, que levam em consideração a rentabilidade ajustada ao risco. 
 
Otimizar o índice de Sharpe, por exemplo, é muito mais útil do que otimizar o balanço, e o Metatrader 5 tem essa possibilidade, porém se começar a otimização com esse objetivo, vai rapidamente convergir para resultados com 1 ou poucas operações positivas, o que não é desejado. Em Cantor é possível colocar um objetivo inicial, e mudar esse objetivo ao chegar na 10ª geração, mudar novamente ao chegar na 18ª geração, mudar novamente ao chegar na 53ª geração, etc. Isso pode ser feito em Cantor tanto de forma automática quanto manual. Pode-se inclusive interromper, salvar, desligar o computador, e prosseguir horas ou dias depois, retomando do ponto que havia parado. Ou usar os resultados de diferentes otimizações anteriores como ponto de partida para uma nova otimização. No MT5 não é possível alterar o objetivo manualmente nem automaticamente. Além disso, as mudanças de objetivo em Cantor podem ser condicionadas a uma série de critérios, o que permite extrair o máximo dessa funcionalidade. 
  
3. Outra vantagem do MT5 em comparação ao MT4 era que no MT4 os candles eram preenchidos com ruído branco, que tem propriedades muito diferentes dos ticks reais e causava várias distorções. O MT5 utiliza um método muito mais apropriado e com ticks cujas propriedades são estatisticamente mais semelhantes às dos reais. Na época, essa foi a vantagem mais importante do MT5, mas pouco depois foi lançado um build do MT4 que também utilizava mesmo método para preenchimento de candles, eliminando essa diferença. 
 
4. Além dessas vantagens relevantes, o MT5 tem várias vantagens quase totalmente irrelevantes, tais como indicadores, recursos para fazer desenhos etc. 
 

As vantagens do MT4 em relação ao 5 são menos numerosas, mas são mais importantes. Basta uma delas para descartar completamente a possibilidade de usar o MT5: o MT4 permite importar séries históricas reais, com cotações reais, e há aplicativos externos (TickStory, por exemplo) que permitem editar o cabeçalho FXT dessas bases de dados, configurando tamanho do spread, corretagem, swaps, freeze level, nível de margem, entre dezenas de outras variáveis que são necessárias para representar adequadamente a situação real. Em contrapartida, o MT5 não permite importar séries históricas com ticks reais, e obriga a utilizar as séries históricas do servidor da MetaQuotes. Além disso, como a base de dados do MT5 não fica na máquina do usuário, não há como editar o cabeçalho FXT (nem existe arquivo FXT para ser editado). Como resultado, o MT5 utiliza spread=0, corretagem=0 e outras condições completamente diferentes da situação real, o que torna as simulações no MT5 muito distantes da realidade, conforme vimos anteriormente, nos gráficos dos resultados com taxas reais em comparação aos resultados da mesma estratégia com taxas iguais a 0. 
 
De nada adiantam todas as outras vantagens do MT5, se os resultados que ele produz nos backtests não são confiáveis e não representam com fidelidade o que se pode esperar obter nas contas reais. Pior do que isso: as estratégias que se mostram extremamente lucrativas nas simulações no MT5 provocam rapidamente a ruína nas contas reais. No caso do MT4, quando são importadas séries históricas tick-by-tick, com ticks reais, quando são configurados todos os parâmetros do cabeçalho FXT iguais aos da situação real, os resultados obtidos nas simulações são extremamente semelhantes aos obtidos nas contas reais. Essa é a razão pela qual o MT4 continua sendo preferido em relação ao MT5. 
 
Quem não acompanha a história da MetaQuotes pode se questionar por que lançaram o MT5 inferior ao MT4, e por que removeram funcionalidades essenciais? 
 
A resposta é bem simples: o MT3, MT4, MT5 são oferecidos gratuitamente aos investidores. Quem paga para a MetaQuotes são as corretoras, que compram da MetaQuotes o direito de disponibilizar o MT aos seus clientes. A maioria dessas corretoras opera como “market maker”, ou seja, operam contra o cliente. Quando o cliente ganha, a corretora perde. Quando o cliente perde, a corretora ganha. Sendo assim, é do interesse dessas corretoras market makers que os clientes sejam iludidos com uma ferramenta que os leve a utilizar estratégias perdedoras, por produzir resultados inflados, completamente diferentes dos que serão alcançados em contas reais. Se um cliente verificar que determinada estratégia não funciona, ele não vai usá-la, não vai perder dinheiro nem pagar corretagens para a corretora. Como a MetaQuotes trabalha para as corretoras, os desenvolvedores do MT decidiram impossibilitar a importação de ticks reais e impossibilitar a configuração do cabeçalho FXT, porque assim não seria possível identificar corretamente as estratégias que não funcionam. 
 
De forma resumida: os clientes da MetaQuotes são as corretoras, e os interesses das corretoras market makers são conflitantes com os interesses dos investidores. Por isso a MetaQuotes parou de aprimorar recursos úteis do MT4, e ainda por cima removeu recursos fundamentais. Como se não bastasse a ausência desses recursos no MT5, a MQ também removeu alguns recursos que existiam no MT4. A partir do Build 210, em setembro de 2007 (https://www.metatrader4.com/pt/releasenotes/189), a MetaQuotes tentou impossibilitar a importação de séries históricas reais no MT4, removendo um botão que oferecia a possibilidade de sobrescrever o histórico antes de realizar o backtest e deixou como padrão para sobrescrever. Antes do Build 210 a pessoa tinha a possibilidade de importar históricos reais tick-by-tick e realizar backtests bastante confiáveis. Depois do Build 210, mesmo que a pessoa importasse os históricos, o Metatrader 4 passou a substituir o histórico real por um histórico artificial que ele gera, e isso é feito antes de executar cada backtest. Por isso vários usuários (eu, principalmente) continuaram durante anos com o build 208. 
 
Então a MetaQuotes começou a forçar a atualização para builds mais recentes, impossibilitando a conexão com builds anteriores ao 210. Com isso, passou a ser necessário ter um build antigo (208) para fazer as otimizações e backtests e outro (recente) para conseguir se conectar. Novamente a MetaQuotes atacou, passando a introduzir novos recursos na linguagem MQL4 que não eram compatíveis com a do build 208 e anteriores, mudou o formato dos HST e FXT e criou outras incompatibilidades para forçar o uso das versões mais recentes. 
 
Em contrapartida, alguns usuários desenvolveram ferramentas como o Tick Data Suite, TickStory e outras, que possibilitam importar históricos de ticks reais nos builds mais recentes, sem que sejam sobrescritos ao rodar o backtest, permitem editar spread, commisison, swaps e outros parâmetros no cabeçalho FXT. 
 
Quando foi lançado o MT5, a linguagem inteira foi modificada, bem como a possibilidade de importar séries históricas reais foi completamente suprimida, porque esses arquivos nem sequer ficam na máquina do usuário. Então o único jeito de continuar fazendo otimizações e backtests confiáveis foi renunciando ao uso de algumas novidades do MT5, mas preservando a fidedignidade do MT4 equipado com Tick Data Suite. 
 
Então surge uma nova questão: as corretoras brasileiras não são market makers. Por que elas também utilizam o MT5, em vez de usar o MT4? 
 
Um dos motivos disso é que a grande maioria dos clientes de corretoras não utiliza otimizador de estratégias nem outros recursos avançados desse tipo. Operam manualmente, muitas vezes baseados em notícias, especulações, opiniões, emoções etc. Para eles tanto faz se vão usar o MT4, MT5, Trader Gráfico ou qualquer outra plataforma. Para o cliente que não pensa em automatizar sua estratégia (ou seja, a grande maioria dos investidores), os recursos gerais do MT5 parecem mais atraentes. Outro motivo é que para aqueles que pretendem automatizar as estratégias, embora a corretora não opere contra o cliente, ela aprecia se o cliente efetuar maior número de operações e pagar mais corretagens. E um dos problemas do MT5 é justamente distorcer os resultados de modo a fazer parecer que estratégias de scalping são lucrativas. Isso faz com que o cliente execute muito mais operações e pague muito mais corretagens. 
 
Enfim, a MetaQuotes fez um excelente trabalho com o MT4, e poderia ter produzido interessantes aprimoramentos no MT5, mas acabou seguindo outro rumo. Mesmo com essas limitações, o MT4 é uma ferramenta bastante poderosa, e continua sendo uma das melhores que existem para essa finalidade. 
 
Há outras ferramentas, algumas das quais podem ser usadas conjuntamente com o MT4, outras podem ser usadas independentemente, como Amibroker, Trading Insights, Ninja Trader, QuantAnalyzer, Darwinex, Zorro etc. Mas o MT4 continua sendo o mais utilizado no mundo e é seguramente um dos melhores. 
 
É muito importante mostrar as virtudes do MT4, mostrar quanto ele possibilita facilitar a vida e agilizar a testagem de estratégias, para que, em seguida, possamos apresentar os diferenciais de Cantor de modo que estes diferenciais possam ser devidamente apreciados. 
 
Para começar, uma das limitações no algoritmo genético do MT4 e do MT5 é que o número máximo de configurações possíveis para uma estratégia a ser otimizada é 9,22 quintilhões. Pode parecer muito, mas na verdade é pouquíssimo. Vimos anteriormente que uma estratégia muito simples, com IFR, já chega a trilhões de configurações possíveis. Se adicionar mais dois indicadores com 2 parâmetros cada, ultrapassa o limite que o Metatrader é capaz de otimizar. Para lidar com esses limites, é necessário utilizar várias estratégias para redução de dados. No caso do Saturno V, por exemplo, os indicadores com finalidades semelhantes eram agrupados em switchs. Com isso, durante a otimização o switch selecionava um dos indicadores de cada grupo a ser utilizado e tornava possível testar a estratégia com dezenas de indicadores diferentes, sem ultrapassar o limite do MT4. Mas ainda havia a limitação de que não era possível otimizar simultaneamente mais de um indicador de um mesmo grupo. 

Outra forma de lidar com esses limites é que para parâmetros que podem variar dentro de um intervalo muito largo, como médias móveis, com períodos que podem variar de 3 a 800, se testar todos os valores de 3 a 800 consumirá boa parte do limite. Então em vez de usar o próprio período das médias, pode-se usar o logaritmo dos períodos. A vantagem é que o cálculo para uma média com 800 períodos ou 795 períodos, não faz muita diferença, o valor dela será quase o mesmo. Porém para uma média com 3 ou 8 períodos, a diferença é gigantesca. Então somar 5 unidades em períodos pequenos faz grande diferença (de 3 para 8, por exemplo), mas somar 5 a períodos grandes não tem tanto peso. Quando se troca os períodos pelo logaritmo dos períodos, resolve-se esse problema, porque para valores pequenos, o logaritmo vai funcionar como o intervalo fosse de 1 em 1, para valores grandes vai funcionar como se fosse de 10 em 10, estreitando o intervalo de valores a serem testados sem perder precisão e sensibilidade. 
 
Vários outros recursos desse tipo permitem “sobreviver” parcimoniosamente dentro dos estreitos limites de 9.223.372.036.854.775.807 de combinações que o MT oferece. Mas algumas limitações são praticamente intransponíveis. Por exemplo: não há como otimizar uma estratégia que tenha 10 indicadores (simultâneos) e 10 parâmetros adicionais. Pode-se otimizar por partes, mas com isso perde-se completamente o propósito dos algoritmos genéticos, que consiste em ajustar simultaneamente os valores para muitas variáveis. 
 
Quando comecei a utilizar Cantor, achava que o limite  de Cantor era 179.769.313.486.231.590.772.930.519.078.900.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000. 
 
Com esse limite é possível otimizar mais de 100 indicadores e mais de 50 outros parâmetros ao mesmo tempo. 
 
Mas em conversas posteriores com o amigo João Antonio, ele me disse que não há limite. É possível utilizar quantos indicadores e quantos parâmetros quiser. O limite de 1,79769 x 10^308 é aplicável ao número de lotes que podem ser negociados. No Metatrader esse limite de lotes é 2,15 x 10^9 (ou mais precisamente 2.147.483.647). 
 
Esse tipo de vantagem, com limites mais amplos, seria fácil de “corrigir” (se a MetaQuotes desejasse corrigir), mas mesmo que fossem ampliados esses limites, isso não representaria vantagem, se não fosse possível, dentro desse universo mais amplo de possibilidades, resumir os problemas a níveis operacionalizáveis. E esta é uma das vantagens mais importantes de Cantor em comparação a qualquer outra plataforma. 
 
Simplesmente ter um limite alto para o número de indicadores que podem ser otimizados, ou não ter limite, é algo bastante trivial. O que representa um real diferencial é como selecionar, entre tantas configurações diferentes, quais delas devem ser testadas para que se possa chegar a excelentes resultados. Para isso são necessárias estratégias de seleção, recombinação, crossover, mutação, avaliação, ranqueamento, estratificação etc. 
 
Uma das maneiras mais simples de lidar com esse problema é randomizar tudo. É assim que se supõe que funciona a Seleção Natural, na acepção darwiniana e no Metatrader. Cantor também tem a opção de randomizar todas as etapas, mas tem também uma rica variedade de alternativas muito mais sofisticadas e mais eficientes, que podem ser utilizadas para diferentes finalidades. 
 
O Metatrader 5 tem apenas 1 método de otimização, que além de ser um dos mais simples, não pode ser configurado pelo usuário. Cantor inclui praticamente todos os principais métodos de otimização citados na literatura especializada, além de vários métodos inéditos. Há muitos recursos inovadores de autoria do João Antonio, alguns de autoria de membros de equipe de desenvolvimento, outros de minha autoria. Um dos métodos de mutação heurística, desenvolvido pelo João, tem se mostrado muito mais eficiente que métodos tradicionais, tanto no sentido de convergir mais rapidamente quanto no sentido de evitar redundâncias. 
 
Além de novos métodos para as etapas tradicionalmente utilizadas no processo evolutivo, também novas etapas foram introduzidas, que não são habitualmente utilizadas em softwares do gênero, e melhoram incomensuravelmente a qualidade dos resultados. Por exemplo: um dos problemas comuns no MT4 é que vários fenótipos (e também muitos genótipos) são repetidos ou quase repetidos. Numa otimização com 9 quintilhões de possibilidades, das quais são testadas 10.000 configurações, cerca de 8.000 a 9.000 desses 10.000 são repetidos ou quase repetidos, restando cerca de 1.000 a 2.000 significativamente diferentes entre si. E o pior é que esses 10.000 que estão se repetindo não chegaram nem perto dos 10.000 melhores possíveis. Ou seja, com uma população de 10.000 indivíduos já se está 90% redundante, e não faz muito sentido prosseguir, pois só agravaria a redundância, sem perspectivas de continuar evoluindo no sentido de encontrar as melhores configurações. 
 
Cantor consegue evitar essas repetições até que se esteja realmente perto de encontrar os valores ótimos, podendo evoluir até populações históricas com mais de 1.000.000 de indivíduos, sem que a redundância chegue a níveis preocupantes. Isso permite não apenas tirar maior proveito do tempo empreendido no número de configurações testadas, mas também permite ir muito mais longe e testar possibilidades que provavelmente nunca chegariam a ser testadas em outras plataformas. 
 
Só para se ter uma ideia do que isso representa, o gráfico abaixo mostra o resultado de uma otimização do Saturno V T-235.87 no Metatrader 4, durante 24h, com intervalo de otimização entre 1/1/1987 e 1/1/2010 e intervalo de validação entre 1/1/2010 e 1/5/2019 (a data final é de maio porque é de uma otimização antiga): 

 

 

O resultado é muito bom, sobretudo quando se considera que foi alcançado em apenas 24h, sem dúvida, com lucro anual médio de 20,71% e máximo drawdown de -41,19%. O lucro é maior que o do melhor fundo brasileiro, mas se considerar o lucro ajustado ao risco, não é tão bom. 
 
Agora vejamos o resultado de uma otimização da mesma versão T 235.87 do Saturno V, mas dessa vez em Cantor, e durante apenas 5 minutos, com mesmo intervalo de otimização entre 1/1/1987 e 1/1/2010 e intervalo de validação entre 1/1/2010 e 1/5/2019: 

 

Em apenas 5 minutos de otimização, Cantor conseguiu encontrar vários genótipos melhores que o melhor genótipo encontrado pelo Metatrader em 24 horas. E o melhor encontrado por Cantor supera de longe o melhor encontrado pelo Metatrader: lucro anual de 30,13% e máximo drawdown de -29,25%. Além de maior lucro e menor risco, pode-se observar também que a curva de crescimento é mais suave, com ganhos mais consistentes, entre outras vantagens.
 
Em geral, são necessárias várias semanas de otimização do Saturno V no Metatrader para chegar a um resultado com qualidade similar a essa. Com o detalhe que depois de certo ponto, o Metatrader fica preso em máximos locais e não consegue prosseguir na busca por melhores genótipos, enquanto Cantor segue em frente gerando resultados cada vez melhores. 
 
Essa simples comparação já proporciona uma ideia da supremacia de Cantor. 
  
No MT, depois que inicia uma otimização, não há como interromper e depois retomar do ponto em que estava. Se houver uma interrupção no abastecimento de energia que dure mais que o limite de autonomia do nobreak, pode-se perder dias de trabalho. Em Cantor cada backtest realizado na otimização é salvo automaticamente, a otimização pode ser interrompida a qualquer momento, depois pode ser reiniciada do ponto que havia parado. Pode-se inclusive desligar a máquina, depois importar os genótipos de qualquer otimização, ou de várias otimizações, ou os selecionados com base nos critérios que se queira, e recomeçar do ponto que havia parado, ou ainda misturar diferentes otimizações, ou começar usando alguns genótipos campeões desde o início, entre outras possibilidades. 
 
Além disso, ao pausar a otimização pode-se mudar o método e/ou os parâmetros de seleção, os parâmetros de recombinação, os parâmetros de crossover, os parâmetros de elitismo, os parâmetros de mutação etc. e depois prosseguir do ponto que havia parado. Isso é muito útil quando se percebe que a otimização chegou perto de um máximo local, pode-se fazer alterações que aumentem a variabilidade e explore outras combinações. 
 
O MT4 não permite customizar o objetivo da otimização. O MT5 permite customizar, mas de forma estática e única. Depois que o objetivo foi estabelecido, o MT continua assim até o final. E só pode haver 1 objetivo em cada otimização. Em Cantor pode-se ter vários objetivos simultâneos ou em série ou em ciclos. Pode-se começar a otimização maximizando o CAGR, e a partir da 50ª geração mudar automaticamente o objetivo para índice de Sharpe, depois da 100ª geração ficar alternando entre Sharpe, Sortino e Melao-Index, entre muitas outras possibilidades praticamente ilimitadas. 
 
No MT os cruzamentos sempre envolvem 2 indivíduos. Em Cantor é possível cruzar qualquer quantidade de indivíduos, que podem fornecer diferentes porcentagens de genes, ou partes de genes. 
 
Como a MetaQuotes não descreve detalhes “internos” sobre como seu algoritmo genético opera, não há como fazer comentários muito específicos sobre isso. Mas os sintomas observados sugerem que praticamente tudo no algoritmo genético do MT4 e MT5 funciona com os recursos mais básicos e menos eficientes, salvas poucas exceções. Por exemplo: não sabemos qual a taxa de mutação utilizada pelo algoritmo genético do MT, não sabemos qual o método utilizado na recombinação, não sabemos praticamente nada. Mas podemos deduzir, com base no número de genótipos que o MT precisa produzir para alcançar bons resultados, que os métodos utilizados estão muito longe de serem os mais eficientes. A comparação apresentada acima, de uma otimização feita no MT durante 24h e a uma otimização em Cantor em apenas 5 minutos, deixa claro isso. 
 
Graças a todas as vantagens citadas, e várias outras que não chegaram a ser mencionadas, o
Saturno V pôde dar um salto sem precedentes, não apenas no que diz respeito à otimização da estratégia, mas também foi possível fazer diversas modificações na estrutura da estratégia, aumentando substancialmente o número de indicadores usados simultaneamente, muitos dos quais só podiam ser selecionados alternativamente por meio do switch. Isso já produziu um incremento notável na performance, e as expectativas para os próximos anos e meses são de prossiga numa evolução muito mais rápida do que havia sido até agora. 
  
Essa descrição genérica não proporciona uma ideia suficientemente completa e justa sobre todos os diferenciais de Cantor. Talvez com a apresentação em vídeo seja possível mostrar um pouco mais. De qualquer modo, tentarei prosseguir no resumo: cada etapa do processo evolutivo é completamente customizável e oferece várias alternativas prontas, além da possibilidade de personalizar quase tudo. Por exemplo: na etapa de recombinação dos genótipos, há os métodos prontos de “sistema suíço”, “z-score”, “aleatório”, “dissimilar”, “melhores com aleatórios”. Cada um desses métodos, por sua vez, permite configurar detalhes de como se deseja que a recombinação seja feita. O melhores e aleatórios, por exemplo, permite determinar a porcentagem dos melhores a serem combinados com os aleatórios. O z-score permite configurar o nível de prevalência dos que possuem escore mais alto, em termos de probabilidade de gerar filhos, número de genitores, porcentagem da população que será recombinada por z-score e qual porcentagem será aleatória etc. 
 
Há grande variedade de critérios que permitem determinar como serão escolhidos, entre a população, quais genótipos vão cruzar com outros genótipos, quais e quantos genes terão prioridade a serem transmitidos, quanto será a taxa de mutação e como ela será aplicada, como os genótipos serão ranqueados etc. 
 
As descrições técnicas talvez não ajudem muito a proporcionar uma ideia sobre a magnitude as vantagens, por isso vou citar algumas situações práticas: 
 
Durante mais de 12 anos utilizando o MT4, dos quais 9 anos com o
Saturno V, o tempo mais curto de máxima estagnação que foi possível obter no histórico desde 1986 foi cerca de 26 meses. Um dos grandes desafios é justamente conseguir reduzir o tempo de máxima estagnação. Em poucos dias com o uso de Cantor, já foi possível encontrar genótipos com apenas 7 meses de máxima estagnação num período diferente daquele no qual foi feita a otimização. 
 
O intervalo de maio de 1995 a julho de 1997 é um dos mais difíceis de ser conseguir bons resultados quando a otimização é feita fora desse intervalo. Em Cantor frequentemente as otimizações realizadas em qualquer período ficam muito boas em quase todos os outros períodos, inclusive este. Um das dificuldades recentes foi no período de 2018 e 2019, que a grande maioria das otimizações realizadas em outros períodos não conseguia produzir bons resultados quando colocadas para operar em 2018-2019, mesmo quando a otimização incluía todo o histórico pregresso de 1987 a 2017. Com a última versão do
Saturno V, adaptada para usufruir os novos recursos de Cantor, foi possível otimizá-la entre 1993 e 2009 e encontrar genótipos capazes de performar excepcionalmente bem de 1987 a 2019, alguns com resultados tão bons ou até um pouco melhores do que no próprio intervalo da otimização. 
 
O uso de Cantor está sendo uma experiência multiplamente gratificante, porque além das numerosas vantagens, sempre que há necessidade de alguma funcionalidade inexistente, basta descrever o que é necessário, e em poucos dias a equipe de desenvolvimento implementa os recursos. Além disso, o João também cria, inova e aprimora de diversas formas. Nossas conversas são extremamente estimulantes e enriquecedoras, e frequentemente ele implementa mais recursos importantes do que eu havia solicitado, ou implementa algo que funciona melhor do que eu havia descrito. 
 
Até o momento foram quase 2 anos de trabalho, mobilizando alguns dos maiores talentos da Europa no campo da Ciência de Computação, alguns dos quais já foram “roubados” de nossa equipe pela Amazon e pelo Google, que fizeram propostas a eles que ainda não podemos cobrir. Atualmente contamos com 3 dos 6 desenvolvedores iniciais, mas como os trabalhos mais pesados já estão concluídos e a plataforma está plenamente funcional, essa equipe é tranquilamente suficiente para prosseguir.  
 

O  QUE PODEMOS ESPERAR, NOS PRÓXIMOS MESES E ANOS, COM A UTILIZAÇÃO DE CANTOR ? 
 
Em primeiro lugar, um alinhamento muito melhor com nossos objetivos. Otimizar o balanço não é um objetivo adequado, mas é o único razoável entre as alternativas disponíveis no MT4. Com o uso de Cantor, alguns dos objetivos utilizados na otimização são o Melao_Index e índice de Sortino. Isso já representa uma vantagem gigantesca, porque ambos medem performance ajustada ao risco, enquanto o balanço sozinho não leva em conta o nível de exposição ao risco, e era necessário fazer vários ajustes posteriores para selecionar adequadamente os melhores genótipos.  
 
Uma das ideias recentes do João é otimizar vários genótipos combinados, que ele chamou “MultiEA” ou “MetaEA”. Existe uma ferramenta chamada Quant Analyzer (antigo EA Analyzer) que possibilita combinar os resultados de genótipos prontos (otimizados separadamente) e verificar como funcionariam juntos. Mas isso é completamente diferente de já serem otimizados juntos, o que permite que se complementem e se harmonizem muito melhor. 
 
Por exemplo: quando se combina genótipos prontos que tenham sido otimizados individualmente, tenta-se encontrar pares que fiquem ruins em períodos diferentes e preferencialmente que um fique excelente no período que o outro ficou ruim, para um possa suprir as deficiências do outro e o uso conjugado reduza a volatilidade na carteira. Mas raramente se consegue uma combinação que satisfaça adequadamente a esse critério, porque geralmente os melhores genótipos ficam mal nas mesmas épocas. Mas se fossem otimizados simultaneamente, esse problema seria resolvido de forma muito mais eficiente e com resultados muito mais sinérgicos. 
 
A redução na volatilidade da carteira permite negociar maior número médio de lotes, aumentando os ganhos, sem que isso implique aumento no risco. 
 
Outra vantagem é que será possível utilizar informações do livro de ofertas tanto na otimização quanto nas contas reais. Isso permite calcular com maior precisão qual será o preço médio de execução de cada operação e fazer modelagens mais acuradas. 
 
Outra vantagem é que, conforme comentou o João, o MT não executa as operações reais da mesma maneira que executa nos backtests. Isso introduz uma fonte de erro que não tem como ser eliminada, e não importa quais sejam os cuidados tomados, nunca se consegue ter similaridade muito acima de determinado limite entre backtest e conta real, mesmo simulando todas as condições idênticas às reais. Em Cantor foram tomados diversos cuidados para garantir que as execuções nas contas reais (tanto no MT quanto em Cantor) sejam idênticas às que foram executadas no BT em Cantor. Isso eleva o nível de confiabilidade nos backtests a um novo patamar. 
 
Há um recurso em Cantor para verificar em tempo real se as operações nas contas estão sendo executadas da mesma maneira que teriam sido no backtest. Isso é um diferencial muito importante, porque se houver algum tipo de disparidade, pode ser acionado um alerta por e-mail e, se houver necessidade de alguma providência emergencial, poderá ser tomada sem demora. Além disso, permite um monitoramento constante sobre a eficiência da corretora nas execuções. 
 
Para que Cantor pudesse ler e compilar o
Saturno V, que está escrito em MQL4, foi necessário implementar no compilador de Cantor todas as funções da linguagem MQL4. Mas além destas, foram implementadas muitas outras. Por exemplo: no MT4, se quiser gerar um número aleatório com distribuição normal, é necessário simular isso usando o MathRand(). No MT4 ou MT5 posso gerar um número do tipo x=[MathRand()-MathRand()+MathRand()-MathRand()]/131068, que se comporta como se tivesse sido extraído de uma amostra com  distribuição aproximadamente normal, com média 0 e desvio-padrão 0,1444, curtose -0,3, assimetria 0 e limites assintóticos em -2 e +2 (ou seja, -13,85 sd e +13,85 sd). Se somar mais vezes MathRand()-MathRand(), o resultado ficará mais semelhante a uma normal (a curtose convergirá para 0 e os limites assintóticos se alargarão). 
 
Mas não teria como produzir exatamente uma normal no MT, além de o processo descrito acima ser mais trabalhoso e que consome mais processamento. Em Cantor há uma função pronta para gerar um aleatório com média m e desvio-padrão s, além de várias outras funções prontas para gerar pseudoaleatórios com diversas outras distribuições discretas e contínuas (Weibull, Gumbel, Gamma, Laplace, Gumpertz, Cauchy etc.). Se quiser medir a volatilidade utilizando distâncias de Fréchet em Cantor, por exemplo, já existe uma função pronta para isso. Entre muitas outras vantagens. 
 
Além destas e outras vantagens importantes, Cantor também possui diversas pequenas vantagens em relação ao Metatrader 4 e ao 5, algumas das quais serão descritas a seguir: 
 
Os valores para cada gene podem ser otimizados com intervalos (range) e discretizações (steps), variando uniformemente dentro dos intervalos, ou com média e desvio-padrão, variando com distribuição normal conforme os parâmetros estabelecidos, ou ainda com outras distribuições estatísticas diferentes da normal, como  Os métodos de recombinação podem ser configurados entre centenas de alternativas diferentes, inclusive Sistema Suíço de Xadrez, ponderado pelo escore Z, ponderado por outros métodos, uniforme aleatória, podem ser selecionados quantos dos melhores genótipos serão mantidos de cada geração para cruzamentos com gerações futuras e quais os critérios para selecionar esses genótipos, ou qual porcentagem entre o total de genótipos testados será mantida para cruzamentos posteriores, qual porcentagem de genes será compartilhada em cada cruzamento em função do escore obtido pelos genitores, qual será a taxa de mutação etc. Além de vários métodos exclusivos, objetivos exclusivos e outros diferenciais. 
 

A lista de vantagens poderia ser prolongada quase indefinidamente, mas vou interromper por aqui, e deixar que nos próximos meses e anos os resultados em contas reais falem por si. 

Captura de Tela da interface de Cantor

  • Branca Ícone LinkedIn
  • Branco Facebook Ícone
  • Branca ícone do YouTube
  • Branca Ícone Instagram

CONTATO

Para agilizar seu atendimento, por gentileza, preencha corretamente todos os campos abaixo:

© 2019 Saturno V Todos os direitos reservados. O Saturno V não comercializa nem distribui cotas de fundos de investimento ou qualquer outro ativo financeiro, fornecemos licença de uso do sistema automatizado.