Monday 9 April 2018

Algoritmo genético de sistemas comerciais


Usando a Programação Genética para evoluir Estratégias de Negociação.


Um amigo e eu recentemente trabalhamos juntos em uma tarefa de pesquisa onde usamos a Programação Genética (GP) com sucesso para desenvolver soluções para um problema de classificação financeira do mundo real. Este problema, chamado de análise de segurança, envolve a determinação de quais títulos devem ser comprados para realizar um bom retorno sobre o investimento no futuro. Para encontrar uma solução para este problema, usamos a Programação Genética para desenvolver uma população de árvores de decisão que poderia realizar análise de segurança em sessenta e duas das ações de tecnologia listadas no S & amp; P 500. Ou seja, desenvolvemos árvores de decisão capazes de classificar esses estoques de acordo com se eles deveriam ser comprados ou vendidos curtos.


Árvores de decisão de análise de segurança.


Durante o estudo, desenvolvemos dois tipos de árvores de decisão de análise de segurança. O primeiro utilizou apenas indicadores da análise fundamental e o segundo utilizou apenas indicadores da análise técnica. A análise fundamental é um método de avaliação de uma segurança para medir seu valor intrínseco examinando fatores econômicos, financeiros e outros fatores qualitativos e quantitativos relacionados. A análise técnica é um método de avaliação de títulos através da análise de estatísticas geradas pela atividade de mercado.


Uma estratégia para análise de segurança, independentemente de usar indicadores técnicos ou fundamentais, consistirá em uma série de regras para a tomada de decisões de investimento. Essa estratégia pode ser representada como uma árvore de decisão onde os nós terminais representam decisões de investimento e os nós funcionais representam regras baseadas em indicadores técnicos ou fundamentais. Devido a isso, muitas estratégias de investimento existentes são representadas na forma de árvores de decisão.


Foram selecionados, no total, quarenta e dois indicadores diferentes, tanto da análise técnica quanto da análise fundamental. As estratégias evoluídas foram para um período de detenção fixo de três meses, seis meses, nove meses ou doze meses de duração. As árvores de decisão foram novamente testadas usando dados de mercado de 2018 a 2018.


Programação genética.


A programação genética é uma especialização de um Algoritmo Genético. Algoritmos genéticos são baseados na população, o que significa que eles operam dentro de uma população composta por muitos indivíduos diferentes. Cada indivíduo é representado por um genótipo exclusivo (geralmente codificado como um vetor). Os Algoritmos Genéticos modelam o processo de evolução genética através de uma série de operadores, incluindo o operador de seleção que modela a sobrevivência do operador mais adequado, o crossover que modela a reprodução sexual e o operador de mutação que modela as mutações genéticas que ocorrem aleatoriamente para indivíduos em uma população. Esses operadores, quando combinados, produzem o que os cientistas da computação se referem como um Algoritmo Genético.


Os três operadores de um Algoritmo Genético sendo aplicados a uma população de vetores (blocos)


A diferença entre um Algoritmo Genético e o Algoritmo de Programação Genética é a forma como os genótipos individuais são representados. Nos Algoritmos Genéticos, os genótipos são representados como Cordas ou como Vetores, enquanto na Programação Genética esses genótipos são representados usando estruturas de dados de árvores. A operação de crossover em estruturas de árvores pode acontecer de algumas maneiras, uma sub-árvore é trocada, um nó de folha é removido ou alterado, ou os valores de algum nó são ajustados. Uma ilustração disso é mostrada abaixo,


Este diagrama descreve a estratégia de cruzamento de uma árvore de decisão usada pela programação genética para análise de segurança.


Após este estudo, concluímos que a programação genética tem um grande potencial para desenvolver novas estratégias de análise de segurança e gerenciamento de investimentos, desde que possam ser obtidas melhores funções para o cálculo da aptidão física. Ao longo de nosso estudo de pesquisa, vimos que as árvores de decisão evoluíram usando a Programação Genética podendo produzir classificações de estoque que superaram o retorno médio do mercado de forma consistente nos quatro trimestres. Isso é verdade para árvores de decisão que utilizaram indicadores técnicos, bem como árvores de decisão que usaram indicadores fundamentais. Várias outras conclusões foram derivadas de nossa pesquisa, incluindo os tamanhos ótimos e o nível de heterogeneidade para as árvores de decisão e o valor adicionado pelos diferentes indicadores e o desempenho das estratégias em relação um ao outro. Alguns resultados estão incluídos abaixo.


Relacionamento entre o tamanho da árvore de decisão para a aptidão Os indicadores mais populares utilizados na árvore de decisão final.


Tamanho médio das árvores por iteração Exemplo Exemplo de Árvore de Decisão de Análise de Segurança Árvore de Decisão de Análise de Segurança.


Conclusão.


Dois relatórios de pesquisa independentes foram produzidos por mim e meu amigo. Ambos os relatórios são muito mais detalhados sobre nosso estudo de pesquisa, a abordagem adotada, nosso projeto e implementação, as estratégias de teste que usamos, nossas conclusões e recomendações para pesquisas futuras. Você também pode baixar uma cópia do código-fonte criado durante a implementação. Para os meus colegas, conta mais técnica do projeto, clique aqui.


História anterior.


Agrupamento usando otimização de colunas de formigas.


Próxima História.


Sistemas Inteligentes de Negociação Algorítmica.


[Comentário copiado de LinkedIn Computational Finance Group]


Muito bom trabalho. A escrita também é maravilhosa.


