ja_mageia

 

Nossas notícias estão intercaladas com os artigos, ambas na seção de artigos. A maioria das notícias está acessível exclusivamente a cotistas e/ou visitantes registrados. Por favor, dirija-se à seção: Artigos

Início Artigos Saturno V 6.4 (update 14:55h)
Saturno V 6.4 (update 14:55h) Versão para impressão Enviar por E-mail
Artigos - Investimentos
Escrito por Melao   
Domingo, 26 Setembro 2010 15:27

 


As perdas sofridas com as versões 4.x nos levaram a reconsiderar quais os quesitos que uma estratégia precisa atender para ser aprovada para uso. As 5.x seguiam a mesma linha das 4.x e esse não se mostrou um caminho promissor para lidar com o cenário atual, embora ambas fiquem bem se computar resultados de 1998 a 2010, mas com perdas significativas entre julho de 2006 e dezembro de 2008, depois com ganhos em 2009 que cobrem todas as perdas do período anterior, mas novamente mais perdas em 2010, mais acentuadas e persistentes do que nos 2,5 anos anteriores. Há vários artigos nos quais esse tema já foi abordado com detalhes, e nossa visão geral atual não é muito diferente da que já foi descrita nos tais artigos, portanto não me parece necessário recapitular tudo isso.

As versões 4.x se baseiam em propriedades do mercado que estão presentes e razoavelmente estáveis na maior parte do tempo, sendo excepcionalmente estáveis entre 1998 e 2006 e entre dezembro de 2008 e dezembro de 2009. Quando estas propriedades se conservam dentro dos limites “apropriados”, o desempenho das versões 4.x é excepcional, com lucro anual médio muito alto e máximo drawdown muito baixo. Uma das configurações gerou mais de 950% de lucro em 7 meses, com máximo drawdown abaixo de 40%. Em minha conta real, chegou a mais de 100% de lucro em 35 dias, com máximo drawdown abaixo de 30%. E estes níveis de lucro poderiam ser mantidos durante anos, desde que as propriedades necessárias ao funcionamento das 4.x se mantivessem como foram entre 1999 e 2009, exceto de 2006 a 2008. Quando estas propriedades se modificam, mas ficam estáveis após a mudança, continua sendo possível ter altas performances. Quando se modificam e continuam mudando conforme alguma regra estável, também é possível continuar ganhando. Quando estas propriedades se comportam de forma aleatória, oscilando dentro de uma amplitude aproximadamente estável e não excessivamente larga, também é possível modelar a situação e continuam funcionando. Mas quando estas propriedades passam a oscilar com uma amplitude muito larga, de forma aleatória e alterando abruptamente, com freqüência e rapidez, todas as tentativas de conseguir uma boa modelagem não surtiram efeito, chegando ao ponto de me parecer que não havia solução para o problema.

As versões 3.x, nas configurações testadas inicialmente no mesmo período, também não se mostraram apropriadas, porém foram poucos testes com a 3.1415926c e 3.03. Em seguida, foram retomadas as 4.x, foram desenvolvidas as 5.x nos mesmos moldes das 4.x, mas nada parecia funcionar. Vários fundos estavam em sérios apertos, inclusive os fundos Sparta, que foram os dois melhores do mundo no triênio 2006-2009, estavam negativos com -20 em 2010. O cenário era caótico para estratégias de tendência, de swing, scalping etc. Mas havia alguns poucos fundos que estavam bem em 2010, e vinham de um histórico positivo de vários anos, indicando ser improvável que estes fundos estivessem todos bem por mera sorte. Isso me levou a reconsiderar todas as principais estratégias do Saturno e antes dele, que haviam sido aprovadas desde o início de 2007, e foram feitos testes bem mais detalhados e exaustivos. Nessa mesma época, foram cogitadas novas e melhores maneiras de se otimizar os parâmetros, muito mais rápidas e com precisão quase igual aos métodos convencionais. Também ampliamos as séries históricas, criando uma situação muito mais apropriada para avaliar as estratégias. Com séries históricas mais longas, foi possível cobrir uma variedade muito maior de cenários diferentes, aumentando muito as probabilidades de que os cenários futuros sejam suficientemente similares a algum dos cenários contidos no histórico pregresso. A maior rapidez nas otimizações possibilitou conseguir, em poucos meses ou semanas, um nível de refinamento que demandaria anos pelo método anterior. Estes dois avanços levaram a um salto evolutivo só comparável aos primeiros momentos em outubro de 2006, quando ficou claro que os back tests em séries históricas que não fossem tick-by-tick não eram confiáveis.

