Wednesday, 21 February 2018

Estratégias de negociação de algoritmos genéticos


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

MatlabTrading.
Blog para MATLAB & # 174; usuários interessados ​​em estratégias de negociação algorítmica, backtesting, negociação de pares, arbitragem estatística, etc.
Quarta-feira, 7 de dezembro de 2018.
Testes e Análises de Estratégias de Negociação Algorítmicas em MATLAB (Parte 4) & # 8211; Algorítmos genéticos.
Otimização de Algoritmos Genéticos.
Apesar do fato de que o princípio do algoritmo genético (evolutivo) é muito bem explicado nos webinars de MathWorks, nos exemplos, no entanto, ele é usado apenas para otimizar a escolha de um grupo de estratégia de um conjunto. Este é um bom exemplo do uso desses algoritmos, no entanto, acontece que há uma necessidade de estabelecer muitas variáveis ​​com intervalos significativos para uma estratégia, você não passa com uma iteração e a paralelização de processos # 8211; os cálculos podem demorar vários dias. Certamente, existem estratégias na fase final de otimização, quando quase certamente sabemos que a estratégia de negociação é bem sucedida, podemos aguardar vários dias também ou alugar todo o cluster - o resultado pode valer a pena. No entanto, se precisarmos "estimar" os resultados de uma estratégia "volumosa" e decidir se vale a pena gastar o tempo, então os algoritmos genéticos podem ser perfeitamente adequados.
Método linear & # 8211; é um modo usual de classificação em que você verá todos os resultados intermédios (sub-ótimos). Ele fornece a máxima precisão. Método paralelo & # 8211; Todos os kernels da sua CPU serão usados. Não permite ver resultados intermediários, mas acelera significativamente a operação. Ele fornece a máxima precisão durante o aumento da velocidade de computação. Método genético & # 8211; Ele usa o algoritmo de otimização evolutiva. Permite ver valores sub-óptimos, mas dá o resultado próximo ao melhor. Não é um método muito preciso, mas é preciso o suficiente para a "execução" inicial da estratégia. Muito rápido.
Segunda-feira, 5 de dezembro de 2018.
Testes e Análises de Estratégias de Negociação Algorítmicas em MATLAB (Parte 3) & # 8211; Visualização do Processo.
Visualização do Processo de Teste.
Na minha experiência de trabalho, muitas vezes eu analisei outras plataformas populares para testes de estratégia de negociação, como a TradeStation, o MetaStock, Multicartas etc. e sempre me surpreendi com a pouca atenção que foi dada à visualização do processo de teste. A coisa é que, quando não vemos os resultados dos valores intermediários, sub-ótimos de parâmetros otimizados, muitas vezes jogamos fora o ouro junto com a sujeira. A questão é devido a uma amostragem muito ampla, a estratégia ajusta os parâmetros da maneira como queremos ver uma "estratégia perfeita" que falha na vida real ou veja uma ou duas promoções, que supostamente são as melhores porque foi selecionado esses dados de intervalo de tempo onde a melhor estratégia de negociação seria "comprar e manter", mas por que então são necessárias outras estratégias?
E se houver mais de 4 dimensões? Quando você vê quais sinais e em que freqüência eles aparecem na faixa de preço, você tem quase toda a representação visual necessária de sua estratégia: a freqüência das transações, sua rentabilidade (curva de renda), a precisão da abertura, a semelhança com outras valores sub-óptimos, etc .; Isso não pode ser dito sobre o desempenho no espaço N-dimensional, onde todas as informações úteis são, de fato, que o valor ótimo não é apenas um, mas existe uma gama inteira de valores sub-ótimos em uma ou mais áreas.
Ao otimizar uma estratégia no WFAToolbox & # 8211; Walk-Forward Analysis Toolbox para MATLAB & # 174 ;, como um novo valor ótimo é encontrado, os sinais de estratégia de negociação no período em amostra e fora da amostra imediatamente aparecem no gráfico, para que você sempre possa controlar o intervalo de opções você deve atribuir, e também pode pausar a otimização sem esperar o fim do teste, pois fica claro que algo deu errado ou tudo está bem.
Quarta-feira, 30 de novembro de 2018.
Teste e Análise de Estratégias de Negociação Algorítmicas em MATLAB (Parte 2) & # 8211; GUI fácil de usar.
GUI fácil de usar.
Vamos começar com o fato de que não existe uma interface gráfica porque, se presumimos que quase todo o processo de teste e análise de estratégias de negociação é padronizado (é 99%), você gostaria de ter a interface que o ajuda a chamar os dados necessários e inicie o processo de teste com um clique.
Para usuários novos (e não apenas) do MATLAB é muito mais conveniente usar uma GUI com botões e campos de entrada do que procurar no código; portanto, há uma GUI mesmo nas caixas de ferramentas MathWorks na maioria dos casos porque é mais conveniente. Ele permite focar apenas o código da sua estratégia porque o uso de uma GUI não implica, de modo algum, que ela limite de alguma forma a sua capacidade de escrever uma estratégia.
Assim, na WFAToolbox, criamos a possibilidade de escrever qualquer código para sua estratégia, usando qualquer das caixas de ferramentas MATLAB e trabalhando com múltiplos ativos para as estratégias, tais como troca de pares, troca de cesta ou arbitragem de triplet, etc .; mas, ao mesmo tempo, esse código é facilmente integrado na GUI por meio do uso de padrões, que são simples o suficiente para aplicar no código e não limitam as oportunidades.
Terça-feira, 29 de novembro de 2018.
Testes e Análises de Estratégias de Negociação Algorítmicas em MATLAB (Parte 1) - Introdução.
Como tudo começou.
Foi 2008 (se não me enganei) quando foi lançado o primeiro webinar de negociação algorítmica em MATLAB com Ali Kazaam, abordando o tema da otimização de estratégias simples baseadas em indicadores técnicos, etc., apesar de um "caótico" e # 8221; código, as ferramentas eram interessantes o bastante para usar. Eles serviram como ponto de partida para pesquisa e aprimoramento de um modelo de teste e análise que permitiria usar todo o poder das caixas de ferramentas e a liberdade das ações MATLAB durante a criação das próprias estratégias comerciais, ao mesmo tempo em que permitiria controlar o processo de testes e os dados obtidos e suas análises subseqüentes escolheriam um portfólio efetivo de sistemas de negociação robustos.
Por que todo Algotrader deve reinventar a roda?
No entanto, a Mathworks não ofereceu uma solução completa para testar e analisar as estratégias # 8211; esses códigos que você poderia sair dos webinars eram os únicos "elementos" de um teste completo do sistema, e era necessário modificá-los, personalizá-los e adicioná-los à GUI para facilidade de uso. Foi muito demorado, colocando uma questão: seja qual for a estratégia, deve passar pelo mesmo processo de análise e análise, o que permitiria classificar-se como estável e utilizável. então, por que cada algotrader deve reinventar a roda e escrever seu próprio código para estratégias de teste adequadas no MATLAB?
Nós decidimos chamar a solução WFAToolbox - Walk-Forward Analysis Toolbox cuja versão de demonstração está disponível no wfatoolbox desde 2018.
Segunda-feira, 7 de novembro de 2018.
Uau?! O que aconteceu com o blog?
O que aconteceu com o blog?
1. Jev Kuznetsov já não é o dono.
2. Nós mudamos a marca.
O que acontecerá com o blog?
1. Mais postagens e artigos.
Esperamos trazer a vida a este blog postando conteúdos relevantes uma ou duas vezes por semana. Nos primeiros meses, publicaremos principalmente os artigos e vídeos que já temos para tornar mais fácil para os nossos queridos leitores pesquisar informações sobre um recurso e reticular-se sobre eles.
Negociação de pares de arbitragem estatística / estratégias de negociação de reversão / mercado neutro baseadas em cointegração / bollinger bands / kalman filter etc. para commodities, ações e Forex. Tendem as seguintes estratégias com Jurik Moving Average e outros filtros digitais sofisticados; Estratégias de previsão com aprendizado de máquina (Support Vector Machines) e outros métodos; Criando estratégias de negociação robustas usando o gerenciamento de dinheiro de teste visual para reinvestir seu capital (ciência sobre como obter $ 1M de US $ 10K em um ano com o máximo, mas o risco estimado e as recompensas de suor). Talvez depois de ler isso, você pensou que este seria um outro artigo burro para aqueles caras pobres que procuram como se tornar rico através do "trading on forex" e tudo isso. Bem, isso é totalmente falso! Estamos trabalhando no MATLAB, e a maioria de nós somos cientistas e especialistas nesse aspecto, então tudo é sério.
2. Mais interatividade.
Terça-feira, 1 de janeiro de 2018.
Intraday significa reversão.
As regras são simples e semelhantes à estratégia que testei na última publicação:
Se o retorno de barra do par exceder 1 no z-score, troque a barra seguinte.
O resultado parece muito bonito:
Se você acha que este gráfico é muito bom para ser verdade, isso infelizmente é o caso. Não foram considerados custos de transação ou spread de oferta e solicitação. Na verdade, eu duvidava que houvesse algum lucro depois de subtrair todos os custos de negociação.
Ainda assim, este tipo de gráficos é a cenoura pendurada na minha frente, mantendo-me em pé.
Domingo, 30 de dezembro de 2018.
Os pares são mortos?
A partir destes etfs 90 pares únicos podem ser feitos. Cada par é construído como um spread neutro no mercado.
Em cada dia, para cada par, calcule o z-score com base no desvio padrão de 25 dias.
Se z-score & gt; limiar, vá curto, fechar o próximo dia.
Se z-score & lt; O limite vai longo, fechado no próximo dia.
Aqui estão os resultados simulados para vários limiares:
Esta não é a primeira vez que encontrei essa mudança no comportamento de reversão média em etfs. Não importa o que tentei, não tive sorte em encontrar uma estratégia de negociação de pares que funcione em ETFs em 2018. Minha conclusão é que esses tipos de modelos simples de stat-arb simplesmente não o cortaram mais.
WFAToolbox - Walk-Forward Analysis Toolbox.
Complemento MATLAB para desenvolver estratégias de negociação algorítmica em MATLAB da maneira fácil.