Eu só tive a chance de olhar para o relatório. Algumas estatísticas que seriam boas para analisar: como o seu portfólio da GA se compara às carteiras dos mesmos ativos. Eu olhava duas carteiras de comparação: um portfólio igual ponderado e um portfólio de estilo S & P que é ponderado pela capitalização de mercado.


Como se verifica, pode ser surpreendentemente difícil vencer um portfólio igualmente ponderado. Rebalancear as carteiras trimestralmente, uma vez que alguns estoques vão subir e alguns vão cair (por exemplo, você quer manter os pesos do portfólio iguais, à medida que os preços mudam). Se o seu algoritmo genético supera essas carteiras, então você tem "alfa" (excesso de retorno sobre o benchmark).


Claro que o alfa não é tudo. Você deve olhar para a Perda de cauda esperada (ETL) (também conhecida como CVaR, déficit esperado) tanto para o portfólio da GA quanto para o "benchmark". Se você tiver menos risco para o mesmo retorno, então você pode considerar que você bateu o benchmark. A medida ETL é uma medida melhor do que a relação Sharpe quando se trata de risco, uma vez que a relação Sharpe mede a variação, que é de dois lados. ETL apenas mede a perda.


Uma observação: um problema com GA e redes neurais (NN) é que são caixas negras. É difícil determinar por que eles fazem as "escolhas" que eles fazem. Então imagine que você é um gerente de portfólio. Seu GA ou NN começa a funcionar mal. Que medidas você pode tomar para abordar isso? O problema é que tudo o que você pode realmente fazer é treinar e você não sabe se a reconversão melhorará. Claro que com uma árvore de decisão não é tão ruim assim, pelo menos você sabe quais as decisões tomadas. O problema é que, se você estiver constantemente procurando por ele para tomar as decisões "corretas", então você também terá um problema.


Essas questões são razões que você não vê esses algoritmos usados ​​tanto (embora sejam usados).


[Resposta copiada do LinkedIn Computational Finance Group]


Obrigado pelas palavras complementares Ian, agradecemos que você se interesse em nossa pesquisa e nos forneça alguns comentários perspicazes.


Na nossa abordagem, apenas comparamos o desempenho das seleções de estoque feitas por nossas árvores de decisão em relação a um portfólio igualmente ponderado. Estender a nossa pesquisa para incorporar diferentes carteiras é uma ideia interessante que acompanharemos durante a próxima fase de desenvolvimento. Também estamos considerando implementar algumas das abordagens bem conhecidas para a análise de segurança para serem usadas como benchmarks de desempenho adicionais. Se você ou qualquer outra pessoa tiver sugestões sobre quais abordagens podem fazer bons benchmarks, por favor me avise.


Seus comentários sobre o uso de outras medidas de desempenho são atualizados. Gostaríamos definitivamente de voltar a olhar para a estrutura de back-testing e investigar maneiras de torná-lo mais rigoroso e menos propenso a excesso de ajuste. Também gostaríamos de implementar funções de fitness adicionais que levem em consideração medidas de risco de portfólio e medidas de retorno excessivo (alfa). Examinarei as medidas que você mencionou e verá o melhor possível para incorporá-las à nossa estrutura existente. Também consideraremos como é possível usar um framework de back-testing de código aberto, como ZipLine, o framework de back-testing usado por quantopian.


Suas observações sobre a natureza e o uso de GA e Neural Networks em finanças são muito interessantes. O desafio de tornar esses algoritmos mais transparentes e, francamente, um pouco menos assustador, é que não se deve tirar levemente. Meu colega atualmente está trabalhando em uma tarefa de pesquisa onde ele está tentando levantar o véu em alguns dos trabalhos internos das Redes Neurais. Se ele for bem sucedido, então, em vez de precisar redigir constantemente redes neuronais quando "algo der errado", ele pode isolar a causa do problema na rede neural e adaptar sua arquitetura de acordo. Ele está considerando usar uma aplicação financeira do mundo real de Neural Networks em sua pesquisa. Então, se você tem alguma idéia sobre isso, por favor me avise?


Pessoalmente falando, atualmente estou trabalhando em uma tarefa de pesquisa onde estou tentando construir uma estrutura algorítmica para a seleção e otimização de portfólio comercial. Faz uso de alguns algoritmos de Inteligência Computacional e em frente Eu vou manter em mente os problemas que você mencionou. Vou tentar identificar maneiras de mitigar ou eliminar essas preocupações no quadro. Obrigado novamente por todos os seus comentários, agradecemos o feedback. Se você tem mais boas ideias, entre em contato conosco.


[Comentário copiado de LinkedIn Computational Finance Group]


Eu acho que a abordagem mais razoável para backtesting é comparar seus resultados com o que acontece com o comércio aleatório que ainda obedece a quaisquer restrições que você está impondo no portfólio. Isso é discutido em:


[Resposta copiada do LinkedIn Computational Finance Group]


Obrigado Patrick, essa é uma boa sugestão. Eu entendo a abordagem porque o conceito de backtesting de um algoritmo contra uma estratégia de negociação aleatória é conceitualmente semelhante ao teste de um algoritmo de busca contra busca aleatória. O que é algo que fiz antes. Quão popular você diria que a estratégia de backtesting é?


[Resposta copiada do LinkedIn Computational Finance Group]


Stuart: Depressa impopular. Mas tem que começar em algum lugar.


[Comentário copiado de LinkedIn Computational Finance Group]


Parece bom, qual é o motivo do uso dos 62 estoques de tecnologia, e não de 500 ações?


[Cópias de resposta do LinkedIn Computational Finance Group]


