Zen e a arte da otimização de trading systems

 

Um pouco sobre os objetivos desse tópico 

Resolvi abrir esse tópico para trocar ideias na área de otimização de trading systems, que confesso é uma das minhas preferidas em termos de estudos e pesquisas com robôs traders.

Minha visão é que até mesmo uma boa estratégia, se não for bem otimizada, não irá atingir os resultados esperados, e que, apesar disso, existe uma grande lacuna na literatura internacional em relação aos métodos de otimização.

E, por incrível que pareça, a recíproca é verdadeira, ou seja, uma estratégia tão simples como o cruzamento de médias móveis pode ser rentável se bem otimizada.

Na prática, o que percebo é que a maior parte dos traders foca quase a totalidade de seus esforços na estratégia e pouco, ou quase nada, na otimização.

 

É verdade figurelli. Também penso que a otimização é muito importante em uma estratégia, pois com ela se pode obter uma melhor configuração a longo prazo, logicamente acompanhada por testes para frente.

Com uma otimização se pode saber se a estratégia é lucrativa a longo prazo ou não. Já se o trader se basear apenas na estratégia, não poderá saber se de fato é lucrativa ou não por muito tempo.

 

Concordo com você Figurelli, porém a otimização requer tempo e disciplina, aliado a um bom sistema automatizado, já mandei fazer vários sistemas automatizados e percebi que o maior problema nos meus sistemas foi a dificuldade na minha comunicação com os desenvolvedores aliado com a minha falta de conhecimento e eles praticamente não participam nas soluções dos óbices. Agora mesmo estou desenvolvendo um sistema em parceria e encontramos um problema, tanto que entrei com um serviço para outro desenvolvedor e tentar uma solução.

Então além da otimização, existe a questão do investidor não conseguir se comunicar com o programador.

Mas deixando a choradeira de lado, focando no objetivo do seu tópico, a Metaquotes tem um serviço neste sentido, MQL5 Cloud Network, mas confesso que ainda não não tive tempo e nem  paciência para verificar como funciona o sistema. Até porque ainda está em inglês, mas acredito que até o segundo semestre do ano que vem o site http://cloud.mql5.com  e o www.metatrader5.com estará traduzido.

Em termos de otimização a plataforma MT5 está muito mais fácil e rápido de operar do que a MT4, onde existe alguns macetes para conseguir uma modulação a 90%, ou mesmo, 99% (esta aqui já mais complicada e segundo os entendidos a modulação a 99% é mais especifica para estratégias tipo "scalper").

A propósito, se você tiver um sistema para compartilhar comigo referente ao meu serviço, quando o meu sistema estiver pronto compartilho com você. Lhe garanto que é bem diferente dos que você já viu, é uma abordagem diferente para o Gerenciamento de Risco.  

Espero ter ajudado! 

 

Figurelli, tópico bastante interessante esse! Acho a ferramenta de otimização do MetaTrader muito boa para backtests. Entretanto, acho ela bem fraca no que diz respeito a forward tests. Na minha opinião, e concordando com tcferreira, uma estratégia bem otimizada deve passar bem tanto por testes pra trás como por testes para frente, para garantir que no caso de "dados ainda não vistos" o resultado da estratégia possa ser analisado.

Aproveito aqui seu tópico no fórum para pedir sugestões de softwares que possam ser usados para forward tests, além de descrever as principais funcionalidades dos mesmos. Por exemplo, me interessaria bastante por um programa que pudesse realizar testes para frente onde fosse possível controlar a distribuição estatística que geraria os dados. Eu conheço alguns programas muito bons onde você tem o controle total da distribuição estatística que gera os dados (Matlab e Mathematica, por exemplo), entretanto, não há uma interação desses programas com o MetaTrader, de forma que fosse possível integrar estratégias criadas na linguagem MQL5 com os dados gerados por esses programas.