Outro obstáculo importante foi derrubado, que era o fato de os dados mais antigos disponíveis serem OHLC final de dia, não tick-by-tick. As bases de dados de EURUSD, por exemplo, complementadas com USDDKK, nosso histórico OHLC vai de 1971 a 2010, mas o histórico tick-by-tick vai só de 1998 a 2010. Desde 2007 já havíamos empreendido esforços com a finalidade de tirar algum proveito dessas bases, mas no início serviam apenas para descartar estratégias ruins, mas não para aprovar estratégias boas, ou seja, se a estratégia ia mal nos dados OHLC, significava que era ruim, mas se fosse bem não era motivo suficiente para supor que fosse boa. O primeiro passo importante foi conseguir resultados em OHLC que cujos lucros anuais médios diferiam dos obtidos em bases tick-by-tick num intervalo aproximadamente estável, cerca de 35% maior ou menor, assim, se nos dados OHLC conseguíamos 20% ao ano, seria esperado que nos dados tick-by-tick (e igualmente em situação real) poderia ser entre 13% e 27% com 95% de segurança. Ainda não era o ideal, porque a diferença de 35% ainda era grande, mas já proporcionava duas informações importantes: a forma da curva de crescimento, que, grosso modo, era muito semelhante em séries OHLC e tick-by-tick, e a performance anual média. Assim os resultados em dados OHLC final de dia passaram a servir não só para descartar estratégias ruins, como também para aprovar estratégias boas com uma margem de incerteza aceitável. A precisão ainda era grosseira, mas era muito melhor do que não ter como tirar proveito dos dados de 1971 a 1998 como meio de validação, porque ter uma estratégia que se sabe que funciona desde 1971 até 2010, ainda que com incertezas sobre o tamanho dos ganhos anteriores a 1998, é melhor do que ter apenas uma estratégia validada depois de 1998.

Outro passo importando foi a distinção entre validação da estratégia em geral e da configuração em particular. Para algumas finalidades, podemos validar a estratégia de 1971 a 2010 e com isso saber, com maior confiança, que a estratégia é válida, e saber também que no período de 1998 a 2010 uma configuração particular daquela estratégia é valida. Isso é melhor do que saber apenas que a configuração de 1998 a 2010 é válida.

Em meados de 2010, finalmente conseguimos realizar testes em séries OHLC por um método que produz resultados praticamente iguais aos obtidos em séries tick-by-tick, desde que a estratégia tenha sido formulada visando esse método de testagem, e isso é válido apenas para algumas configurações específicas. Então bastava adicionar uma etapa ao método de testagem, para ter um ganho brutal na velocidade da otimização e extensão da série histórica. Após a seleção dos melhores genótipos por este método, passa a ser feita uma comparação em bases OHLC e tick-by-tick, como etapa final de validação. Atualmente, mais de 75% dos resultados são mais de 98,5% semelhantes. Lamentavelmente, alguns dos genótipos com mais altas performances são justamente os que apresentam maior diferença entre OHLC e tick-by-tick, e precisam ser descartados porque embora os resultados sejam altos, a confiança na reprodutibilidade dos resultados é baixa, podendo inclusive ficar negativos, por isso precisam ser descartados sem dó. Alguns resultados com a versão 6.3 e 6.4 ainda estão sendo testados em contas demonstrativas, antes de serem definitivamente descartados, porque são tão atraentes que me parece importante ter certeza de não serem válidos, antes de os descartar. Um destes testes é na conta 2075184 da Alpari, com senha (somente leitura) v2vjsvh, que está com +44,39% em 25 dias, num total de 23 operações, sendo 100% lucrativas, e usando stop loss extremamente curto. Os resultados estão muito abaixo do back test, que no mesmo período chega a 49,56% com 24 operações, em vez de 23, e as diferenças nos tamanhos dos spreads não são suficientes para explicar esta diferença.

