Thursday 3 May 2018

Algoritmo genético da estratégia de negociação


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 o cálculo da aptidã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.
Você já tentou trocar seu sistema ao vivo?
Oi Lawrence, infelizmente não. Este post é bastante um número de anos e representa um antigo projeto do time do colégio :-). Eu recomendaria dar uma olhada no Genotick para uma estratégia de negociação baseada em programação genética imparcial. Eu acredito que as pessoas estão negociando isso ao vivo.
Envie um comentário.
Cancelar resposta.
Siga Turing Finance.
Turing Finance Mailing List.
Amigos da Turing Finance.
A Quantocracia é o melhor agregador de blogs de finanças quantitativas com links para novas análises publicadas todos os dias.
NMRQL é o fundo de hedge quantitativo do qual faço parte. Usamos o aprendizado de máquina para tentar vencer o mercado.

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 do 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, usamos essa previsão para fazer negociações. 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 níveis de perda / take profit 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 continuarmos na 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. Nós 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 o sistema comercial (algoritmo genético) deveria ser.
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 os 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 aos negócios longos 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 ter um bom desempenho em qualquer fragmento aleatório do conjunto de dados, de modo que, esperamos, eles também pudessem executar em 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 artistas, talvez, um dos filhos mutantes, que perderam a capacidade de negociar no mercado em ascensão, mas conseguiram 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 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? Assim, 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. Essa é 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 da estratégia de negociação
Obter via App Store Leia este post em nosso aplicativo!
Quão útil é o algoritmo genético para previsão do mercado financeiro?
Há um grande corpo de literatura sobre o "sucesso" da aplicação de algoritmos evolutivos em geral, e o algoritmo genético em particular, aos mercados financeiros.
No entanto, sinto-me desconfortável sempre que leio esta literatura. Algoritmos genéticos podem sobrepor os dados existentes. Com tantas combinações, é fácil chegar a algumas regras que funcionem. Pode não ser robusto e não tem uma explicação consistente de por que essa regra funciona e essas regras não vão além do mero argumento (circular) de que "funciona porque o teste mostra que funciona".
Qual é o consenso atual sobre a aplicação do algoritmo genético nas finanças?
Eu trabalhei em um fundo de hedge que permitia estratégias derivadas da GA. Por segurança, exigiu que todos os modelos fossem submetidos muito antes da produção para garantir que eles ainda funcionassem nos backtests. Assim, pode haver um atraso de vários meses até que um modelo possa ser executado.
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 os backtests de confirmação.
Eu acho que o maior problema que os algoritmos genéticos têm são overfitting, dados snooping bias e que eles são caixas pretas (não muito parecido com redes neurais, mas ainda assim - isso depende da maneira como eles são implementados).
Eu acho que eles não são muito usados. Eu acho que existem alguns fundos de hedge lá fora que usam isso, mas apesar de tudo, eles foram sensacionalistas e, em seguida, preso. (Mas eles ainda são úteis para conseguir um papel aceito ;-)
BTW: Nunca há um consenso real em finanças - todo mundo tenta enganar todo mundo. É por isso que é tão interessante. (Ou colocar de outra forma: é por isso que ainda existem compradores e vendedores - um consenso real é um acidente ;-)
Eu apliquei GA a todos os tipos de coisas. Eu tive algum sucesso no mundo determinista onde um padrão realmente existia e eu sabia que existia alguma estrutura física (análise sísmica, análise de vibração, inventário de cálculos, etc). Depois que encontrei um modelo de GA que se comportou, o trabalho real começou. Descobrir porque se comportou.
Eu também gerou muito lixo do GA a partir de dados financeiros que "funcionavam" olhando para trás, mas não valia a pena esperar.
As técnicas não são o problema nas finanças, é a estrutura. E, claro, nunca dados suficientes (dados úteis).
Há muita gente aqui falando sobre como os AGs são empíricos, não têm fundamentos teóricos, são caixas-pretas e coisas do tipo. Eu peço desculpa mas não concordo! Há todo um ramo da economia dedicado a olhar para os mercados em termos de metáforas evolucionistas: Economia Evolucionária!
Eu recomendo altamente o livro de Dopfer, The Evolutionary Foundations of Economics, como uma introdução. cambridge / gb / knowledge / isbn / item1158033? site_locale = pt_PT.
Se sua visão filosófica é de que o mercado é basicamente um cassino gigante, ou jogo, então um GA é simplesmente uma caixa-preta e não tem nenhum fundamento teórico. No entanto, se a sua filosofia é que o mercado é uma ecologia da sobrevivência do mais forte, então os GAs têm muitos fundamentos teóricos, e é perfeitamente razoável discutir coisas como especiação corporativa, ecologias de mercado, genomas de carteira, climas comerciais e gostar.
Assumindo que você evite distorções de bisbilhotagem de dados e todas as potenciais 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ário. Se você acredita na eficiência do mercado, aumentar os custos de transação da administração ativa é ilógico. Se, no entanto, você acredita que existem estruturas & amp; padrões psicológicos ou "falhas" a serem exploradas e a recompensa vale o tempo e dinheiro para pesquisar e implementar uma estratégia, a escolha lógica é o gerenciamento ativo.
Executar uma estratégia derivada do GA é uma aposta implícita contra a eficiência do mercado. Você está basicamente dizendo "Eu acho que há avaliações erradas que ocorrem por algum motivo" (massas de pessoas irracionais, fundos mútuos pastoreando por causa de incentivos mal alinhados, etc.) e "executar esse GA pode separar essa massa de dados muito mais rápido do que eu posso ".
Eu não sou um "expert quant" como todos vocês (sou apenas um programador), mas aqui está o que eu encontrei.
1.) Se você definir as restrições corretamente, os resultados serão surpreendentes. por exemplo. você pode obter portfólios com retorno muito alto e baixo risco. No entanto, é muito importante ter restrições conflitantes (por exemplo, um pai pode ter muitos filhos, mas o número total de filhos em uma geração não pode ultrapassar um determinado número) se você deseja obter bons resultados.
2.) Eu não acho que o GA esteja ajustando os dados. Em vez disso, ele diz: "Eu tenho muitos genes (estoques) para começar, então vou escolher alguns para começar e, com exceção de uma mutação ocasional, vou ficar com eles". Então, ao longo de gerações, descobre como fazer o melhor uso do que começou, criando ótimos porfolios com os "genes" (a. k.a) com os quais começou (mais algumas mutações). Mais ou menos como um construtor na Home Depot. O Home Depot tem muitas ferramentas, mas o construtor escolhe apenas algumas 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ê backtest 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ê que os algoritmos genéticos são puramente empíricos e, portanto, não me sinto muito à vontade em usá-los.
O falecido Thomas Cover, (provavelmente o principal "Teórico da Informação" de sua geração), considerou abordagens "universais" para coisas como compressão de dados e alocação de portfólios como verdadeiros algoritmos genéticos.
A evolução não tem parâmetros para ajustar ou treinar. Por que deveriam verdadeiros algoritmos genéticos?
Abordagens universais não fazem suposições sobre a distribuição subjacente de dados. Eles não fazem nenhuma tentativa de prever o futuro a partir de padrões ou qualquer outra coisa.
A eficácia "teórica" ​​das abordagens da Universal (elas apresentam desafios significativos de implementação, veja minha recente pergunta: Geometria para Portfólios Universais?), Segue-as fazendo o que a evolução exige. Os mais rápidos, mais inteligentes ou mais fortes não sobrevivem necessariamente na próxima geração. A evolução favorece o algoritmo de gene, organismo, meme, portfólio ou compactação de dados, posicionado para se adaptar mais facilmente ao que quer que aconteça depois.
Além disso, como 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 todo tipo um problema que enfrentamos em nosso domínio, mas, 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 que é ajuste de curva, esse é o objetivo.