Uma outra crítica que faço ao MetaTrader no que diz respeito a otimização é sua incapacidade de testar corretamente estratégias tick-a-tick... explicando melhor: apesar do MetaTrader oferecer o método "Cada tick" dentro do Strategy Tester, ele não trás uma informação que na minha opinião é fundamental para diversas estratégias que eu desenvolvo: como cada tick está sendo executado no mercado, se no comprador, no vendedor ou entre as ofertas de compra e de venda (i.e., at bid, at ask ou between quotes).

No mais, otimização (seja ela para frente ou para trás) é fundamental para que qualquer estratégia possa ser bem implementada na prática.

 
PauloBrasil:

Concordo com você Figurelli, porém a otimização requer tempo e disciplina, aliado a um bom sistema automatizado, já mandei fazer vários sistemas automatizados e percebi que o maior problema nos meus sistemas foi a dificuldade na minha comunicação com os desenvolvedores aliado com a minha falta de conhecimento e eles praticamente não participam nas soluções dos óbices. Agora mesmo estou desenvolvendo um sistema em parceria e encontramos um problema, tanto que entrei com um serviço para outro desenvolvedor e tentar uma solução.

Então além da otimização, existe a questão do investidor não conseguir se comunicar com o programador.

Mas deixando a choradeira de lado, focando no objetivo do seu tópico, a Metaquotes tem um serviço neste sentido, MQL5 Cloud Network, mas confesso que ainda não não tive tempo e nem  paciência para verificar como funciona o sistema. Até porque ainda está em inglês, mas acredito que até o segundo semestre do ano que vem o site http://cloud.mql5.com  e o www.metatrader5.com estará traduzido.

Em termos de otimização a plataforma MT5 está muito mais fácil e rápido de operar do que a MT4, onde existe alguns macetes para conseguir uma modulação a 90%, ou mesmo, 99% (esta aqui já mais complicada e segundo os entendidos a modulação a 99% é mais especifica para estratégias tipo "scalper").

A propósito, se você tiver um sistema para compartilhar comigo referente ao meu serviço, quando o meu sistema estiver pronto compartilho com você. Lhe garanto que é bem diferente dos que você já viu, é uma abordagem diferente para o Gerenciamento de Risco.  

Espero ter ajudado! 

Sem dúvida Paulo, se o problema de comunicação já existe no mesmo idioma, imagina com duas pessoas nativas em outros idiomas, como acontece muito por aqui.

Quanto ao Cloud, tenho utilizado bastante, é uma ferramenta que tem evoluído e está cada vez mais confiável. Mas com robôs mais complexos, envolvendo vários instrumentos e EAs ao mesmo tempo ainda não estou seguro com os resultados, e nesses casos tenho preferido diretamente a CPU local.

Quanto aos sistemas, vamos estudar, esse é um ponto para continuarmos na área privada.

Obrigado pela ótima contribuição, vou colocar outras ideias por aqui, esse é um assunto bem vasto! 

 
Malacarne:

Figurelli, tópico bastante interessante esse! Acho a ferramenta de otimização do MetaTrader muito boa para backtests. Entretanto, acho ela bem fraca no que diz respeito a forward tests. Na minha opinião, e concordando com tcferreira, uma estratégia bem otimizada deve passar bem tanto por testes pra trás como por testes para frente, para garantir que no caso de "dados ainda não vistos" o resultado da estratégia possa ser analisado.

Aproveito aqui seu tópico no fórum para pedir sugestões de softwares que possam ser usados para forward tests, além de descrever as principais funcionalidades dos mesmos. Por exemplo, me interessaria bastante por um programa que pudesse realizar testes para frente onde fosse possível controlar a distribuição estatística que geraria os dados. Eu conheço alguns programas muito bons onde você tem o controle total da distribuição estatística que gera os dados (Matlab e Mathematica, por exemplo), entretanto, não há uma interação desses programas com o MetaTrader, de forma que fosse possível integrar estratégias criadas na linguagem MQL5 com os dados gerados por esses programas.