De qualquer modo, embora uma diferença de 11% seja meio grande em comparação às diferenças típicas menores que 1,5%, como os resultados são muito altos e se conservam altos, começamos a considerar a possibilidade de aprovar esta configuração para uso. Ainda vamos realizar mais alguns testes antes. Também convém esclarecer que a similaridade entre back test tick-by-tick e situação real é parcialmente dependente do tamanho médio das operações. Para operações mais longas, a similaridade é maior. Para operações muito curtas, ou com uma determinada característica que está presente em algumas das configurações da versão 6.4, até mesmo os back tests tick-by-tick podem diferir da situação real em mais de 10%. Isso era previsível quando essa característica foi implementada, aliás havia o risco de a diferença ser ainda maior, mas como os ganhos em performance podem ser muito significativos, o risco de os resultados em situação real apresentarem maior diferença em comparação aos back tests pode se justificar desde que a diferença ainda fique pequena em comparação ao ganho em desempenho.

Aqui cabe focar um assunto que eu pretendia abordar em outro artigo, mas que talvez seja oportuno fazer uma síntese aqui: quanto menor é a diferença entre back test e situação real, melhores são os resultados? O que nos parece que é a resposta é: geralmente sim, mas há duas exceções que precisam ser consideradas:

1) Se os resultados em situação real forem sistematicamente maiores que os resultados em back tests, como no caso de usar nos back tests spreads maiores que a média da situação real. Então uma diferença grande não é necessariamente ruim, desde que seja sempre para um lucro maior na situação real do que o lucro obtido no back test.

2) Quando a configuração requer que algumas condições que forçam um resultado destoante, mas que produz uma performance sensivelmente maior do que usando procedimentos convencionais, e esse ganho em performance não implique aumento no risco e a diferença não seja maior do que o ganho adicional conseguido com esse procedimento.

Nosso objetivo principal não é que os back tests sejam o mais semelhante possível á situação real, mas sim sejam suficientemente semelhantes para que se possa prognosticar lucros tão altos quanto possível e um limite de perdas tão baixo quanto possível, com máximo de uniformidade nos ganhos ao longo do tempo e sem longos períodos negativos. Um back test com ganho anual médio 40% e erro médio 10% é melhor do que um back test com ganho anual médio 15% e erro médio 1%. Além disso, um back test com ganho anual médio 20% e erro médio 5%, sendo o erro sempre para mais (se no back test deu 20% de lucro, na situação real dá 25%), também é melhor do que um back test com ganho anual médio de 20% e erro médio 1% para cima ou para baixo. Então nem sempre a altíssima similaridade entre back test e situação real é algo desejável ou necessário. É importante que a similaridade esteja dentro de limites conhecidos e tenha comportamento conhecido.

O ponto mais forte da versão 6.4 não é a performance, mas sim a monotonicidade crescente semestral. Este tem sido um dos objetivos mais desejados, e com a versão 6.4 estamos bem perto de atingir, restando apenas algumas confirmações. Entre 1998 e 2010, a versão 6.4 não fica nenhum ano negativo, e se dividir em períodos de 6 meses, fica apenas um semestre negativo. Se em vez disso os períodos fossem de 7 meses contados a partir de janeiro ou julho, não teria nenhum período negativo de 7 meses. Se começar a contar em qualquer mês, num total de 141 períodos, em apenas 6 deles fica negativa, ou seja, 96% dos períodos de 6 meses, contados a partir de qualquer mês, fica positivo. Além disso, fica positivo em 81% dos 147 meses testados. Comparando esse resultado com o da versão 3.1415926c, que fica positiva em 100% das operações entre 1999 e 2008, há muitas vantagens importantes a favor da 6.4:

1) A versão 3.1415926c faz apenas 120 operações no período de 1999 a 2008, enquanto a 6.4 faz milhares de operações, dependendo da configuração, podendo chegar a 4000. Isso torna a estabilidade do resultado muito mais uniforme e confiável.

2) A versão 3.1415926c que fica 100% positiva é otimizada por um método menos preditivo, por usar uma parte maior do histórico na otimização, entre outros fatores. A 6.4 é otimizada de várias maneiras diferentes, entre 1/1/2009 e 16/9/2010 e validada de 1998 a 2008, ou entre 2001 e 2008 e validada entre 1998 e 2001 e depois 2008 a 2010. Depois disso, constata-se que as performances obtidas no período de otimização são extremamente semelhantes às obtidas no período de validação. A correlação produto momento de Pearson entre logaritmo do lucro acumulado e tempo transcorrido é 0,992, sendo 0,986 no período de otimização (2001-2008) e 0,985 no período de validação (1998-2001 e 2008-2010), mas como o período de validação é mais curto, é necessário fazer uma correção de Spearman-Brown na proporção dos intervalos, de modo que a correlação correta no período de validação é cerca de 0,989. Além disso, como os intervalos de validação não são contínuos, o cálculo da correlação no período de validação foi feito da seguinte forma: rtotal = 1 – 1 / {1 + [r1 / (1 - r1) + r2 / (1 - r2)]} que é provavelmente a maneira mais correta para calcular a correlação total de dois intervalos separados por um longo período intermediário. Para efeito de comparação, a 6.1 consegue ser otimizada em qualquer ano entre 1971 e 2010 e com a mesma configuração ela fica positiva nos 38,6 anos restantes, porém fica positiva com desempenho médio sensivelmente diferente daquele obtido no período de otimização. E mesmo quando a otimização é feita de 1971 a 2005, o desempenho médio fica um pouco diferente do obtido entre 2005 e 2010. No caso da 6.4, a otimização nos dois casos citados fica praticamente igual (sem diferença estatisticamente significativa) entre o período de otimização e o de validação, indicando quase 0 de overfitting.

3) A versão 3.1415926c otimizada entre 2001 e 2008 ou entre 1998 e 2008, fica negativa em 2009. A 6.4 otimizada entre 2001 e 2008 fica positiva em todos os anos e todos os semestres dos demais períodos. O mesmo se a otimização for feita entre 1998 e 2008. Se a otimização for feita entre 2008 e 2010, fica negativa em apenas 1 semestre dos demais períodos, sendo esse talvez o resultado mais extraordinário e interessante, pois com uma otimização de apenas 2,5 anos são encontrados valores para os parâmetros que produzem resultados positivos em quase todos os semestres de quase 10 anos diferentes do intervalo em que a otimização foi feita. Isso ocorre, em grande parte, graças à multiplicidade de cenários ocorridos entre 2009 e 2010, que cobrem quase todos cenários dos 10 anos anteriores para o conjunto de propriedades relevantes para a versão 6.4.

4) A versão 3.1415926c usa 4 critérios complementares para stop loss, sendo o stop fixo de 250 pips. Algumas versões 4.x e 5.x usam 5 critérios para stop. A 6.4 usa apenas um tipo de stop varável, que condensa vários critérios num único parâmetro, tornando a otimização mais econômica. O valor médio desse stop na 6.4 é cerca de 46 pips! É impressionante um stop tão curto não ser acionado nenhuma vez entre 23 operações realizadas. O stop 5 vezes mais curto que o da melhor configuração da versão 3.1415926c, permite que a 6.4 reaja muito mais rapidamente às inversões de tendência, não apenas cortando as perdas como também tirando maior proveito dos ganhos. Na verdade, tira proveito da maior probabilidade de ganhos, não da longitude do movimento. Ela não tenta permanecer até o final do movimento, como fazem as versões 6.1. Ela permanece até que seja dado o mínimo sinal de que a tendência pode ter finalizado ou invertido. O ruim disso é não permanecer nos longos movimentos e ter ganhos pequenos em tendências longas. O lado bom disso é que em vez de ter 30% a 50% de operações lucrativas, com a 6.4 se tem até 90% de operações lucrativas em alguns casos, e o principal é que se consegue a tão almejada monotonicidade crescente semestral, com apenas 1 semestre negativo em 12,2 anos.

Há outras vantagens, algumas das quais foram comentadas privativamente com nosso amigo Romolo, que são na verdade a parte mais importante que diferencia as novas versões 6.x das anteriores. A maior estabilidade, uniformidade, homogeneidade nos resultados se deve principalmente a isso.

Comparando a 6.4 com a 4.02, uma das grandes diferenças é que a 4.02 fica em dificuldades em mais de 3 anos entre 1998 e 2010, enquanto a 6.4 não fica em dificuldades em nenhum momento, tendo apenas 1 período negativo de 6 meses nesse intervalo de 12,2 anos.

A homogeneidade no desempenho da 6.4 em todos os períodos é muito maior do que nas 4.x, indicando robustez muito maior às mudanças de cenário, tanto as mudanças pequenas como as grandes.

A 6.4 opera em tendência e não depende de micropropriedades do Mercado para funcionar. A 4.02 e as 4.x e 5.x em geral, funcionam quando algumas condições são atendidas, e deixam de funcionar se estas condições estiverem ausentes.

A performance anual média da 6.4 com baixo risco nas configurações validadas até o momento varia entre 26% e 39% ao ano. As 4.02 podem gerar mais de 200% ao ano com mesmo nível de máximo drawdown, desde que o cenário seja favorável, mas ficam gravemente negativas em cenários desfavoráveis. As 6.4 geram entre 26% e 39% não importando qual seja o cenário.

Quando surge um cenário novo e muito diferente dos anteriores, a 4.02 precisa de várias adaptações para tentar se adaptar, e em alguns casos a adaptação parece não ser possível. A 6.4 não precisa de adaptação manual, ela se adapta à medida que o novo cenário vai se formando, desde que o cenário dure pelo menos algumas semanas. A 4.02 precisa de que os cenários se mantenham “comportados” por vários meses para funcionar, e muitas vezes requer que sejam feitas novas otimizações para se ajustar a cenários novos, inclusive não sendo possível otimizar para alguns dos cenários muito selvagens. A 6.4 não precisa de novas otimizações com novos inputs de dados recentes. Quando digo que não precisa, quero dizer inclusive que não fica mais bem calibrada se adicionar semanalmente ou diariamente os dados dos novos resultados. Os valores ótimos para os parâmetros se conservam quase inalterados com essas adições de dados. Isso decorre de alta homogeneidade, que faz com que as propriedades em que ela se baseia sejam praticamente iguais em quase todos os períodos, e adicionar novos dados que sejam redundantes com os anteriores não agregam quase nada. Somente em casos de cenários inéditos e muito diferentes dos anteriores é que pode ser interessante fazer nova otimização, para incorporar os dados novos. Se bem que nas otimizações entre 2001 e 2008, os resultados ficam basicamente iguais aos que se obtém com otimizações entre 1998 e 2010, mesmo 2010 sendo sensivelmente diferente dos períodos anteriores, ou seja, ela se adapta ao cenário de 2010 com base na maneira como fez as adaptações em 2000, 2002 e 2008. Ela não tenta usar em 2010 os parâmetros de 2008, mas sim ajustar para 2010 com base no histórico anterior, da mesma forma que ajustou a 2008 com base no histórico anterior.

De modo geral, a 6.4 é mais dinâmica, mais versátil, mais robusta, mais “inteligente”, mais ágil, mais acurada do que as versões anteriores. Um ponto ruim é que mesmo usando método mais rápido para otimização, ela demora muito mais que as versões anteriores. A 6.1 leva cerca de 8 horas para ser otimizada entre 1998 e 2010. A 6.4 leva 394 horas no mesmo período e usando o mesmo método para otimização. Isso é interessante, porque em 2007 seria inviável ter concebido algo como a 6.4 com o método de otimização da época, que levaria mais de 40.000 horas para apenas 1 otimização. A evolução nos métodos para otimização acaba se mostrando quase tão importante quanto a evolução das próprias estratégias, não apenas por poupar muito tempo, como também por viabilizar a implementação de idéias mais elaboradas e complexas, que antes seriam desencorajadoras pela lentidão na otimização.

Um dos diferenciais na versão 6.4, que é também uma das causas da lentidão, é que ela consegue transformar uma variável que era discreta, em versões anteriores, numa variável contínua, tornando o processo de adaptação muito mais suave, sem sobressaltos. Só para proporcionar uma idéia do que isso representa, é como se conseguíssemos usar IFR com um número fracionário de períodos. Em vez de IFR 9 períodos, seria como usar 8,46 períodos. IFR de 8,46 minutos, ou 2,7 minutos, não é configurável, mas existem meios de simular isso com altíssima precisão e excelentes fundamentos. Estou citando o exemplo de minutos porque no caso de 2,7 horas seria fácil, usando intervalos discretos menores. Por exemplo: 162 minutos inteiros correspondem a 2,7 horas, mas isso implica um comportamento bem diferente, com resultados diferentes, ou seja, IFR de 300 minutos é muito diferente de IFR de 5 horas, embora 5 horas tenham 300 minutos. Não é essa solução óbvia, primária e inapropriada que usei na versão 6.4. O que usei é semelhante ao que propus em 1995, numa das aulas de laboratório de Física, para aplicar uma distribuição binomial (que é discreta) para representar a distribuição de uma variável contínua. A solução que propus era bem simples e consiste em usar fatoriais de números não-inteiros para que a binomial se comporte como uma função contínua. Isso pode ser feito utilizando um método que desenvolvi em 1992 (e foi premiado pelo IBECC em 1994), ou outro que desenvolvi em 2001, ou ainda a função Gamma, ou a fórmula de Stirling. Enfim, há várias maneiras de se fazer isso.

A qualidade da modelagem que se consegue fazendo essa mudança é incrivelmente superior aos métodos anteriores, especialmente quando se usa valores discretos pequenos. Quando determinado parâmetro atinge o valor ótimo 200 ou 100, fica claro que convém testar os valores intermediários para conferir se 142 ou 175, por exemplo, não ficariam mais precisos. Mas quando o valor ótimo é 2 ou 1, sendo uma variável discreta, fica a dúvida se não seria possível que um valor intermediário entre 1 e 2 produziria resultados muito melhores. Quando estes valores 1 ou 2 dizem respeito a um candle, ou a alguma entidade que não possa ser facilmente fracionada, a solução apropriada não é tão simples, embora seja fácil pensar em muitas soluções porcas. A versão 6.4 usa uma solução elegante para esse problema, eu quase diria que é uma solução artística, porém para meus padrões uma solução artística precisaria comover esteticamente, e essa não chega a esse ponto. É elegante, porém fria. Portanto a versão 6.4 é um trabalho científico de alto nível e razoavelmente criativa (não tão criativa como as 4.x), mas não é uma obra de Arte.

A título de curiosidade, quem quiser conhecer os métodos que desenvolvi para calcular fatoriais de números não inteiros, inclusive negativos, pode encontrá-los aqui:

http://www.sigmasociety.com/old/fatorial.html

Quase todas as modelagens para o Mercado Financeiro são ao estilo “brucutu”, deformando os cubos para forçá-los a entrar em buracos circulares ou arrancando pedaços de algo e enfiando em outro lugar para que algo funcione, sem fundamentos analíticos para os procedimentos adotados. Quando surgem situações nas quais se faz algo que seja não apenas eficiente do ponto de vista prático, mas também elegante do ponto de vista matemático, é bem mais agradável. A versão 6.4 é uma das poucas que combina elegância e eficiência.