Um algoritmo genético paralelo para otimização de estratégias de negociação.
O. G. Monakhov Autor do email.
Uma abordagem para otimização de estratégias de negociação (algoritmos) é descrita com base em indicadores de mercados financeiros e em cálculos evolutivos. Um algoritmo genético paralelo é apresentado para a busca de parâmetros ótimos de estratégias de negociação visando a maximização do lucro.
Texto original em russo © O. G. Monakhov, 2008, publicado em Sibirskii Zhurnal Vychislitel’noi Matematiki, 2008, vol. 11, n.4, pp. 423-432.
Referências.
Informações sobre direitos autorais.
Autores e Afiliações.
O. G. Monakhov 1 autor do email 1. Instituto de Matemática Computacional e Geofísica Matemática, Ramo Siberiano Academia Russa de Ciências Novosibirsk Rússia.
Sobre este artigo.
Recomendações personalizadas.
Cite o artigo.
Gerente de referência de papéis. RIS RefWorks Zotero.
.BIB BibTeX JabRef Mendeley.
Acesso ilimitado ao artigo completo Download instantâneo Inclua o imposto sobre vendas local, se aplicável.
Cite o artigo.
Gerente de referência de papéis. RIS 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 da natureza de Springer.

Algoritmo genético da estratégia de negociação
Algoritmos genéticos são algoritmos que imitam a seleção natural. Este é um algoritmo evolutivo simples que negocia ações de topo. Essencialmente, as estratégias de momento são geradas aleatoriamente. Com base em como essas estratégias seriam executadas durante um período de tempo (30 dias), os melhores desempenhos, ou pais, são selecionados. Usando os atributos desses pais, geram-se novos algoritmos que possuem atributos semelhantes aos pais. Este processo é então repetido. As negociações são feitas usando o algoritmo geral de melhor desempenho.
Embora as estratégias que estão sendo desenvolvidas sejam básicas e não tenham um ótimo desempenho, isso é apenas um exemplo. Eu acho que há muitas maneiras de se estender isso, como se afastar do momento ou importar dados relevantes de um arquivo CSV. Existem também algumas variáveis ​​que podem ser facilmente ajustadas, que podem levar a melhores resultados, e o código é comentado. Clone isso, brinque com isso e deixe-me saber o que você pensa!
O material deste site é fornecido apenas para fins informativos e não constitui uma oferta de venda, uma solicitação de compra ou uma recomendação ou endosso para qualquer segurança ou estratégia, nem constitui uma oferta para fornecer serviços de consultoria de investimento pela Quantopian. Além disso, o material não oferece opinião com relação à adequação de qualquer investimento específico ou de segurança. Nenhuma informação aqui contida deve ser considerada como uma sugestão para se envolver ou se abster de qualquer ação relacionada ao investimento, já que nenhuma das empresas da Quantopian ou de suas afiliadas está prestando consultoria de investimento, atuando como consultora de qualquer plano ou entidade sujeita a o Employee Retirement Income Security Act de 1974, conforme alterado, conta de aposentadoria individual ou anuidade de aposentadoria individual, ou dar conselhos em uma capacidade fiduciária com relação aos materiais aqui apresentados. Se você for um investidor individual ou outro investidor, entre em contato com seu consultor financeiro ou outro fiduciário não relacionado com a Quantopian sobre se qualquer ideia, estratégia, produto ou serviço de investimento descrito aqui pode ser apropriado para suas circunstâncias. Todos os investimentos envolvem risco, incluindo perda de principal. A Quantopian não garante a exatidão ou integridade das opiniões expressas no site. As opiniões estão sujeitas a alterações e podem ter se tornado não confiáveis ​​por várias razões, incluindo mudanças nas condições de mercado ou circunstâncias econômicas.
obrigado a sua partilha!
alguma referência interessante:
bibliotecas de programação genética em Python:
Pyvolution: Estrutura de algoritmos evolutivos muito modular e muito extensível, com documentação completa, Apache License 2.0.
deap: Algoritmos Evolutivos Distribuídos em Python, GNU Lesser GPL.
pySTEP: Python Digitado Fortemente gEnetic Programming, MIT License.
PyRobot: Algoritmos Evolutivos (GA + GP) Módulos, Código Aberto.
PonyGEa pequena, uma implementação de arquivo de origem da GE, com um aplicativo de demonstração gráfica interativa GNU GPL v3.
inspyred: A computação de inspiração biológica engloba uma ampla gama de algoritmos, incluindo computação evolutiva, inteligência de enxames e redes neurais, GNU GPL v3.
DRP: Dirigido Ruby Programming, Genetic Programming & amp; Biblioteca de Evolução Gramaticais, GNU GPL.
Jonathan Kinlay tem postado recentemente sobre as práticas e armadilhas da programação genética para negociação algorítmica. Eu tentei um sistema baseado nele há cerca de dez anos, mas nunca cheguei a lugar nenhum.
Eu sei que para problemas de otimização global não-linear, tivemos bons resultados (na adaptação de modelos de derivativos) com a evolução diferencial de enxame de partículas. Talvez isso possa ser adaptado para problemas de busca no sistema de negociação.
Ty para compartilhar que é realmente a minha área de pesquisa, usando alguns anos de dados históricos que eu costumava precisar de mais de 1 dia para calcular um modelo, eu me pergunto como seria quantopian e python lidar com grandes modelos.
Nós tentamos programação genética e os resultados quando ajustados para espionagem de dados são terríveis. Para iniciantes que não estão familiarizados com viés de mineração de dados, veja este blog: priceactionlab / Blog / 2012/06 / enganado-por-aleatoriedade-através-seleção-viés /
@SImon: Dr. Kinlay faz alguns bons pontos, mas o sistema que ele publica no final de seu blog tem 240 transações em quase 25 anos. O pequeno número de negociações é uma indicação de um ajuste extremo. O ponto é que, se o sistema dele era um top performista de um algoritmo de programação genética, então é provavelmente aleatório, mesmo que o desempenho fora da amostra pareça legal, porque sua seleção ignora todos aqueles sistemas com mau desempenho fora da amostra.
Eu concordo 100%, acho que é mais um beco sem saída, mas talvez a evolução diferencial das redes neurais profundas possa se encaixar em relacionamentos reais? Super complicado para evitar viés de mineração, tantos graus de liberdade. A técnica de Marco de Prado para o overtit de backtest pode ajudar.
O GP é apenas um algoritmo de otimização, é tão bom quanto sua função de adequação e o modelo que você está tentando otimizar. Se o modelo for muito adequado, sua função de condicionamento físico não estará funcionando corretamente se o modelo não estiver evoluindo, então a estratégia que está sendo otimizada não é boa. Eu vejo o GP mais como uma caixa de ferramentas.
Muito bom Gus. Muita comida para pensar aqui. Estive olhando para o Genotick recentemente - escrito em Java e um pouco árduo para mim. Mas se você é adepto do Java, você pode querer dar uma olhada. Genotick.
Estou tentando fazer algo semelhante usando programação genética, mas tentando criar uma abordagem de aplicativo web mais pronta.
Gostaria de algum feedback, como eu gostaria de expandir as séries de dados e técnicas que estão disponíveis para o quadro.
também tentando aprender Python para fazer algumas coisas de Quantopian (eu sou um cara de Java).
Desculpe, algo deu errado. Tente novamente ou entre em contato enviando feedback.
Você enviou com sucesso um ticket de suporte.
Nossa equipe de suporte entrará em contato em breve.
O material deste site é fornecido apenas para fins informativos e não constitui uma oferta de venda, uma solicitação de compra ou uma recomendação ou endosso para qualquer segurança ou estratégia, nem constitui uma oferta para fornecer serviços de consultoria de investimento pela Quantopian.
Além disso, o material não oferece opinião com relação à adequação de qualquer investimento específico ou de segurança. Nenhuma informação aqui contida deve ser considerada como uma sugestão para se envolver ou se abster de qualquer ação relacionada ao investimento, já que nenhuma das empresas da Quantopian ou de suas afiliadas está prestando consultoria de investimento, atuando como consultora de qualquer plano ou entidade sujeita a o Employee Retirement Income Security Act de 1974, conforme alterado, conta de aposentadoria individual ou anuidade de aposentadoria individual, ou dar conselhos em uma capacidade fiduciária com relação aos materiais aqui apresentados. Se você for um investidor individual ou outro investidor, entre em contato com seu consultor financeiro ou outro fiduciário não relacionado com a Quantopian sobre se qualquer ideia, estratégia, produto ou serviço de investimento descrito aqui pode ser apropriado para suas circunstâncias. Todos os investimentos envolvem risco, incluindo perda de principal. A Quantopian não garante a exatidão ou integridade das opiniões expressas no site. As opiniões estão sujeitas a alterações e podem ter se tornado não confiáveis ​​por várias razões, incluindo mudanças nas condições de mercado ou circunstâncias econômicas.
O material deste site é fornecido apenas para fins informativos e não constitui uma oferta de venda, uma solicitação de compra ou uma recomendação ou endosso para qualquer segurança ou estratégia, nem constitui uma oferta para fornecer serviços de consultoria de investimento pela Quantopian.
Além disso, o material não oferece opinião com relação à adequação de qualquer investimento específico ou de segurança. Nenhuma informação aqui contida deve ser considerada como uma sugestão para se envolver ou se abster de qualquer ação relacionada ao investimento, já que nenhuma das empresas da Quantopian ou de suas afiliadas está prestando consultoria de investimento, atuando como consultora de qualquer plano ou entidade sujeita a o Employee Retirement Income Security Act de 1974, conforme alterado, conta de aposentadoria individual ou anuidade de aposentadoria individual, ou dar conselhos em uma capacidade fiduciária com relação aos materiais aqui apresentados. Se você for um investidor individual ou outro investidor, entre em contato com seu consultor financeiro ou outro fiduciário não relacionado com a Quantopian sobre se qualquer ideia, estratégia, produto ou serviço de investimento descrito aqui pode ser apropriado para suas circunstâncias. Todos os investimentos envolvem risco, incluindo perda de principal. A Quantopian não garante a exatidão ou integridade das opiniões expressas no site. As opiniões estão sujeitas a alterações e podem ter se tornado não confiáveis ​​por várias razões, incluindo mudanças nas condições de mercado ou circunstâncias econômicas.

O Trader R.
Usando R e ferramentas relacionadas em Finanças Quantitativas.
Usando Algoritmos Genéticos no Comércio Quantitativo.
A pergunta que se deve sempre fazer quando se utiliza indicadores técnicos é o que seria um critério objetivo para selecionar os parâmetros dos indicadores (por exemplo, por que usar uma RSI de 14 dias em vez de 15 ou 20 dias?). Algoritmos genéticos (GA) são ferramentas adequadas para responder a essa pergunta. Neste post eu vou mostrar como configurar o problema em R. Antes de prosseguir, o lembrete usual: O que eu apresento neste post é apenas um exemplo de brinquedo e não um convite para investir. Também não é uma estratégia acabada, mas uma ideia de pesquisa que precisa ser mais pesquisada, desenvolvida e adaptada às necessidades individuais.
O que são algoritmos genéticos?
A melhor descrição do GA que eu descobri vem da Cybernatic Trading, um livro de Murray A. Ruggiero. Os algoritmos genéticos foram inventados por John Holland em meados da década de 1970 para resolver problemas difíceis de otimização. Este método usa a seleção natural, sobrevivência do mais apto & # 8221;. O processo geral segue as etapas abaixo:
Codifique o problema em cromossomos Usando a codificação, desenvolva uma função de adequação para avaliar o valor de cada cromossomo na solução de um determinado problema Inicialize uma população de cromossomos Avalie cada cromossomo na população Crie novos cromossomos acasalando dois cromossomos. Isso é feito mutando e recombinando dois pais para formar dois filhos (os pais são selecionados aleatoriamente, mas influenciados por sua aptidão) Avaliar o novo cromossomo Excluir um membro da população que está menos apto do que o novo cromossomo e inserir o novo cromossomo na população . Se o critério de parada for atingido (número máximo de gerações, os critérios de aptidão são bons o suficiente & # 8230;) então retorne o melhor cromossomo ou vá para o passo 4.
De uma perspectiva de negociação, GA é muito útil porque é bom em lidar com problemas altamente não-lineares. No entanto, eles exibem algumas características desagradáveis ​​que valem a pena mencionar:
Over fitting: Este é o principal problema e cabe ao analista configurar o problema de forma a minimizar esse risco. Tempo de computação: Se o problema não for definido corretamente, pode ser extremamente longo para chegar a uma solução decente e a complexidade aumenta exponencialmente com o número de variáveis. Daí a necessidade de selecionar cuidadosamente os parâmetros.
Existem vários pacotes R lidando com GA, eu escolhi usar o mais comum: rgenoud.
Preços de fechamento diários para a maioria dos ETFs líquidos do Yahoo finance, que remontam a janeiro de 2000. O período de amostragem vai de janeiro de 2000 a dezembro de 2010. O período fora da amostra começa em janeiro de 2011.
A lógica é a seguinte: a função de adequação é otimizada durante o período de amostragem para obter um conjunto de parâmetros ótimos para os indicadores técnicos selecionados. O desempenho desses indicadores é então avaliado no período fora da amostra. Mas antes disso, os indicadores técnicos devem ser selecionados.
O mercado de ações apresenta duas características principais que são familiares para qualquer pessoa com alguma experiência de negociação. Momento de longo prazo e reversão de curto prazo. Essas características podem ser traduzidas em termos de indicadores técnicos por: médias móveis cross over e RSI. Isto representa um conjunto de 4 parâmetros: Períodos de look-back para médias móveis de longo e curto prazo, período de retorno para o RSI e limiar RSI. Os conjuntos de parâmetros são os cromossomos. O outro elemento-chave é a função de fitness. Podemos querer usar algo como: máximo retorno ou taxa de Sharpe ou rebaixamento médio mínimo. A seguir, optei por maximizar o índice de Sharpe.
A implementação de R é um conjunto de 3 funções:
FunçãoFuncional: define a função de adequação (por exemplo, o índice máximo de Sharpe) a ser usado no mecanismo de negociação do Google Analytics: resumo das estatísticas de negociação para dentro e fora dos períodos de amostra para fins de comparação genoud: o mecanismo GA do pacote rgenoud.
A função genoud é bastante complexa, mas eu não vou explicar o que cada parâmetro significa, pois quero manter este post curto (e a documentação é realmente boa).
Na tabela abaixo, apresento para cada instrumento os parâmetros ótimos (período de retorno do RSI, limiar do RSI, média móvel de curto prazo e média móvel de longo prazo) juntamente com as estatísticas de entrada e saída da amostra.
Antes de comentar os resultados acima, quero explicar alguns pontos importantes. Para corresponder à lógica definida acima, limitei os parâmetros para garantir que o período de look-back para a média móvel de longo prazo seja sempre maior que a média móvel mais curta. Eu também limitei o otimizador a escolher apenas as soluções com mais de 50 negociações no período de amostragem (por exemplo, significância estatística).
No geral, os resultados fora da amostra estão longe de serem impressionantes. Os retornos são baixos mesmo se o número de negociações for pequeno para tornar o resultado realmente significativo. No entanto, há uma perda significativa de eficiência entre o período de amostragem dentro e fora do Japão (EWJ), o que muito provavelmente significa um ajuste excessivo.
Este post é destinado a dar ao leitor as ferramentas para usar corretamente o GA em uma estrutura de negociação quantitativa. Mais uma vez, é apenas um exemplo que precisa ser mais refinado. Algumas melhorias potenciais para explorar seriam:
função de fitness: maximizar o índice de Sharpe é muito simplista. A & # 8220; mais inteligente & # 8221; A função certamente melhoraria o padrão de estatísticas de negociação fora da amostra: tentamos capturar um padrão muito simples. Uma pesquisa de padrões mais aprofundada é definitivamente necessária. otimização: há muitas maneiras de melhorar a maneira como a otimização é conduzida. Isso melhoraria tanto a velocidade de cálculo quanto a racionalidade dos resultados.
O código usado neste post está disponível em um repositório Gist.
Como de costume, qualquer comentário é bem-vindo.
15 Comentários.
O problema com o uso de tais abordagens: os cromossomos não podem mudar as regras darwinianas de seus futuros, enquanto os Banksters que derrubam economias (com alguma regularidade) mudam as regras para se beneficiarem. Taleb está mais certo, pois mudanças na política (por exemplo, empréstimos mentirosos) direcionam os dados, e não o contrário.
Obrigado pela posDoyou ter um exemplo de uma função mais inteligente para tentar?
Obrigado por entrar em contato. A escolha da função de fitness depende de você e depende do que você tenta alcançar. Pode ser um retorno mínimo, estabilidade de retorno, minimização de rebaixamento, correlação mínima com outras estratégias etc. & # 8230; Não creio que exista alguma regra específica a seguir. No entanto, algumas funções podem ser tendenciosas. Por exemplo, se você tentar minimizar o rebaixamento, provavelmente acabará sem negociação (max DD = 0) se você não restringir a um número mínimo de negócios.
Espero que isto ajude.
Robert, ótimo comentário! As políticas sempre gerarão dados, assim como os dados conduzirão as políticas. É um mundo de vice-versa no setor financeiro, ainda mais para traders, investidores e banqueiros.
Como você selecionaria as regras de negociação e não otimizaria os parâmetros de negociação?
Como no artigo de Allen (usando algoritmos genéticos para encontrar regras técnicas de negociação)
Obrigado por entrar em contato e desculpe pela resposta tardia.
Eu apenas uso o bom senso na seleção de parâmetros e, acima de tudo, tenho a tendência de usar o máximo possível o mesmo conjunto de parâmetros em todos os instrumentos negociados.
Eu sou um leitor chinês e realmente aprecio o artigo “Usando Algoritmos Genéticos no Comércio Quantitativo”.
Posso traduzir este artigo para o chinês e publicá-lo no meu blog? (Eu vou deixar você saber o link e manter o seu nome nele.) Eu realmente espero que, este artigo possa ajudar mais pessoas.
Obrigado por entrar em contato.
Contanto que você mencione claramente a fonte (eu) e coloque um link para o artigo original no artigo traduzido, não tenho nenhum problema com a postagem sendo traduzida para o chinês.
Muito obrigado por postar isso! Para o posBuySignal, por que o RSI é avaliado como sendo menor ou igual a 1 & # 8211; um número? Não seria 1 & # 8211; xx [2] sempre resulta em um número negativo? Não é o RSI sempre entre 0-100?
Desculpas, o código foi cortado.
Você acabou de me fornecer uma fonte valiosa para mim. Eu usei o Algoritmo escrito por você e obtenho os seguintes resultados.
OBSERVAÇÃO: LIMITE MÁXIMO DE GERAÇÃO MÁXIMA.
Solução Fitness Valor: 5.033179e + 00.
Parâmetros na solução:
X [1]: 3.100000e + 01.
X [2]: 6.200000e + 01.
X [3]: 3.200000e + 01.
X [4]: ​​7.600000e + 01.
Solução encontrada geração 38.
Número de Gerações Executadas 50.
Dom Jan 24 12:57:50 2016.
Tempo total de execução: 0 horas, 0 minutos e 25 segundos.
1: Em genoud (fitnessFunction, nvars = 4, max = TRUE, pop. size = 30,:
& # 8216; output. path & # 8217; não pode mais ser alterado. Por favor use o & # 8216; afundar & # 8217 ;. A opção é fornecida apenas para compatibilidade com versões anteriores da API.
2: Em genoud (fitnessFunction, nvars = 4, max = TRUE, pop. size = 30,:
Parado porque o limite máximo de geração foi atingido.
Você poderia explicar o que podemos interpretar na solução e meu objetivo é prever o valor futuro e como ele pode ser interpretado a partir deste caso?
Obrigado por entrar em contato. Não sei se entendi sua pergunta, mas vou tentar.
Sua solução ideal é:
que corresponde a um valor de função de adequação de: 5.03.
Outro ponto importante a notar é que você atingiu o número máximo de iterações. Você pode facilmente relaxar essa suposição, caso queira explorar diferentes soluções.
Além disso, não consigo ver qual é exatamente o seu problema? Mais detalhes sobre sua função de condicionamento físico e o que você está tentando alcançar podem ajudar.
Meu objetivo é prever o valor futuro que é como se eu dar entrada até 27 de janeiro de 2016 eu deveria ter previsão de r na próxima data como para o dia 28. Podemos fazer isso com a metodologia que você usou?
por favor pingue sua id de correio para lakshmitharunponnam @ gmail isso ajudaria muito.
Sim você pode. Você só precisa ajustar a frequência de seus dados. Meu exemplo usou dados semanais, mas você pode usar exatamente a mesma metodologia com dados diários. Obviamente, as variáveis ​​a serem usadas provavelmente terão que ser ajustadas também.
Obrigado pelo post maravilhoso. Eu fiquei tão animado em passar pelos seus códigos. Eu sou um novato. Você pode gentilmente me deixar saber como eu posso interpretar as leituras viz.,
para o & # 8220; SPY & # 8221; Valor predito Aberto, Alto, Baixo e Fechado.

No comments:

Post a Comment