Uma outra crítica que faço ao MetaTrader no que diz respeito a otimização é sua incapacidade de testar corretamente estratégias tick-a-tick... explicando melhor: apesar do MetaTrader oferecer o método "Cada tick" dentro do Strategy Tester, ele não trás uma informação que na minha opinião é fundamental para diversas estratégias que eu desenvolvo: como cada tick está sendo executado no mercado, se no comprador, no vendedor ou entre as ofertas de compra e de venda (i.e., at bid, at ask ou between quotes).

No mais, otimização (seja ela para frente ou para trás) é fundamental para que qualquer estratégia possa ser bem implementada na prática.

Malacarne, quero entender melhor tuas críticas, pois a ferramenta de testes do MT5 me parece bastante completa, principalmente pela abertura das linhas de teste e do algoritmo de otimização para o desenvolvedor.

Como o Paulo comentou acima, houve uma grande evolução desde o MT4, onde só havia simulação de 1 instrumento e sem o teste para frente.

Aqui é outro ponto, pois o Thiago também falou em teste para frente, e na prática eu divido esse em dois tipos. Um é o existente na plataforma, que é o que se chama tecnicamente de teste fora da amostra (o backtesting é o teste na amosta). Mas o teste em conta virtual do setup resultado da otimização também é um teste para frente, só que nesse caso o presente real.

Nesse ponto o MT5 traz, pelo menos falando de Brasil, algo absolutamente novo, que é o potencial de testar trading systems em conta virtual, o que internacionalmente é conhecido como "paper trading".

Dessa forma, recomendo investigares mais as rotinas internas OnTester e OnTestePass, além das internas de análise de frames de otimização, que me parecem oferecer um potencial sem limites de controle e análise estatística.

Mas concordo com você que isso não é entregue pronto para o usuário da plataforma, é algo disponível apenas na camada de desenvolvimento.

A informação de tick é atualizada a cada mudança de preços, e no caso da BM&FBovespa ela corresponde justamente à diferença de preços entre comprador e vendedor. Mas concordo com você que não estão claras as informações, mas na prática note que no MT5, a funcionalidade de operação em bolsas, como a BM&FBovespa, é uma novidade e novo recurso. No Forex, o spread relacionado à diferença de preços de compra e venda é o paradigma (embora exista corretagem também em alguns brokers). Mas com ações, a corretagem é o que vale e o spread em teoria deveria ser zero. 

Anyway, muito interessantes tuas observações, e obrigado pela contribuição, temos várias coisas a analisar nesse tópico em relação ao que você comentou e que realmente impactam na otimização. 

 

Além dos problemas da plataforma, que vocês estão comentando nesse tópico, tem um outro problema que espero que na BM&FBovespa não seja tão crítico como no Forex, mas que é importante estar atento e faz parte desse tópico.

Estou falando da qualidade dos dados entregues pela corretora, já que são eles que serão utilizados no backtesting/forwad testing, e também nos problemas de latência e liquidez, que não são fáceis de serem emulados.

Isso impacta os resultados quando colocamos os robôs no mercado e em conta real, pois muitas vezes o que parecia ser uma otimização realista na prática era apenas uma ilusão de resultados.

Ou seja, mesmo que todas questões já discutidas anteriormente fossem precisamente endereçadas, ainda assim a qualidade dos dados e problemas de latência e liquidez do mundo real irão impactar na nossa otimização.

 
figurelli:

Malacarne, quero entender melhor tuas críticas, pois a ferramenta de testes do MT5 me parece bastante completa, principalmente pela abertura das linhas de teste e do algoritmo de otimização para o desenvolvedor.

Como o Paulo comentou acima, houve uma grande evolução desde o MT4, onde só havia simulação de 1 instrumento e sem o teste para frente.

Aqui é outro ponto, pois o Thiago também falou em teste para frente, e na prática eu divido esse em dois tipos. Um é o existente na plataforma, que é o que se chama tecnicamente de teste fora da amostra (o backtesting é o teste na amosta). Mas o teste em conta virtual do setup resultado da otimização também é um teste para frente, só que nesse caso o presente real.

