Monday 9 April 2018

Algoritmo genético forex trading


Algoritmo Genético em Forex Trading.
Neste tutorial vou mostrar-lhe uma maneira secreta em que eu aproveito o Algoritmo Genético para otimizar meus robôs Forex.
Vamos mergulhar direto em:
Deixe seus comentários / perguntas abaixo & # 8211; Eu estou sempre feliz em ajudar.
COMECE COM A ACADEMIA DE NEGOCIAÇÃO DE FOREX.
Eu sou um comerciante de Forex, um cientista de dados, um empreendedor, um treinador on-line. Essas são minhas principais ocupações. Eu estive em Forex Trading desde 2007 e, como dizem, eu vi o bom, o ruim e o feio. Eu sobrevivi ao GFC e aprendi muito ao longo do caminho. Hoje quero compartilhar todos os meus conhecimentos e insights com você.
Oi Kirill & # 8230; você é incrível professor e conteúdo incrível em todos os seus cursos. Obrigado pelo seu trabalho duro. Eu terminei quase um curso e me matriculei em 4 cursos seus. Como posso me apossar deste EA.
Oi Bill! Obrigado pelo ótimo feedback. Infelizmente, esse EA é privado. Atenciosamente, Kirill.
Uau & # 8211; é óbvio que você é um matemático * lol * & # 8211; trabalho muito fascinante, mas eu não tenho a menor idéia de como fazer isso sozinho. Eu prefiro simples simples simples 😉
Dia bom. Eu não sei mais se você monitora este post. Se você gosta, eu realmente aprecio qualquer assistência que você possa oferecer. Eu sei que você deve estar muito ocupado, mas apenas me apontar na direção certa significaria o mundo para mim. Eu estou jogando com um GA no MQL4. Não é realmente para usar o GA para negociação, mas esta é a única língua que conheço bem o suficiente para programar um GA. No entanto, a população não parece estar evoluindo. Eu não sei se não vou matá-los rapidamente ou talvez em breve. Talvez eu não deixe o GA funcionar por tempo suficiente. No entanto, com cerca de 50 anos (2000-2016, mais e mais) eu acho que eles devem fazer mais do que apenas sentar e babar em um canto, por assim dizer. Meu e-mail é [email & # 160; protegido] ou se você quiser, basta responder a esta postagem. De qualquer forma, qualquer ajuda seria muito apreciada.
Categorias.
Algorithmic Trading (1) Curso: Forex Trading para Iniciantes (6) Curso: MQL4 para Iniciantes Completos (48) Curso: Estrategista para Iniciantes (11) FOREX (90) Estrategia Forex (90) Negociacao Forex para Principiantes (74) Forex VPS (1) Análise Fundamental (3) Entrevistas (1) Diversos (4) MQL4 (2) Análise Técnica (13)
Postagem recente.
Tags populares.
COMECE COM A ACADEMIA DE NEGOCIAÇÃO DE FOREX.
Forexboat Pty Ltd (ABN: 29 609 855 414) um Representante Autorizado Corporativo (AR No. 001238951) da HLK Group Pty Ltd (ACN: 161 284 500) que detém uma Licença Australiana de Serviços Financeiros (AFSL no. 435746). Qualquer informação ou conselho contido neste site é apenas de natureza geral e não constitui aconselhamento pessoal ou de investimento. Não nos responsabilizamos por qualquer perda ou dano, incluindo, sem limitação, qualquer perda de lucro, que possa surgir direta ou indiretamente do uso ou confiança em tais informações. Você deve procurar aconselhamento financeiro independente antes de adquirir um produto financeiro. Todas as transacções de valores mobiliários e produtos financeiros ou instrumentos envolvem riscos. Lembre-se de que os resultados de desempenho anteriores não são necessariamente indicativos de resultados futuros.
As informações contidas neste site podem ser acessadas em todo o mundo, porém não são dirigidas a residentes em qualquer país ou jurisdição onde tal distribuição ou uso seja contrário à lei ou regulamentação local. A Forexboat Pty Ltd não está registada em nenhum regulador dos EUA, incluindo a National Futures Association (& NFA & # 8221;) e a Commodity Futures Trading Commission (& # 8220; CFTC & # 8221;) portanto os produtos e serviços oferecidos neste site não são destinado a residentes dos Estados Unidos.

SnowCron.
GRATUITO E. Mail Classes.
Usando o Algoritmo Genético para criar uma estratégia de negociação FOREX rentável. Algoritmo Genético no Software de Redes Neurais do Cortex Feedforward Backpropagation Rede Neural Aplicação para cálculos genéticos baseados em negociações Forex.
Este exemplo usa conceitos e idéias do artigo anterior, portanto, leia o Algoritmo Genético de Rede Neural em FOREX Trading Systems primeiro, embora não seja obrigatório.
Sobre este texto
Primeiro de tudo, por favor leia o aviso. Este é um exemplo do uso da funcionalidade do algoritmo genético da Cortex Neural Networks Software, não um exemplo de como fazer negócios lucrativos. Eu não sou seu guru, nem eu deveria ser responsável por suas perdas.
O Cortex Neural Networks Software possui redes neurais, e o FFBP que discutimos anteriormente é apenas uma maneira de escolher uma estratégia de negociação forex. É uma boa técnica, poderosa e quando aplicada corretamente, muito promissor. No entanto, tem um problema - para ensinar a Rede Neural, precisamos conhecer a "saída desejada".
É 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 previsões de redes neurais, usamos a técnica (descrita em artigos anteriores) de ensinar a Rede Neural sobre a história, novamente, se prevermos, digamos, uma taxa de câmbio, sabemos (durante o treinamento) qual é a predição correta .
No entanto, quando estamos construindo um sistema de negociação, não temos idéia de qual é a decisão de negociação correta, mesmo se soubermos 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 a saída desejada da 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 a previsão da taxa de câmbio (ou indicador baseado na taxa de câmbio) e, em seguida, utilizamos essa previsão para negociar. Então, fora da parte de Rede Neural do programa, tomamos uma decisão sobre qual Rede Neural é a melhor.
Algoritmos genéticos podem lidar com este problema diretamente, eles podem resolver o problema declarado como "encontrar os melhores sinais de negociação".
Neste artigo, vamos usar o software Cortex Neural Networks para criar um programa desse tipo.
Usando Algoritmo Genético.
Algoritmos genéticos são muito bem desenvolvidos e muito diversificados. 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 Cortex Neural Networks Software, podemos criar uma Rede Neural que recebe alguma entrada, digamos, valores de um indicador e produz alguma saída, digamos, sinais de negociação (comprar, vender, manter) e parar a perda / obter 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 desses NNs. Então podemos testar o desempenho de cada um deles e escolher o melhor, o vencedor.
Esta foi a "primeira geração" de NNs. Para continuar com a segunda geração, precisamos permitir que nosso vencedor "procrie", mas para evitar cópias idênticas, vamos adicionar um pouco de noice aleatório aos pesos de seus descendentes.
Na segunda geração, temos nosso vencedor da primeira geração e são cópias imperfeitas (mutantes). Vamos fazer o teste novamente. Teremos outro vencedor, que é melhor do que qualquer outra rede neural na geração.
E assim por diante. 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 sobre como deve ser o sistema comercial (algoritmo genético).
Algoritmo Genético de Rede Neural: Exemplo 0.
Este é o primeiro exemplo de algoritmo genético e um exemplo muito simples. Vamos percorrê-lo passo a passo para aprender todos os truques que os exemplos a seguir usarão.
O código tem comentários inline, então vamos nos concentrar apenas nos principais momentos.
Primeiro, criamos uma rede neural. Está usando pesos aleatórios e ainda não foi ensinado.
Então, em ciclo, fazemos 14 cópias, usando a função MUTATION_NN. Esta função faz uma cópia de uma rede neural de origem, adicionando valores aleatórios de 0 a (no nosso caso) 0,1 a todos os pesos.
Mantemos alças para 15 NNs resultantes em uma matriz, podemos fazer isso, pois handle é apenas um número inteiro.
A razão pela qual usamos 15 NNs não tem nada a ver com negociação: o Cortex Neural Networks Software pode plotar até 15 linhas em um gráfico simultaneamente.
Podemos usar abordagens diferentes para o teste. Primeiro, podemos usar o conjunto de aprendizado, 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á os aprendizados diferentes, já que procuraremos redes neurais que sejam lucrativas em qualquer parte dos dados, não apenas no conjunto inteiro. A segunda abordagem pode nos dar problemas, se os dados mudarem, do começo ao fim. Em seguida, a rede evoluirá, obtendo a capacidade de negociar no final do conjunto de dados e perdendo a capacidade de negociar no início.
Para resolver esse problema, vamos pegar aleatoriamente 12.000 registros de fragmentos de dados e alimentá-los com a Rede Neural.
Abaixo, adicionamos um filho 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.
NNs recém-criados são adicionados após 15 existentes. Dessa 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, em seguida, chamamos a função Teste, que usa essas saídas para simular a negociação. Os resultados da negociação são usados ​​para designar 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 a usamos é para ilustrar o fato de que o algoritmo genético pode criar um algoritmo genético, mas não necessariamente será o melhor, e também, para sugerir, que podemos melhorar o resultado, se implicarmos algumas limitações ao aprendizado. 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, trocas longas forem MUITO boas, esse algoritmo genético poderá vencer, mesmo com grandes perdas em trocas curtas.
Para evitá-lo, atribuímos mais peso a operações longas em operações ímpares e curtas em ciclos pares. Este é apenas um exemplo, não há garantia de que isso 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 um array ordenado. 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 matriz que seu lucro.
A ideia é chegar ao conjunto de NNs, classificados por rentabilidade. Como array é ordenado por lucro, para remover 1/2 de redes, que são menos lucrativas, basta remover NNs 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.
Estratégia de Negociação de FOREX: Discutindo o exemplo 0.
Primeiro de tudo, vamos dar uma olhada nos gráficos. O primeiro gráfico para lucro durante a primeira iteração não é nada bom, como seria de se esperar, a Rede Neural perde dinheiro (imagem evolution_00_gen_0.png copiada após a primeira iteração da pasta "images"):
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 o modo como os lucros individuais mudam, tendo em mente que o número da curva, digamos, 3 nem sempre é para a mesma Rede Neural, pois eles estão nascendo e terminando o tempo todo:
Observe também que, fora do sistema de negociação automatizado de forex pouco executa em operações curtas, e muito melhor em longos, o que pode ou não estar relacionado com o fato, que o dólar estava caindo em relação ao 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 curtos) 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 melhorarão em 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 do conjunto de aprendizado e por que não usamos todo o conjunto de aprendizado? Bem. Para responder a segunda pergunta, eu fiz. NNs realizaram muito - no set de aprendizagem. E eles falharam no teste, pelo mesmo motivo que falha quando usamos o aprendizado FFPB. Em outras palavras, nossos NNs foram superespecializados, aprenderam a sobreviver no ambiente a que estão acostumados, mas não fora dele. Isso acontece muito na natureza.
A abordagem que tomamos foi destinada a compensar isso, forçando os NNs a terem um bom desempenho em qualquer fragmento aleatório do conjunto de dados, de modo que, esperamos, eles também pudessem executar um conjunto de testes desconhecido. Em vez disso, eles falharam nos testes e no conjunto de aprendizado.
Imagine animais vivendo em um deserto. Muito sol, nada de neve. Essa é uma metaforização para o mercado, já que nossos dados de NNs desempenham o papel de ambiente. Os animais aprenderam a viver no deserto.
Imagine animais que vivem num clima frio. Neve e sem sol. Bem, eles se ajustaram.
No entanto, em nosso experimento, colocamos aleatoriamente nossas NNs em um deserto, na neve, na água, nas árvores. apresentando-os com diferentes fragmentos de dados (surgindo aleatoriamente, caindo, planos). 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. Em seguida, apresentamos aos vencedores e seus filhos dados sobre um mercado em queda. As NNs tiveram um desempenho ruim, tiramos o melhor dos maus desempenhos, talvez, uma das crianças mutantes, que perderam a capacidade de negociar no mercado em ascensão, mas conseguiram alguma habilidade para lidar com uma queda.
Depois viramos a mesa novamente e, novamente, obtivemos o melhor desempenho - mas o melhor entre os artistas com baixo desempenho. Nós simplesmente não davamos às nossas NNs nenhuma chance de se tornarem universais.
Existem técnicas que permitem que o algoritmo genético aprenda 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 repetidas). Podemos discutir essas técnicas mais tarde, embora este artigo seja mais sobre o uso do Cortex Neural Networks Software, 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 a etapa anterior tem duas falhas principais. Primeiro, falhou em negociar com lucro. Está tudo bem, podemos tentar usar um sistema parcialmente treinado (foi lucrativo no começo). A segunda falha é mais séria: não temos controle sobre as coisas, que esse sistema faz. Por exemplo, pode aprender a ser lucrativo, mas com enormes perdas.
É 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 em 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 ele cometeu um erro, diminuímos seu lucro (um usado para determinar qual algoritmo genético venceu) ao grau, que é proporcional ao tamanho do DD. Então, o algoritmo de evolução cuida do resto.
Há poucos fatores a mais que queremos levar em consideração: podemos querer ter um número mais ou menos igual de operações de compra e venda, queremos ter mais operações lucrativas, depois fracassos, podemos querer que o gráfico de lucro seja seja linear e assim por diante.
Em evolution_01.tsc, implementamos um conjunto simples de correções. Primeiro de tudo, usamos um número grande para um valor de correção inicial. Nós multiplicamos para um valor pequeno (geralmente, entre 0 e 1), dependendo da "punição" que queremos aplicar. Então multiplicamos nosso lucro para essa 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 vencedora.
Estratégia de Negociação de FOREX: Discutindo 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, as negociações longas são muito mais lucrativas, o que provavelmente significa que há um problema em nossa abordagem. No entanto, o sistema encontrou um equilíbrio entre duas 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 posterior, no ciclo 278 podemos ver que nosso sistema foi super treinado. Isso significa que ainda temos progresso no aprendizado:
Mas o conjunto de testes mostra fraqueza:
Este é um problema comum com NNs: quando ensinamos em um conjunto de aprendizado, ele aprende a lidar com ele e, às vezes, aprende muito bem - na medida em que perde o desempenho no conjunto de testes.
Para lidar com esse problema, uma solução "tradicional" é usada: continuamos procurando a Rede Neural, que tem melhor desempenho no conjunto de testes, e a salvamos, sobrescrevendo a melhor anterior, sempre que um novo pico é atingido. Esta é a mesma abordagem, que usamos no treinamento FFBP, exceto que, desta vez, temos que fazer isso sozinhos (adicionando código, que procura uma melhor Rede Neural em um conjunto de testes, chamando SAVE_NN ou exportando pesos de 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ê.
Note também que não é o máximo. lucro que você procura, mas ótimo desempenho, então considere o uso de 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 ganhar o seu vencedor Rede Neural, você pode seguir os passos, descritos no artigo anterior, para exportar pesos dessa Rede Neural, e então 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 maneiras de otimizar a Rede Neural, ao contrário do algoritmo FFBP, aqui você pode obter o avay de usar conjuntos de aprendizado e teste e mover o aprendizado seqüencial.

Algoritmo genético forex
Criando um sistema de negociação dentro do Trading System Lab.
O Trading System Lab gerará automaticamente Trading Systems em qualquer mercado em poucos minutos usando um programa de computador muito avançado conhecido como AIMGP (Indução Automática do Código de Máquina com Programação Genética). A criação de um sistema de negociação dentro do Trading System Lab é realizada em 3 etapas fáceis. Primeiro, é executado um pré-processador simples que extrai e pré-processa automaticamente os dados necessários do mercado com o qual deseja trabalhar. A TSL aceita dados CSI, MetaStock, AIQ, TradeStation, Internet grátis, ASCII, TXT, CSV, CompuTrac, DowJones, FutureSource, TeleChart2000v3, TechTools, XML, Binário e Internet Streaming. Em segundo lugar, o Trading System Generator (GP) é executado por vários minutos, ou mais, para evoluir um novo sistema de negociação. Você pode usar seus próprios dados, padrões, indicadores, relacionamentos entre mercados ou dados fundamentais no TSL. Em terceiro lugar, o Trading System evoluído é formatado para produzir novos sinais do Trading System a partir da TradeStation ™ ou de muitas outras plataformas de negociação. O TSL irá escrever automaticamente Easy Language, Java, Assembler, código C, código C # e WealthLab Script Language. O Sistema de Negociação pode então ser negociado manualmente, negociado através de um corretor ou negociado automaticamente. Você pode criar o Sistema de Negociação sozinho ou nós podemos fazer isso por você. Então, você ou seu corretor podem negociar o sistema manualmente ou automaticamente.
O Programa Genético do Trading System Lab contém vários recursos que reduzem a possibilidade de ajuste de curva ou a produção de um Sistema de Negociação que não continua a funcionar no futuro. Primeiro, os Trading Systems evoluídos têm seu tamanho reduzido ao menor tamanho possível através do que é chamado de pressão de parcimônia, a partir do conceito de comprimento de descrição mínima. Assim, o Sistema de Negociação resultante é o mais simples possível e geralmente se acredita que quanto mais simples for o Sistema de Negociação, melhor será o seu desempenho no futuro. Em segundo lugar, a aleatoriedade é introduzida no processo evolutivo, o que reduz a possibilidade de encontrar soluções que sejam localmente, mas não globalmente ótimas. A aleatoriedade é introduzida não apenas nas combinações do material genético usado nos Trading Systems evoluídos, mas também em Parsimony Pressure, Mutation, Crossover e outros parâmetros GP de nível superior. O teste Fora da Amostra é realizado enquanto o treinamento está em andamento com as informações estatísticas apresentadas nos testes In Sample e Out of Sample Trading System. Os logs de execução são apresentados ao usuário para os dados Treinamento, Validação e Fora da Amostra. Bem comportado O desempenho fora da amostra pode ser indicativo de que o Sistema de Negociação está evoluindo com características robustas. A deterioração substancial no teste automático Fora da Amostra em comparação com o teste Na Amostra pode implicar que a criação de um Sistema de Negociação robusto está em dúvida ou que o Terminal ou Conjunto de Entrada pode precisar ser alterado. Por fim, o Conjunto de Terminais é cuidadosamente escolhido de modo a não influenciar excessivamente a seleção do material genético inicial em relação a qualquer tendência ou sentimento específico do mercado.
A TSL não inicia sua execução com um Sistema de Negociação predefinido. Na verdade, apenas o Input Set e uma seleção de modos de entrada de mercado ou modos, para pesquisa e atribuição automática de entrada, são feitos inicialmente. Um padrão ou comportamento indicador que pode ser considerado uma situação de alta pode ser usado, descartado ou invertido dentro do GP. Nenhum padrão ou indicador é pré-atribuído a qualquer viés de movimento de mercado específico. Este é um afastamento radical do desenvolvimento do Trading System gerado manualmente.
Um Sistema de Negociação é um conjunto lógico de instruções que informa ao comerciante quando comprar ou vender um mercado em particular. Estas instruções raramente requerem intervenção de um profissional. Os Sistemas de Negociação podem ser negociados manualmente, observando as instruções de negociação em uma tela de computador, ou podem ser negociados permitindo que o computador entre no mercado automaticamente. Ambos os métodos estão em uso generalizado hoje. Há mais administradores profissionais de dinheiro que se consideram comerciantes "Sistemáticos ou Mecânicos" do que aqueles que se consideram "discricionários", e o desempenho dos administradores de fundos sistemáticos é geralmente superior ao dos gerentes de dinheiro discricionários. Estudos têm mostrado que as contas de negociação geralmente perdem dinheiro com mais frequência se o cliente não estiver usando um sistema de negociação. O aumento significativo nos Sistemas de Negociação nos últimos 10 anos é evidente especialmente nas corretoras de commodities, no entanto, as corretoras de ações e ações estão cada vez mais conscientes dos benefícios através do uso de Sistemas de Negociação e algumas começaram a oferecer Sistemas de Negociação aos seus clientes de varejo.
A maioria dos gestores de fundos mútuos já está usando algoritmos de computador sofisticados para orientar suas decisões sobre o que "estoque a escolher" ou que "rotação setorial" é a favor. Computadores e algoritmos se tornaram mainstream no investimento e esperamos que essa tendência continue enquanto os investidores mais experientes em informática continuam a permitir que parcelas de seu dinheiro sejam gerenciadas pela Trading Systems para reduzir o risco e aumentar os retornos. As enormes perdas experimentadas pelos investidores que participam na compra e manutenção de ações e fundos mútuos como o mercado de ações derretido nos últimos anos está promovendo esse movimento no sentido de uma abordagem mais disciplinada e lógica para o investimento no mercado de ações. O investidor médio percebe que atualmente ele permite que muitos aspectos de suas vidas e a vida de seus entes queridos sejam mantidos ou controlados por computadores, como os automóveis e aeronaves que usamos para o transporte, os equipamentos de diagnóstico médico que usamos para a manutenção da saúde, os controladores de aquecimento e refrigeração que usamos para controle de temperatura, as redes que usamos para informações baseadas na Internet, até mesmo os jogos que jogamos para entretenimento. Por que então alguns investidores de varejo acreditam que podem "atirar nos quadris" em suas decisões sobre "o que" ações ou fundo mútuo para comprar ou vender e esperar ganhar dinheiro? Finalmente, o investidor médio tornou-se cauteloso com os conselhos e informações encaminhados por corretores inescrupulosos, contadores, diretores de empresas e consultores financeiros.
Nos últimos 20 anos, matemáticos e desenvolvedores de software buscaram indicadores e padrões nos mercados de ações e commodities em busca de informações que apontassem para a direção do mercado. Esta informação pode ser usada para melhorar o desempenho dos Sistemas de Negociação. Geralmente este processo de descoberta é realizado através de uma combinação de tentativa e erro e mais sofisticada "Data Mining". Normalmente, o desenvolvedor levará semanas ou meses processando os números para produzir um Sistema de Negociação em potencial. Muitas vezes, este Sistema de Negociação não terá um bom desempenho quando realmente usado no futuro, devido ao que é chamado de "ajuste de curva". Ao longo dos anos tem havido muitos Trading Systems (e empresas de desenvolvimento de Trading System) que vêm e vão como seus sistemas falharam em negociação ao vivo. Desenvolver Sistemas Comerciais que continuem a atuar no futuro é difícil, mas não impossível de realizar, embora nenhum desenvolvedor ético ou gestor de dinheiro dê uma garantia incondicional de que qualquer Sistema de Negociação, ou mesmo qualquer ação, título ou fundo mútuo, continuará. para produzir lucros para o futuro para sempre.
O que levou semanas ou meses para o desenvolvedor do Trading System produzir no passado pode agora ser produzido em minutos com o uso do Trading System Lab. O Trading System Lab é uma plataforma para a geração automática de Sistemas de Negociação e Indicadores de Negociação. A TSL utiliza um Mecanismo de Programação Genética de alta velocidade e produzirá Sistemas de Negociação a uma taxa de mais de 16 milhões de barras de sistema por segundo, com base em 56 entradas. Observe que apenas algumas entradas serão realmente usadas ou necessárias, resultando em estruturas de estratégia geralmente simples e evoluídas. Com aproximadamente 40.000 a 200.000 sistemas necessários para uma convergência, o tempo de convergência para qualquer conjunto de dados pode ser aproximado. Note que não estamos simplesmente executando uma otimização de força bruta de indicadores existentes procurando por parâmetros ótimos a partir dos quais usar em um Sistema de Negociação já estruturado. O Gerador do Sistema de Negociação começa em uma origem de ponto zero, não fazendo suposições sobre o movimento do mercado no futuro e então "evolui" os Sistemas de Negociação a uma taxa muito alta combinando informações presentes no mercado e formulando novos filtros, funções, condições e relacionamentos à medida que avança em direção a um Sistema de Negociação "geneticamente modificado". O resultado é que um excelente Sistema de Negociação pode ser gerado em poucos minutos em 20 a 30 anos de dados diários de mercado em praticamente qualquer mercado.
Nos últimos anos, tem havido várias abordagens para a otimização do Sistema de Negociação que empregam o "Algoritmo" Genético menos poderoso. Os Programas Genéticos (GPs) são superiores aos Algoritmos Genéticos (GA's) por várias razões. Primeiro, os GP's convergem em uma solução a uma taxa exponencial (muito rápida e ficando mais rápida) enquanto os Algoritmos Genéticos convergem a uma taxa linear (muito mais lenta e não ficando mais rápida). Em segundo lugar, as GP's geram realmente um código de máquina do Sistema de Negociação que combinava o material genético (indicadores, padrões, dados entre mercados) de maneiras únicas. Essas combinações exclusivas podem não ser intuitivamente óbvias e não exigem definições iniciais pelo desenvolvedor do sistema. As relações matemáticas únicas criadas podem se tornar novos indicadores ou variantes na Análise Técnica, ainda não desenvolvidas ou descobertas. Os GAs, por outro lado, simplesmente procuram soluções ótimas à medida que progridem ao longo da faixa de parâmetros; eles não descobrem novas relações matemáticas e não escrevem seu próprio código de sistema de negociação. O código de criação do Trading System da GP de vários comprimentos, usando genomas de tamanho variável, modificará o comprimento do Sistema de Negociação através do que é chamado crossover não homólogo e descartará completamente um indicador ou padrão que não contribua para a eficiência do Sistema de Negociação. Os GA's usam apenas blocos de instrução de tamanho fixo, fazendo uso somente de crossover homólogo e não produzem códigos de Sistema de negociação de comprimento variável, nem descartarão um indicador ou padrão ineficiente tão facilmente quanto um GP. Finalmente, os Programas Genéticos são um avanço recente no domínio do aprendizado de máquina, enquanto os Algoritmos Genéticos foram descobertos há 30 anos. Os programas genéticos incluem todas as principais funcionalidades dos Algoritmos Genéticos; crossover, reprodução, mutação e fitness, no entanto, as GPs incluem recursos muito mais rápidos e robustos, tornando a GP a melhor escolha para a produção da Trading Systems. O GP empregado no Trading System Generator da TSL é o GP mais rápido atualmente disponível e não está disponível em nenhum outro software do mercado financeiro no mundo.
O Algoritmo de Programação Genética, o Simulador de Negociação e os Motores de Fitness usados ​​na TSL levaram mais de 8 anos para serem produzidos.
O Trading System Lab é o resultado de anos de trabalho árduo de uma equipe de engenheiros, cientistas, programadores e traders, e acreditamos que representa a tecnologia mais avançada disponível atualmente para a negociação nos mercados.

Usando Algoritmos Genéticos para Prevê os Mercados Financeiros.
Burton sugeriu em seu livro "Uma Caminhada Aleatória em Wall Street" (1973) que "Um macaco vendado jogando dardos nas páginas financeiras de um jornal poderia selecionar um portfólio que funcionaria tão bem quanto um cuidadosamente selecionado por especialistas". Embora a evolução possa ter tornado o homem menos inteligente em escolher ações, a teoria de Charles Darwin é bastante eficaz quando aplicada de forma mais direta. (Para ajudá-lo a escolher ações, confira Como escolher um estoque.)
O que são algoritmos genéticos?
Nos mercados financeiros, os algoritmos genéticos são mais comumente usados ​​para encontrar os melhores valores de combinação de parâmetros em uma regra de negociação, e podem ser incorporados em modelos ANN projetados para selecionar ações e identificar negociações. Vários estudos demonstraram que estes métodos podem ser eficazes, incluindo "Algoritmos Genéticos: Gênese da Avaliação de Estoque" (2004) por Rama, e "As Aplicações de Algoritmos Genéticos na Otimização de Mineração de Dados do Mercado de Ações" (2004) por Lin, Cao, Wang Zhang. (Para saber mais sobre a ANN, consulte Redes neurais: previsão de lucros.)
Como funcionam os algoritmos genéticos.
Por exemplo, uma regra de negociação pode envolver o uso de parâmetros como Média móvel de divergência de convergência (MACD), Média móvel exponencial (EMA) e Estocástica. Um algoritmo genético introduziria valores nesses parâmetros com o objetivo de maximizar o lucro líquido. Com o tempo, pequenas mudanças são introduzidas e aquelas que têm um impacto desejável são mantidas para a próxima geração.
Existem três tipos de operações genéticas que podem ser realizadas:
Os cruzamentos representam a reprodução e o cruzamento biológico visto na biologia, pelo qual uma criança assume certas características de seus pais. As mutações representam uma mutação biológica e são usadas para manter a diversidade genética de uma geração para outra, introduzindo pequenas mudanças aleatórias. As seleções são o estágio no qual os genomas individuais são escolhidos de uma população para posterior reprodução (recombinação ou cruzamento).
Esses três operadores são usados ​​em um processo de cinco etapas:
Inicialize uma população aleatória, onde cada cromossomo é n - comprimento, sendo n o número de parâmetros. Ou seja, um número aleatório de parâmetros é estabelecido com n elementos cada. Selecione os cromossomos, ou parâmetros, que aumentam os resultados desejáveis ​​(presumivelmente lucro líquido). Aplique operadores de mutação ou cruzamento aos pais selecionados e gere uma descendência. Recombine os descendentes e a população atual para formar uma nova população com o operador de seleção. Repita os passos dois a quatro.
Com o tempo, esse processo resultará em cromossomos (ou parâmetros) cada vez mais favoráveis ​​para uso em uma regra comercial. O processo é encerrado quando um critério de parada é atendido, o que pode incluir tempo de execução, adequação, número de gerações ou outros critérios. (Para mais informações sobre o MACD, leia Trading The MACD Divergence.)
Usando Algoritmos Genéticos na Negociação.
Ao usar esses aplicativos, os comerciantes podem definir um conjunto de parâmetros que são otimizados usando um algoritmo genético e um conjunto de dados históricos. Alguns aplicativos podem otimizar quais parâmetros são usados ​​e os valores para eles, enquanto outros são principalmente focados em simplesmente otimizar os valores para um determinado conjunto de parâmetros. (Para saber mais sobre essas estratégias derivadas do programa, consulte O poder das negociações do programa.)
Dicas e truques importantes de otimização.
A escolha de parâmetros é uma parte importante do processo e os comerciantes devem procurar parâmetros que se correlacionem com as alterações no preço de um determinado título. Por exemplo, experimente diferentes indicadores e veja se algum deles parece se correlacionar com as principais viradas do mercado.

Um sistema de negociação Forex baseado em um algoritmo genético.
Luís Mendes Pedro Godinho Joana Dias Autor do email.
Neste trabalho, 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 da população representa um conjunto de dez regras técnicas de negociação (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 dado indivíduo representa o quão bem ele foi capaz de se adaptar ao ambiente, e é calculado aplicando as regras correspondentes à série temporal e, em seguida, calculando a relação entre o lucro e o rebaixamento máximo (o índice de 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 são capazes de alcançar resultados muito bons na série de treinamento. Na série de testes, as estratégias desenvolvidas mostram alguma dificuldade em obter resultados positivos, se você levar em conta os custos de transação. Se você ignorar os custos de transação, os resultados são na maior parte positivos, mostrando que os melhores indivíduos têm alguma capacidade de previsão.
Agradecimentos
Gostaríamos de agradecer aos árbitros anônimos, cujos comentários nos ajudaram a melhorar este artigo.

Usando a programação genética para evoluir estratégias de negociação.
Recentemente, um amigo e eu trabalhamos juntos em uma tarefa de pesquisa na qual utilizamos com sucesso a Programação Genética (GP) para desenvolver soluções para um problema de classificação financeira do mundo real. Esse problema, chamado análise de segurança, envolve determinar quais títulos devem ser comprados para obter um bom retorno sobre o investimento no futuro. Para encontrar uma solução para esse problema, usamos a Programação Genética para desenvolver uma população de árvores de decisão que poderia realizar análises de segurança em 62 das ações de tecnologia listadas no S & P 500. Ou seja, desenvolvemos árvores de decisão capazes de classificar essas ações de acordo com se eles devem ser comprados ou vendidos a descoberto.
Á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. A primeira utilizou apenas indicadores da análise fundamental e a segunda utilizou apenas indicadores da análise técnica. A análise fundamental é um método de avaliar 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, analisando as 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 várias regras para tomar decisões de investimento. Essa estratégia pode ser representada como uma árvore de decisão em que 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 este fato, muitas estratégias de investimento existentes são representadas na forma de árvores de decisão.
No total, quarenta e dois indicadores diferentes foram selecionados e utilizados a partir de análise técnica e análise fundamentalista. As estratégias evoluídas foram para um período fixo de retenção de três meses, seis meses, nove meses ou doze meses de duração. As árvores de decisão foram testadas novamente usando dados de mercado de 2011 a 2013.
Programação Genética.
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 único (geralmente codificado como um vetor). Algoritmos Genéticos modelam o processo de evolução genética através de um número de operadores incluindo o operador de seleção que modela a sobrevivência do mais apto, o operador de 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 chamam de Algoritmo Genético.
Os três operadores de um Algoritmo Genético aplicado a uma população de vetores (blocos)
A diferença entre um Algoritmo Genético e o Algoritmo de Programação Genética é a maneira pela qual os genótipos individuais são representados. Nos genótipos de Algoritmos Genéticos são representados tanto como Strings quanto como Vetores, enquanto na Genetic Programming esses genótipos são representados usando estruturas de dados em árvore. A operação de cruzamento em estruturas de árvore 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 gestão de investimentos, desde que sejam obtidas melhores funções para calcular a adequação. Ao longo de nossa pesquisa, vimos que as árvores de decisão evoluídas usando a Programação Genética foram capazes de produzir classificações de ações que superaram consistentemente o retorno médio do mercado ao longo dos quatro trimestres. Isso é verdade para as árvores de decisão que usaram indicadores técnicos, bem como árvores de decisão que usaram indicadores fundamentais. Diversas outras conclusões foram derivadas de nossa pesquisa, incluindo os tamanhos e o nível ideais de heterogeneidade para as árvores de decisão e o valor agregado pelos diferentes indicadores e o desempenho das estratégias em relação um ao outro. Alguns resultados estão incluídos abaixo.
Relação entre o tamanho da árvore de decisão e a adequação Indicadores mais populares usados ​​na árvore de decisão final.
Tamanhos médios de árvore 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 por meu amigo. Ambos os relatórios apresentam muito mais detalhes sobre o 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 futuras pesquisas. Você também pode baixar uma cópia do código-fonte criado durante a implementação. Para meus colegas mais técnicos do projeto, por favor clique aqui.
História anterior
Clustering usando o Ant Colony Optimization.
Próxima história.
Sistemas Inteligentes de Negociação Algorítmica.
[Comentário copiado do LinkedIn Computational Finance Group]
Muito bom trabalho. O escrever é lindo também.
Eu só tive a chance de olhar para o relatório. Algumas estatísticas que seria bom analisar: como a sua carteira de GA se compara a portfólios dos mesmos ativos. Eu olharia para dois portfólios de comparação: um portfólio ponderado igual e um portfólio de estilo S & amp; P que é ponderado pela capitalização de mercado.
Como se vê, pode ser surpreendentemente difícil superar um portfólio igualmente ponderado. Reequilibre as carteiras trimestralmente, uma vez que algumas ações irão subir e algumas cairão (por exemplo, você deseja manter os pesos da carteira iguais, à medida que os preços mudam). Se o seu algoritmo genético bate esses portfólios, então você tem "alfa" (excesso de retorno sobre o benchmark).
Claro que alfa não é tudo. Você deve observar a Perda Esperada de Cauda (ETL) (também conhecida como CVaR, Expected Shortfall) para a carteira GA e o "benchmark". Se você tem menos risco para o mesmo retorno, então você pode considerar que você bateu o benchmark. A medida de ETL é uma medida melhor do que o índice de Sharpe quando se trata de risco, uma vez que o índice de Sharpe mede a variação, que é de dois lados. O ETL mede apenas a perda.
Uma observação: um problema com GA e redes neurais (NN) é que são caixas pretas. É difícil determinar por que eles fazem as "escolhas" que fazem. Então imagine que você é um gerente de portfólio. Seu GA ou NN começa a ter um desempenho ruim. Que passos você pode dar para resolver isso? O problema é que tudo o que você realmente pode fazer é reciclar e não sabe se o treinamento será melhor. É claro que com uma árvore de decisão não é tão ruim, já que pelo menos você sabe quais decisões ela tomou. O problema é que, se você está constantemente mexendo para tomar as decisões certas, então você também tem um problema.
Esses problemas são motivos pelos quais você não vê muito esses algoritmos (embora eles sejam usados).
[Resposta copiada do LinkedIn Computational Finance Group]
Obrigado pelas palavras complementares Ian, agradecemos que você tenha interesse em nossa pesquisa e nos forneça alguns comentários interessantes.
Em nossa abordagem, apenas comparamos o desempenho das seleções de ações feitas por nossas árvores de decisão com um portfólio igualmente ponderado. Estender nossa pesquisa para incorporar diferentes portfólios é uma ideia interessante que será acompanhada durante a próxima fase de desenvolvimento. Também estamos considerando implementar algumas das abordagens bem conhecidas para análise de segurança a serem usadas como benchmarks de desempenho adicionais. Se você ou alguém tiver sugestões sobre quais abordagens podem ser boas referências, informe-nos.
Seus comentários sobre o uso de outras medidas de desempenho estão corretos. Gostaríamos, definitivamente, de olhar para a estrutura de teste de retorno e investigar formas de torná-lo mais rigoroso e menos propenso a ajustes excessivos. Também gostaríamos de implementar funções de adequação adicionais que levem em consideração medidas de risco de portfólio, bem como medidas de excesso de retorno (alfa). Examinarei as medidas que você mencionou e veremos como podemos incorporá-las melhor em nossa estrutura existente. Também estaremos considerando como seria possível usar um framework de back-testing open source como o ZipLine, a estrutura de back-testing usada pelo quantopian.
Suas observações sobre a natureza e o uso de redes neurais e geográficas em finanças são muito interessantes. O desafio de tornar esses algoritmos mais transparentes e, francamente, um pouco menos assustador, não é para ser tomado de ânimo leve. Meu colega está atualmente trabalhando em uma tarefa de pesquisa em que ele está tentando levantar o véu em alguns dos trabalhos internos das Redes Neurais. Se ele for bem-sucedido, em vez de precisar treinar redes neurais constantemente quando algo der errado, ele poderá isolar a causa do problema na rede neural e adaptar sua arquitetura de acordo. Ele está pensando em usar uma aplicação financeira do mundo real das Redes Neurais em sua pesquisa. Então, se você tem alguma idéia sobre isso, por favor me avise?
Pessoalmente falando, estou atualmente trabalhando em uma tarefa de pesquisa em que estou tentando construir uma estrutura algorítmica para a seleção e otimização de portfólios de carry trade. Ele faz uso de alguns algoritmos de Inteligência Computacional e daqui para frente vou ter em mente os problemas que você mencionou. Tentarei identificar formas de mitigar ou eliminar essas preocupações no quadro. Obrigado novamente por todos os seus comentários, agradecemos o feedback. Se você tiver mais alguma boa ideia, entre em contato conosco.
[Comentário copiado do LinkedIn Computational Finance Group]
Acho que a abordagem mais razoável para o backtesting é comparar seus resultados com o que acontece com negociações aleatórias que ainda obedecem a quaisquer restrições que você esteja impondo ao 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 um algoritmo contra uma estratégia de negociação aleatória é conceitualmente semelhante ao teste de um algoritmo de pesquisa contra a pesquisa aleatória. Que é algo que eu fiz antes. Quão popular você diria que a estratégia de backtesting é?
[Resposta copiada do LinkedIn Computational Finance Group]
Stuart: Depressivamente impopular. Mas tem que começar em algum lugar.
[Comentário copiado do LinkedIn Computational Finance Group]
Parece bom, qual é a razão de usar as 62 ações de tecnologia, não 500 ações?
[Cópias de respostas do Grupo de Finanças Computacionais do LinkedIn]
Oi JZ, essa é uma boa pergunta e estou feliz que você tenha perguntado. Debatemos nossa abordagem e uma opinião externa seria muito apreciada. Limitamos nossa amostra de teste a apenas um setor por dois motivos:
1) Acreditamos que as árvores de decisão que usam indicadores fundamentais podem variar drasticamente entre os diferentes setores. Isso ocorre porque o índice financeiro pode variar entre os diferentes setores e achamos que um investidor que usa essa abordagem gostaria de desenvolver árvores de decisão para cada setor de forma independente. ** e.
2) Nós só recebemos três semanas para concluir a tarefa e estávamos preocupados que a adição de mais estoques fosse muito demorada. Isso se tornou uma preocupação infundada, já que nossa implementação poderia lidar facilmente com todas as 500 ações da S & P500, sem problemas significativos de desempenho.
** Nota: isto não se aplica a árvores de decisão usando indicadores de Análise Técnica.
Extremamente interessante. Bem feito Stuart.
É um exercício interessante, mas não vejo qual vantagem o GP tem contra simplesmente treinar o Decision Tree usando alguma medida de impureza. Parece que faz o mesmo de forma muito ineficiente e provavelmente com menos precisão também.
Oi Ignas, para ser perfeitamente honesto, o GP sofre de muitas desvantagens e a técnica ainda está sendo aperfeiçoada. Dito isto, os métodos tradicionais de indução de árvores de decisão (dos quais eu sou mais recentemente fã) também têm suas desvantagens que podem (ou não) ser superadas pela Programação Genética.
Eu estou tentando re implementar o GA em python. Quais são algumas bibliotecas python que você recomendaria.

No comments:

Post a Comment