Usando a Programação Genética para evoluir Estratégias de Negociação.
Um amigo e eu recentemente trabalhamos juntos em uma tarefa de pesquisa onde usamos a Programação Genética (GP) com sucesso para desenvolver soluções para um problema de classificação financeira do mundo real. Este problema, chamado de análise de segurança, envolve a determinação de quais títulos devem ser comprados para realizar um bom retorno sobre o investimento no futuro. Para encontrar uma solução para este problema, usamos a Programação Genética para desenvolver uma população de árvores de decisão que poderia realizar análise de segurança em sessenta e duas das ações de tecnologia listadas no S & amp; P 500. Ou seja, desenvolvemos árvores de decisão capazes de classificar esses estoques de acordo com se eles deveriam ser comprados ou vendidos curtos.
Árvores de decisão de análise de segurança.
Durante o estudo, desenvolvemos dois tipos de árvores de decisão de análise de segurança. O primeiro utilizou apenas indicadores da análise fundamental e o segundo utilizou apenas indicadores da análise técnica. A análise fundamental é um método de avaliação de uma segurança para medir seu valor intrínseco examinando fatores econômicos, financeiros e outros fatores qualitativos e quantitativos relacionados. A análise técnica é um método de avaliação de títulos através da análise de estatísticas geradas pela atividade de mercado.
Uma estratégia para análise de segurança, independentemente de usar indicadores técnicos ou fundamentais, consistirá em uma série de regras para a tomada de decisões de investimento. Essa estratégia pode ser representada como uma árvore de decisão onde os nós terminais representam decisões de investimento e os nós funcionais representam regras baseadas em indicadores técnicos ou fundamentais. Devido a isso, muitas estratégias de investimento existentes são representadas na forma de árvores de decisão.
Foram selecionados, no total, quarenta e dois indicadores diferentes, tanto da análise técnica quanto da análise fundamental. As estratégias evoluídas foram para um período de detenção fixo de três meses, seis meses, nove meses ou doze meses de duração. As árvores de decisão foram novamente testadas usando dados de mercado de 2018 a 2018.
Programação genética.
A programação genética é uma especialização de um Algoritmo Genético. Algoritmos genéticos são baseados na população, o que significa que eles operam dentro de uma população composta por muitos indivíduos diferentes. Cada indivíduo é representado por um genótipo exclusivo (geralmente codificado como um vetor). Os Algoritmos Genéticos modelam o processo de evolução genética através de uma série de operadores, incluindo o operador de seleção que modela a sobrevivência do operador mais adequado, o crossover que modela a reprodução sexual e o operador de mutação que modela as mutações genéticas que ocorrem aleatoriamente para indivíduos em uma população. Esses operadores, quando combinados, produzem o que os cientistas da computação se referem como um Algoritmo Genético.
Os três operadores de um Algoritmo Genético sendo aplicados a uma população de vetores (blocos)
A diferença entre um Algoritmo Genético e o Algoritmo de Programação Genética é a forma como os genótipos individuais são representados. Nos Algoritmos Genéticos, os genótipos são representados como Cordas ou como Vetores, enquanto na Programação Genética esses genótipos são representados usando estruturas de dados de árvores. A operação de crossover em estruturas de árvores pode acontecer de algumas maneiras, uma sub-árvore é trocada, um nó de folha é removido ou alterado, ou os valores de algum nó são ajustados. Uma ilustração disso é mostrada abaixo,
Este diagrama descreve a estratégia de cruzamento de uma árvore de decisão usada pela programação genética para análise de segurança.
Após este estudo, concluímos que a programação genética tem um grande potencial para desenvolver novas estratégias de análise de segurança e gerenciamento de investimentos, desde que possam ser obtidas melhores funções para o cálculo da aptidão física. Ao longo de nosso estudo de pesquisa, vimos que as árvores de decisão evoluíram usando a Programação Genética podendo produzir classificações de estoque que superaram o retorno médio do mercado de forma consistente nos quatro trimestres. Isso é verdade para árvores de decisão que utilizaram indicadores técnicos, bem como árvores de decisão que usaram indicadores fundamentais. Várias outras conclusões foram derivadas de nossa pesquisa, incluindo os tamanhos ótimos e o nível de heterogeneidade para as árvores de decisão e o valor adicionado pelos diferentes indicadores e o desempenho das estratégias em relação um ao outro. Alguns resultados estão incluídos abaixo.
Relacionamento entre o tamanho da árvore de decisão para a aptidão Os indicadores mais populares utilizados na árvore de decisão final.
Tamanho médio das árvores por iteração Exemplo Exemplo de Árvore de Decisão de Análise de Segurança Árvore de Decisão de Análise de Segurança.
Conclusão.
Dois relatórios de pesquisa independentes foram produzidos por mim e meu amigo. Ambos os relatórios são muito mais detalhados sobre nosso estudo de pesquisa, a abordagem adotada, nosso projeto e implementação, as estratégias de teste que usamos, nossas conclusões e recomendações para pesquisas futuras. Você também pode baixar uma cópia do código-fonte criado durante a implementação. Para os meus colegas, conta mais técnica do projeto, clique aqui.
História anterior.
Agrupamento usando otimização de colunas de formigas.
Próxima História.
Sistemas Inteligentes de Negociação Algorítmica.
[Comentário copiado de LinkedIn Computational Finance Group]
Muito bom trabalho. A escrita também é maravilhosa.
Eu só tive a chance de olhar para o relatório. Algumas estatísticas que seriam boas para analisar: como o seu portfólio da GA se compara às carteiras dos mesmos ativos. Eu olhava duas carteiras de comparação: um portfólio igual ponderado e um portfólio de estilo S & P que é ponderado pela capitalização de mercado.
Como se verifica, pode ser surpreendentemente difícil vencer um portfólio igualmente ponderado. Rebalancear as carteiras trimestralmente, uma vez que alguns estoques vão subir e alguns vão cair (por exemplo, você quer manter os pesos do portfólio iguais, à medida que os preços mudam). Se o seu algoritmo genético supera essas carteiras, então você tem "alfa" (excesso de retorno sobre o benchmark).
Claro que o alfa não é tudo. Você deve olhar para a Perda de cauda esperada (ETL) (também conhecida como CVaR, déficit esperado) tanto para o portfólio da GA quanto para o "benchmark". Se você tiver menos risco para o mesmo retorno, então você pode considerar que você bateu o benchmark. A medida ETL é uma medida melhor do que a relação Sharpe quando se trata de risco, uma vez que a relação Sharpe mede a variação, que é de dois lados. ETL apenas mede a perda.
Uma observação: um problema com GA e redes neurais (NN) é que são caixas negras. É difícil determinar por que eles fazem as "escolhas" que eles fazem. Então imagine que você é um gerente de portfólio. Seu GA ou NN começa a funcionar mal. Que medidas você pode tomar para abordar isso? O problema é que tudo o que você pode realmente fazer é treinar e você não sabe se a reconversão melhorará. Claro que com uma árvore de decisão não é tão ruim assim, pelo menos você sabe quais as decisões tomadas. O problema é que, se você estiver constantemente procurando por ele para tomar as decisões "corretas", então você também terá um problema.
Essas questões são razões que você não vê esses algoritmos usados ​​tanto (embora sejam usados).
[Resposta copiada do LinkedIn Computational Finance Group]
Obrigado pelas palavras complementares Ian, agradecemos que você se interesse em nossa pesquisa e nos forneça alguns comentários perspicazes.
Na nossa abordagem, apenas comparamos o desempenho das seleções de estoque feitas por nossas árvores de decisão em relação a um portfólio igualmente ponderado. Estender a nossa pesquisa para incorporar diferentes carteiras é uma ideia interessante que acompanharemos durante a próxima fase de desenvolvimento. Também estamos considerando implementar algumas das abordagens bem conhecidas para a análise de segurança para serem usadas como benchmarks de desempenho adicionais. Se você ou qualquer outra pessoa tiver sugestões sobre quais abordagens podem fazer bons benchmarks, por favor me avise.
Seus comentários sobre o uso de outras medidas de desempenho são atualizados. Gostaríamos definitivamente de voltar a olhar para a estrutura de back-testing e investigar maneiras de torná-lo mais rigoroso e menos propenso a excesso de ajuste. Também gostaríamos de implementar funções de fitness adicionais que levem em consideração medidas de risco de portfólio e medidas de retorno excessivo (alfa). Examinarei as medidas que você mencionou e verá o melhor possível para incorporá-las à nossa estrutura existente. Também consideraremos como é possível usar um framework de back-testing de código aberto, como ZipLine, o framework de back-testing usado por quantopian.
Suas observações sobre a natureza e o uso de GA e Neural Networks em finanças são muito interessantes. O desafio de tornar esses algoritmos mais transparentes e, francamente, um pouco menos assustador, é que não se deve tirar levemente. Meu colega atualmente está trabalhando em uma tarefa de pesquisa onde ele está tentando levantar o véu em alguns dos trabalhos internos das Redes Neurais. Se ele for bem sucedido, então, em vez de precisar redigir constantemente redes neuronais quando "algo der errado", ele pode isolar a causa do problema na rede neural e adaptar sua arquitetura de acordo. Ele está considerando usar uma aplicação financeira do mundo real de Neural Networks em sua pesquisa. Então, se você tem alguma idéia sobre isso, por favor me avise?
Pessoalmente falando, atualmente estou trabalhando em uma tarefa de pesquisa onde estou tentando construir uma estrutura algorítmica para a seleção e otimização de portfólio comercial. Faz uso de alguns algoritmos de Inteligência Computacional e em frente Eu vou manter em mente os problemas que você mencionou. Vou tentar identificar maneiras de mitigar ou eliminar essas preocupações no quadro. Obrigado novamente por todos os seus comentários, agradecemos o feedback. Se você tem mais boas ideias, entre em contato conosco.
[Comentário copiado de LinkedIn Computational Finance Group]
Eu acho que a abordagem mais razoável para backtesting é comparar seus resultados com o que acontece com o comércio aleatório que ainda obedece a quaisquer restrições que você está impondo no portfólio. Isso é discutido em:
[Resposta copiada do LinkedIn Computational Finance Group]
Obrigado Patrick, essa é uma boa sugestão. Eu entendo a abordagem porque o conceito de backtesting de um algoritmo contra uma estratégia de negociação aleatória é conceitualmente semelhante ao teste de um algoritmo de busca contra busca aleatória. O que é algo que fiz antes. Quão popular você diria que a estratégia de backtesting é?
[Resposta copiada do LinkedIn Computational Finance Group]
Stuart: Depressa impopular. Mas tem que começar em algum lugar.
[Comentário copiado de LinkedIn Computational Finance Group]
Parece bom, qual é o motivo do uso dos 62 estoques de tecnologia, e não de 500 ações?
[Cópias de resposta do LinkedIn Computational Finance Group]
Oi JZ, essa é uma boa pergunta e fico feliz que você tenha perguntado. Debatimos a nossa abordagem e uma opinião externa seria muito apreciada. Limitamos nossa amostra de teste a apenas um setor devido a dois motivos:
1) Acreditamos que as árvores de decisão que utilizam Indicadores Fundamentais podem variar drasticamente entre diferentes indústrias. Isso ocorre porque as proporções financeiras podem variar entre diferentes indústrias e pensamos que um investidor que use essa abordagem desejaria evoluir árvores de decisão para cada setor de forma independente. ** e.
2) Nós só recebemos três semanas para completar a tarefa e nos preocupava que adicionar mais ações seria muito demorado. Isso resultou ser uma preocupação infundada, uma vez que nossa implementação poderia facilmente lidar com todos os 500 estoques no S & amp; P500 sem problemas de desempenho significativos.
** Nota: isso não se aplica a árvores de decisão usando indicadores de Análise Técnica.
Extremamente interessante. Bom Stuart.
É um exercício interessante, mas não vejo qual a vantagem do GP em simplesmente treinar toda a Árvore de Decisão usando alguma medida de impureza. Parece que faz o mesmo apenas de forma muito ineficiente e provavelmente com menos precisão também.
Oi, Ignas, para ser perfeitamente honesto, o GP sofre muitas desvantagens e a técnica ainda está sendo aperfeiçoada. Tendo sido dito, os métodos tradicionais de indução de árvores de decisão (que eu sou mais recentemente um fã de) também têm suas desvantagens que podem (ou não) ser superadas pela programação genética.
Estou tentando implementar o GA em python. Quais são algumas bibliotecas de python que você recomendaria.
Você tentou trocar seu sistema ao vivo?
Oi Lawrence, infelizmente não. Este post tem muitos anos e representa um antigo projeto coletivo meu :-). Eu recomendaria dar uma olhada no Genotick para uma estratégia de negociação baseada na programação genética imparcial. Eu acredito que as pessoas estão negociando ao vivo.
Envie um comentário.
Cancelar resposta.
Siga a Turing Finance.
Turing Finance Mailing List.
Amigos da Turing Finance.
Quantocracy é o melhor agregador de blog de finanças quantitativas com links para novas análises postadas todos os dias.
NMRQL é o fundo hedge quantitativo de que sou parte. Usamos a aprendizagem de máquinas para tentar vencer o mercado.