Nesse ponto o MT5 traz, pelo menos falando de Brasil, algo absolutamente novo, que é o potencial de testar trading systems em conta virtual, o que internacionalmente é conhecido como "paper trading".

Dessa forma, recomendo investigares mais as rotinas internas OnTester e OnTestePass, além das internas de análise de frames de otimização, que me parecem oferecer um potencial sem limites de controle e análise estatística.

Mas concordo com você que isso não é entregue pronto para o usuário da plataforma, é algo disponível apenas na camada de desenvolvimento.

A informação de tick é atualizada a cada mudança de preços, e no caso da BM&FBovespa ela corresponde justamente à diferença de preços entre comprador e vendedor. Mas concordo com você que não estão claras as informações, mas na prática note que no MT5, a funcionalidade de operação em bolsas, como a BM&FBovespa, é uma novidade e novo recurso. No Forex, o spread relacionado à diferença de preços de compra e venda é o paradigma (embora exista corretagem também em alguns brokers). Mas com ações, a corretagem é o que vale e o spread em teoria deveria ser zero. 

Anyway, muito interessantes tuas observações, e obrigado pela contribuição, temos várias coisas a analisar nesse tópico em relação ao que você comentou e que realmente impactam na otimização. 

Figurelli, apesar da grande evolução da ferramenta MetaTrader, acredito que ela ainda está "engatinhando" no que diz respeito a forward tests... De acordo com a própria documentação, o forward test do MetaTrader se resume simplesmente em retirar "trechos" dos dados reais e "embaralhá-los" de forma que pareçam "novos dados". Essa é uma velha ferramenta estatística conhecida como "bootstraping", onde na verdade não há nenhum controle, como dito, na distribuição estatística que gera os dados em si. Meu interesse, repito, seria ter esse controle da distribuição estatística geratriz dos dados, o que não ocorre na atual versão do MetaTrader.

Com relação à segunda crítica, essa sim considero ainda mais grave... tanto no modo de teste quanto no modo de otimização, a ferramenta MetaTrader não faz nenhuma distinção com relação ao modo de execução do último negócio (at bid, at ask ou between quotes). Talvez isso se deva ao fato de que o MetaTrader sempre foi uma ferramenta mais voltada para Forex e, até onde me consta, apenas agora com a entrada deles no Brasil é que eles estão tendo mais acesso e entendimento de um mercado organizado de bolsa. Logo, eles desenvolveram uma ferramenta robusta para mercados de balcão (OTC), e por isso mesmo eles ganharam mercado nos últimos anos... entretanto, para mercados organizados de bolsa, a ferramenta deles ainda está sendo "adaptada". Creio que nas próximas versões eles possam melhorar isso, mas, como dito, para mim, que desenvolvo produtos que levam em consideração o modo de execução de cada tick, a ferramenta MetaTrader é de pouca utilidade no que diz respeito a otimização.

 
Malacarne:

Figurelli, apesar da grande evolução da ferramenta MetaTrader, acredito que ela ainda está "engatinhando" no que diz respeito a forward tests... De acordo com a própria documentação, o forward test do MetaTrader se resume simplesmente em retirar "trechos" dos dados reais e "embaralhá-los" de forma que pareçam "novos dados". Essa é uma velha ferramenta estatística conhecida como "bootstraping", onde na verdade não há nenhum controle, como dito, na distribuição estatística que gera os dados em si. Meu interesse, repito, seria ter esse controle da distribuição estatística geratriz dos dados, o que não ocorre na atual versão do MetaTrader.

Malacarne, esse texto que você retirou é sua tradução ou tem algum lugar traduzido? Até onde eu saiba o forward é preciso, com dados dentro do backtesting, portanto não existe bootstraping.

Respeito tua opinião, e posso estar enganado, mas o que o MT5 faz é o padrão de um backtesting dentro da amostra e depois testado fora da amostra. Se fizeres o mesmo teste de um setup qualquer, colocando ou não a opção de forward, vais ver que o resultado será o mesmo, não vejo essa imprecisão.