Oi JZ, essa é uma boa pergunta e fico feliz que você tenha perguntado. Debatimos a nossa abordagem e uma opinião externa seria muito apreciada. Limitamos nossa amostra de teste a apenas um setor devido a dois motivos:


1) Acreditamos que as árvores de decisão que utilizam Indicadores Fundamentais podem variar drasticamente entre diferentes indústrias. Isso ocorre porque as proporções financeiras podem variar entre diferentes indústrias e pensamos que um investidor que use essa abordagem desejaria evoluir árvores de decisão para cada setor de forma independente. ** e.


2) Nós só recebemos três semanas para completar a tarefa e nos preocupava que adicionar mais ações seria muito demorado. Isso resultou ser uma preocupação infundada, uma vez que nossa implementação poderia facilmente lidar com todos os 500 estoques no S & amp; P500 sem problemas de desempenho significativos.


** Nota: isso não se aplica a árvores de decisão usando indicadores de Análise Técnica.


Extremamente interessante. Bom Stuart.


É um exercício interessante, mas não vejo qual a vantagem do GP em simplesmente treinar toda a Árvore de Decisão usando alguma medida de impureza. Parece que faz o mesmo apenas de forma muito ineficiente e provavelmente com menos precisão também.


Oi, Ignas, para ser perfeitamente honesto, o GP sofre muitas desvantagens e a técnica ainda está sendo aperfeiçoada. Tendo sido dito, os métodos tradicionais de indução de árvores de decisão (que eu sou mais recentemente um fã de) também têm suas desvantagens que podem (ou não) ser superadas pela programação genética.


Estou tentando implementar o GA em python. Quais são algumas bibliotecas de python que você recomendaria.


Você tentou trocar seu sistema ao vivo?


Oi Lawrence, infelizmente não. Este post tem muitos anos e representa um antigo projeto coletivo meu :-). Eu recomendaria dar uma olhada no Genotick para uma estratégia de negociação baseada na programação genética imparcial. Eu acredito que as pessoas estão negociando ao vivo.


Envie um comentário.


Cancelar resposta.


Siga a Turing Finance.


Turing Finance Mailing List.


Amigos da Turing Finance.


Quantocracy é o melhor agregador de blog de finanças quantitativas com links para novas análises postadas todos os dias.


NMRQL é o fundo hedge quantitativo de que sou parte. Usamos a aprendizagem de máquinas para tentar vencer o mercado.


Seleção natural: Algoritmo genético para otimização do sistema e programação genética.


O Evo 2 é a nossa biblioteca de algoritmos genéticos avançados que incorpora o último em algoritmo genético, como processos biologicamente idênticos, interrupções epigenéticas, recozimento simulado, prevenção de endogamia de Westermarck, recombinação limitada por idade e muito mais.


O algoritmo Evo 2 não se baseia no design padrão GA padrão "único cromossomo".


O Evo 2 resolve problemas de otimização multivariada rapidamente e escala bem com a complexidade. O algoritmo Evo 2 foi projetado para programação genética (criação autônoma de sistemas de negociação), otimização de sistemas de negociação e otimização de portfólio. O Evo 2 permite aos desenvolvedores desenvolver otimização de sistemas de negociação multivariada com facilidade.


Genoma e Algoritmo Bio-Idênticos.


Evo 2 não é apenas bio-inspirado, mas é bio-idêntico em muitos aspectos. O Evo 2 simula todos os processos naturais, desde a seleção de parceiros até a embalagem de DNA e a meiose completa. A maioria dos algoritmos genéticos padrão negligencia para realizar as múltiplas etapas da meiose que são de vital importância para a variação genética, uma variável crucialmente importante para evitar o óptimo local.


Durante a profase, cromossomos sinapse e uma pequena quantidade de DNA são trocados entre cromossomos homólogos através de um processo conhecido como "cruzamento". A parte crítica da profase é o alinhamento de tetrads em pares homólogos. O algoritmo Evo 2 garante que os homólogos sejam criados apenas a partir de cromossomos sexuais opostos e não relacionados.


Metafase e Anafase.


A metafase e a anafase são as fases onde muita variação é incorporada ao genoma; No entanto, a maioria dos algoritmos genéticos deixa completamente essas etapas. Evo 2 simula ambas as fases completamente e com precisão.


Não é permitido o endogamie.


A maioria dos algoritmos genéticos padrão são "sopa inata", tecnicamente falando. A endogamia reduz a variação genética, o que é suficiente para dizer, evita que os sistemas evoluam e se adaptem ao seu ambiente. Nos GAs padrão, isso significa que um sistema pode ter maior probabilidade de ficar preso na óptima local. Embora a natureza tenha pelo menos três mecanismos para prevenir a endogamia, a maioria dos algoritmos genéticos não aborda esse problema.


O primeiro método: Impedir que a prole se reproduza. A endogamia resulta em aumento da homozigoticidade, o que pode aumentar as chances de a prole ser afetada por traços recessivos ou deletérios.


O segundo mecanismo: expulsa os jovens do sexo masculino para evitar o aparecimento de incesto entre irmãos.


O terceiro mecanismo: o efeito Westermarck. Este é um efeito psicológico através do qual os indivíduos que são criados em estreita proximidade durante a infância tornam-se dessensibilizados para a atração sexual posterior.


A conseqüência final da endogamia é a extinção de espécies por falta de diversidade genética. A chita, uma das espécies mais endogâmias da terra, é um excelente exemplo. E também acontece com a extinção. Há vinte mil anos, guepardas percorreram toda a África, Ásia, Europa e América do Norte. Cerca de 10 mil anos atrás, devido às mudanças climáticas, todas as espécies, exceto uma, se tornaram extintas. Com a redução drástica de seus números, os parentes próximos foram forçados a se reproduzir e a chita se tornou geneticamente endogâmica, o que significa que todas as guepardas estão intimamente relacionadas.


Embora a natureza proíba a endogamia, quase todos os algoritmos genéticos simulados por computador ignoram esse problema.


Interruptores epigenéticos.


A teoria epigenética descreve como as mudanças na expressão gênica podem ser causadas por mecanismos diferentes das mudanças na sequência dna subjacente, temporariamente ou através de várias gerações, influenciando uma rede de interruptores químicos dentro de células coletivamente conhecidas como epigenomas. O Evo 2 pode simular interrupções epigenéticas para permitir que o sistema seja penalizado temporariamente por ações, como ser muito voraz ou avessas ao risco.


Recozimento simulado.


O recozimento simulado é uma metaheurística probabilística para o problema de otimização global de localizar uma boa aproximação ao ótimo global de uma determinada função em um grande espaço de busca. Muitas vezes, é usado quando o espaço de pesquisa é discreto. Para certos problemas, o recozimento simulado pode ser mais eficiente do que a enumeração exaustiva.


Árvore genealógica.


Evo 2 pode salvar informações genealógicas para cada genoma, para que os usuários possam rever a progressão do algoritmo genético para ver como certos genes evoluíram ao longo do tempo.


Karyogram Viewer.


O Evo 2 possui um coreograma incorporado, que permite a visualização de genomas enquanto os algoritmos genéticos estão evoluindo. O kariograma pode ser personalizado para exibir informações de genealogia para genomas específicos através de um menu de contexto.


Aplicações Evo 2.


O Evo 2 pode ser usado no lado do cliente ou do servidor para programação genética (criação autônoma de sistemas de negociação), otimização do sistema de negociação, otimização de portfólio, alocação de ativos e aplicativos não relacionados à finanças, incluindo, entre outros, a criatividade artificial, design automatizado, bioinformática , cinética química, código de quebra, engenharia de controle, modelos Feynman-Kac, filtragem e processamento de sinal, aplicações de programação, engenharia mecânica, otimização estocástica e problemas de horário.


Exemplos de programação genética.


Os exemplos de programação do TradeScript mostram aos desenvolvedores como criar modelos de programação genética capazes de testar e otimizar as estratégias. A documentação de programação pode ser baixada aqui.


Comece com o Evo2>


Por que escolher o módulo?


O Modulus é uma empresa de tecnologia financeira. Embora isso não pareça um diferencial real, é. Isso significa que nossas soluções são de nossos anos de experiência no setor de tecnologia financeira. Nossos produtos e serviços são fornecidos por desenvolvedores e engenheiros que possuem experiência de negociação de primeira mão. Todo mundo aqui no Modulus fala seu idioma.


Direitos autorais e cópia; 2002-2018 por Modulus Global, Inc., todos os direitos reservados.


Perdão para quantificar os mercados |


inteligência artificial.


Aplicando algoritmos genéticos para definir um sistema comercial.


22/12/2018.


Ao falar sobre negociação quantitativa, há uma grande quantidade de indicadores e operadores que podemos usar como uma regra de compra / venda. Mas, além de decidir qual indicador seguir, a parte mais importante é definir os parâmetros corretos. Assim, um método que podemos usar para encontrar parâmetros adequados sem gastar muito tempo na simulação de muitas combinações seria usando um algoritmo genético.


Um algoritmo genético é um método de otimização inspirado na evolução das espécies e na seleção natural. Embora não pertença estritamente ao campo de Aprendizagem de Máquina, pode ser uma base boa para construir um algoritmo ML (conforme mencionado abaixo).


O processo seria o seguinte:


Inicialização: o algoritmo começa com uma população inicial, que pode ser gerada de forma totalmente aleatória. Toda solução possível, (isto é, cada elemento nessa população), é chamado de cromossomo. Processo iterativo: Crossover: esses cromossomos são combinados, criando uma nova população & # 8211; a prole. Todo cromossomo nesta nova geração é formado por peças de mistura - genes por analogia biológica & # 8211; dos seus "antepassados". Mutação: geralmente, também é introduzido um fator de mutação, para permitir uma certa variação nos genes além da combinação das características já existentes. Avaliação: por último, temos que calcular o valor da aptidão de cada novo indivíduo.


A idéia no processo de crossover é criar uma geração maior do que a primeira, pois apenas os indivíduos mais qualificados sobreviveriam. Isso significa que vamos selecionar os cromossomos que conseguem os melhores resultados para serem os pais para os seguintes.


Parar condições: podemos usar dois ou três critérios diferentes para interromper o processo de iteração: alcançar um número fixo de gerações. Obtendo um nível de aptidão satisfatório. Convergência do algoritmo.


Eu sou um fã particular do primeiro e terceiro critério (eu só usaria o segundo quando o tempo de execução é essencial).


Implementar um algoritmo genético é de fato uma tarefa fácil; A parte mais desafiadora é como transformar nosso problema em cromossomos. Precisamos de variáveis ​​mutáveis ​​que podemos transformar facilmente e que não requerem uma grande quantidade de memória, de modo que o algoritmo pode ser eficiente.


Pseudo algoritmo.


O código a seguir é um exemplo de uma implementação simples de um algoritmo genético usando a sintaxe Python, onde:


max_iter: é o número máximo de iterações permitido antes do algoritmo parar.


n_repeats: é o número máximo de iterações permitidas, cuja melhor forma física é pior do que a melhor habilidade global alcançada em geral durante todo o processo. Esta é uma maneira fácil de controlar a convergência do método. Se não usarmos isso, podemos gastar tempo executando o código quando o algoritmo já está estagnado na óptima local.


N: é o número de indivíduos selecionados em cada iteração para se tornarem os pais da seguinte geração.


Melhorias.


É importante também ter em conta que, como mencionado acima, como o GA é um método de otimização, é fácil obter um ótimo local do problema. Quando isso ocorre, é realmente difícil de evoluir e encontrar outros ótimos. Uma coisa que podemos fazer para forçar o algoritmo a "pular" para fora da optima local é mudar o processo de seleção.


Quando o algoritmo está "funcionando bem", fazemos a seleção das melhores soluções do conjunto formado pela última geração e o novo. Se acharmos que o algoritmo está "funcionando mal" - ocorrem algumas iterações, mas a melhor forma física não está ficando melhor # 8211; nós forçamos o salto usando o novo conjunto de cromossomos (a última prole) sem também selecionar as melhores soluções da última iteração. Claro, a melhor forma física será pior do que a última, mas como estamos mudando os pais, o método irá encontrar um conjunto diferente de soluções (esperamos melhor do que as outras!).


Aplicações.


Então, você já sabe como programar um algoritmo genético (bem feito!).


O próximo passo é decidir como transformar parâmetros de um indicador em cromossomos. Se pudermos decidir uma maneira geral de fazer isso, então poderemos usar o mesmo algoritmo genético para otimizar os parâmetros de vários indicadores diferentes.


Realmente sinto muito, mas você precisará aguardar a próxima publicação para encontrar um exemplo da implementação e que tipo de resultados podemos obter usando séries de preços reais.


Se você não pode esperar e quiser tentar sozinho, aqui é um ponto de partida para você:


Quais são as vantagens e desvantagens de usar um algoritmo genético para encontrar os parâmetros ótimos de um indicador para uma série temporal concreta?


As virtudes de usar um GA devem encontrar bons parâmetros para nossos modelos comerciais sem gastar muito tempo. As desvantagens são claras: o maior risco de usar um método de otimização é a superação. Nós já abordamos algumas técnicas para mitigar a superposição, adicionando um termo de regularização em uma publicação anterior.


Outra opção seria, faça um algoritmo adaptativo. Assim, respondendo a pergunta: e se nós projetarmos um algoritmo capaz de detectar quando seus parâmetros já não estão obtendo bons resultados, e então procure por outros que se adequem às nossas restrições?


SnowCron.


FREE E. Mail Classes.


Usando o Algoritmo Genético para criar Estratégia de Negociação FOREX lucrativa. Algoritmo Genético no Sistema de Redes Neurais do Cortex Feedforward Backpropagation Neural Network Aplicação para cálculos genéticos baseados em Forex trading.


Este exemplo usa conceitos e ideias do artigo anterior, então leia Algoritmo Genético de Rede Neural em Sistemas de Negociação FOREX primeiro, embora não seja obrigatório.


Sobre este texto.


Em primeiro lugar, leia o aviso legal. Este é um exemplo de usar a funcionalidade do algoritmo de algoritmo de algoritmo de redes nervosas Cortex, não um exemplo de como fazer negociação rentável. Eu não sou seu guru, nem eu devo ser responsável por suas perdas.


O software Cortex Neural Networks possui redes neurais, e a FFBP que discutimos antes é apenas uma maneira de escolher estratégias de negociação forex. É uma boa técnica, poderosa e quando aplicada corretamente, muito promissora. No entanto, tem um problema - para ensinar a Rede Neural, precisamos saber o "resultado desejado".


É bastante fácil de fazer quando fazemos a aproximação da função, apenas tomamos o valor "real" de uma função, porque sabemos o que deveria ser.


Quando fazemos a previsão da rede neural, utilizamos a técnica (descrita em artigos anteriores) de ensinar a Rede Neural na história, novamente, se prevermos, digamos, uma taxa de câmbio, sabemos (durante a formação) qual é a previsão correta .


No entanto, quando estamos construindo um sistema comercial, não temos idéia de qual é a decisão de negociação correta, mesmo que conheçamos a taxa de câmbio! Na verdade, temos muitas estratégias de negociação forex que podemos usar em qualquer ponto do tempo, e precisamos encontrar uma boa - como? O que devemos alimentar como o resultado desejado de nossa Rede Neural?


Se você seguiu nosso artigo anterior, você sabe, que nos enganamos para lidar com esse problema. Ensinamos a Rede Neural a fazer uma previsão de taxa de câmbio (ou taxa de câmbio), e então usamos essa previsão para fazer negociação. Então, fora da parte da rede Neural do programa, tomamos uma decisão sobre a qual a Rede Neural é a melhor.


Os algoritmos genéticos podem lidar diretamente com este problema, eles podem resolver o problema afirmado como "encontrar os melhores sinais comerciais".


Neste artigo, vamos usar o software Cortex Neural Networks para criar esse programa.


Usando o Algoritmo Genético.


Algoritmos genéticos são muito bem desenvolvidos e muito diversos. Se você quer aprender tudo sobre eles, sugiro que você use a Wikipedia, pois este artigo é apenas sobre o que o Cortex Neural Networks Software pode fazer.


Com o software Cortex Neural Networks, podemos criar uma Rede Neural que leve alguns dados, digamos, valores de um indicador, e produz algum resultado, digamos, sinais de negociação (comprar, vender, manter.) E parar a perda / tomar níveis de lucro para posições para ser aberto.


Claro, se semearmos os pesos desta Rede Neural ao acaso, os resultados comerciais serão terríveis. No entanto, digamos que criamos uma dúzia de tais NNs. Então podemos testar o desempenho de cada um deles, e escolher o melhor, o vencedor.


Esta foi a "primeira geração" dos NNs. Para continuar a segunda geração, precisamos permitir que nosso vencedor "procriar", mas para evitar a obtenção de cópias idênticas, vamos adicionar alguns números aleatórios aos pesos das descentinas.


Na segunda geração, temos o nosso vencedor da primeira geração e são cópias imperfeitas (mutadas). Vamos fazer testes novamente. Teremos outro vencedor, que é melhor que qualquer outra Rede Neural na geração.


E assim por diante. Nós simplesmente permitimos que os vencedores criem, e eliminem os perdedores, assim como na evolução da vida real, e obteremos nossa Rede Neural de melhor negociação, sem nenhum conhecimento prévio do que o sistema de negociação (algoritmo genético) deveria ser.


Algoritmo Genético da Rede Neural: Exemplo 0.


Este é o primeiro exemplo de algoritmo genético, e muito simples. Nós vamos passar por ele passo a passo, para aprender todos os truques que os exemplos a seguir usarão.


O código tem comentários em linha, então vamos apenas nos concentrar nos momentos-chave.


Primeiro, criamos uma rede neural. É usar pesos aleatórios, e ainda não foi ensinado.


Então, no ciclo, fazemos 14 cópias, usando MUTATION_NN fumction. Esta função faz uma cópia de uma Rede Neural de origem, adicionando valores aleatórios de 0 para (no nosso caso) 0,1 para todos os pesos.


Mantivemos alças para 15 NNs resultantes em uma matriz, podemos fazê-lo, pois o identificador é apenas um número inteiro.


A razão pela qual usamos 15 NNs não tem nada a ver com a negociação: o software Cortex Neural Networks pode traçar até 15 linhas em um gráfico simultaneamente.


Podemos usar diferentes abordagens para o teste. Primeiro, podemos usar o conjunto de aprendizagem, tudo de uma vez. Em segundo lugar, podemos testar, digamos, 12000 resords (de 100000), e caminhar através do conjunto de aprendizagem, do começo ao fim. Isso tornará o know-how diferente, pois buscaremos redes da Neural que sejam lucrativas em qualquer parte de dados, e não apenas em todo o conjunto. A segunda abordagem pode nos dar problemas, se a mudança de dados, desde o início até o fim. Em seguida, a rede irá evoluir, obtendo capacidade de trocar no final do conjunto de dados e perdendo a capacidade de trocar no seu início.


Para resolver esse problema, vamos levar aleatoriamente 12.000 fragmentos de registros de dados e alimentá-lo para a Rede Neural.


Abaixo, adicionamos uma criança para cada rede, com pesos ligeiramente diferentes. Note-se que 0,1 para o tange de mutação não é a única escolha, como fato, mesmo este parâmetro pode ser otimizado usando o algoritmo genético.


Os NNs recém-criados são adicionados após 15 existentes. Desta forma, temos 30 NNs em uma matriz, 15 antigos e 15 novos. Então vamos fazer o próximo ciclo de testes e matar perdedores, de ambas as gerações.


Para fazer testes, aplicamos a Rede Neural aos nossos dados, para produzir saídas, e depois chamar a função Test, que usa essas saídas para simular a negociação. Os resultados da negociação são usados ​​para desidir, quais NNs são melhores.


Usamos um intervalo de registros nLearn, de nStart a nStart + nLearn, onde nStart é um ponto aleatório dentro do conjunto de aprendizado.


O código abaixo é um truque. A razão pela qual usamos é ilustrar o fato de que o algoritmo genético pode criar algoritmos genéticos, mas não será necessariamente o melhor e, também, sugerir que podemos melhorar o resultado, se implicarmos algumas limitações à aprendizagem processo.


É possível que nosso sistema comercial funcione muito bem em negócios longos, e muito pobre em curto, ou vice-versa. Se, digamos, os negócios longos são muito bons, esse algoritmo genético pode ganhar, mesmo com grandes perdas em transações curtas.


Para evitá-lo, atribuímos mais peso aos negócios longos em trocas ímpares e curtas em ciclos pares. Este é apenas um exemplo, não há garantia, que irá melhorar alguma coisa. Mais sobre isso abaixo, em discussão sobre correções. Tecnicamente, você não precisa fazê-lo, ou pode fazê-lo de forma diferente.


Adicione lucro a uma matriz ordenada. Ele retorna uma posição de inserção, então usamos essa posição para adicionar identificador de rede Neural, aprendendo e testando lucros para arrays não classificados. Agora, temos dados para a Rede Neural atual no mesmo índice de matrizes que seu lucro.


A idéia é chegar a uma série de NNs, ordenados por rentabilidade. Como a matriz é classificada por lucro, para remover metade das redes, que são menos lucrativas, precisamos apenas remover NNs de 0 a 14.


As decisões de negociação são baseadas no valor do sinal da Rede Neural, desde este ponto de vista o programa é idêntico aos exemplos do artigo anterior.


FOREX Estratégia de Negociação: Discussing example 0.


Em primeiro lugar, vamos dar uma olhada nos gráficos. O primeiro gráfico de lucro durante a primeira iteração não é bom, como seria de esperar, a Rede Neural perde dinheiro (imagem evolution_00_gen_0.png copiada após a primeira iteração da pasta "imagens"):


A imagem com lucro no ciclo 15 é melhor, às vezes, o algoritmo genético pode aprender muito rápido:


No entanto, observe a saturação em uma curva de lucro.


É interessante também olhar para a forma como os lucros individuais mudam, tendo em mente, esse número de curva, digamos, 3 nem sempre é para a mesma Rede Neural, pois eles estão nascendo e terminaram o tempo todo:


Além disso, note que o pequeno sistema de negociação automatizado forex é pobre em transações curtas e muito melhor em longos, que pode ou não estar relacionado ao fato de que o dólar estava caindo em comparação com o euro durante esse período. Também pode ter algo a ver com parâmetros do nosso indicador (talvez, precisamos de um período diferente para shorts) ou a escolha de indicadores.


Aqui está o histórico após 92 e 248 ciclos:


Para nossa surpresa, o algoritmo genético falhou completamente. Vamos tentar descobrir o porquê, e como ajudar a situação.


Em primeiro lugar, cada geração não deve ser melhor do que a anterior? A resposta é não, pelo menos não dentro do modelo que usamos. Se tomarmos TODAS as aprendizagens definidas de uma vez, e usamos repetidamente para ensinar nossos NNs, então sim, eles melhorarão em cada geração. Mas, em vez disso, tomamos fragmentos aleatórios (12000 registros no tempo) e os usamos.


Duas perguntas: por que o sistema falhou em fragmentos aleatórios de conjunto de aprendizado e por que não usamos conjunto de aprendizado completo? Bem. Para responder a segunda pergunta, eu fiz. NNs apresentaram um grande desempenho - no aprendizado definido. E eles falharam no conjunto de testes, pelo mesmo motivo que falha quando usamos o aprendizado da FFPB. Para dizer de maneira diferente, nossos NNs se especializaram demais, eles aprenderam a sobreviver no ambiente ao qual eles estão acostumados, mas não fora dele. Isso acontece muito na natureza.


A abordagem que tomamos foi destinada a compensar isso, ao obrigar NNs a realizar bons em qualquer fragmento aleatório do conjunto de dados, de modo que, com sorte, eles também poderiam realizar em um conjunto de testes desconhecido. Em vez disso, eles falharam tanto no teste quanto no conjunto de aprendizado.


Imagine animais, vivendo em um deserto. Muito sol, sem neve. Este é um mercado de metafor para rizing, pois os nossos dados NNs desempenham o papel de meio ambiente. Os animais aprenderam a viver em um deserto.


Imagine animais, que vivem em clima frio. Neve e sem sol. Bem, eles se ajustaram.


No entanto, em nosso experimento, colocamos aleatoriamente nossos NNs em um deserto, na neve, na água, nas árvores. apresentando-lhes diferentes fragmentos de dados (aumentando aleatoriamente, caindo, plano). Os animais morreram.


Ou, de modo diferente, selecionamos a melhor Rede Neural para o conjunto de dados aleatórios 1, que, digamos, era para o aumento do mercado. Então, apresentamos, aos vencedores e seus filhos, uma queda dos dados do mercado. NNs funcionaram mal, nós melhoramos os melhores artistas, talvez, uma das crianças mutantes, que perdemos a capacidade de negociar no mercado em expansão, mas conseguiu alguma habilidade para lidar com a queda de um.


Em seguida, voltamos a mesa novamente e, novamente, conseguimos o melhor desempenho - mas melhor entre os mais pobres. Nós simplesmente não damos a nossos NNs chances de se tornarem universais.


Existem técnicas que permitem ao algoritmo genético aprender novas informações sem perder o desempenho em informações antigas (afinal, os animais podem viver no verão e no inverno, certo? Então, a evolução é capaz de lidar com mudanças repetitivas). Podemos discutir essas técnicas mais tarde, embora este artigo seja mais sobre o uso do software Cortex Neural Networks, do que sobre a construção de um sistema de negociação automatizado forex bem sucedido.


Algoritmo Genético da Rede Neural: Exemplo 1.


Agora é hora de falar sobre correções. Um algoritmo genético simples que criamos durante o passo anterior tem duas grandes falhas. Primeiro, não conseguiu negociar com lucro. Está tudo bem, podemos tentar usar sistema parcialmente treinado (foi lucrativo no início). A segunda falha é mais grave: não temos controle sobre as coisas, que esse sistema faz. Por exemplo, pode aprender a ser rentável, mas com grandes remessas.


É um fato bem conhecido, que na vida real, a evolução pode otimizar mais de um parâmetro simultaneamente. Por exemplo, podemos obter um animal, que pode correr rápido E ser resistente ao frio. Por que não tentar fazer o mesmo no nosso sistema de negociação automatizado forex?


É quando usamos as correções, que são apenas o conjunto de punições adicionais. Digamos, nosso sistema é negociado com drawdown 0.5, enquanto queremos confirmá-lo para 0 a 0.3 intervalo. Para "dizer" ao sistema que cometeu um erro, diminuímos o lucro (um usado para determinar, qual algoritmo genético ganhou) ao grau, que é proporcional ao tamanho do DD. Então, o algoritmo de evolução cuida do resto.


Existem alguns outros fatores que queremos levar em consideração: talvez queiramos ter um número de operações de compra e venda mais ou menos igual, queremos ter mais operações rentáveis, então de falhas, podemos querer que o gráfico de lucro ser linear e assim por diante.


Em evolution_01.tsc implementamos um conjunto simples de correções. Em primeiro lugar, usamos algum número grande para um valor de correção inicial. Multiplicamos isso para valores pequenos (geralmente, entre 0 e 1), dependendo da "punição" que queremos aplicar. Então, multiplicamos nosso lucro por esta correção. Como resultado, o lucro é corrigido, para refletir o quanto o algoritmo genético corresponde aos nossos outros critérios. Então usamos o resultado para encontrar uma Rede Neural de vencedores.


FOREX Estratégia de Negociação: Discutir o exemplo 1.


O exemplo 1 funciona muito melhor do que o exemplo 0. Durante os primeiros 100 ciclos, ele aprendeu muito, e os gráficos de lucro parecem tranquilizadores. No entanto, como no exemplo 0, os negócios longos são muito mais rentáveis, o que provavelmente significa que há um problema em nossa abordagem. No entanto, o sistema encontrou um equilíbrio entre algumas das condições iniciais contraditórias:


Existem algumas dinâmicas positivas, tanto no conjunto de aprendizado como, mais importante, no conjunto de testes.


Quanto ao aprendizado adicional, no ciclo 278 podemos ver, que nosso sistema foi superado. Isso significa que ainda temos progresso no aprendizado definido:


Mas o conjunto de testes mostra fraqueza:


Este é um problema comum com NNs: quando ensinamos isso no aprendizado definido, ele aprende a lidar com isso e, às vezes, ele aprende muito bem - até o grau, quando perde o desempenho no conjunto de testes.


Para lidar com esse problema, uma solução "tradicional" é usada: continuamos procurando a Rede Neural, que executa o melhor no conjunto de testes, e salve-o, substituindo o melhor possível, cada vez que o novo pico é alcançado. Esta é a mesma abordagem, que usamos no treinamento FFBP, exceto, desta vez, temos que fazê-lo nós mesmos (adicionando código, que procura uma melhor Rede Neural em um conjunto de testes e ligando para SAVE_NN ou exportando pesos da Rede Neural para um Arquivo). Desta forma, quando você parar seu treinamento, você terá o melhor desempenho ON TESTING SET salvo e esperando por você.


Observe também que não é o máximo. lucro que você está procurando, mas ótimo desempenho, então considere usar correções, ao procurar o melhor desempenho em um conjunto de testes.


Algoritmo Genético para Análise Técnica FOREX: Onde agora?


Depois de ter sua Rede Neural de vencedor, você pode seguir as etapas, descritas no artigo anterior, para exportar pesos da Rede Neural e depois usá-los em sua plataforma de negociação em tempo real, como Meta Trader, Trade Station e assim por diante.


Alternativamente, você pode se concentrar em outras formas de otimizar a Rede Neural, ao contrário do algoritmo FFBP, aqui você pode obter avay usando conjuntos de aprendizagem e teste e mover a aprendizagem seqüencial.


Um sistema de negociação Forex baseado em um algoritmo genético.


Luís Mendes Pedro Godinho Joana Dias Autor de e-mail.


Neste artigo, será descrito um algoritmo genético que visa otimizar um conjunto de regras que constituem um sistema de negociação para o mercado Forex. Cada indivíduo na população representa um conjunto de dez regras comerciais comerciais (cinco para entrar em uma posição e cinco outras para sair). Essas regras têm 31 parâmetros no total, que correspondem aos genes dos indivíduos. A população evoluirá em um determinado ambiente, definido por uma série temporal de um par de moedas específico. A adequação de um determinado indivíduo representa o quão bem ele conseguiu se adaptar ao meio ambiente e é calculado aplicando as regras correspondentes às séries temporais e calculando a relação entre o lucro e a redução máxima (a relação Stirling) . Dois pares de moedas foram utilizados: EUR / USD e GBP / USD. Foram utilizados dados diferentes para a evolução da população e para testar os melhores indivíduos. Os resultados alcançados pelo sistema são discutidos. Os melhores indivíduos conseguem alcançar resultados muito bons nas séries de treinamento. Na série de testes, as estratégias desenvolvidas mostram alguma dificuldade em obter resultados positivos, se você levar em consideração os custos de transação. Se você ignorar os custos de transação, os resultados são principalmente positivos, mostrando que os melhores indivíduos possuem alguma capacidade de previsão.


Notas.


Agradecimentos.


Gostaríamos de agradecer os árbitros anônimos, cujos comentários nos ajudaram a melhorar este artigo.


Referências.


Informações sobre direitos autorais.


Autores e afiliações.


Luís Mendes 1 Pedro Godinho 2 Joana Dias 3 Email autor 1. Faculdade de Economia Universidade de Coimbra Coimbra Portugal 2. Faculdade de Economia e GEMF Universidade de Coimbra Coimbra Portugal 3. Faculdade de Economia e Inesc-Coimbra Universidade de Coimbra Coimbra Portugal.


Sobre este artigo.


Recomendações personalizadas.


Cite o artigo.


.RIS Papers Reference Manager RefWorks Zotero.


.BIB BibTeX JabRef Mendeley.


Acesso ilimitado ao artigo completo Download instantâneo Inclua o imposto de vendas local, se aplicável.


Cite o artigo.


.RIS Papers Reference Manager RefWorks Zotero.


.BIB BibTeX JabRef Mendeley.


Mais de 10 milhões de documentos científicos ao seu alcance.


Switch Edition.


&cópia de; 2017 Springer International Publishing AG. Parte de Springer Nature.

No comments:

Post a Comment