понедельник, 7 мая 2018 г.

Sistema de negociação de programação genética


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 para duas carteiras de comparação: um portfólio igual ponderado e um portfólio de estilo S & P que é ponderado pela capitalização de mercado.
Como se verifica, pode ser surpreendentemente difícil vencer um portfólio igualmente ponderado. Rebalancear as carteiras trimestralmente, uma vez que alguns estoques vão subir e alguns vão cair (por exemplo, você quer manter os pesos do portfólio iguais, à medida que os preços mudam). Se o seu algoritmo genético supera essas carteiras, então você tem "alfa" (excesso de retorno sobre o benchmark).
Claro que o alfa não é tudo. Você deve olhar para a Perda de cauda esperada (ETL) (também conhecida como CVaR, déficit esperado) tanto para o portfólio da GA quanto para o "benchmark". Se você tiver menos risco para o mesmo retorno, então você pode considerar que você bateu o benchmark. A medida ETL é uma medida melhor do que a relação Sharpe quando se trata de risco, uma vez que a relação Sharpe mede a variação, que é de dois lados. ETL apenas mede a perda.
Uma observação: um problema com GA e redes neurais (NN) é que são caixas negras. É difícil determinar por que eles fazem as "escolhas" que eles fazem. Então imagine que você é um gerente de portfólio. Seu GA ou NN começa a funcionar mal. Que medidas você pode tomar para abordar isso? O problema é que tudo o que você pode realmente fazer é treinar e você não sabe se a reconversão melhorará. Claro que com uma árvore de decisão não é tão ruim assim, pelo menos você sabe quais as decisões tomadas. O problema é que, se você estiver constantemente procurando por ele para tomar as decisões "corretas", então você também terá um problema.
Essas questões são razões que você não vê esses algoritmos usados ​​tanto (embora sejam usados).
[Resposta copiada do LinkedIn Computational Finance Group]
Obrigado pelas palavras complementares Ian, agradecemos que você se interesse em nossa pesquisa e nos forneça alguns comentários perspicazes.
Na nossa abordagem, apenas comparamos o desempenho das seleções de estoque feitas por nossas árvores de decisão em relação a um portfólio igualmente ponderado. Estender a nossa pesquisa para incorporar diferentes carteiras é uma ideia interessante que acompanharemos durante a próxima fase de desenvolvimento. Também estamos considerando implementar algumas das abordagens bem conhecidas para a análise de segurança para serem usadas como benchmarks de desempenho adicionais. Se você ou qualquer outra pessoa tiver sugestões sobre quais abordagens podem fazer bons benchmarks, por favor me avise.
Seus comentários sobre o uso de outras medidas de desempenho são atualizados. Gostaríamos definitivamente de voltar a olhar para a estrutura de back-testing e investigar maneiras de torná-lo mais rigoroso e menos propenso a excesso de ajuste. Também gostaríamos de implementar funções de fitness adicionais que levem em consideração medidas de risco de portfólio e medidas de retorno excessivo (alfa). Examinarei as medidas que você mencionou e verá o melhor possível para incorporá-las à nossa estrutura existente. Também consideraremos como é possível usar um framework de back-testing de código aberto, como ZipLine, o framework de back-testing usado por quantopian.
Suas observações sobre a natureza e o uso de GA e Neural Networks em finanças são muito interessantes. O desafio de tornar esses algoritmos mais transparentes e, francamente, um pouco menos assustador, é que não se deve tirar levemente. Meu colega atualmente está trabalhando em uma tarefa de pesquisa onde ele está tentando levantar o véu em alguns dos trabalhos internos das Redes Neurais. Se ele for bem sucedido, então, em vez de precisar redigir constantemente redes neuronais quando "algo der errado", ele pode isolar a causa do problema na rede neural e adaptar sua arquitetura de acordo. Ele está considerando usar uma aplicação financeira do mundo real de Neural Networks em sua pesquisa. Então, se você tem alguma idéia sobre isso, por favor me avise?
Pessoalmente falando, atualmente estou trabalhando em uma tarefa de pesquisa onde estou tentando construir uma estrutura algorítmica para a seleção e otimização de portfólio comercial. Faz uso de alguns algoritmos de Inteligência Computacional e em frente Eu vou manter em mente os problemas que você mencionou. Vou tentar identificar maneiras de mitigar ou eliminar essas preocupações no quadro. Obrigado novamente por todos os seus comentários, agradecemos o feedback. Se você tem mais boas ideias, entre em contato conosco.
[Comentário copiado de LinkedIn Computational Finance Group]
Eu acho que a abordagem mais razoável para backtesting é comparar seus resultados com o que acontece com o comércio aleatório que ainda obedece a quaisquer restrições que você está impondo no portfólio. Isso é discutido em:
[Resposta copiada do LinkedIn Computational Finance Group]
Obrigado Patrick, essa é uma boa sugestão. Eu entendo a abordagem porque o conceito de backtesting de um algoritmo contra uma estratégia de negociação aleatória é conceitualmente semelhante ao teste de um algoritmo de busca contra busca aleatória. O que é algo que fiz antes. Quão popular você diria que a estratégia de backtesting é?
[Resposta copiada do LinkedIn Computational Finance Group]
Stuart: Depressa impopular. Mas tem que começar em algum lugar.
[Comentário copiado de LinkedIn Computational Finance Group]
Parece bom, qual é o motivo do uso dos 62 estoques de tecnologia, e não de 500 ações?
[Cópias de resposta do LinkedIn Computational Finance Group]
Oi JZ, essa é uma boa pergunta e fico feliz que você tenha perguntado. Debatimos a nossa abordagem e uma opinião externa seria muito apreciada. Limitamos nossa amostra de teste a apenas um setor devido a dois motivos:
1) Acreditamos que as árvores de decisão que utilizam Indicadores Fundamentais podem variar drasticamente entre diferentes indústrias. Isso ocorre porque as proporções financeiras podem variar entre diferentes indústrias e pensamos que um investidor que use essa abordagem desejaria evoluir árvores de decisão para cada setor de forma independente. ** e.
2) Nós só recebemos três semanas para completar a tarefa e nos preocupava que adicionar mais ações seria muito demorado. Isso resultou ser uma preocupação infundada, uma vez que nossa implementação poderia facilmente lidar com todos os 500 estoques no S & amp; P500 sem problemas de desempenho significativos.
** Nota: isso não se aplica a árvores de decisão usando indicadores de Análise Técnica.
Extremamente interessante. Bom Stuart.
É um exercício interessante, mas não vejo qual a vantagem do GP em simplesmente treinar toda a Árvore de Decisão usando alguma medida de impureza. Parece que faz o mesmo apenas de forma muito ineficiente e provavelmente com menos precisão também.
Oi, Ignas, para ser perfeitamente honesto, o GP sofre muitas desvantagens e a técnica ainda está sendo aperfeiçoada. Tendo sido dito, os métodos tradicionais de indução de árvores de decisão (que eu sou mais recentemente um fã de) também têm suas desvantagens que podem (ou não) ser superadas pela programação genética.
Estou tentando implementar o GA em python. Quais são algumas bibliotecas de python que você recomendaria.
Você tentou trocar seu sistema ao vivo?
Oi Lawrence, infelizmente não. Este post tem muitos anos e representa um antigo projeto coletivo meu :-). Eu recomendaria dar uma olhada no Genotick para uma estratégia de negociação baseada na programação genética imparcial. Eu acredito que as pessoas estão negociando ao vivo.
Envie um comentário.
Cancelar resposta.
Siga a Turing Finance.
Turing Finance Mailing List.
Amigos da Turing Finance.
Quantocracy é o melhor agregador de blog de finanças quantitativas com links para novas análises postadas todos os dias.
NMRQL é o fundo hedge quantitativo de que sou parte. Usamos a aprendizagem de máquinas para tentar vencer o mercado.

Seleção natural: Algoritmo genético para otimização do sistema e programação genética.
O Evo 2 é a nossa biblioteca de algoritmos genéticos avançados, que incorpora o último em algoritmo genético, como processos biologicamente idênticos, interruptores epigenéticos, recozimento simulado, prevenção de endogamia de Westermarck, recombinação limitada por idade e muito mais.
O algoritmo Evo 2 não se baseia no design padrão GA padrão "único cromossomo".
O Evo 2 resolve problemas de otimização multivariada rapidamente e escala bem com a complexidade. O algoritmo Evo 2 foi projetado para programação genética (criação autônoma de sistemas de negociação), otimização de sistemas de negociação e otimização de portfólio. O Evo 2 permite aos desenvolvedores desenvolver otimização de sistemas de negociação multivariada com facilidade.
Genoma e Algoritmo Bio-Idênticos.
Evo 2 não é apenas bio-inspirado, mas é bio-idêntico em muitos aspectos. O Evo 2 simula todos os processos naturais, desde a seleção de parceiros até a embalagem de DNA e a meiose completa. A maioria dos algoritmos genéticos padrão negligencia para realizar as múltiplas etapas da meiose que são de vital importância para a variação genética, uma variável crucialmente importante para evitar o óptimo local.
Durante a profase, cromossomos sinapse e uma pequena quantidade de DNA são trocados entre cromossomos homólogos através de um processo conhecido como "cruzamento". A parte crítica da profase é o alinhamento de tetrads em pares homólogos. O algoritmo Evo 2 garante que os homólogos sejam criados apenas a partir de cromossomos sexuais opostos e não relacionados.
Metafase e Anafase.
A metafase e a anafase são as fases onde muita variação é incorporada ao genoma; No entanto, a maioria dos algoritmos genéticos deixa completamente essas etapas. Evo 2 simula ambas as fases completamente e com precisão.
Não é permitido o endogamie.
A maioria dos algoritmos genéticos padrão são "sopa inata", tecnicamente falando. A endogamia reduz a variação genética, o que é suficiente para dizer, evita que os sistemas evoluam e se adaptem ao seu ambiente. Nos GAs padrão, isso significa que um sistema pode ter maior probabilidade de ficar preso na óptima local. Embora a natureza tenha pelo menos três mecanismos para prevenir a endogamia, a maioria dos algoritmos genéticos não aborda esse problema.
O primeiro método: Impedir que a prole se reproduza. A endogamia resulta em aumento da homozigoticidade, o que pode aumentar as chances de a prole ser afetada por traços recessivos ou deletérios.
O segundo mecanismo: expulsa os jovens do sexo masculino para evitar o aparecimento de incesto entre irmãos.
O terceiro mecanismo: o efeito Westermarck. Este é um efeito psicológico através do qual os indivíduos que são criados em estreita proximidade durante a infância tornam-se dessensibilizados para a atração sexual posterior.
A conseqüência final da endogamia é a extinção de espécies por falta de diversidade genética. A chita, uma das espécies mais endogâmias da terra, é um excelente exemplo. E também acontece com a extinção. Há vinte mil anos, guepardas percorreram toda a África, Ásia, Europa e América do Norte. Cerca de 10 mil anos atrás, devido às mudanças climáticas, todas as espécies, exceto uma, se tornaram extintas. Com a redução drástica de seus números, os parentes próximos foram forçados a se reproduzir e a chita se tornou geneticamente endogâmica, o que significa que todas as guepardas estão intimamente relacionadas.
Embora a natureza proíba a endogamia, quase todos os algoritmos genéticos simulados por computador ignoram esse problema.
Interruptores epigenéticos.
A teoria epigenética descreve como as mudanças na expressão gênica podem ser causadas por mecanismos diferentes das mudanças na sequência dna subjacente, temporariamente ou através de várias gerações, influenciando uma rede de interruptores químicos dentro de células coletivamente conhecidas como epigenomas. O Evo 2 pode simular interrupções epigenéticas para permitir que o sistema seja penalizado temporariamente por ações, como ser muito voraz ou avessas ao risco.
Recozimento simulado.
O recozimento simulado é uma metaheurística probabilística para o problema de otimização global de localizar uma boa aproximação ao ótimo global de uma determinada função em um grande espaço de busca. Muitas vezes, é usado quando o espaço de pesquisa é discreto. Para certos problemas, o recozimento simulado pode ser mais eficiente do que a enumeração exaustiva.
Árvore genealógica.
Evo 2 pode salvar informações genealógicas para cada genoma, para que os usuários possam rever a progressão do algoritmo genético para ver como certos genes evoluíram ao longo do tempo.
Karyogram Viewer.
O Evo 2 possui um coreograma incorporado, que permite a visualização de genomas enquanto os algoritmos genéticos estão evoluindo. O kariograma pode ser personalizado para exibir informações de genealogia para genomas específicos através de um menu de contexto.
Aplicações Evo 2.
O Evo 2 pode ser usado no lado do cliente ou do servidor para programação genética (criação autônoma de sistemas de negociação), otimização do sistema de negociação, otimização de portfólio, alocação de ativos e aplicativos não relacionados à finanças, incluindo, entre outros, a criatividade artificial, design automatizado, bioinformática , cinética química, código de quebra, engenharia de controle, modelos Feynman-Kac, filtragem e processamento de sinal, aplicações de programação, engenharia mecânica, otimização estocástica e problemas de horário.
Exemplos de programação genética.
Os exemplos de programação do TradeScript mostram aos desenvolvedores como criar modelos de programação genética capazes de testar e otimizar as estratégias. A documentação de programação pode ser baixada aqui.
Comece com o Evo2>
Por que escolher o módulo?
O Modulus é uma empresa de tecnologia financeira. Embora isso não pareça um diferencial real, é. Isso significa que nossas soluções são de nossos anos de experiência no setor de tecnologia financeira. Nossos produtos e serviços são fornecidos por desenvolvedores e engenheiros que possuem experiência de negociação de primeira mão. Todo mundo aqui no Modulus fala seu idioma.
Direitos autorais e cópia; 2002-2018 por Modulus Global, Inc., todos os direitos reservados.

sistema de comércio de programação genética
Criando um Sistema de Negociação no Laboratório de Sistemas de Negociação.
O Trading System Lab gerará automaticamente Sistemas de Negociação em qualquer mercado em poucos minutos, usando um programa de computador muito conhecido, conhecido como AIMGP (Indução Automática de Código de Máquina com Programação Genética). A criação de um sistema de negociação no Trade System Lab é realizada em 3 etapas fáceis. Primeiro, é executado um pré-processador simples que extrai e pré-processa automaticamente os dados necessários do mercado com o qual você deseja trabalhar. A TSL aceita dados CSI, MetaStock, AIQ, TradeStation, dados de Internet gratuitos, ASCII, TXT, CSV, CompuTrac, DowJones, FutureSource, TeleChart2000v3, TechTools, XML, Binário e Internet. Em segundo lugar, o gerador do sistema de negociação (GP) é executado por vários minutos, ou mais, para evoluir um novo sistema de negociação. Você pode usar seus próprios dados, padrões, indicadores, relações de inter-mercado ou dados fundamentais dentro do TSL. Terceiro, o Sistema de Negociação evoluído é formatado para produzir novos sinais do Sistema de Negociação dentro da TradeStation ™ ou muitas outras plataformas de negociação. O TSL escreverá automaticamente Easy Language, Java, Assembler, código C, código C # e WealthLab Script Language. O Trading System pode então ser negociado manualmente, negociado através de um corretor ou negociado automaticamente. Você pode criar o Trading System você mesmo ou podemos fazer isso por você. Então, você ou o seu corretor podem trocar o sistema manualmente ou automaticamente.
O Programa de Genética do Sistema de Negociação do Comércio contém vários recursos que reduzem a possibilidade de montagem da curva ou produzem um Sistema de Negociação que não continua a atuar no futuro. Em primeiro lugar, os Sistemas de Negociação evoluídos têm seu tamanho reduzido ao tamanho mais baixo possível através do que é chamado de Pressão Parsimonia, extraindo do conceito de comprimento mínimo da descrição. Assim, o sistema de negociação resultante é o mais simples possível e, em geral, acredita-se que, quanto mais simples for o Sistema de Negociação, melhor será no futuro. Em segundo lugar, a aleatoriedade é introduzida no processo evolutivo, o que reduz a possibilidade de encontrar soluções que sejam localmente, mas não globalmente otimizadas. A aleatoriedade é introduzida sobre não apenas as combinações do material genético utilizado nos Sistemas de Negociação evoluídos, mas em Parsimony Pressure, Mutation, Crossover e outros parâmetros de GP de nível superior. O teste de fora da amostra é realizado enquanto o treinamento está em andamento com informações estatísticas apresentadas nos testes de Teste de Amostra e Fora do Teste de Amostra. Os registros de execução são apresentados ao usuário para dados de treinamento, validação e fora de amostra. Bem comportado O desempenho fora da amostra pode ser indicativo de que o Sistema de Negociação está evoluindo com características robustas. A deterioração substancial no teste automático de Out of Sample em comparação com o teste In Sample pode implicar que a criação de um Sistema de Negociação robusto está em dúvida ou que o Terminal ou Conjunto de Entrada pode precisar ser alterado. Finalmente, o Conjunto de terminais é cuidadosamente escolhido, de modo a não prejudicar demais a seleção do material genético inicial em relação a qualquer viés ou sentimento de mercado específico.
O TSL não começa a ser executado com um Sistema de Negociação predefinido. Na verdade, apenas o conjunto de entradas e uma seleção de modos ou modos de entrada no mercado, para busca e atribuição automática de entrada, são feitos inicialmente. Um padrão ou comportamento indicador que pode ser pensado como uma situação de alta pode ser usado, descartado ou invertido dentro do GP. Nenhum padrão ou indicador é pré-atribuído a qualquer viés de movimento de mercado específico. Esta é uma saída radical do desenvolvimento do sistema de negociação gerado manualmente.
Um Sistema de Negociação é um conjunto lógico de instruções que dizem ao comerciante quando comprar ou vender um mercado específico. Essas instruções raramente exigem intervenção de um comerciante. Os Sistemas de Negociação podem ser negociados manualmente, observando as instruções de negociação em uma tela do computador, ou podem ser negociados, permitindo que o computador entre em negociações no mercado automaticamente. Ambos os métodos estão em uso generalizado hoje. Existem mais gerentes de dinheiro profissionais que se consideram comerciantes "sistemáticos ou mecânicos" do que aqueles que se consideram "discretos", e o desempenho dos gerentes de dinheiro sistemáticos é geralmente superior ao dos gestores de dinheiro discrecional. Estudos mostraram que as contas de negociação geralmente perdem dinheiro com mais freqüência se o cliente não estiver usando um Sistema de Negociação. O aumento significativo nos sistemas de negociação nos últimos 10 anos é evidente, especialmente nas corretora de commodities, no entanto, as empresas de corretagem de mercado de ações e títulos estão cada vez mais conscientes dos benefícios através do uso de sistemas de negociação e alguns começaram a oferecer sistemas de negociação para seus clientes de varejo.
A maioria dos gestores de fundos mútuos já estão usando algoritmos computacionais sofisticados para orientar suas decisões quanto ao "estoque quente a escolher" ou o que "rotação do setor" é favorável. Computadores e algoritmos tornaram-se mainstream no investimento e esperamos que essa tendência continue a ser mais jovem, os investidores mais experientes em informática continuam a permitir que partes do seu dinheiro sejam gerenciadas pelos sistemas de negociação para reduzir o risco e aumentar os retornos. As enormes perdas experimentadas pelos investidores que participam da compra e detenção de ações e fundos de investimento como o mercado de ações derretido nos últimos anos está promovendo esse movimento para uma abordagem mais disciplinada e lógica para investir no mercado de ações. O investidor médio percebe que ele ou ela atualmente permite que muitos aspectos de suas vidas e a vida de seus entes queridos sejam mantidos ou controlados por computadores, como os automóveis e as aeronaves que usamos para o transporte, o equipamento de diagnóstico médico que usamos para a manutenção da saúde, os controladores de aquecimento e refrigeração que usamos para controle de temperatura, as redes que usamos para informações baseadas na internet, até mesmo os jogos que jogamos para entretenimento. Por que, então, alguns investidores de varejo acreditam que podem "disparar do quadril" em suas decisões sobre "o que" estoque ou fundo mútuo para comprar ou vender e esperar ganhar dinheiro? Finalmente, o investidor médio ficou cauteloso com os conselhos e informações encaminhados por corretores, contadores, diretores corporativos e consultores financeiros sem escrúpulos.
Nos últimos 20 anos, matemáticos e desenvolvedores de software pesquisaram indicadores e padrões em mercados de ações e commodities buscando informações que possam apontar para a direção do mercado. Essas informações podem ser usadas para melhorar o desempenho dos Sistemas de Negociação. Geralmente, este processo de descoberta é realizado através de uma combinação de testes e erros e mais sofisticados "Mineração de Dados". Normalmente, o desenvolvedor levará semanas ou meses de crunching de números para produzir um potencial Sistema de Negociação. Muitas vezes, este sistema de negociação não funcionará bem quando usado no futuro devido ao que é chamado de "ajuste de curva". Ao longo dos anos, tem havido muitos sistemas de negociação (e empresas de desenvolvimento de sistemas de negociação) que vieram e foram, já que seus sistemas falharam na negociação ao vivo. O desenvolvimento de sistemas de negociação que continuam a atuar no futuro é difícil, mas não é impossível de realizar, embora nenhum desenvolvedor ético ou gerente de dinheiro dê uma garantia incondicional de que qualquer Sistema de Negociação ou, por isso, qualquer ação, vínculo ou fundo mútuo, continuará para produzir lucros no futuro para sempre.
O que demorou semanas ou meses para que o desenvolvedor do Trading System produza no passado pode agora ser produzido em minutos através do uso do Trading System Lab. O Trading System Lab é uma plataforma para a geração automática de sistemas de negociação e indicadores de negociação. A TSL faz uso de um mecanismo de programação genética de alta velocidade e produzirá sistemas de negociação a uma taxa de mais de 16 milhões de barras de sistema por segundo com base em 56 entradas. Note-se que apenas alguns insumos serão realmente usados ​​ou necessários, resultando em estruturas de estratégia geralmente simples evoluídas. Com aproximadamente 40.000 a 200.000 sistemas necessários para uma convergência, o tempo de convergência para qualquer conjunto de dados pode ser aproximado. Note-se que não estamos simplesmente executando uma otimização de força bruta de indicadores existentes que procuram parâmetros ótimos a partir dos quais usar em um Sistema de Negociação já estruturado. O Gerador do Sistema de Negociação começa em uma origem de ponto zero, não fazendo suposições sobre o movimento do mercado no futuro e então "evolui" Sistemas de Negociação a uma taxa muito alta combinando informações presentes no mercado e formulando novos filtros, funções, condições e relacionamentos à medida que progride para um sistema de negociação "geneticamente modificado". O resultado é que um excelente sistema de negociação pode ser gerado em poucos minutos em 20-30 anos de dados de mercado diários em praticamente qualquer mercado.
Ao longo dos últimos anos, houve várias abordagens para a otimização do Sistema de Negociação que empregam o Algoritmo Genético menos poderoso. Os Programas Genéticos (GP's) são superiores aos Algoritmos Genéticos (GA's) por vários motivos. Primeiro, os GPs convergem em uma solução a uma taxa exponencial (muito rápido e ficando mais rápido), enquanto os Algoritmos Genéticos convergem em uma taxa linear (muito mais lenta e não está ficando mais rápida). Em segundo lugar, os GPs realmente geram o código da máquina do Sistema de Negociação que combinava o material genético (indicadores, padrões, dados inter-mercado) de maneiras únicas. Essas combinações únicas podem não ser intuitivamente óbvias e não requerem definições iniciais pelo desenvolvedor do sistema. As relações matemáticas únicas criadas podem se tornar novos indicadores ou variantes na Análise Técnica, ainda não desenvolvidas ou descobertas. GA, por outro lado, simplesmente procure soluções ótimas à medida que progridem no intervalo de parâmetros; eles não descobrem novas relações matemáticas e não escrevem seu próprio código de Sistema de Negociação. O código do sistema comercial do GP de vários comprimentos, usando genomas de comprimento variável, modificará o comprimento do Sistema de Negociação através do chamado cruzamento não homólogo e descartará completamente um indicador ou padrão que não contribua para a eficiência do Sistema de Negociação. O uso de GA apenas blocos de instruções de tamanho fixo, fazendo uso de apenas cruzamentos homólogos e não produzem código de código de troca de comprimento variável, nem descartarão um indicador ou padrão ineficiente tão prontamente como um GP. Finalmente, os Programas Genéticos são um avanço recente no domínio da aprendizagem por máquinas, enquanto os Algoritmos Genéticos foram descobertos há 30 anos. Os Programas Genéticos incluem todas as principais funcionalidades dos Algoritmos Genéticos; crossover, reprodução, mutação e fitness, no entanto GPs incluem características muito mais rápidas e robustas, tornando a GP a melhor opção para produzir Trading Systems. O GP empregado no Trading System Generator da TSL é o GP mais rápido atualmente disponível e não está disponível em nenhum outro software de mercado financeiro no mundo.
O Algoritmo de Programação Genética, o Simulador de Negociação e os Motores Fitness utilizados na TSL levaram 8 anos para produzir.
O Trading System Lab é o resultado de anos de trabalho árduo de uma equipe de engenheiros, cientistas, programadores e comerciantes, e acreditamos que representa a tecnologia mais avançada disponível hoje para comercializar os mercados.

sistema de comércio de programação genética
Se você ainda procura uma vantagem nos mercados, os sistemas de negociação automatizada são a melhor maneira de obtê-lo. Saber mais.
Copyright (c) 2018 Adaptrade Software. Todos os direitos reservados.
OS RESULTADOS DE DESEMPENHO HIPOTÉTICOS OU SIMULADOS TÊM CERTAS LIMITAÇÕES INERENTES. DESEJO UM REGISTRO DE DESEMPENHO REAL, OS RESULTADOS SIMULADOS NÃO REPRESENTAM A NEGOCIAÇÃO REAL. TAMBÉM, DESDE QUE OS NEGÓCIOS NÃO SEJAM REALMENTE EXECUTOS, OS RESULTADOS PODEM TENER SOB OU COMENTÁRIOS COMPLEMENTARES PARA O IMPACTO, SE HAVER, DE CERTOS FATORES DE MERCADO, TAL COMO FALTA DE LIQUIDEZ. PROGRAMAS DE NEGOCIAÇÃO SIMULADOS EM GERAL SÃO TAMBÉM SUJEITOS AO FATO QUE ESTÃO DESIGNADOS COM O BENEFÍCIO DE HINDSIGHT. NENHUMA REPRESENTAÇÃO ESTÁ FAZENDO QUE QUALQUER CONTA VÁ OU SEJA PROBABILITÁVEL PARA ALCANÇAR LUCROS OU PERDAS SIMILARES ÀOS MOSTRADOS.
EasyLanguage e TradeStation são marcas registradas da TradeStation Technologies, Inc.
Uma das maiores tendências no comércio varejista na última década foi o aumento da popularidade do comércio automatizado. Neste tipo de negociação, também conhecida como execução automatizada de ordens, os sinais de compra e venda gerados por um sistema de negociação são executados automaticamente por uma plataforma conectada à conta corretora do comerciante. Isso permite o comércio livre de mãos, o que permite uma execução mais rápida, menos erros e a capacidade de trocar prazos mais curtos com estratégias de maior freqüência.
O algoritmo básico para a construção de sistemas de negociação usando a geração automática de código é mostrado abaixo na Fig. 1. Começa com um método para combinar diferentes elementos da estratégia de negociação. Esses elementos podem incluir vários indicadores técnicos, como médias móveis, estocásticos e assim por diante; diferentes tipos de pedidos de entrada e saída; e condições lógicas para entrar e sair do mercado.
Figura 1. Algoritmo básico para construção de estratégia automatizada.
Depois que os diferentes elementos são combinados em uma estratégia coerente, ele pode ser avaliado no mercado ou mercados de interesse. Isso requer dados de mercado - preços, volume, interesse aberto, etc. - para cada mercado. De um modo geral, você também teria um conjunto de objetivos de construção para ajudar a classificar ou marcar cada estratégia. Exemplos de objetivos de construção incluem várias medidas de desempenho, como o lucro líquido, redução, porcentagem de vencedores, fator de lucro e assim por diante. Estes podem ser declarados como requisitos mínimos, como um fator de lucro de pelo menos 2.0 ou como objetivos para maximizar, como maximizar o lucro líquido.
Base teórica da geração automática de código.
Conforme descrito acima, construir um sistema comercial usando a geração automática de código é essencialmente um problema de otimização. A combinação de elementos estratégicos que maximizam os objetivos de construção é tomada como a estratégia final. Alguns comerciantes argumentariam que os sistemas comerciais deveriam ser construídos com base em uma hipótese de comportamento ou ação do mercado. Se você tem uma boa hipótese de como os mercados funcionam, uma estratégia pode ser construída em torno dessa hipótese e testada. Se isso funciona, ele apóia a hipótese e justifica a negociação da estratégia.
Gerador de código de sistema padrão para TradeStation.
Esta seção descreve uma abordagem ad hoc para a geração automática de código em que um sistema comercial para a TradeStation gera automaticamente outros sistemas de negociação baseados em padrões para a TradeStation. O sistema AutoSystemGen procura um conjunto de regras de negociação, juntamente com os valores de parâmetros associados, que atendem a um conjunto específico de requisitos de desempenho.
Embora quase qualquer tipo de indicador ou lógica de negociação possa ser incluído no gerador do sistema comercial descrito aqui, para manter as coisas bastante simples, as regras dos sistemas gerados serão restritas aos padrões de preços. Cada regra de entrada de um sistema de negociação gerado terá a seguinte forma:
A chave para este processo é encontrar sistemas de negociação de candidatos. Um sistema pode consistir de uma e dez regras do formulário mostrado acima. As negociações são introduzidas no mercado se todas as regras forem verdadeiras, e os negócios são encerrados um certo número de barras mais tarde. Se isso fosse codificado como um sistema TradeStation tradicional, com um máximo de 10 regras, haveria 52 entradas. Isso faria para uma estratégia pesada.
O código para o sistema AutoSystemGen e suas funções relacionadas está disponível no Breakout Futures (breakoutfutures /) na página Free Downloads.
Por exemplo, considere o mercado de futuros de títulos de tesouraria de 30 anos (símbolo @ US. P na TradeStation 8). O AutoSystemGen foi otimizado nos últimos 20 anos de preços de T-bond com a entrada OptStep aumentada de 1 para 10000. Isso significa que o sistema avaliou 10.000 sistemas de negociação diferentes. A otimização foi executada duas vezes, uma vez por trades longos e uma vez para negociações curtas. Foram utilizados os seguintes requisitos de desempenho: lucro líquido de pelo menos US $ 30.000, o pior caso de desconto no máximo de US $ 7500, pelo menos 200 negócios, porcentagem rentável de pelo menos 50% e fator de lucro de pelo menos 1,2. Em um computador dual core com o Vista, levou aproximadamente 10 minutos para executar cada otimização (10.000 sistemas por otimização).
Sistema 2332, @ US. P, 17/9/2007 12:23:00, Long Trades.
Lucro líquido = 53562.50, DD máximo = -7381.25, Num Trades = 250, Percentual de vitórias = 56.80, Prof factor = 1.631.
Var: EntNext (falso);
EntNext = Open [2] & gt; = Low [16] e.
Fechar [14] & lt; = Low [6] and.
Se EntNext então.
Compre o próximo bar no mercado;
Se BarsSinceEntry = 2 então.
Venda o próximo bar no mercado;
Sistema 5771, @ US. P, 17/9/2007 12:27:00, Long Trades.
Lucro líquido = 42145,00, DD máximo = -5733.75, Num Trades = 207, Percentagem de vitórias = 57,00, factor Prof = 1,631.
Var: EntNext (falso);
EntNext = High [7] & gt; = Low [19] e.
Fechar [20] & gt; = Fechar [5] e.
High [18] & gt; = Low [2] and.
Se EntNext então.
Compre o próximo bar no mercado;
Se BarsSinceEntry = 2 então.
Venda o próximo bar no mercado;
Sistema 7622, ​​@ US. P, 17/9/2007 12:29:00, Long Trades.
Lucro líquido = 59348.75, Max DD = -7222.50, Num Trades = 208, Percentual de vitórias = 60.58, Fator Prof. = 1.924.
Var: EntNext (falso);
EntNext = Low [2] & lt; = High [9] and.
Abra [11] & gt; = Abrir [18] e.
Se EntNext então.
Compre o próximo bar no mercado;
Se BarsSinceEntry = 3 então.
Venda o próximo bar no mercado;
Sistema 7718, @ US. P, 9/17/2007 12:29:00, Long Trades.
Lucro líquido = 35526.25, DD máximo = -6936.25, Num Trades = 292, Percentual de vitórias = 56.85, factor Prof = 1.418.
Var: EntNext (falso);
EntNext = Fechar [3] & gt; = High [19] and.
High [6] & lt; = Open [10] e.
Se EntNext então.
Compre o próximo bar no mercado;
Se BarsSinceEntry = 1 então.
Venda o próximo bar no mercado;
Sistema 6160, @ US. P, 9/17/2007 12:42:00, Short Trades.
Lucro líquido = 31277,50, DD máximo = -6846,25, Num Trades = 369, Percentual de vitórias = 51,76, Fator Prof. = 1,297.
Var: EntNext (falso);
EntNext = High [9] & gt; = Low [6] and.
Fechar [15] & gt; = Alto [8] e.
High [7] & lt; = Low [20] e.
Se EntNext então.
Venda curta barra seguinte no mercado;
Se BarsSinceEntry = 1 então.
Compre para cobrir a próxima barra no mercado;
A listagem para cada sistema inclui o número do sistema (correspondente à entrada OptStep), o símbolo do mercado, a data atual e se o sistema é apenas longo ou curto. A próxima linha contém algumas estatísticas de desempenho resumidas para ajudar na avaliação de cada sistema. Finalmente, o código do sistema é mostrado. Para avaliar os sistemas na TradeStation, o código entre as duas linhas de comentários () pode ser copiado e colado em uma estratégia no TradeStation e, em seguida, executado na janela do gráfico.
O último sistema no arquivo de saída é para um sistema de apenas curto-som (# 6160). Quando guardado na TradeStation como uma estratégia e aplicado ao mesmo gráfico de T-bond, a seguinte curva de equidade foi produzida:
Figura 3. Sistema de apenas curto prazo para títulos T, nos últimos 20 anos, com US $ 15 por negócio deduzido para custos de negociação, gerado pelo sistema AutoSystemGen.
Programação genética para geração automática de código.
A abordagem ad hoc descrita na seção anterior é simples, mas tem duas limitações: (1) as estratégias geradas aleatoriamente não convergem para os objetivos de construção e (2) o modelo do sistema de padrões é difícil de generalizar para estratégias mais complexas . Isso sugere que uma abordagem mais sofisticada seja necessária.
Um método para a geração automática de código que aborda essas duas preocupações é chamado de programação genética (GP), 1 que pertence a uma classe de técnicas chamadas algoritmos evolutivos. Algoritmos evolutivos e GP em particular foram desenvolvidos por pesquisadores em inteligência artificial baseados nos conceitos biológicos de reprodução e evolução. Um algoritmo GP "evolui" uma população de estratégias de negociação de uma população inicial de membros gerados aleatoriamente. Os membros da população competem uns contra os outros com base na sua "aptidão". Os membros do ajuste são selecionados como "pais" para produzir um novo membro da população, que substitui um membro mais fraco (menos adequado).
Reduz a necessidade de conhecimento de indicadores técnicos e design de estratégias. O algoritmo GP seleciona as regras de negociação individuais, indicadores e outros elementos da estratégia para você.
O processo de construção da regra permite uma complexidade considerável, incluindo regras comerciais não-lineares.
O processo GP elimina os elementos mais laboriosos e tediosos do processo de desenvolvimento da estratégia tradicional; ou seja, surgir uma nova idéia comercial, programá-la, verificar o código, testar a estratégia, modificar o código e repetir. Isso é feito automaticamente no GP.
O processo de GP é imparcial. Considerando que a maioria dos comerciantes desenvolveu vieses para ou contra indicadores específicos e / ou lógica de negociação, o GP é guiado apenas pelo que funciona.
Ao incorporar uma semântica de regras de negociação adequada, o processo de GP pode ser projetado para produzir regras de negociação logicamente corretas e código sem erros.
O processo GP geralmente produz resultados que não são únicos, mas não óbvios. Em muitos casos, essas gemas escondidas seriam quase impossíveis de encontrar de outra maneira.
Ao automatizar o processo de compilação, o tempo necessário para desenvolver uma estratégia viável pode ser reduzido de semanas ou meses a uma questão de minutos em alguns casos, dependendo do comprimento do arquivo de dados de preço de entrada e outras configurações de compilação.
A programação genética tem sido usada com sucesso em diversos campos, incluindo processamento de sinal e imagem, controle de processo, bioinformática, modelagem de dados, geração de código de programação, jogos de computador e modelagem econômica; veja, por exemplo, Poli et al. 2 Uma visão geral do uso de GP em finanças é fornecida por Chen. 3 Colin 4 foi um dos primeiros a explicar como usar o GP para otimizar combinações de regras para uma estratégia de negociação.
J. Koza. Programação genética. O MIT Press, Cambridge, MA. 1992.
R. Poli, W. B. Langdon e N. F. McPhee. Um guia de campo para programação genética. Publicado via lulu e disponível gratuitamente em gp-field-guide. uk, 2008. (Com contribuições de J. R. Koza).
Shu-Heng Chen (Editor). Algoritmos genéticos e programação genética em finanças computacionais. Kluwer Academic Publishers, Norwell, MA. 2002.
A. Colin. Algoritmos genéticos para modelagem financeira, Trading on the Edge. 1994, páginas 165-168. John Wiley & amp; Sons, Inc. Nova York.
Risto Karjalainen. Evolução das regras de negociação técnica para futuros S & amp; P 500, Regras de Negociação Avançadas, 2002, Páginas 345-366. Elsevier Science, Oxford, Reino Unido.
Jean-Yves Potvin, Patrick Soriano, Maxime Vallee. Gerando regras de negociação nos mercados de ações com programação genética. Computadores e Pesquisa de operações, Volume 31, edição 7, junho de 2004, páginas 1033-1047.
Massimiliano Kaucic. Investimento utilizando métodos evolutivos de aprendizagem e regras técnicas. European Journal of Operational Research, volume 207, edição 3, 16 de dezembro de 2018, páginas 1717-1727.
Algoritmo de construção usando programação genética.
Expandindo o algoritmo de compilação apresentado anteriormente (ver Fig. 1), um algoritmo mais detalhado é ilustrado abaixo na Fig. 4 com base na programação genética. As caixas sombreadas de cinza representam os dados de entrada, que incluem os dados de preços para o (s) mercado (s) de interesse, indicadores e tipos de pedidos no chamado conjunto de compilação e as opções e critérios de desempenho (objetivos de construção) selecionados pelo do utilizador.
Figura 4. Algoritmo de compilação para geração automática de código com programação genética.
O processo GP pode ser usado para desenvolver simultaneamente dois elementos de estratégia essenciais: condições de entrada e pedidos de entrada e saída. As condições de entrada são tipicamente representadas como estruturas de árvores, como mostrado abaixo na Fig. 5.
A chave para a evolução das ordens de entrada e saída usando programação genética é representar os diferentes tipos de pedidos de forma generalizada. Por exemplo, parar e limitar os preços de entrada podem ser representados da seguinte forma:
Embora a programação genética seja capaz de gerar estratégias de negociação com uma variedade considerável, é necessário começar com uma estrutura generalizada para as estratégias a serem seguidas. A estrutura de estratégia mostrada abaixo em pseudo-código fornece uma estrutura para estratégias de construção com base em condições de entrada e tipos de pedidos como os discutidos acima:
Entradas: N1, N2, N3, ...
Se a posição for plana e LongEntryCondition for verdade, então.
Ordem de entrada longa ...
Inicialize as ordens de saída longas, conforme necessário ...
Se a posição for plana e ShortEntryCondition for verdade, então.
Ordem de entrada curta ...
Inicialize ordens de saída curtas, conforme necessário ...
Se a posição é longa então.
Ordem de saída longa 1 ...
Ordem de saída longa 2 ...
Se a posição for curta, então.
Ordem de saída curta 1 ...
Ordem de saída curta 2 ...
[Saída opcional de fim de dia]
As estratégias começam com a lista de insumos. É fornecida uma entrada para qualquer parâmetro do indicador, comprimento do look-back do padrão de preços e quaisquer parâmetros exigidos pelas ordens de entrada e saída, como o comprimento de look-back para o ATR.
Para ilustrar o uso de programação genética para a geração automática de código na construção de estratégias, o programa Adaptrade Builder foi administrado em barras diárias de um mercado de futuros de índices de ações para uma pequena população e um número limitado de gerações. As métricas de desempenho escolhidas para orientar o processo foram o lucro líquido, o número de trades, o coeficiente de correlação, a significância estatística e a relação retorno / redução. Alvos específicos foram definidos para o número de negociações e a relação retorno / retirada. As outras métricas selecionadas foram maximizadas. A função de fitness foi uma média ponderada de termos para cada métrica.
Figura 6. Percentagem de membros da população com lucro líquido fora da amostra superior a US $ 1.000.
Da mesma forma, o lucro líquido médio da OOS aumentou após cinco e dez gerações, como mostrado na Figura 7. Observe que esses resultados são para o lucro líquido da OOS. Por definição, os dados fora da amostra não são usados ​​na compilação, então os resultados da OOS são imparciais; eles não se beneficiam de retrospectiva. Isso implica que o processo GP não só tende a melhorar os resultados na amostra em sucessivas gerações, o que é um efeito direto do algoritmo GP, mas os resultados da OOS também tendem a melhorar à medida que as estratégias são desenvolvidas. Isso indica uma compilação de alta qualidade.
Código de Estratégia EasyLanguage para a TradeStation.
Membro da população: 46.
Criado por: Adaptrade Builder versão 1.1.0.0.
Criado: 19/10/2018 2:19:52 PM.
Código do TradeStation para TS 6 ou posterior.
Arquivo de preço: C: \ TestData. txt.
Var: EntCondL (falso),
EntCondL = (Maior (Volume, NL1) & gt; = Menor (Volume, NL2)) ou (Volume & lt; Média (Volume, NL3));
Se MarketPosition = 0 e EntCondL, em seguida, comece.
Compre a próxima barra na XAverage (L, NBarEnL1) + EntFrL * ATREnL parar;
Se MarketPosition = 0 e EntCondS, em seguida, comece.
Vender curto barra seguinte no Mais alto (H, NBarEnS1) - EntFrS * AbsValue (Menor (L, NBarEnS2) - Menor (H, NBarEnS3)) parar;
SStop = Power (10, 10);
Se MarketPosition & gt; 0 então comece.
Se BarsSinceEntry & gt; = NBarExL então.
Venda o próximo bar no mercado;
Venda o próximo bar no EntryPrice + TargFrL * ATRTargL limite;
Se MarketPosition & lt; 0 então comece.
Se EntryPrice - C & gt; ATRFrTrailS * ATRTrailS então.
Se STrailOn então começar.
NewSStop = EntryPrice - TrailPctS * (EntryPrice - C) / 100 .;
SStop = MinList (SStop, NewSStop);
Se BarsSinceEntry & gt; = NBarExS então.
Compre para cobrir a próxima barra no mercado;
Se STrailOn então.
Compre para cobrir a próxima barra na parada SStop;
Construir sistemas de negociação através da geração automática de código é um tipo de otimização. A maioria dos comerciantes sistemáticos provavelmente está familiarizado com a otimização de parâmetros, em que as entradas para uma estratégia são otimizadas. Ao contrário da otimização de parâmetros, a geração automática de código otimiza a lógica de negociação da estratégia. No entanto, o risco de sobre-otimização, ou "excesso de ajuste", também é uma preocupação para a geração automática de código, assim como é para a otimização de parâmetros.
Para obter informações sobre software para estratégias de negociação de construção usando programação genética, clique aqui.
Se você quiser ser informado de novos desenvolvimentos, novidades e ofertas especiais do Adaptrade Software, por favor, junte-se à nossa lista de e-mail. Obrigado.
Copyright © 2004-2018 Adaptrade Software. Todos os direitos reservados.

Desenvolvendo estratégias de negociação de alto desempenho com programação genética.
Um dos aspectos frustrantes da pesquisa e do desenvolvimento de sistemas de negociação é que nunca há tempo suficiente para investigar todas as idéias comerciais interessantes que alguém gostaria de explorar. No início da década de 1970, quando um sistema de cruzamento médio móvel era considerado estado da arte, era relativamente fácil desenvolver estratégias lucrativas usando indicadores técnicos simples. Na verdade, a pesquisa mostrou que a rentabilidade das regras de negociação simples persistiu em mercados cambiais e outros mercados por um período de décadas. Mas, coincidentes com o advento do PC no final da década de 1980, tais estratégias simples começaram a falhar. A ampla disponibilidade de dados, ferramentas analíticas e poder de computação contribuiu, sem dúvida, para o aumento da eficiência dos mercados financeiros e complicou a busca de idéias comerciais lucrativas. Estamos agora em um estágio em que é possível levar uma equipe de 5-6 pesquisadores / desenvolvedores, usando técnicas avançadas de pesquisa e tecnologias de computação, desde 12 a 18 meses e centenas de milhares de dólares, para desenvolver uma estratégia de protótipo. E não há garantia de que o resultado final produza os retornos de investimento necessários.
Os prazos de alongamento e o aumento do custo e risco de pesquisa estratégica obrigaram as empresas comerciais a explorar possibilidades de aceleração do processo R & D. Uma dessas abordagens é a Programação Genética.
Experiências iniciais com programação genética.
Cheguei a abordar a abordagem do GP na estratégia de investimento no final da década de 1990, quando comecei a trabalhar com Haftan Eckholdt, então chefe de neurociência na Yeshiva University, em Nova York. Haftan propôs a criação de estratégias comerciais aplicando o tipo de técnicas amplamente utilizadas para analisar conjuntos de dados volumosos e altamente complexos na pesquisa genética. Fiquei extremamente céptico com a idéia e passei os 18 meses seguintes, chutando os pneus muito, de fato, em nome de um investidor interessado. Embora os resultados de Haftan pareciam promissores, eu estava bastante certo de que eles eram o produto de uma chance aleatória e começaram a elaborar testes que demonstrariam isso.
Um dos desafios que desenvolvi foi criar conjuntos de dados em que séries de ações reais e sintéticas foram misturadas e administradas ao sistema avaliado. Para o olho humano (ou planilha do analista), as séries sintéticas eram indistinguíveis do real. Mas, de fato, eu tinha "plantado" alguns padrões dentro dos processos das ações sintéticas que os faziam funcionar de forma diferente dos seus homólogos da vida real. Alguns dos padrões que criei foram bastante simples, como a introdução de um componente de deriva. Mas outros padrões foram mais matizados, por exemplo, usando um gerador de movimento Brownian fractal para induzir longa memória no processo de volatilidade do estoque.
Foi quando eu vi o sistema detectar e explorar os padrões enterrados profundamente dentro da série sintética para criar estratégias sensíveis e lucrativas que eu comecei a prestar atenção. Pouco tempo depois, Haftan e eu unimos forças para criar o que se tornou o Proteom Fund.
Que o Proteom conseguiu ser um testemunho não só da habilidade de Haftan como pesquisador, mas também de suas habilidades como programador e técnico. O processamento de tão grandes volumes de dados foi um tremendo desafio naquela época e exigiu um cluster de 50 cpu em rede e mantido com uma quantidade razoável de patch cable e cola. Nós abrigamos o cluster em um armazém infestado de ratos no Brooklyn que tinha uma visão muito agradável de Manhattan, mas não a / c. O calor tirado do cluster foi imenso, e quando combinado com música de rap muito alta explodiu pelas paredes pelos estúdios de música vizinhos, o efeito era debilitante. Como você pode imaginar, reuniões com investidores foram uma experiência altamente imprevisível. Felizmente, o intelecto de Haftan foi acompanhado por suas imensas reservas de força e paciência e fomos capazes de atrair investimentos de vários investidores institucionais líderes.
A abordagem de programação genética para a construção de modelos comerciais.
A programação genética é uma metodologia algorítmica baseada em evolução que pode ser usada de maneira muito geral para identificar padrões ou regras dentro das estruturas de dados. The GP system is given a set of instructions (typically simple operators like addition and subtraction), some data observations and a fitness function to assess how well the system is able to combine the functions and data to achieve a specified goal.
In the trading strategy context the data observations might include not only price data, but also price volatility, moving averages and a variety of other technical indicators. The fitness function could be something as simple as net profit, but might represent alternative measures of profitability or risk, with factors such as PL per trade, win rate, or maximum drawdown. In order to reduce the danger of over-fitting, it is customary to limit the types of functions that the system can use to simple operators (+,-,/,*), exponents, and trig functions. The length of the program might also be constrained in terms of the maximum permitted lines of code.
We can represent what is going on using a tree graph:
In this example the GP system is combining several simple operators with the Sin and Cos trig functions to create a signal comprising an expression in two variables, X and Y, which may be, for example, stock prices, moving averages, or technical indicators of momentum or mean reversion.
The “evolutionary” aspect of the GP process derives from the idea that an existing signal or model can be mutated by replacing nodes in a branch of a tree, or even an entire branch by another. System performance is re-evaluated using the fitness function and the most profitable mutations are retained for further generation.
The resulting models are often highly non-linear and can be very general in form.
The last fifteen years has seen tremendous advances in the field of genetic programming, in terms of the theory as well as practice. Using a single hyper-threaded CPU, it is now possible for a GP system to generate signals at a far faster rate than was possible on Proteom’s cluster of 50 networked CPUs. A researcher can develop and evaluate tens of millions of possible trading algorithms with the space of a few hours. Implementing a thoroughly researched and tested strategy is now feasible in a matter of weeks. There can be no doubt of GP’s potential to produce dramatic reductions in R&D lead times and costs. But does it work?
To address that question I have summarized below the performance results from a GP-developed daytrading system that trades nine different futures markets: Crude Oil (CL), Euro (EC), E-Mini (ES), Gold (GC), Heating Oil (HO), Coffee (KC), Natural gas (NG), Ten Year Notes (TY) and Bonds (US). The system trades a single contract in each market individually, going long and short several times a day. Only the most liquid period in each market is traded, which typically coincides with the open-outcry session, with any open positions being exited at the end of the session using market orders. With the exception of the NG and HO markets, which are entered using stop orders, all of the markets are entered and exited using standard limit orders, at prices determined by the system.
The system was constructed using 15-minute bar data from Jan 2006 to Dec 2018 and tested out-of-sample of data from Jan 2018 to May 2018. The in-sample span of data was chosen to cover periods of extreme market stress, as well as less volatile market conditions. A lengthy out-of-sample period, almost half the span of the in-sample period, was chosen in order to evaluate the robustness of the system.
Out-of-sample testing was “double-blind”, meaning that the data was not used in the construction of the models, nor was out-of-sample performance evaluated by the system before any model was selected.
Performance results are net of trading commissions of $6 per round turn and, in the case of HO and NG, additional slippage of 2 ticks per round turn.
(click on the table for a higher definition view)
The most striking feature of the strategy is the high rate of risk-adjusted returns, as measured by the Sharpe ratio, which exceeds 5 in both in-sample and out-of-sample periods. This consistency is a reflection of the fact that, while net returns fall from an annual average of over 29% in sample to around 20% in the period from 2018, so, too, does the strategy volatility decline from 5.35% to 3.86% in the respective periods. The reduction in risk in the out-of-sample period is also reflected in lower Value-at-Risk and Drawdown levels.
A decline in the average PL per trade from $25 to $16 in offset to some degree by a slight increase in the rate of trading, from 42 to 44 trades per day, on average, while daily win rate and percentage profitable trades remain consistent at around 65% and 56%, respectively.
Overall, the system appears to be not only highly profitable, but also extremely robust. This is impressive, given that the models were not updated with data after 2018, remaining static over a period almost half as long as the span of data used in their construction. It is reasonable to expect that out-of-sample performance might be improved by allowing the models to be updated with more recent data.
Benefits and Risks of the GP Approach to Trading System Development.
The potential benefits of the GP approach to trading system development include speed of development, flexibility of design, generality of application across markets and rapid testing and deployment.
What about the downside? The most obvious concern is the risk of over-fitting. By allowing the system to develop and test millions of models, there is a distinct risk that the resulting systems may be too closely conditioned on the in-sample data, and will fail to maintain performance when faced with new market conditions. That is why, of course, we retain a substantial span of out-of-sample data, in order to evaluate the robustness of the trading system. Even so, given the enormous number of models evaluated, there remains a significant risk of over-fitting.
Another drawback is that, due to the nature of the modelling process, it can be very difficult to understand, or explain to potential investors, the “market hypothesis” underpinning any specific model. “We tested it and it works” is not a particularly enlightening explanation for investors, who are accustomed to being presented with a more articulate theoretical framework, or investment thesis. Not being able to explain precisely how a system makes money is troubling enough in good times; but in bad times, during an extended drawdown, investors are likely to become agitated very quickly indeed if no explanation is forthcoming. Unfortunately, evaluating the question of whether a period of poor performance is temporary, or the result of a breakdown in the model, can be a complicated process.
Finally, in comparison with other modeling techniques, GP models suffer from an inability to easily update the model parameters based on new data as it become available. Typically, as GP model will be to rebuilt from scratch, often producing very different results each time.
Despite the many limitations of the GP approach, the advantages in terms of the speed and cost of researching and developing original trading signals and strategies have become increasingly compelling.
Given the several well-documented successes of the GP approach in fields as diverse as genetics and physics, I think an appropriate position to take with respect to applications within financial market research would be one of cautious optimism.

Комментариев нет:

Отправить комментарий