O R Trader.
Usando R e ferramentas relacionadas em Finanças Quantitativas.
Usando Algoritmos Genéticos em Negociação Quantitativa.
A questão que sempre deve ser feita ao usar indicadores técnicos é o que seria um critério objetivo para selecionar os parâmetros dos indicadores (por exemplo, por que usar um RSI de 14 dias em vez de 15 ou 20 dias?). Os algoritmos genéticos (GA) são ferramentas adequadas para responder a essa pergunta. Nesta publicação, eu mostro como configurar o problema em R. Antes de prosseguir o lembrete habitual: O que eu apresento nesta publicação é apenas um exemplo de brinquedo e não um convite para investir. Também não é uma estratégia concluída, mas uma idéia de pesquisa que precisa ser pesquisada, desenvolvida e adaptada às necessidades individuais.
O que são algoritmos genéticos?
A melhor descrição do GA que encontrei vem da Cybernatic Trading, um livro de Murray A. Ruggiero. Algoritmos genéticos foram inventados por John Holland em meados de 1970 para resolver problemas difíceis de otimização. Este método usa a seleção natural, a sobrevivência do mais forte # 8221 ;. O processo geral segue os passos abaixo:
Codifique o problema nos cromossomos Usando a codificação, desenvolva uma função de aptidão para uso na avaliação do valor de cada cromossomo na resolução de um determinado problema. Inicialize uma população de cromossomos. Avalie cada cromossomo na população. Crie novos cromossomos acoplando dois cromossomos. Isso é feito por muting e recombinação de dois pais para formar dois filhos (os pais são selecionados aleatoriamente, mas tendenciosos por sua aptidão) Avalie o novo cromossomo Exclua um membro da população que seja menos adequado do que o novo cromossomo e insira o novo cromossomo na população . Se o critério de parada for atingido (número máximo de gerações, o critério de aptidão é bom o suficiente e # 8230;), então, retorne o melhor cromossomo, alternativamente, vá para o passo 4.
A partir de uma perspectiva comercial, a GA é muito útil porque são boas em lidar com problemas altamente não-lineares. No entanto, eles exibem algumas características desagradáveis ​​que merecem destaque:
Sobreposição: Este é o principal problema e é para o 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 alcançar 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 que lidam com GA, eu escolhi usar o mais comum: rgenoud.
Os preços de fechamento diários para a maioria dos ETFs líquidos de finanças do Yahoo voltam a janeiro de 2000. O período de amostragem vai de janeiro de 2000 a dezembro de 2018. O período fora da amostra começa em janeiro de 2018.
A lógica é a seguinte: a função de aptidão é otimizada durante o período de amostra 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 exibe duas características principais que são familiares para qualquer pessoa com alguma experiência comercial. Momento a 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 cruzadas e RSI. Isso representa um conjunto de 4 parâmetros: períodos de retorno para médias móveis a longo e curto prazo, período de retorno para RSI e RSI. Os conjuntos de parâmetros são os cromossomos. O outro elemento-chave é a função de fitness. Podemos querer usar algo como: retorno máximo ou taxa Sharpe ou redução média mínima. No que se segue, escolhi maximizar a proporção de Sharpe.
A implementação do R é um conjunto de 3 funções:
fitnessFunction: define a função de fitness (por exemplo, taxa máxima de Sharpe) para ser usado no comércio de motores GA: estatísticas de negociação para os períodos de entrada e saída 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 que eu quero manter esta publicação curta (e a documentação é realmente boa).
Na tabela abaixo, apresento para cada instrumento os parâmetros ótimos (período de retorno de RSI, limite de RSI, Média de Mudança de Curto Prazo e Média de Mudança de Longo Prazo), juntamente com as estatísticas de negociação dentro e fora da amostra.
Antes de comentar os resultados acima, quero explicar alguns pontos importantes. Para combinar a lógica definida acima, limitei os parâmetros para garantir que o período de look-back para a média móvel a longo prazo seja sempre mais longo que a média móvel mais curta. Eu também obriguei o otimizador a escolher apenas as soluções com mais de 50 trades no período de amostra (por exemplo, significância estatística).
Em geral, os resultados fora da amostra estão longe de serem impressionantes. Os retornos são baixos, mesmo que o número de negócios seja pequeno para tornar o resultado realmente significativo. No entanto, existe uma perda significativa de eficiência entre o período de entrada e saída do Japão (EWJ), o que muito provavelmente significa uma sobreposição.
Esta publicação destina-se a fornecer ao leitor as ferramentas para usar adequadamente o GA em uma estrutura de negociação quantitativa. Mais uma vez, é apenas um exemplo que precisa ser aperfeiçoado. Algumas possíveis melhorias a serem exploradas seriam:
Função de fitness: maximizar a relação Sharpe é muito simplista. A & # 8220; smarter & # 8221; A função certamente melhoraria o padrão de estatísticas comerciais de amostra: tentamos capturar um padrão muito direto. Uma pesquisa de padrão mais detalhada é definitivamente necessária. Otimização: há muitas maneiras de melhorar a forma como a otimização é conduzida. Isso melhoraria a velocidade de computação e a racionalidade dos resultados.
O código usado nesta publicação está disponível em um repositório Gist.
Como de costume, todos os comentários são bem-vindos.
15 Comentários.
O problema com o uso de tais abordagens: os cromossomos podem mudar as regras darwinianas de seus futuros, enquanto os bancos que bloqueiam as economias (com alguma regularidade) mudam as regras para se beneficiarem. Taleb é principalmente certo, em que as mudanças de política (por exemplo, empréstimos mentirosos) conduzem os dados, e não o contrário.
Obrigado pelo PosDoyou tem um exemplo de uma função mais esperta para tentar?
Obrigado por alcançar. A escolha da função de fitness é realmente importante para você e depende do que você tentar alcançar. Pode ser um retorno mínimo, a estabilidade do retorno, minimizar a redução, a correlação mínima com outras estratégias, etc & # 8230 ;. Não penso nelas as regras específicas a seguir. No entanto, algumas funções podem ser tendenciosas. Por exemplo, se você tentar minimizar a redução, provavelmente você acabará sem comércio (max DD = 0) se você não for restringir um número mínimo de negócios.
Espero que isto ajude.
Robert, ótimo comentário! As políticas direcionarão para sempre os dados, assim como os dados direcionarão políticas. É um mundo vice-versa na indústria financeira, e muito mais para comerciantes, investidores e banqueiros.
Como você procuraria selecionar regras comerciais e não otimizar parâmetros comerciais?
Como no artigo de Allen (Usando algoritmos genéticos para encontrar regras comerciais comerciais)
Obrigado por esticar e desculpar pela resposta tardia.
Eu apenas uso o senso comum na seleção de parâmetros e, acima de tudo, tendem a usar tanto quanto 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 em Negociação Quantitativa".
Posso traduzir este artigo para o chinês e publicá-lo no meu blog? (Eu informo o link e permaneço seu nome nele.) Eu realmente espero que este artigo possa ajudar mais pessoas.
Obrigado por alcançar.
Enquanto você menciona claramente a fonte (eu) e coloque um link para o artigo original no artigo traduzido, não tenho nenhum problema com a publicação traduzida para o chinês.
Muito obrigado por publicar isso! Para o PosBuySignal, por que RSI é avaliado como sendo menor ou igual a 1 & # 8211; um número? Wouldn & # 8217; t 1 & # 8211; xx [2] sempre resulta em um número negativo? Isn & # 8217; t o RSI sempre entre 0-100?
Desculpas, o código foi interrompido.
Acabei de fornecer-me uma fonte valiosa para mim. Usei o Algoritmo escrito por você e obedeci os seguintes resultados.
NOTA: HIT DE LIMITE DE GERAÇÃO MÁXIMA DURA.
Solution Fitness Value: 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 Encontrado Geração 38.
Número de Geração Execução 50.
Dom 24 de janeiro 12:57:50 2018.
Tempo de execução total: 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 & # 8216; sink & # 8217 ;. A opção só é fornecida para a compatibilidade com versões anteriores da API.
2: Em genoud (fitnessFunction, nvars = 4, max = TRUE, pop. size = 30,:
Parado porque o limite de geração máxima dura foi atingido.
Você poderia explicar o que podemos interpretar na solução e meu objetivo é prever o valor futuro e como isso pode ser interpretado a partir deste caso.
Obrigado por alcançar. Eu não tenho certeza se eu entendo sua pergunta, mas eu tentarei.
Sua solução ideal é:
que corresponde a um valor de função de fitness de: 5.03.
Outro ponto importante para notar é que você alcançou o número máximo de iterações. Você pode facilmente relaxar essa suposição caso deseje explorar diferentes soluções.
Além disso, eu não consigo ver qual é exatamente o seu problema? Mais detalhes sobre sua função de fitness e o que você está tentando alcançar podem ajudar.
Meu objetivo é prever o valor futuro que é como se eu entreguei até 27 de janeiro de 2018, eu deveria ter uma previsão da próxima data para o dia 28. Podemos fazer isso com a metodologia que você usou.
Por favor, coloque seu ID de email para lakshmitharunponnam @ gmail, isso seria uma grande ajuda para mim.
Sim você pode. Você só precisa ajustar a freqüê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 usar provavelmente terão que ser ajustadas também.
Obrigado pela maravilhosa postagem. Fiquei tão animado para passar pelos seus códigos. Eu sou novato. Você pode me informar como posso interpretar as leituras, a saber,
para o & # 8220; SPY & # 8221; Valor predito aberto, alto, baixo e fechado.

SnowCron.
FREE E. Mail Classes.
Usando o Algoritmo Genético para criar Estratégia de Negociação FOREX lucrativa. Algoritmo Genético no Sistema de Redes Neurais do Cortex Feedforward Backpropagation Neural Network Aplicação para cálculos genéticos baseados em Forex trading.
Este exemplo usa conceitos e ideias do artigo anterior, então leia Algoritmo Genético de Rede Neural em Sistemas de Negociação FOREX primeiro, embora não seja obrigatório.
Sobre este texto.
Em primeiro lugar, leia o aviso legal. Este é um exemplo de usar a funcionalidade do algoritmo de algoritmo de algoritmo de redes nervosas Cortex, não um exemplo de como fazer negociação rentável. Eu não sou seu guru, nem eu devo ser responsável por suas perdas.
O software Cortex Neural Networks possui redes neurais, e a FFBP que discutimos antes é apenas uma maneira de escolher estratégias de negociação forex. É uma boa técnica, poderosa e quando aplicada corretamente, muito promissora. No entanto, tem um problema - para ensinar a Rede Neural, precisamos saber o "resultado desejado".
É bastante fácil de fazer quando fazemos a aproximação da função, apenas tomamos o valor "real" de uma função, porque sabemos o que deveria ser.
Quando fazemos a previsão da rede neural, utilizamos a técnica (descrita em artigos anteriores) de ensinar a Rede Neural na história, novamente, se prevermos, digamos, uma taxa de câmbio, sabemos (durante a formação) qual é a previsão correta .
No entanto, quando estamos construindo um sistema comercial, não temos idéia de qual é a decisão de negociação correta, mesmo que conheçamos a taxa de câmbio! Na verdade, temos muitas estratégias de negociação forex que podemos usar em qualquer ponto do tempo, e precisamos encontrar uma boa - como? O que devemos alimentar como o resultado desejado de nossa Rede Neural?
Se você seguiu nosso artigo anterior, você sabe, que nos enganamos para lidar com esse problema. Ensinamos a Rede Neural a fazer uma previsão de taxa de câmbio (ou taxa de câmbio), e então usamos essa previsão para fazer negociação. Então, fora da parte da rede Neural do programa, tomamos uma decisão sobre a qual a Rede Neural é a melhor.
Os algoritmos genéticos podem lidar diretamente com este problema, eles podem resolver o problema afirmado como "encontrar os melhores sinais comerciais".
Neste artigo, vamos usar o software Cortex Neural Networks para criar esse programa.
Usando o Algoritmo Genético.
Algoritmos genéticos são muito bem desenvolvidos e muito diversos. Se você quer aprender tudo sobre eles, sugiro que você use a Wikipedia, pois este artigo é apenas sobre o que o Cortex Neural Networks Software pode fazer.
Com o software Cortex Neural Networks, podemos criar uma Rede Neural que leve alguns dados, digamos, valores de um indicador, e produz algum resultado, digamos, sinais de negociação (comprar, vender, manter.) E parar a perda / tomar níveis de lucro para posições para ser aberto.
Claro, se semearmos os pesos desta Rede Neural ao acaso, os resultados comerciais serão terríveis. No entanto, digamos que criamos uma dúzia de tais NNs. Então podemos testar o desempenho de cada um deles, e escolher o melhor, o vencedor.
Esta foi a "primeira geração" dos NNs. Para continuar a segunda geração, precisamos permitir que nosso vencedor "procriar", mas para evitar a obtenção de cópias idênticas, vamos adicionar alguns números aleatórios aos pesos das descentinas.
Na segunda geração, temos o nosso vencedor da primeira geração e são cópias imperfeitas (mutadas). Vamos fazer testes novamente. Teremos outro vencedor, que é melhor que qualquer outra Rede Neural na geração.
E assim por diante. Nós simplesmente permitimos que os vencedores criem, e eliminem os perdedores, assim como na evolução da vida real, e obteremos nossa Rede Neural de melhor negociação, sem nenhum conhecimento prévio do que o sistema de negociação (algoritmo genético) deveria ser.
Algoritmo Genético da Rede Neural: Exemplo 0.
Este é o primeiro exemplo de algoritmo genético, e muito simples. Nós vamos passar por ele passo a passo, para aprender todos os truques que os exemplos a seguir usarão.
O código tem comentários em linha, então vamos apenas nos concentrar nos momentos-chave.
Primeiro, criamos uma rede neural. É usar pesos aleatórios, e ainda não foi ensinado.
Então, no ciclo, fazemos 14 cópias, usando MUTATION_NN fumction. Esta função faz uma cópia de uma Rede Neural de origem, adicionando valores aleatórios de 0 para (no nosso caso) 0,1 para todos os pesos.
Mantivemos alças para 15 NNs resultantes em uma matriz, podemos fazê-lo, pois o identificador é apenas um número inteiro.
A razão pela qual usamos 15 NNs não tem nada a ver com a negociação: o software Cortex Neural Networks pode traçar até 15 linhas em um gráfico simultaneamente.
Podemos usar diferentes abordagens para o teste. Primeiro, podemos usar o conjunto de aprendizagem, tudo de uma vez. Em segundo lugar, podemos testar, digamos, 12000 resords (de 100000), e caminhar através do conjunto de aprendizagem, do começo ao fim. Isso tornará o know-how diferente, pois buscaremos redes da Neural que sejam lucrativas em qualquer parte de dados, e não apenas em todo o conjunto. A segunda abordagem pode nos dar problemas, se a mudança de dados, desde o início até o fim. Em seguida, a rede irá evoluir, obtendo capacidade de trocar no final do conjunto de dados e perdendo a capacidade de trocar no seu início.
Para resolver esse problema, vamos levar aleatoriamente 12.000 fragmentos de registros de dados e alimentá-lo para a Rede Neural.
Abaixo, adicionamos uma criança para cada rede, com pesos ligeiramente diferentes. Note-se que 0,1 para mutação tange não é a única escolha, como fato de fato, mesmo este parâmetro pode ser otimizado usando o algoritmo genético.
Os NNs recém-criados são adicionados após 15 existentes. Desta forma, temos 30 NNs em uma matriz, 15 antigos e 15 novos. Então vamos fazer o próximo ciclo de testes e matar perdedores, de ambas as gerações.
Para fazer testes, aplicamos a Rede Neural aos nossos dados, para produzir saídas, e depois chamar a função Test, que usa essas saídas para simular a negociação. Os resultados da negociação são usados ​​para desidir, quais NNs são melhores.
Usamos um intervalo de registros nLearn, de nStart a nStart + nLearn, onde nStart é um ponto aleatório dentro do conjunto de aprendizado.
O código abaixo é um truque. A razão pela qual usamos é ilustrar o fato de que o algoritmo genético pode criar algoritmos genéticos, mas não será necessariamente o melhor e, também, sugerir que podemos melhorar o resultado, se implicarmos algumas limitações à aprendizagem processo.
É possível que nosso sistema comercial funcione muito bem em negócios longos, e muito pobre em curto, ou vice-versa. Se, digamos, os negócios longos são muito bons, esse algoritmo genético pode ganhar, mesmo com grandes perdas em transações curtas.
Para evitá-lo, atribuímos mais peso aos negócios longos em trocas ímpares e curtas em ciclos pares. Este é apenas um exemplo, não há garantia, que irá melhorar alguma coisa. Mais sobre isso abaixo, em discussão sobre correções. Tecnicamente, você não precisa fazê-lo, ou pode fazê-lo de forma diferente.
Adicione lucro a uma matriz ordenada. Ele retorna uma posição de inserção, então usamos essa posição para adicionar identificador de rede Neural, aprendendo e testando lucros para arrays não classificados. Agora, temos dados para a Rede Neural atual no mesmo índice de matrizes que seu lucro.
A idéia é chegar a uma série de NNs, ordenados por rentabilidade. Como a matriz é classificada por lucro, para remover metade das redes, que são menos lucrativas, precisamos apenas remover NNs de 0 a 14.
As decisões de negociação são baseadas no valor do sinal da Rede Neural, desde este ponto de vista o programa é idêntico aos exemplos do artigo anterior.
FOREX Estratégia de Negociação: Discussing example 0.
Em primeiro lugar, vamos dar uma olhada nos gráficos. O primeiro gráfico de lucro durante a primeira iteração não é bom, como seria de esperar, a Rede Neural perde dinheiro (imagem evolution_00_gen_0.png copiada após a primeira iteração da pasta "imagens"):
A imagem com lucro no ciclo 15 é melhor, às vezes, o algoritmo genético pode aprender muito rápido:
No entanto, observe a saturação em uma curva de lucro.
É interessante também olhar para a forma como os lucros individuais mudam, tendo em mente, esse número de curva, digamos, 3 nem sempre é para a mesma Rede Neural, pois eles estão nascendo e terminaram o tempo todo:
Além disso, note que o pequeno sistema de negociação automatizado forex é pobre em transações curtas e muito melhor em longos, que pode ou não estar relacionado ao fato de que o dólar estava caindo em comparação com o euro durante esse período. Também pode ter algo a ver com parâmetros do nosso indicador (talvez, precisamos de um período diferente para shorts) ou a escolha de indicadores.
Aqui está o histórico após 92 e 248 ciclos:
Para nossa surpresa, o algoritmo genético falhou completamente. Vamos tentar descobrir o porquê, e como ajudar a situação.
Em primeiro lugar, cada geração não deve ser melhor do que a anterior? A resposta é não, pelo menos não dentro do modelo que usamos. Se tomarmos TODAS as aprendizagens definidas de uma vez, e usamos repetidamente para ensinar nossos NNs, então sim, eles melhorarão em cada geração. Mas, em vez disso, tomamos fragmentos aleatórios (12000 registros no tempo) e os usamos.
Duas perguntas: por que o sistema falhou em fragmentos aleatórios de conjunto de aprendizado e por que não usamos conjunto de aprendizado completo? Bem. Para responder a segunda pergunta, eu fiz. NNs apresentaram um grande desempenho - no aprendizado definido. E eles falharam no conjunto de testes, pelo mesmo motivo que falha quando usamos o aprendizado da FFPB. Para dizer de maneira diferente, nossos NNs se especializaram demais, eles aprenderam a sobreviver no ambiente ao qual eles estão acostumados, mas não fora dele. Isso acontece muito na natureza.
A abordagem que tomamos foi destinada a compensar isso, ao obrigar NNs a realizar bons em qualquer fragmento aleatório do conjunto de dados, de modo que, com sorte, eles também poderiam realizar em um conjunto de testes desconhecido. Em vez disso, eles falharam tanto no teste quanto no conjunto de aprendizado.
Imagine animais, vivendo em um deserto. Muito sol, sem neve. Este é um mercado de metafor para rizing, pois os nossos dados NNs desempenham o papel de meio ambiente. Os animais aprenderam a viver em um deserto.
Imagine animais, que vivem em clima frio. Neve e sem sol. Bem, eles se ajustaram.
No entanto, em nosso experimento, colocamos aleatoriamente nossos NNs em um deserto, na neve, na água, nas árvores. apresentando-lhes diferentes fragmentos de dados (aumentando aleatoriamente, caindo, plano). Os animais morreram.
Ou, de modo diferente, selecionamos a melhor Rede Neural para o conjunto de dados aleatórios 1, que, digamos, era para o aumento do mercado. Então, apresentamos, aos vencedores e seus filhos, uma queda dos dados do mercado. NNs funcionaram mal, nós melhoramos os melhores artistas, talvez, uma das crianças mutantes, que perdemos a capacidade de negociar no mercado em expansão, mas conseguiu alguma habilidade para lidar com a queda de um.
Em seguida, voltamos a mesa novamente e, novamente, conseguimos o melhor desempenho - mas melhor entre os mais pobres. Nós simplesmente não damos a nossos NNs chances de se tornarem universais.
Existem técnicas que permitem ao algoritmo genético aprender novas informações sem perder o desempenho em informações antigas (afinal, os animais podem viver no verão e no inverno, certo? Então, a evolução é capaz de lidar com mudanças repetitivas). Podemos discutir essas técnicas mais tarde, embora este artigo seja mais sobre o uso do software Cortex Neural Networks, do que sobre a construção de um sistema de negociação automatizado forex bem sucedido.
Algoritmo Genético da Rede Neural: Exemplo 1.
Agora é hora de falar sobre correções. Um algoritmo genético simples que criamos durante o passo anterior tem duas grandes falhas. Primeiro, não conseguiu negociar com lucro. Está tudo bem, podemos tentar usar o sistema parcialmente treinado (foi lucrativo no início). A segunda falha é mais grave: não temos controle sobre as coisas, que esse sistema faz. Por exemplo, pode aprender a ser rentável, mas com grandes remessas.
É um fato bem conhecido, que na vida real, a evolução pode otimizar mais de um parâmetro simultaneamente. Por exemplo, podemos obter um animal, que pode correr rápido E ser resistente ao frio. Por que não tentar fazer o mesmo no nosso sistema de negociação automatizado forex?
É quando usamos as correções, que são apenas o conjunto de punições adicionais. Digamos, nosso sistema é negociado com drawdown 0.5, enquanto queremos confirmá-lo para 0 a 0.3 intervalo. Para "dizer" ao sistema que cometeu um erro, diminuímos o lucro (um usado para determinar, qual algoritmo genético ganhou) ao grau, que é proporcional ao tamanho do DD. Então, o algoritmo de evolução cuida do resto.
Existem alguns outros fatores que queremos levar em consideração: talvez queiramos ter um número de operações de compra e venda mais ou menos igual, queremos ter mais operações rentáveis, então de falhas, podemos querer que o gráfico de lucro ser linear e assim por diante.
Em evolution_01.tsc implementamos um conjunto simples de correções. Em primeiro lugar, usamos algum número grande para um valor de correção inicial. Multiplicamos isso para valores pequenos (geralmente, entre 0 e 1), dependendo da "punição" que queremos aplicar. Então, multiplicamos nosso lucro por esta correção. Como resultado, o lucro é corrigido, para refletir o quanto o algoritmo genético corresponde aos nossos outros critérios. Então usamos o resultado para encontrar uma Rede Neural de vencedores.
FOREX Estratégia de Negociação: Discutir o exemplo 1.
O exemplo 1 funciona muito melhor do que o exemplo 0. Durante os primeiros 100 ciclos, ele aprendeu muito, e os gráficos de lucro parecem tranquilizadores. No entanto, como no exemplo 0, os negócios longos são muito mais rentáveis, o que provavelmente significa que há um problema em nossa abordagem. No entanto, o sistema encontrou um equilíbrio entre algumas das condições iniciais contraditórias:
Existem algumas dinâmicas positivas, tanto no conjunto de aprendizado como, mais importante, no conjunto de testes.
Quanto ao aprendizado adicional, no ciclo 278 podemos ver, que nosso sistema foi superado. Isso significa que ainda temos progresso no aprendizado definido:
Mas o conjunto de testes mostra fraqueza:
Este é um problema comum com NNs: quando ensinamos isso no aprendizado definido, ele aprende a lidar com isso e, às vezes, ele aprende muito bem - até o grau, quando perde o desempenho no conjunto de testes.
Para lidar com esse problema, uma solução "tradicional" é usada: continuamos procurando a Rede Neural, que executa o melhor no conjunto de testes, e salve-o, substituindo o melhor possível, cada vez que o novo pico é alcançado. Esta é a mesma abordagem, que usamos no treinamento FFBP, exceto, desta vez, temos que fazê-lo nós mesmos (adicionando código, que procura uma melhor Rede Neural em um conjunto de testes e ligando para SAVE_NN ou exportando pesos da Rede Neural para um Arquivo). Desta forma, quando você parar seu treinamento, você terá o melhor desempenho ON TESTING SET salvo e esperando por você.
Observe também que não é o máximo. lucro que você está procurando, mas ótimo desempenho, então considere usar correções, ao procurar o melhor desempenho em um conjunto de testes.
Algoritmo Genético para Análise Técnica FOREX: Onde agora?
Depois de ter sua Rede Neural de vencedor, você pode seguir as etapas, descritas no artigo anterior, para exportar pesos da Rede Neural e depois usá-los em sua plataforma de negociação em tempo real, como Meta Trader, Trade Station e assim por diante.
Alternativamente, você pode se concentrar em outras formas de otimizar a Rede Neural, ao contrário do algoritmo FFBP, aqui você pode obter avay usando conjuntos de aprendizagem e teste e mover a aprendizagem seqüencial.

No comments:

Post a Comment