Eu tenho recebido muitos e-mails de pessoas que estão realizando trabalhos de final de curso (TCC) e que pedem orientação nesse sentido.
Eu não tenho muito tempo para poder ajudar essas pessoas, pois estou focado em pesquisas de trading systems vencedores para aplicação no mundo real, e não somente para fins acadêmicos. Acredito até que essas pessoas já devam ter orientação suficiente nos referidos cursos.
Assim sendo, se você tem algum projeto, me envie dados sólidos de resultados alcançados para que eu possa enviar material que já tenho também, com progressos obtidos. Eu procuro pesquisadores para atuar em parceria em um projeto de um sistema de lucros constantes, que tem demonstrado ser factível.
Inteligência Artificial nos Investimentos
Redes Neurais, Algoritmos Genéticos e Sistemas Especialistas na Bolsa de Valores.
terça-feira, 8 de maio de 2012
sexta-feira, 13 de abril de 2012
Redes Neurais na Bolsa de Valores
Tenho pesquisado a construção de uma rede neural não sofisticada para emitir previsões de compra e venda para uma carteira de 10 ações na Bovespa.
O conjunto de treinamento da rede é composto por normalizações de dados que contem informações sobre os ativos nos últimos três anos, como: candles de reversão, IFR, valor atual em função do suporte e resistência, valor em função das médias móveis curtas e longas, oscilador estocástico, variação de volume e momento de preços. O resultado para cada observação (linha de treinamento) é a reta de regressão linear dos próximos 10 dias, sendo essa utilizada para definir se houve nos dias subsequentes um movimento notável de subida ou de descida ou, ainda, se permaneceu estacionária (congestão).
A rede vem sido aplicada em operações reais desde janeiro deste ano e produziu os seguintes resultados mensais:
O conjunto de treinamento da rede é composto por normalizações de dados que contem informações sobre os ativos nos últimos três anos, como: candles de reversão, IFR, valor atual em função do suporte e resistência, valor em função das médias móveis curtas e longas, oscilador estocástico, variação de volume e momento de preços. O resultado para cada observação (linha de treinamento) é a reta de regressão linear dos próximos 10 dias, sendo essa utilizada para definir se houve nos dias subsequentes um movimento notável de subida ou de descida ou, ainda, se permaneceu estacionária (congestão).
A rede vem sido aplicada em operações reais desde janeiro deste ano e produziu os seguintes resultados mensais:
Como pode ser observado nos resultados, o aprendizado da rede tem proporcionado uma evolução dos lucros mês a mês.
Se você realiza pesquisas nessa área escreva para o Blog contando as suas experiências e podemos discutir caminhos para melhorar esta e outras redes dedicadas..
sábado, 23 de julho de 2011
Livro sobre IA nos Investimentos
Foi publicado no Clube dos Autores o livro de minha autoria "Inteligência Artificial nos Investimentos". O livro pode ser comprado no site da Editora (link no final do post) na versão impressa (R$ 32,51) e na versão E-Book (R$ 12,06).
O livro reúne uma série de artigos meus que tratam da aplicação de técnicas de Inteligência Artificial para administração de aplicações financeiras e de gerenciamento de carteira de investimentos.
Sinopse: Há na literatura relatos de sucessos obtidos por sistemas inteligentes dedicados que atuam nos mercados acionários de todo o mundo, onde se destacam a utilização de redes neurais, lógica nebulosa, algoritmos evolutivos ou genéticos, teoria do caos e fractais e sistemas especialistas, tudo com o objetivo de automatizar decisões de oportunidade de negociação, ou ainda sugerindo a organização de portfólios ou carteira de ações.
Embora sistemas desse tipo sejam normalmente descritos como sendo muito complexos, os princípios básicos de sua concepção são mais simples do que parecem, e podem ser aplicados em escala menos sofisticada para serem processados por computadores pessoais, obtendo-se resultados positivos em aplicações práticas muito interessantes.
http://clubedosautores.com.br/book/48995--Inteligencia_Artificial_nos_Investimentos
http://clubedosautores.com.br/book/48995--Inteligencia_Artificial_nos_Investimentos
terça-feira, 28 de dezembro de 2010
Programação Genética
Os Algoritmos Evolutivos, dos quais se destacam os Algoritmos Genéticos e a Programação Genética, são muito estudados com o objetivo de serem empregados na otimização de investimentos. O objetivo principal desses estudos é descobrir uma estratégia de compra e venda de ações, extraindo-a dos próprios dados históricos desses ativos, de forma automática.
A Programação Genética, em particular, torna-se o método mais interessante para alcançar esses objetivos. Ela utiliza os mesmos princípios dos algoritmos genéticos, porém a forma de representar uma solução para o problema é feita em forma de uma árvore de decisão, ao invés de uma sequência de bits binários.
Na programação genética a operação de recombinação é feita pela troca de duas sub-árvores de cada uma das soluções selecionadas para a reprodução.
Vamos imaginar que o nosso problema seja o de encontrar uma regra de compra e venda de um determinado ativo. Vamos também imaginar uma estrutura de árvore de decisão que utilize uma variedade de indicadores técnicos. Soluções iniciais seriam construídas selecionando aleatoriamente um desses índices, um operador lógico e um valor de comparação. Por exemplo:
Índices: Índice de Força Relativa (IFR), Oscilador Estocástico Lento (%K) , Ultimate Oscilator (UO), Preço_Fechamento (PR), Média Móvel Exponencial de 5 dias (MME5), etc.
Operadores Lógicos: “<” e” > “
Valores Comparativos: {0 .. 100}
Exemplo de nó raiz da Árvore Binária de Decisão gerado aleatoriamente: "SE IFR < 50"
Agora para cada sub-árvore deste nó é sorteado também um dos índices ou uma conclusão (Comprar, Vender ou Manter). Se a árvore já estiver alcançado um limite pré-estabelecido de níveis (4 por exemplo) só serão sorteados valores relativos às conclusões (nós folhas). Um exemplo de árvore de decisão aleatória criada poderia ser:
Esta árvore é uma solução para o problema de investimento. Cada caminho partindo do nó raiz até um dos nós folhas é uma regra de operação. Na árvore inicial mostrada, há cinco regras bem definidas:
Regra 1: SE IFR < 50 ENTÃO NADA A FAZER
Regra 2: SE IFR >= 50 E UO <= 80 ENTÃO VENDE
Regra 3: SE IFR >= 50 E UO > 80 E MME5 < MME9 ENTÃO COMPRA
Regra 4: SE IFR >= 50 E UO > 80 E MME5 >= MME9 E PREÇO_FECHAMENTO > MME72 ENTÃO VENDE
Regra 5: SE IFR >= 50 E UO > 80 E MME5 >= MME9 E PREÇO_FECHAMENTO <= MME72 ENTÃO NADA A FAZER
Da mesma forma como no algoritmo genético, cada uma das soluções iniciais (árvores de decisão binárias), como a acima apresentada, seria avaliada para determinar seu fitness, ou seja, o fitness seria o retorno financeiro alcançado aplicando-se a árvore de decisão como sistema de compra e venda do ativo a que a estratégia foi submetida.
Agora, de posse do conjunto de soluções avaliadas, seriam eliminadas as árvores de menor retorno e recombinadas as de melhor fitness. O processo de recombinação funcionaria da forma apresentada na figura a seguir, onde os pontos de corte e troca seriam eleitos por sorteio aleatório:
Uma forma de fazer a mutação em uma das árvores filhas seria sortear um dos nós e alterar um dos seus componentes, como por exemplo “>” por “<”, IFR por UO, 32 por 71, COMPRAR por VENDER, etc...
Após inúmeras gerações do algoritmo, a melhor árvore de decisão, a de melhor fitness, é então selecionada como vitoriosa e utilizada como estratégia de compra e venda do ativo em questão.
A idéia básica é que o sistema, ao selecionar pares de estratégias bem sucedidas e combiná-las para gerar novas estratégias, terá um refinamento sucessivo e progressivo, tal qual o da evolução das espécies na natureza.
segunda-feira, 27 de dezembro de 2010
Algoritmos Evolutivos
Para que se possa entender a aplicação dos Algoritmos Evolutivos, particularmente a Programação Genética, aplicados aos investimentos, é necessário que se entenda os conceitos básicos relativos a esses procedimentos.Algoritmos Evolutivos são algoritmos baseados em uma gama de mecanismos da evolução biológica e serviram para originar conceitos um pouco mais recentes, como o dos Algoritmos Genéticos e da Programação Genética. A motivação para a construção de tais modelos computacionais surgiu de teorias onde a natureza, por meio de seus recursos, resolveu problemas de alto nível de complexidade, ou seja, determinar a quantidade de recursos para resolver problemas de sobrevivência.
A partir de um problema de otimização, mesmo que se desconheça o que se está otimizando, é possível encontrar uma solução ótima ou aproximada de boa qualidade, através dos Algorítimos Evolutivos e suas variações. Ou seja, tais algoritmos podem trabalhar em cima de problemas, sem que exista um conhecimento explicito. O único requerimento desses sistemas é que uma avaliação seja dada a cada uma das soluções encontradas.
Algoritmos genéticos são uma classe particular de algoritmos evolutivos que usam técnicas inspiradas pela biologia evolutiva como hereditariedade, mutação, seleção natural e recombinação. Um algoritmo genético (AG), é uma técnica de busca utilizada na ciência da computação para achar soluções aproximadas em problemas de otimização e busca, fundamentado principalmente pelo americano John Henry Holland.
Algoritmos genéticos são implementados como uma simulação de computador em que uma população de representações abstratas de soluções é selecionada em busca de soluções melhores. A evolução geralmente se inicia a partir de um conjunto de soluções criado aleatoriamente e é realizada por meio de gerações. A cada geração, a adaptação de cada solução na população é avaliada, alguns indivíduos são selecionados para a próxima geração, e recombinados ou mutados para formar uma nova população. A nova população então é utilizada como entrada para a próxima iteração do algoritmo.
Para entendimento prático da aplicação de um algoritmo genético, será analisado um problema clássico da otimização combinatória denominado “Problema da Mochila”.
O Problema da Mochila (PM)
Considere-se que um indivíduo prepara-se para fazer uma caminhada e deseja escolher, dentre "n" objetos disponíveis, aqueles a colocar na mochila que irá carregar. Cada objeto tem um peso específico a ele associado. Além disso, cada um deles traz para o indivíduo, caso seja escolhido, um certo valor "v" mensurável de satisfação. A mochila, entretanto, tem capacidade disponível para apenas "c" unidades de peso (embora a soma dos pesos de todos os objetos disponíveis exceda essa capacidade).
Resumindo a situação, embora possivelmente o desejasse, o indivíduo não tem como levar todos os objetos em sua caminhada. Deverá, então, restringir-se a escolher um subconjunto dos objetos disponíveis que seja compatível com a capacidade da mochila. Idealmente, tal subconjunto deverá trazer ao andarilho o maior grau possível de satisfação. A função objetivo que é associada ao problema, ou seja, a função que irá definir o objetivo de maximizar a satisfação a ser alcançada pelo indivíduo, será expressa pelo somatório das medidas de satisfação de todos os objetos selecionados para serem inseridos na mochila.
Como exemplo prático, considere-se que o número "n" de objetos candidatos a entrar na mochila seja, por exemplo, 8; que a capacidade "c" da mochila seja igual a, por exemplo, 60; que os pesos dos objetos sejam dados, por exemplo, respectivamente, por p1 = 25, p2 = 10, p3 = 20, p4 = 19, p5 = 4, p6 = 3, p7 = 6 e p8 = 15, ou, genericamente, por p = (25, 10, 20, 19, 4, 3, 6, 15); e que os valores de satisfação trazidos por cada item sejam, por exemplo, v = (48, 20 39, 37, 7, 5, 10, 26).
Denominamos a especificação do problema, como acabamos de apresentar acima, uma instância de PM. A seguir, lançaremos mão, constantemente, da instância de PM expressa por p = (25, 10, 20, 19, 4, 3, 6, 15), v = (48, 20, 39, 37, 7, 5, 10, 26) e c = 60.
O problema a ser resolvido é determinar que objetos levar na mochila, de forma que a capacidade de peso não seja excedida e cujo somatório de satisfação dos objetos levados seja o maior possível.
A solução para o Problema da Mochila, conforme formulado no post anterior, pode ser representada por variáveis { sj : 1, ..., n }, ou seja, uma variável para cada objeto j. Tais variáveis podem assumir o valor 0, indicando que o objeto correspondente não é escolhido para ser colocado na mochila, ou o valor 1, indicando o contrário. Observe-se que, como definido acima, não podemos escolher parte de um objeto para colocar na mochila, ou seja, um objeto só pode ser escolhido para ser colocado na mochila, por inteiro. A interpretação de uma solução para o problema ocorre da seguinte forma:
S = { 1 0 0 0 1 1 0 0 } = 60 (peso: 32 kg)
Singnificando que os objetos 1, 5 e 6 serão colocados na mochila e que os objetos 2, 3, 4, 7 e 8 ficarão de fora.
A Enumeração Explícita
Uma forma de resolver o problema apresentado é o método de enumeração explícita (ou completa). Essa forma de resolução emprega a denominada força bruta, consistindo em se analisar todas as possibilidades de valores para cada uma das oito variáveis sj verificando se a restrição de capacidade é violada em cada uma das configurações possíveis e escolhendo o maior valor da função objetivo, dentre elas. Essa forma de abordagem só é possível para problemas de pequeno porte, onde o número de combinações possíveis não é excessivamente grande. Para a instância apresentada, existem 256 formações diferentes.
Evidentemente essa forma de abordagem não é indicada para problemas do mundo real que comumente têm um número combinatorialmente explosivo de soluções a eles associado. Versões do Problema da Mochila sáo encontradas em problemas de embarque e carregamento de containers, onde o número de objetos a serem armazenados superam a casa de algumas centenas de variáveis.
Uma Solução Heurística para PM
Técnicas heurísticas são amplamente utilizadas para resolver problemas desse tipo, gerando soluções aproximadas (ou eventualmente ótimas), de boa qualidade. Como exemplo, será apresentada uma heurística construtiva gulosa para solucionar a mesma instância de PM apresentada.
O algoritmo consiste basicamente em adicionar-se a um conjunto S (denominado conjunto solução), que inicia vazio, o objeto de menor razão custo/benefício entre todos existentes que não viole a restrição de capacidade com sua entrada, até que a capacidade máxima da mochila seja alcançada. Para o problema apresentado, os custos benefícios serão compostos pela razão entre o peso do objeto e o valor de satisfação que ele proporciona. Assim, eles são computados como: cb1 = 25/48, cb2 = 10/20, cb3 = 20/39, cb4 = 19/37, cb5 = 4/7, cb6 = 3/5, cb7 = 6/10 e cb8 = 15/26, ou ainda, cb = (0.5208, 0.5000, 0.5128, 0.5135, 0,5714, 0.600, 0.600 e 0.5769).
Dessa forma, os objetos que não excedem a capacidade da mochila ao serem selecionados em seqüência, ordenados pelo menor custo benefício, são a2, a3, a4, a5 e a6, que juntos totalizam um peso de 56 kg. A função objetivo toma o valor 108, na solução x = (0, 1, 1, 1, 1, 1, 0, 0).
O procedimento heurístico adotado encontrou, sem que fosse necessária a enumeração e avaliação explícita de todas as 256 possibilidades, um valor de 108 unidades de satisfação, para o conjunto solução x = (0, 1, 1, 1, 1, 1, 0, 0), que está aproximadamente a 98% da solução ótima (ainda não encontrada) para o problema.
O Algoritmo Genético
Para a resolução do Problema da Mochila citado, utilizaremos a metaheurística denominada algoritmo genético.
A função-objetivo é o objeto de nossa otimização. Pode ser um problema de otimização, um conjunto de teste para identificar os indivíduos mais aptos, ou mesmo uma "caixa preta" onde sabemos apenas o formato das entradas e nos retorna um valor que queremos otimizar. A grande vantagem dos algoritmos genéticos está no fato de não precisarmos saber como funciona esta função objetivo, apenas tê-la disponível para ser aplicada aos indivíduos e comparar os resultados.
A seleção é uma parte importante do algoritmo. Em geral, usa-se o algoritmo de seleção por sorteio aleatório, onde os indivíduos são ordenados de acordo com a função-objetivo e lhes são atribuídas probabilidades decrescentes de serem escolhidos. A escolha é feita então aleatóriamente de acordo com essas probabilidades. Dessa forma conseguimos escolher como pais os mais bem adaptados, sem deixar de lado a diversidade dos menos adaptados. Outras formas de seleção podem ser aplicadas dependendo do problema a ser tratado.
A reprodução, tradicionalmente, é divididas em três etapas: acasalamento, recombinação e mutação. O acasalamento é a escolha de dois indivíduos para se reproduzirem (geralmente gerando dois descendentes para manter o tamanho populacional). A recombinação, ou crossing-over é um processo que imita o processo biológico homônimo na reprodução sexuada: os descendentes recebem em seu código genético parte do código genético do pai e parte do código da mãe. Esta recombinação garante que os melhores indivíduos sejam capazes de trocar entre si as informações que os levam a ser mais aptos a sobreviver, e assim gerar descendentes ainda mais aptos. Por último vem as mutações, que são feitas com probabilidade a mais baixa possível, e tem como objetivo permitir maior variabilidade genética na população, impedindo que a busca fique estagnada em um mínimo local.
Resolução de PM utilizando o Algoritmo Genético
Para entendimento do funcionamento do algoritmo, vamos retornar ao Problema da Mochila. O algoritmo genético é iniciado com a geração aleatória de uma série de soluções, viáveis ou não, para o problema. No nosso problema específico, serão viáveis as soluções que apresentem um peso total igual ou inferior a 60 kg, pela definição do problema. Cada solução gerada será avaliada (somatório das satisfações dos objetos) e essa será a sua qualidade (fitness). Como o problema é de maximização da solução, quanto maior o fitness da solução, melhor ela será. Se, em virtude do sorteio aleatório, for gerada uma solução inviável (peso total acima de 60 kg), ela terá um valor de fitness associado, digamos de -9999. Essa avaliação a colocará entre as soluções de pior qualidade.
Imaginemos, para cada construção de solução, jogarmos uma moeda que decidirá se o objeto entrará ou não na mochila na solução. Isso será feito 8 vezes para cada solução. Após gerarmos 6 soluções totalmente aleatórias, poderíamos chegar ao conjunto de soluções abaixo apresentadas:
S1 = { 1 0 1 1 0 1 0 0 } = -9999 (peso: 67 kg)
S2 = { 0 0 1 1 1 0 0 1 } = 109 (peso: 58 kg)
S3 = { 1 0 0 0 1 1 0 0 } = 60 (peso: 32 kg)
S4 = { 0 0 1 1 0 1 1 0 } = 91 (peso: 48 kg)
S5 = { 1 1 0 0 0 0 0 1 } = 94 (peso: 50 kg)
S6 = { 1 0 0 0 1 0 1 1 } = 91 (peso: 50 kg)
De posse desse conjunto inicial de soluções, o algoritmo as ordena pela qualidade (fitness) da solução e descarta um percentual das piores soluções, como, por exemplo, S1 e S3.
A partir das soluções mantidas para estudo serão feitas operações de combinação entre elas. Por exemplo, o cruzamento da solução S4 com a S5, tomando-se os quatro primeiros bits de S4 e os quatro últimos de S5, dará origem à solução S7 que avaliada terá o seguinte fitness:
S7 = { 0 0 1 1 0 0 0 1 } = 102 (peso: 54 kg)
Dessa forma, a solução S7 será filha das soluções S4 e S5. Um filho mutante também seria gerado, alterando aleatoriamente um dos seus bits, por exemplo, o sétimo de “0” para “1”, que daria ao surgimento de um novo elemento do conjunto de soluções:
S8 = { 0 0 1 1 0 0 1 1 } = 112 (peso: 60 kg)
Gerados um novo conjunto de soluções e adicionadas ao conjunto gerador dessa geração, novamente elas seriam ordenadas pelo fitness, os indivíduos (soluções) menos capazes (de menor fitness) seriam eliminados da população, e um novo processo de rcombinação e mutações seria criado até que uma condição de parada do algoritmo fosse alcançada, como número de gerações produzidas.
Após uma geração contínua de 5 populações o algoritmo genético chega a uma melhor solução apresentada abaixo, que é a solução ótima da instância de PM apresentada:
Sn = { 1 1 0 1 0 0 1 0 } = 115 (peso: 60 kg)
No próximo post será apresentada a Programação Genética, particularmente utilizada para extrair um regra de compra e venda de ativos de um conjunto de dados históricos, de forma automática.
sexta-feira, 10 de dezembro de 2010
Ativos Sintéticos
Encontrar cotações históricas para realização de backtests nem sempre é tarefa muito fácil, principalmente se queremos testar uma estratégia que trabalhe com cotações semanais. Um conjunto de dados envolvendo cinco anos de história produzem apenas 250 candles semanais aproximadamente, e se a estratégia for seguidora de tendências, serão produzidos em média algo por volta de 10 a 20 trades totais no período. Essa quantidade de dados é insuficiente para produzir um espaço amostral suficiente de forma que seja estatisticamente significativo.
Como os históricos comumente disponíveis para download envolvem algo em torno de 15 anos, surge a necessidade da geração de cotações sintéticas, ou artificiais, geradas por modelos computacionais. Utilizando-se de funções randômicas, esses modelos utilizam algoritmos como o Monte Carlo ou Hipercubo Latino para gerar dados pseudo-randômicos. A grande vantagem da utiização desses métodos é a possibilidade de geração de cotações semanais, por exemplo, em número suficiente para compor uma amostra significativa, compondo, sem nenhuma dificuldade, um século de operações (algo em torno de 5200 cotações) em alguns poucos segundos.
No entanto, há dificuldades para a geração desse conjunto de dados que se referem primeiramente à randomicidade pura dos números gerados pelos modelos, e as relativas à distribuição uniforme dos valores de volatilidade e de gaps.
Com relação à aleatoriedade, o primeiro fato a considerar é que os números gerados pelos modelos referidos não são puramente randômicos e, sim, pseudo-randômicos. Dessa forma, os números gerados formam uma sequência que se repete periodicamente (embora de tamanho suficientemente grande para aplicações não muto complexas).
O segundo fator, e o mais importante, é que a geração deve sempre considerar as características frequentes existentes nos dados de ativos reais, no que se refere a corpo dos candles, gaps e formações que são comuns a esses dados, evitando por exemplo cotações de valores negativos e variações extremas.
E o maior problema é limitar esses valores de maneira uniforme. Por exemplo, se observarmos as cotações de VALE5 semanais para os últimos 15 anos, vamos observar a seguinte distribuição de frequência da volatilidade nesse período:
Abaixo de -18% => 2 (0,24%)
-6% a -18% => 78 (9,32%)
00% a - 6% => 300 (35,84%)
00% a 6% => 346 (41,34%)
6% a 18% => 107 (12,78%)
Acima de 18% => 4 (0,48%)
Média de Volatilidade Semanal = 0,57%
Desvio Padrão = 5,73%
Mediana = 0,38%
Pelas frequências apresentadas e valores de dispersão, verifica-se que houve uma distribuição próxima da normal gaussiana para a volatilidade semanal do ativo. Para as gerações do ativo sintético, seria desejável que a distribuição dos valores tivesse também esse comportamento normal ou próximo dele. E essa é a principal dificuldade na geração.
Uma vez vencidas essas barreiras na geração dos dados, o modelo torna-se uma fonte muito importante para submissão de estratégias de maneira pseudo-exaustivas excelente, que pode validar procedimentos com muita segurança, pela disponibilização de material de tamanho e diversidade estatisticamente suficientes.
Um exemplo de uma geração de um conjunto de dados sintéticos pode ser visto no arquivo abaixo. Foram geradas cotações semanais randômicas utilizando o algoritmo Hipercubo Latino, no período de dez anos. O interessante é que qualquer analista técnico (grafista) sem saber que se trata de uma geração por modelo computacional aleatório, irá justificar as formações clássicas de suportes, resistências, martelos, flâmulas, bandeiras e proporções divinas de fibonacci!
Ativo Sintetico em Excel
Como os históricos comumente disponíveis para download envolvem algo em torno de 15 anos, surge a necessidade da geração de cotações sintéticas, ou artificiais, geradas por modelos computacionais. Utilizando-se de funções randômicas, esses modelos utilizam algoritmos como o Monte Carlo ou Hipercubo Latino para gerar dados pseudo-randômicos. A grande vantagem da utiização desses métodos é a possibilidade de geração de cotações semanais, por exemplo, em número suficiente para compor uma amostra significativa, compondo, sem nenhuma dificuldade, um século de operações (algo em torno de 5200 cotações) em alguns poucos segundos.
No entanto, há dificuldades para a geração desse conjunto de dados que se referem primeiramente à randomicidade pura dos números gerados pelos modelos, e as relativas à distribuição uniforme dos valores de volatilidade e de gaps.
Com relação à aleatoriedade, o primeiro fato a considerar é que os números gerados pelos modelos referidos não são puramente randômicos e, sim, pseudo-randômicos. Dessa forma, os números gerados formam uma sequência que se repete periodicamente (embora de tamanho suficientemente grande para aplicações não muto complexas).
O segundo fator, e o mais importante, é que a geração deve sempre considerar as características frequentes existentes nos dados de ativos reais, no que se refere a corpo dos candles, gaps e formações que são comuns a esses dados, evitando por exemplo cotações de valores negativos e variações extremas.
E o maior problema é limitar esses valores de maneira uniforme. Por exemplo, se observarmos as cotações de VALE5 semanais para os últimos 15 anos, vamos observar a seguinte distribuição de frequência da volatilidade nesse período:
Abaixo de -18% => 2 (0,24%)
-6% a -18% => 78 (9,32%)
00% a - 6% => 300 (35,84%)
00% a 6% => 346 (41,34%)
6% a 18% => 107 (12,78%)
Acima de 18% => 4 (0,48%)
Média de Volatilidade Semanal = 0,57%
Desvio Padrão = 5,73%
Mediana = 0,38%
Pelas frequências apresentadas e valores de dispersão, verifica-se que houve uma distribuição próxima da normal gaussiana para a volatilidade semanal do ativo. Para as gerações do ativo sintético, seria desejável que a distribuição dos valores tivesse também esse comportamento normal ou próximo dele. E essa é a principal dificuldade na geração.
Uma vez vencidas essas barreiras na geração dos dados, o modelo torna-se uma fonte muito importante para submissão de estratégias de maneira pseudo-exaustivas excelente, que pode validar procedimentos com muita segurança, pela disponibilização de material de tamanho e diversidade estatisticamente suficientes.
Um dos algoritmos apropriados para essa geração é o Hipercubo Latino. Esse método divide a distribuição em intervalos com probabilidades iguais de sorteio e seleciona um valor aleatório pertencente a cada um dos intervalos. O método de Hipercubo Latino é preciso para a reprodução das distribuições de probabilidade escolhidas para as variáveis de entrada e, conseqüentemente, para o cálculo de estatísticas geradas pela simulação, uma vez que o intervalo da distribuição é utilizado de maneira mais equilibrada.
Ativo Sintetico em Excel
sexta-feira, 29 de outubro de 2010
O Paradoxo de Parrondo
Algumas pessoas dão mais importância a sua intuição do que aos backtests. Se uma estratégia de compra e venda de ações parece ser intuitivamente funcional, para que testá-la em cotações históricas? Essa falsa certeza pode ser fatal, pois há vezes em que nossas intuições são realmente mascaradas e desviadas da realidade, com grande facilidade.
Um exemplo prático dessa ilusão é o paradoxo concebido por Juan Parrondo, físico espanhol. Trata-se de dois jogos, cada um deles resultando em perdas ao longo do tempo. Você é colocado no meio de uma escadaria muito longa, por exemplo no degrau número 500 de um total de 1000 degraus.
O primeiro jogo consiste em se jogar uma moeda ligeiramente viciada, que dá 51% de caras e 49% de coroas. Se ao ser lançada a moeda ela der cara, você descerá um degrau; caso o resultado seja coroa, você subirá um degrau. Após algum tempo de execução do jogo, o seu destino será a base da escada, naturalmente.
O segundo jogo consiste em jogar duas moedas, uma moeda má que dá coroa apenas 10% das vezes e cara 90% das vezes. A outra moeda, a moeda boa, dá coroa 75% das vezes e cara 25%. Se o número do degrau em que você estiver for múltiplo de três, lança-se a moeda má. Caso o número do degrau não seja múltiplo de três, lança-se a moeda boa. Embora menos óbvio que o primeiro jogo, este também o conduzirá à base da escada. O segundo jogo é um jogo perdido porque o número do degrau em que se está será múltiplo de três com mais frequência do que 1/3 (a explicação é complexa e pode ser descrita se solicitada nos comentários).
O primeiro jogo é simples e resulta em um movimento constante escada a baixo, até a base, e o segundo jogo é complicado, mas também resulta em um movimento de descida. A descoberta fascinante de Parrondo é que, caso se joguem esses dois jogos alternadamente, em ordem aleatória (mantendo-se o lugar na escada quando se passa de um jogo para o outro) o resultado será uma constante subida até o topo da escada. Alternativamente, caso se joguem duas rodadas do primeiro jogo, seguidas por duas rodadas do segundo jogo, e assim sucessivamente, o destino será também o topo da escada!
O Paradoxo de Parrondo é um exemplo clássico de como os resultados de estratégias podem ser contra-intuitivos. Se você testar o paradoxo através de uma simulação poderá comprovar esse desempenho inesperado, talvez da mesma forma que você irá ver a sua estratégia de investimento, intuitivamente correta e infalível, fracassar em um backtesting em dados históricos de um conjunto de ativos.
Assinar:
Postagens (Atom)