Em outras palavras, não existe amostra estatística e sim o market data do passado que é utilizado de forma diferente a um simples backtesting, que é o processo de forward que envolve duas passagens, que são visualmente identificadas na ferramenta. 

Da minha experiência com testes para frente com o MT5 ele realmente faz muito bem o que considero essencial, que é filtrar o overfitting, o que já comprovei a eficácia com teste comparativo em milhares de contas.

Posso estar enganado, mas o que me parece, isso sim, é que a tradução para português ou a interpretação do texto é que não está fiel à realidade do que a ferramenta realmente faz.

Se não for isso, espero que não mudem, porque para mim essa tecnologia tem se mostrado muito robusta e eficaz ;-)

 
figurelli:

Malacarne, esse texto que você retirou é sua tradução ou tem algum lugar traduzido? Até onde eu saiba o forward é preciso, com dados dentro do backtesting, portanto não existe bootstraping.

Respeito tua opinião, e posso estar enganado, mas o que o MT5 faz é o padrão de um backtesting dentro da amostra e depois testado fora da amostra. Se fizeres o mesmo teste de um setup qualquer, colocando ou não a opção de forward, vais ver que o resultado será o mesmo, não vejo essa imprecisão.

Em outras palavras, não existe amostra estatística e sim o market data do passado que é utilizado de forma diferente a um simples backtesting, que é o processo de forward que envolve duas passagens, que são visualmente identificadas na ferramenta. 

Da minha experiência com testes para frente com o MT5 ele realmente faz muito bem o que considero essencial, que é filtrar o overfitting, o que já comprovei a eficácia com teste comparativo em milhares de contas.

Posso estar enganado, mas o que me parece, isso sim, é que a tradução para português ou a interpretação do texto é que não está fiel à realidade do que a ferramenta realmente faz.

Se não for isso, espero que não mudem, porque para mim essa tecnologia tem se mostrado muito robusta e eficaz ;-)

Na documentação consta:

The Process of Forward Testing

When the forward testing is enabled, a selected part is separated from the period set in the "Date" field. The first part is the period of back testing, while the second one is the period of forward testing. 

 

No meu entendimento, resampling purinho... Esse é um dos métodos de bootstraping...

 
Malacarne:

Na documentação consta:

The Process of Forward Testing

When the forward testing is enabled, a selected part is separated from the period set in the "Date" field. The first part is the period of back testing, while the second one is the period of forward testing. 

 

No meu entendimento, resampling purinho... Esse é um dos métodos de bootstraping...

Note que "a selected part is separated" está justamente referindo-se à parte do market data histórico fora da amostra, e que isso qualquer sistema de forward testing deve fazer.

Em outras palavras, para implantar qualquer forward testing é necessário separar o que fica dentro ou fora da amostra, é apenas uma divisão dos dados, nada além disso.

O que poderia ser discutido nesse caso é se essa técnica é válida, mas o que o MT5 faz é o forward test recomendado na literatura. 

Na minha opinião, nisso não há resampling nem bootstrapping, já que existe apenas uma amostra fixa e o ajuste dos parâmetros de entrada é feito sem conhecimento dos dados fora da amostra. 

Se eu fosse criar uma expressão para o que é feito, eu diria que estamos criando um "futuro virtual", já que a plataforma na segunda passagem realiza testes do setup encontrado como se realmente fosse um futuro totalmente desconhecido. E compara vários setups encontrados dentro da amostra com dados fora da amostra (o "futuro virtual"). E ai está o poder dessa abordagem, pois não é necessário esperar o futuro acontecer para validar vários setups do backtesting. E você ainda pode definir com precisão as datas de início e fim desse futuro (não é a plataforma que faz isso).

Mas a amostra é precisa (dentro da qualidade do market data do provedor) e uma só, sem nenhum tipo de tratamento estatístico além da própria seleção e otimização do backtesting.

Razão: