Tuesday 3 April 2018

Algoritmo genético de estratégia comercial


Negociação quantitativa.
Investimentos quantitativos e idéias comerciais, pesquisas e análises.
Sexta-feira, 16 de outubro de 2015.
Um software de algoritmo genético de código aberto (publicação de convidado)
Recentemente eu libertei o Genotick - um software de código aberto que pode criar e gerenciar um grupo de sistemas de negociação. No núcleo do Genotick encontra-se uma epifania: se é possível criar qualquer software com apenas um punhado de instruções de montagem, deve ser possível criar qualquer sistema de negociação com um punhado de instruções simples. Essas instruções simples e sem sentido tornam-se extremamente poderosas quando combinadas. As instruções corretas na ordem correta podem criar qualquer tipo de sistema mecânico: seguimento da tendência, retorno médio ou mesmo com base em dados fundamentais.

Algoritmo genético da estratégia comercial
Obter através da App Store Leia esta publicação em nosso aplicativo!
Quão útil é o algoritmo genético para a previsão do mercado financeiro?
Há um grande número de literatura sobre o "sucesso" da aplicação de algoritmos evolutivos em geral, e o algoritmo genético em particular, para os mercados financeiros.
No entanto, sinto-me desconfortável sempre que lê esta literatura. Os algoritmos genéticos podem sobrepor os dados existentes. Com tantas combinações, é fácil elaborar algumas regras que funcionam. Pode não ser robusto e não tem uma explicação consistente de por que essa regra funciona e essas regras não excedem o mero argumento (circular) de que "funciona porque o teste mostra que funciona".
Qual é o consenso atual sobre a aplicação do algoritmo genético em finanças?
Eu trabalhei em um fundo de hedge que permitiu as estratégias derivadas do GA. Por segurança, exigiu que todos os modelos fossem submetidos muito antes da produção para garantir que eles ainda trabalhavam nos backtests. Portanto, pode haver um atraso de até vários meses antes de um modelo ser permitido executar.
Também é útil separar o universo da amostra; use uma metade aleatória dos estoques possíveis para a análise GA e a outra metade para confirmações de confirmação.
Eu acho que o maior problema que os algoritmos genéticos têm é a sobreposição, o viés de bisbilhotar dos dados e que são caixas pretas (não tanto como as Redes Neurais, mas ainda - depende da forma como elas são implementadas).
Eu acho que eles não são muito usados. Eu acho que há alguns fundos de hedge lá fora, que o usam, mas, em geral, eles foram exagerados e depois criticados. (Mas eles ainda são úteis para aceitar um papel ;-)
BTW: Nunca há um consenso real em finanças - todo mundo tenta incomodar todos os outros. É por isso que é tão interessante. (Ou dito de outra forma: é por isso que ainda há compradores e vendedores - um consenso real é um acidente ;-)
Eu apliquei GA em todos os tipos de coisas. Tive algum sucesso no mundo determinista onde realmente existia um padrão e sabia que existia alguma estrutura física (análise sísmica, análise de vibração, inventos, etc.). Depois que encontrei um modelo de GA que se comportou, o trabalho real começou. descobrindo por que se comportou.
Eu também gerei um monte de lixo GA de dados financeiros que "funcionaram" olhando para trás, mas era inútil ansioso.
As técnicas não são o problema das finanças, é a estrutura. E, claro, nunca dados suficientes (dados úteis).
Há muitas pessoas aqui falando sobre como as AGs são empíricas, não têm bases teóricas, são caixas pretas e coisas do gênero. Eu peço desculpa mas não concordo! Há todo um ramo da economia dedicado a olhar os mercados em termos de metáforas evolutivas: Economia evolutiva!
Eu recomendo o livro Dopfer, The Evolutionary Foundations of Economics, como uma introdução. cambridge / gb / knowledge / isbn / item1158033? site_locale = pt_PT.
Se a sua visão filosófica é que o mercado é basicamente um casino gigante, ou um jogo, então um GA é simplesmente uma caixa preta e não tem nenhuma base teórica. No entanto, se sua filosofia é que o mercado é uma ecologia de sobrevivência, a GA possui muitos fundamentos teóricos e é perfeitamente razoável discutir coisas como especiação corporativa, ecologias de mercado, genomas de portfólio, climas de negociação e gostar.
Supondo que você evite o viés de espionagem de dados e todas as possíveis armadilhas de usar o passado para prever o futuro, confiar em algoritmos genéticos para encontrar a solução "certa" se resume à mesma aposta que você faz quando gerencia ativamente um portfólio, seja quantitativamente ou discricionária. Se você acredita na eficiência do mercado, o aumento dos custos de transação de gerenciamento ativo é ilógico. Se, no entanto, você acredita que existem estruturas e amp; padrões psicológicos ou "falhas" a serem exploradas e a recompensa vale o tempo e o dinheiro para pesquisar e implementar uma estratégia, a escolha lógica é o gerenciamento ativo.
A execução de uma estratégia derivada da GA é uma aposta implícita contra a eficiência do mercado. Vocês basicamente estão dizendo: "Eu acho que existem algumas avaliações erradas que ocorrem por algum motivo" (massas de pessoas irracionais, fundos mútuos reunidos por incentivos mal alinhados, etc.) e "executar este GA pode classificar essa massa de dados maneira mais rápida do que eu posso ".
Eu não sou um "especialista em quantos" como todos vocês (eu sou apenas um programador), mas aqui está o que encontrei.
1. Se você configurou as restrições corretamente, os resultados são surpreendentes. por exemplo. Você pode obter portfólios que têm retorno muito alto e baixo risco. No entanto, é muito importante ter restrições conflitantes (por exemplo, um pai pode ter muitas crianças, mas o número total de filhos em uma geração não pode passar por um certo número) se você quiser obter bons resultados.
2.) Eu não acho que a GA é uma informação excessiva. Em vez disso, diz: "Tenho muitos genes (estoques) para começar, então vou escolher algumas para começar e, exceto para uma mutação ocasional, vou ficar com essas". Então, ao longo das gerações, descobre como fazer o melhor uso do que começou, criando porfolios ótimos com os estoques de "genes" (a. k.a) que começou com (mais algumas mutações). Tipo de como um construtor no Home Depot. O Home Depot tem muitas ferramentas, mas o construtor apenas escolhe alguns para começar.
IMHO, Algoritmos Genéticos são uma ferramenta incrível para resolver problemas que os cérebros humanos não podem.
Se você testar corretamente seu GA (usando apenas dados passados ​​para gerar a série de tempo do indicador), então você pode confiar no resultado.
Mas eu concordo com vocês que os algoritmos genéticos são puramente empíricos e, portanto, não me sinto muito confortável usando eles.
O falecido Thomas Cover, (provavelmente o líder "Teórico da Informação" de sua geração), considerou abordagens "universais" para coisas como compressão de dados e alocações de portfólio como verdadeiros algoritmos genéticos.
A evolução não tem parâmetros para ajustar ou treinar. Por que os verdadeiros algoritmos genéticos?
As abordagens universais não fazem suposições sobre a distribuição subjacente de dados. Eles não fazem nenhuma tentativa de prever o futuro de padrões ou qualquer outra coisa.
A eficácia "teórica" ​​das abordagens universais (eles apresentam desafios de implementação significativos vêem minha pergunta recente: Geometria para Portfolios Universais?) Sai deles fazendo o que a evolução exige. O mais rápido, o mais inteligente ou o mais forte não necessariamente sobrevive na próxima geração. A evolução favorece esse gene, organismo, meme, portfólio ou algoritmo de compactação de dados posicionado para se adaptar mais facilmente ao que ocorrer a seguir.
Além disso, porque essas abordagens não fazem suposições e operam de forma não paramétrica, pode-se considerar todos os testes, mesmo em todos os dados históricos, como fora da amostra.
Certamente eles têm limitações. Certamente, eles não podem trabalhar para cada tipo de problema que enfrentamos em nosso domínio, mas sim, que maneira interessante de pensar sobre as coisas.
Bem, o objetivo de um algoritmo genético é encontrar a melhor solução sem passar por todos os cenários possíveis porque seria muito longo. Então, é claro, é curva, esse é o objetivo.

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 2011 a 2013.
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 para 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.

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 usados: EUR / USD e GBP / USD. Dados diferentes foram utilizados 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 aos á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.

Algoritmo Genético Otimização de Estratégias de Negociação.
Algoritmo Genético Otimização de Estratégias de Negociação.
Estou tendo algum sucesso com o uso da Otimização do Algoritmo Genético em estratégias de negociação.
Como é que isso funciona? Tecnicamente, os Otimizadores de Algoritmos Genéticos encontram parâmetros ótimos para maximizar uma determinada função de fitness para um determinado sistema.
No FOREX, qual a função de fitness a ser maximizada? Rentabilidade máxima de uma estratégia de negociação a longo prazo.
Quais são os parâmetros? Em qualquer estratégia de negociação, você escolheu vários parâmetros de negociação: prazo, escolha de indicadores, parâmetros de indicadores, condições para abrir um comércio, condições para fechar um comércio, quando tirar proveito, limite de parada, etc. Até agora, você acabei de adivinhar quais são os melhores parâmetros. É possível que um Algoritmo Genético encontre as configurações ideais para todos esses parâmetros que maximizarão o retorno Lucro sobre um conjunto de dados de teste.
Qual é o dado de teste? Se os seus parâmetros da estratégia de negociação foram otimizados para retornar um Lucro máximo para os últimos 1 ou 2 anos de dados históricos do mercado, então, mesmo que as características do mercado mudem ocasionalmente ao longo do tempo, você pensaria que sua estratégia de negociação otimizada faria bem sob a atual ) condições de mercado.
Onde você obtém dados do mercado histórico para usar no otimizador de GA? A fonte gratuita mais fácil que eu encontrei é tiquetaqueira /. Você pode obter dados de barra e de escala para muitos pares de moedas por períodos de 1 mês a 5 anos em vários períodos de tempo, até os dados M1.
Como o otimizador de GA funciona? Você constrói um cromossomo de todos os parâmetros que precisam ser otimizados. Você também cria uma função de fitness que diz ao GA o quão bom (ajuste) um dado é um cromossomo. Em seguida, o GA cria muitos cromossomos usando números aleatórios no início e, em seguida, usando funções de busca de objetivos, mutação, impulso e crossover de genes, o GA modifica esses cromossomos de teste para buscar um cromossomo que maximize a função de fitness.
Home isso funciona no caso Forex? Digamos que você deseja otimizar uma estratégia de negociação da SMA três. A estratégia de negociação da 3 SMA usa 3 indicadores SMA de períodos crescentes em um período de tempo selecionado e abre um contrato quando todos os 3 indicadores concordam (para cima ou para baixo) e fecham um contrato aberto quando o indicador SMA médio vai na direção oposta do contrato aberto . Para gerenciamento de risco adicional, a estratégia também pode usar um limite de sondagem que limita a perda em qualquer contrato aberto.
Quais os parâmetros a serem otimizados?
Você não gostaria de conhecer os valores dos parâmetros que maximizaram o Lucro para o EUR / USD nos últimos 2 anos?
Gostaria de saber como esses parâmetros otimizados mudaram desde as eleições presidenciais de 2016 até hoje?
Você também gostaria de ter um conjunto único de parâmetros otimizados para o USD / JPY ou qualquer outro par de moedas?
Como fazemos isso para o exemplo 3 SMA Trading?
1. capture os dados históricos para o par de moedas desejado e o período de tempo desejado (6M, 1Y, 2Y, 5Y).
2. Construir o cromossomo:
* T = seleção do período em minutos: 1, 5, 10, 15, 30, 60.
* desde P1 & lt; P2 & lt; P3: deixe P1 = A, P2 + A + B, P3 = A + B + C em carrapatos. A, B e C podem estar no intervalo de 1 a 300 carrapatos.
* S = stoploss em .1 pips.
Então, o cromossomo torna-se T: A: B: C: S.
3. Agora, o GA é executado e, a cada geração, o GA solicitará que o aplicativo avalie os cromossomos candidatos (conjunto de parâmetros) para adequação. Neste ponto, o aplicativo usa os parâmetros do candidato e executa a estratégia de negociação em relação aos dados históricos e acumula o Lucro / Perda total gerado pela estratégia de negociação, usando esses parâmetros, em todo o período histórico.
4. Com esta avaliação Fitness (Lucro / Perda) dos Cromossomos candidatos, o GA usará as funções de otimização genética para localizar o cromossomo com os parâmetros que fornecerão o melhor Fitness (Lucro) sobre os dados de teste (históricos).
5. Agora você tem um conjunto de parâmetros otimizados que funcionaram melhor para maximizar o Lucro durante o período de teste e devem funcionar bem no período atual. O teste corre também pode dar-lhe uma ideia dos intervalos de lucro e de retirada esperados.
6. Você pode usar o conjunto otimizado de parâmetros para negociar manualmente ou conectá-los a um Expert Adviser (EA) para negociar automaticamente 24 horas por dia. Com um conjunto de parâmetros otimizados específicos para cada par de moedas, você pode trocar vários pares de moedas simultaneamente usando estratégias otimizadas.
7. Você pode usar o otimizador de GA periodicamente com dados históricos atualizados para:
* ajuste os parâmetros de negociação para ajustar a evolução do comportamento do mercado,
* avaliar as mudanças na sua estratégia de negociação,
* avaliar diferentes estratégias de negociação.
Alguém está interessado nesta técnica?
Alguém está interessado em mais detalhes?
&cópia de; 2018 Todos os direitos reservados.
Fundo de investimento apiário.
383 W Lakeview Rd.
Lindon UT 84042.
Ligações secundárias.
Investir em valores mobiliários, moedas e / ou contratos associados com eles carrega riscos inerentes. Nenhuma pessoa, instituição ou entidade, incluindo o Fundo de investimento apiário, pode garantir um retorno sobre o investimento para tais transações. Nem o Apiary Investment Fund nem seus representantes recomendarão a compra, venda ou consultoria de transação para um título específico.

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 fazer quando fazemos a aproximação da função, apenas pegamos 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! De fato, temos muitas estratégias de negociação forex que podemos usar a qualquer momento, 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 um programa desse tipo.
Usando o Algoritmo Genético.
Algoritmos genéticos são muito bem desenvolvidos e muito diversos. Se você quer aprender tudo sobre eles, eu sugiro que você use Wikipedia, já que 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 que, se multiplicarmos os pesos dessa rede neural aleatoriamente, os resultados das negociações 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 do 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 abordagens diferentes para o teste. Primeiro, podemos usar o conjunto de aprendizagem, tudo de uma vez. Segundo, podemos testar, digamos, 12.000 resordos (de 100.000) e percorrer o conjunto de aprendizado, 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 os dados mudarem, do começo ao 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 que 0,1 para mutação tange não é a única escolha, na verdade, até mesmo este parâmetro pode ser otimizado usando 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 os perdedores das duas 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 para nStart + nLearn, em que 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 de negociação funcione muito bem em operações longas e muito fraco 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 operações í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 fazer isso, ou pode fazer diferente.
Adicione lucro a uma matriz ordenada. Ele retorna uma posição de inserção e, em seguida, usamos essa posição para adicionar o identificador da Rede Neural, aprendendo e testando os lucros para matrizes não ordenadas. 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, a partir deste 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 para 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á a história depois de 92 e 248 ciclos:
Para nossa surpresa, o algoritmo genético falhou completamente. Vamos tentar descobrir por que e como ajudar a situação.
Primeiro de tudo, cada geração não é supostamente melhor que a anterior? A resposta é não, pelo menos não dentro do modelo que usamos. Se pegarmos todo o conjunto de aprendizagem de uma só vez, e usá-lo repetidamente para ensinar nossas NNs, então sim, elas vão melhorar a cada geração. Mas, em vez disso, pegamos fragmentos aleatórios (12.000 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 realizaram muito - no set de aprendizagem. 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. Essa é uma metaforização para o mercado, já que nossos dados de NNs desempenham o papel de ambiente. Os animais aprenderam a viver em um deserto.
Imagine animais que vivem num 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-os com diferentes fragmentos de dados (surgindo aleatoriamente, caindo, planos). Os animais morreram.
Ou, para colocar de forma diferente, selecionamos a melhor Rede Neural para o conjunto de dados aleatórios 1, que, digamos, foi para o mercado em ascensão. 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.
Depois viramos a mesa novamente e, novamente, obtivemos o melhor desempenho - mas o melhor entre os de pior desempenho. Nós simplesmente não davamos às nossas NNs nenhuma chance 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, falhou em negociar com lucro. Está tudo bem, podemos tentar usar sistema parcialmente treinado (foi lucrativo no início). A segunda falha é mais séria: 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 pegar 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 correções, que não são nada além do conjunto de punições adicionais. Digamos que nosso sistema negocie com drawdown 0.5, enquanto queremos confirmá-lo para 0 - 0.3 interval. 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 seja 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 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 reconfortantes. 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:
Há alguma dinâmica positiva tanto no conjunto de aprendizado quanto, 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). Dessa forma, quando você interromper seu treinamento, você terá o melhor desempenho de ON TESTING SET salvo e esperando por você.
Observe também que não é o máximo. o lucro que você busca, mas o desempenho ideal, portanto, considere usar correções ao procurar um 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.

No comments:

Post a Comment