Rede neural do sistema comercial


SISTEMAS DE NEGOCIAÇÃO.


Criando um Sistema de Negociação Usando Redes Neurais.


A aprendizagem de máquinas tornou-se incrivelmente popular durante a última década com o advento de melhores algoritmos e poder computacional suficiente para enfrentar até mesmo os problemas mais exigentes. Hoje, os algoritmos de aprendizagem de máquinas resolvem problemas em muitas áreas onde relacionamentos complexos entre variáveis ​​são presentes e isso torna a aprendizagem de máquinas uma ferramenta potencialmente viável para a criação de estratégias de negociação. Mas como podemos criar um sistema comercial usando esse tipo de tecnologia? Neste artigo, vamos aprender a usar um algoritmo básico de aprendizado de máquina e ndash; chamado rede neural e ndash; para criar um sistema de negociação simples no EUR / USD.


Todos os fragmentos de codificação são amostras retiradas da nossa estrutura de programação F4, disponível na Asirikuy. A biblioteca de código aberto Shark é usada para a criação e treinamento dos algoritmos de aprendizado da máquina. No entanto, as ideias gerais e as noções algorítmicas apresentadas neste artigo podem ser traduzidas para outras bibliotecas e linguagens de programação.


O que é uma Rede Neural?


Uma rede neural é um tipo de algoritmo de aprendizagem de máquinas. A rede neural clássica mais simples é composta por uma camada de entrada, uma camada oculta e uma camada de saída, onde cada camada contém um número determinado de & ldquo; neurones & rdquo ;. Cada neurônio na camada de entrada obtém um valor, processa-o usando uma função e passa para um ou vários neurônios na camada oculta com um determinado conjunto de pesos, os neurônios repitam o processo e passam os valores para um ou vários neurônios de saída . Em essência, a rede neural possui alguns valores de entrada e entrega alguns valores de saída ao processar as entradas através da sua estrutura funcional. Os neurônios não são senão unidades de processamento funcionais que passam valores multiplicados por certos pesos a outras unidades.


Fragmento de código 1. Função em C ++ que cria 84 exemplos usando 2 retornos como entradas eo retorno da barra seguinte como saída.


No entanto, uma rede neural não sabe como processar entradas desde o início, uma vez que não conhece os pesos atribuídos a cada conexão de rede neural. É por isso que precisamos de & ldquo; train & rdquo; uma rede neural usando um determinado conjunto de entradas e valores de saída, de modo que os pesos que definem as conexões entre os neurônios possam ser adequadamente definidos. Em seguida, usamos uma rede neural treinada para prever os resultados em dados desconhecidos, que é onde podemos obter um benefício ao prever alguns resultados relacionados com os dados de preços.


Redes Neurais: Previsão de Lucros.


As redes de neurônios são algoritmos de última geração, imutáveis, que imitam certos aspectos importantes no funcionamento do cérebro humano. Isso lhes dá uma capacidade única de auto-treinamento, a capacidade de formalizar informações não classificadas e, o mais importante, a capacidade de fazer previsões com base na informação histórica que eles têm à sua disposição.


As redes de neurônios têm sido usadas cada vez mais em uma variedade de aplicativos de negócios, incluindo soluções de pesquisa de previsão e marketing. Em algumas áreas, como detecção de fraude ou avaliação de riscos, são líderes indiscutíveis. Os principais campos em que as redes neurais encontraram aplicações são operações financeiras, planejamento empresarial, negociação, análise de negócios e manutenção de produtos. As redes neurais podem ser aplicadas de forma lucrativa por todos os tipos de comerciantes, por isso, se você é um comerciante e ainda não foi introduzido em redes neurais, nós o acompanharemos através deste método de análise técnica e mostraremos como aplicá-lo a seu estilo de negociação.


Use redes neurais para descobrir oportunidades.


Assim como qualquer tipo de excelente produto ou tecnologia, as redes neurais começaram a atrair todos aqueles que estão procurando por um mercado em desenvolvimento. Torrents de anúncios sobre software de próxima geração inundaram o mercado - anúncios comemorando o mais poderoso de todos os algoritmos de rede neural já criados. Mesmo nesses casos raros, quando reivindicações publicitárias se assemelham à verdade, tenha em mente que um aumento de 10% na eficiência é provavelmente o máximo que você obterá de uma rede neural. Em outras palavras, ele não produz retornos milagrosos e, independentemente de quão bem ele funciona em uma situação particular, haverá alguns conjuntos de dados e classes de tarefas para as quais os algoritmos utilizados anteriormente são superiores. Lembre-se disso: não é o algoritmo que faz o truque. Informações de entrada bem preparadas sobre o indicador segmentado são o componente mais importante do seu sucesso com as redes neurais.


A Convergência mais rápida é melhor?


Muitos daqueles que já utilizam redes neurais acreditam erroneamente que quanto mais rápido sua rede fornece resultados, melhor será. Isso, no entanto, é uma ilusão. Uma boa rede não é determinada pela taxa em que produz resultados e os usuários devem aprender a encontrar o melhor equilíbrio entre a velocidade na qual a rede treina e a qualidade dos resultados que produz.


Aplicação correta de redes neurais.


Muitos comerciantes aplicam redes neurais de forma incorreta porque depositam muita confiança no software que utilizam, sem terem fornecido instruções adequadas sobre como usá-lo adequadamente. Para usar uma rede neural do jeito certo e, portanto, de forma lucrativa, um comerciante deve prestar atenção a todas as etapas do ciclo de preparação da rede. É o comerciante e não a rede dele que é responsável por inventar uma ideia, formalizando essa idéia, testando e melhorando, e, finalmente, escolhendo o momento certo para descartá-la quando não for mais útil. Consideremos os estágios deste processo crucial com mais detalhes:


1. Encontrando e Formalizando uma Idéia de Negociação.


2. Melhorando os Parâmetros do seu Modelo.


3. Eliminação do modelo quando se torna obsoleto.


Todo modelo baseado na rede neural possui uma vida útil e não pode ser usado indefinidamente. A longevidade do período de vida de um modelo depende da situação do mercado e de quanto tempo as interdependências do mercado refletem nele permanecerem atualizadas. No entanto, mais cedo ou mais tarde, qualquer modelo se torna obsoleto. Quando isso acontece, você pode redirecionar o modelo usando dados completamente novos (ou seja, substituir todos os dados que foram usados), adicionar alguns dados novos ao conjunto de dados existente e treinar o modelo novamente, ou simplesmente retirar o modelo completamente.


Muitos comerciantes cometem o erro de seguir o caminho mais simples - eles dependem fortemente e usam a abordagem para a qual seu software fornece a funcionalidade mais amigável e automatizada. Essa abordagem mais simples é prever um preço de algumas barras à frente e basear seu sistema de negociação nesta previsão. Outros comerciantes prevêem variação de preço ou porcentagem da mudança de preço. Esta abordagem raramente produz melhores resultados do que prever o preço diretamente. Ambas as abordagens simplistas não conseguem descobrir e explorar de forma lucrativa a maior parte das importantes interdependências a longo prazo e, como resultado, o modelo torna-se rapidamente obsoleto à medida que as forças motrizes globais mudam.


A Abordagem Geral Mais Ótima para o Uso de Redes Neurais.


Redes neurais para negociação algorítmica. Previsão de séries temporais simples.


ACTUALIZAÇÃO IMPORTANTE:


Esta é a primeira parte dos meus experimentos em aplicação de aprendizado profundo para financiar, em particular para negociação algorítmica.


Eu quero implementar o sistema de negociação a partir do zero com base apenas em abordagens de aprendizado profundo, então, para qualquer problema que temos aqui (previsão de preços, estratégia de negociação, gerenciamento de riscos), usaremos diferentes variações de redes neuronais artificiais (RNAs) e veremos o quanto elas podem lide com isso.


Agora eu planejo trabalhar nas próximas seções:


Previsão de séries temporais com dados brutos Previsão de séries temporais com recursos personalizados Otimização de hiperparâmetros Implementação de estratégia de negociação, backtesting e gerenciamento de riscos Estratégias de negociação mais sofisticadas, reforço de aprendizagem Indo ao vivo, corretores API, ganhando (l̶o̶s̶i̶n̶g̶) dinheiro.


Eu recomendo que você verifique o código e o IPython Notebook neste repositório.


Nesta primeira parte, quero mostrar como MLPs, CNNs e RNNs podem ser usados ​​para a previsão de séries temporais financeiras. Nesta parte, não vamos usar nenhuma engenharia de recursos. Vamos considerar o conjunto de dados históricos dos movimentos dos preços do índice S & P 500. Temos informações de 1950 a 2016 sobre preços abertos, fechados, altos e baixos para todos os dias do ano e volume de negócios. Primeiro, tentaremos apenas prever fechar o preço no final do próximo dia, em segundo lugar, tentaremos prever o retorno (preço fechado - preço aberto). Baixe o conjunto de dados do Yahoo Finance ou deste repositório.


Definição do problema.


Consideraremos o nosso problema como 1) problema de regressão (tentando prever exatamente fechar o preço ou retornar no dia seguinte) 2) problema de classificação binária (o preço aumentará [1; 0] ou abaixo [0; 1]).


Para treinar NNs, usaremos framework Keras.


Primeiro vamos preparar nossos dados para treinamento. Queremos prever o valor de t + 1 com base em informações de N dias anteriores. Por exemplo, tendo preços próximos dos últimos 30 dias no mercado, queremos prever, que preço será amanhã, no 31º dia.


Utilizamos as primeiras 90% das séries temporais como conjunto de treinamento (considere-a como dados históricos) e 10% como conjunto de testes para avaliação do modelo.


Aqui é exemplo de carregamento, dividindo em amostras de treinamento e pré-processamento de dados de entrada brutos:


Problema de regressão. MLP.


Será apenas um perceptron de 2 camadas escondidas. O número de neurônios escondidos é escolhido de forma empírica, vamos trabalhar na otimização de hiperparâmetros nas próximas seções. Entre duas camadas ocultas, adicionamos uma camada de Saída para evitar a sobreposição.


O importante é Dense (1), Activation ('linear') e 'mse' na seção de compilação. Queremos um produto que possa estar em qualquer intervalo (prevemos valor real) e nossa função de perda é definida como erro quadrático médio.


Vamos ver o que acontece se apenas passarmos pedaços de preços próximos de 20 dias e prever o preço no 21º dia. Final MSE = 46.3635263557, mas não é uma informação muito representativa. Abaixo está um gráfico de previsões para os primeiros 150 pontos do conjunto de dados de teste. A linha preta é dados reais, um azul - previsto. Podemos ver claramente que nosso algoritmo não é nem mesmo de perto, mas pode aprender a tendência.


Vamos dimensionar nossos dados usando o método de sklearn pré-processamento. Escala () para ter nossa série zero de tempo e variância unitária e treinar o mesmo MLP. Agora temos MSE = 0.0040424330518 (mas está em dados dimensionados). No gráfico abaixo, você pode ver as séries temporais reais escaladas (preto) e a nossa previsão (azul) para ela:


Para usar este modelo no mundo real, devemos retornar às séries temporais não escaladas. Podemos fazê-lo, multiplicando ou preditivo por desvio padrão de séries temporais que usamos para fazer predição (20 etapas de tempo não escalonadas) e adicione seu valor médio:


MSE neste caso é igual a 937.963649937. Aqui está o enredo de previsões restauradas (vermelho) e dados reais (verde):


Não está mal, não é? Mas vamos tentar algoritmos mais sofisticados para esse problema!


Problema de regressão. CNN.


Eu não vou mergulhar na teoria das redes neurais convolutivas, você pode verificar esses recursos incríveis:


Vamos definir a rede neural convolucional de 2 camadas (combinação de camadas de convolução e max-pooling) com uma camada totalmente conectada e a mesma saída que anteriormente:


Vamos verificar resultados. MSEs para dados escalados e restaurados são: 0.227074542433; 935.520550172. As parcelas estão abaixo:


Mesmo olhando para MSE em dados escalados, esta rede aprendeu muito pior. Provavelmente, uma arquitetura mais profunda precisa de mais dados para o treinamento, ou simplesmente é superada devido ao número muito alto de filtros ou camadas. Vamos considerar esta questão mais tarde.


Problema de regressão. RNN.


Como arquitetura recorrente, eu quero usar duas camadas LSTM empilhadas (leia mais sobre LSTM aqui).


As parcelas das previsões estão abaixo, MSEs = 0.0246238639582; 939.948636707.


A previsão da RNN se parece mais com o modelo médio móvel, não pode aprender e prever todas as flutuações.


Então, é um resultado pouco esperável, mas podemos ver que os MLPs funcionam melhor para esta previsão de séries temporais. Vamos verificar o que acontecerá se nós passarmos de regressão para problema de classificação. Agora, usaremos os preços não fechados, mas o retorno diário (fechar preço-preço aberto) e queremos prever se o preço fechado é maior ou menor do que o preço aberto com base nos últimos 20 dias de devolução.


Problema de classificação. MLP.


O código é alterado um pouco - alteramos nossa última camada Densa para ter saída [0; 1] ou [1; 0] e adicione a saída softmax para esperar resultados probabilísticos.


Para carregar saídas binárias, mude a linha seguinte do código:


Também mudamos a função de perda para cross-entopy binário e adicionamos métricas de precisão.


Oh, não é melhor do que adivinhar aleatoriamente (50% de precisão), vamos tentar algo melhor. Confira os resultados abaixo.


Problema de classificação. CNN.


Problema de classificação. RNN.


Conclusões


Podemos ver que o tratamento da previsão de séries temporárias financeiras como problema de regressão é uma abordagem melhor, pode aprender a tendência e os preços próximos do real.


O que foi surpreendente para mim, que MLPs estão tratando dados de seqüência melhor como CNNs ou RNNs que deveriam funcionar melhor com séries temporais. Explico isso com conjunto de dados bastante pequeno (


Selos de tempo de 16k) e escolha de hiperparâmetros fofos.


Você pode reproduzir resultados e melhorar usando o código do repositório.


Eu acho que podemos obter melhores resultados em regressão e classificação usando diferentes recursos (não apenas séries temporais escalonadas) como alguns indicadores técnicos, volume de vendas. Também podemos tentar dados mais freqüentes, digamos carrapatos minuto a minuto para ter mais dados de treinamento. Todas essas coisas que eu vou fazer depois, então fique atento :)


Ao bater palmas mais ou menos, você pode nos indicar quais são as histórias que realmente se destacam.


Alex Honchar.


máquinas de ensino e raphamento.


Mundo de aprendizagem de máquinas.


O melhor sobre Aprendizado de Máquinas, Visão de Computador, Aprendizagem Profunda, Processamento de linguagem natural e outros.


Pode uma rede neural trocar comercialmente os mercados?


Pode uma rede neural trocar comercialmente os mercados?


Esta é uma discussão sobre a possibilidade de uma rede neural trocar os mercados efetivamente? dentro dos fóruns de Trading Systems, parte da categoria Methods; Eu pensei que compartilharia com você um pequeno experimento que eu estou fazendo para ver se uma rede neural pode ser treinada.


Essa é a teoria de qualquer maneira. Atualmente, não tenho idéia se isso funcionará e pode demorar várias configurações de rede neural antes de eu ter alguns dados consistentes. O que será interessante é ver que tipo de abordagem comercial evolui, eu vou começar a negociar com castiçais diários e será interessante ver se ele decide comprar e segurar é o melhor ou se ele tenta trocar balanços de curto prazo .


Mantenha-se informado, mais os próximos dias ...


Fora de um cachorro, um livro é o melhor amigo de um homem,


Dentro de um cachorro, está muito escuro para ler. - G Marx.


seguirá com interesse.


"Um cavalheiro não deve ser visto antes do meio da manhã, a menos que ele volte para casa da noite anterior".


Fora de um cachorro, um livro é o melhor amigo de um homem,


Dentro de um cachorro, está muito escuro para ler. - G Marx.


Fora de um cachorro, um livro é o melhor amigo de um homem,


Dentro de um cachorro, está muito escuro para ler. - G Marx.


Fora de um cachorro, um livro é o melhor amigo de um homem,


Dentro de um cachorro, está muito escuro para ler. - G Marx.


Fora de um cachorro, um livro é o melhor amigo de um homem,


Dentro de um cachorro, está muito escuro para ler. - G Marx.


SISTEMAS DE NEGOCIAÇÃO UTILIZANDO REDES NEURAS PARA PREVISÃO DE MOVIMENTO DE PREÇOS.


Por Lou Mendelsohn.


Com esta oferta, STOCKS & amp; O colaborador da COMMODITIES Lou Mendelsohn conclui seu exame das redes neurais para previsão financeira no atual ambiente comercial globalizado de hoje. Aqui, Mendelsohn se concentra em questões de implementação e discute como as redes neurais devem ser utilizadas como parte de uma estratégia comercial global. Finalmente, ele faz uma breve olhada no futuro das tecnologias de inteligência artificial para implementar análises de mercado sinérgicas.


Nenhuma discussão sobre o projeto, treinamento e teste de redes neurais pode ser completa sem abordar o tópico de implementação. Como uma rede neural ou uma combinação de redes podem ser integradas em sistemas de informação e sistemas de negociação? Aqui está um exemplo que usa muitos dos conceitos de desenvolvimento de rede neural cobertos anteriormente: treinamento e teste, pré-processamento, seleção de fato, seleção de entrada, arquitetura e paradigmas.


Os sistemas de informação utilizam redes neurais para fornecer ao usuário informações preditivas sobre o mercado-alvo, como previsões de preços, possível direção do mercado ou pontos de virada projetados. Neste tipo de configuração do sistema, o comerciante pode usar a informação preditiva sozinha ou com outras análises disponíveis para ajustar seu estilo de negociação, propensão ao risco e capitalização. Tais sistemas podem incluir uma única rede neural ou várias redes que trabalham em concerto. Em um sistema multi-rede, cada rede pode ser projetada e treinada para prever o mercado de forma independente. Por exemplo, quatro redes separadas podem ser usadas para prever a direção de tendência de alta, baixa, curta e média prazo durante o dia seguinte, negociação do dia. Como essas quatro previsões de mercado são derivadas de forma independente, elas podem ser vistas separadamente e usadas para se confirmarem.


Além disso, com uma arquitetura mais complexa, cada uma dessas saídas de rede pode ser usada como entrada para outra rede, que pode ser usada para fazer outras previsões, como a previsão de pontos de viragem no mercado. A arquitetura de rede, como mostrado na Figura 1, é referida como uma rede neural de hierarquia. Ao encapsular a funcionalidade em cada rede, uma grande rede não precisa fazer todo o trabalho: neste projeto, as previsões derivadas de redes em um nível da hierarquia são incorporadas como entradas em uma rede ou redes em outro nível. Esse tipo de arquitetura se presta a treinamento mais rápido, já que cada rede concentra seu aprendizado, exclusivamente em sua própria produção.


As redes de neurônios também podem ser incorporadas em sistemas de comércio formais de várias maneiras. Em primeiro lugar, uma rede pode ser treinada para gerar sinais de compra, venda e stand-aside. Esta configuração é atraente, mas surgem problemas na sua implementação. Este tipo de sistema requer o comerciante que vai usá-lo para desempenhar um papel integral no seu desenvolvimento. Isso é necessário porque a rede gerará seus sinais comerciais na aplicação final com base nos pontos de compra / venda identificados pelo desenvolvedor no treinamento da rede, além da escolha de dados de entrada selecionados e pré-processamento realizados durante o desenvolvimento.


Para um mercado específico durante um determinado período, vários comerciantes, sejam eles especuladores individuais ou gerentes de fundos institucionais, podem ter estratégias de negociação completamente diferentes e, portanto, não identificaram os mesmos pontos de compra / venda durante o desenvolvimento da rede. Assim, se um comerciante com fundos limitados e apenas uma habilidade limitada para tolerar o levantamento fosse projetar e treinar esse tipo de rede neural, provavelmente não geraria sinais que fossem apropriados para outro comerciante com maior capitalização ou maior tolerância ao risco. Além disso, pode ser difícil incorporar considerações de gerenciamento de risco em um sistema de negociação baseado na rede neural.


Outra configuração possível usaria uma rede neural como parte de um sistema de comércio híbrido. A rede neural funcionaria unicamente como um sistema de informação que geraria informações preditivas usadas com um conjunto de regras gerando os sinais comerciais. Esta abordagem pode envolver a formulação de regras matemáticas relativamente simples ou o desenvolvimento de um sistema experiente completo. Em ambos os casos, as regras seriam elaboradas para corresponder ao estilo de negociação e aos objetivos do negociador que, em última análise, confiaria no sistema durante a negociação real.


O desenvolvimento da rede neural, conforme apresentado aqui, envolve decisões arquiteturais, seleção de entradas, pré-processamento, seleção de fatos, treinamento, teste e implementação. Examinamos cada fase do desenvolvimento da rede neural no contexto da globalização dos mercados financeiros mundiais e a necessidade de uma estrutura sinérgica, combinando a análise de dados técnicos, fundamentais e intermercados para capturar a sinergia do mercado, nos mercados financeiros. hoje. Embora uma discussão aprofundada sobre o desenvolvimento de uma informação ou sistema comercial real baseado na rede neural esteja além do nosso alcance, o seguinte é um exemplo para ajudar a ilustrar esses pontos.


Para cada um dos quatro mercados-alvo (iene, títulos do Tesouro, Eurodollar e o índice Standard & amp; 500), dois conjuntos de redes neurais foram desenvolvidos para prever mudanças na alta de um dia de negociação para o seguinte. O primeiro conjunto de entradas de rede foi derivado de dados técnicos do mercado que consistem em preço, volume e informações de interesse aberto internas para o mercado-alvo. O segundo conjunto de redes utilizou as mesmas entradas do primeiro conjunto, além de sete entradas externas de intermercado. Como os mesmos passos e decisões listados abaixo foram aplicados a todos os quatro mercados-alvo, discutiremos como nosso exemplo apenas um, o iene. Mas primeiro, aqui está um resumo das várias fases do desenvolvimento da rede neural que serão utilizadas em nosso exemplo de mercado-alvo e as decisões tomadas em cada fase:


Paradigma Um sistema feedforward back-propagation foi escolhido, pois é um dos paradigmas mais comuns utilizados na análise do mercado financeiro.


Arquitetura A função de transferência sigmoid foi utilizada juntamente com uma camada oculta consistindo de cinco nós, escolhidos com base na experiência e no tamanho planejado da rede.


Seleção de entrada Como mencionado anteriormente, os dados de preço, volume e interesse aberto no mercado-alvo foram utilizados como entrada bruta para o primeiro conjunto de redes. O segundo conjunto usou os mesmos dados de entrada que o primeiro, além de mais sete entradas de intercâmbio adicionais. Para o iene, o segundo conjunto de redes incluiu dados do índice de ações Nikkei, títulos do Tesouro, franco suíço, Deutschemark, US Dollar Index, Eurodollar e libra britânica.


Pré-processamento Pré-processamento simples, incluindo diferenças nos dados de preços, médias móveis simples e exponenciais e indicadores estocásticos, foram utilizados para ambos os conjuntos de redes. O pré-processamento de entrada inter-mercado do segundo set consistiu em se espalhar entre o mercado-alvo e cada um dos seus inter-mercados relacionados. Todas as entradas foram normalizadas por intervalos de corte acima de dois desvios padrão e, em seguida, linearmente dimensionados.


Treinamento e teste Foi utilizado um regime de teste de treinamento totalmente automatizado. Para simplificar o treinamento, a taxa de aprendizado foi mantida constante e o momento não foi usado. Cada rede foi treinada com testes realizados em intervalos definidos, momento em que a rede foi avaliada em cinco medidas de erro diferentes, incluindo erro médio e erro do RMS. Se o desempenho da rede com base nesses critérios e em um deles produzir uma melhoria, essa rede foi salva. Assim, no final do treinamento para cada mercado-alvo, foram encontradas 10 redes em todos (cinco para cada conjunto), representando o melhor para cada estatística de erro. Para simplificar a apresentação, apenas os resultados do erro médio são mostrados na Figura 2.


Implementação Uma rede como a descrita acima é ideal para incorporação em um sistema de informação. Ao prever o alto para o próximo dia de negociação, ele fornece informações úteis para definir paradas e é um excelente indicador de níveis de resistência intradia. Para o comércio real, uma configuração de rede consideravelmente mais sofisticada do que a apresentada neste estudo seria usada.


A Figura 2 representa o erro médio ao prever o amanhã em alto nos dados do conjunto de teste. O erro médio é calculado primeiro determinando o valor absoluto do erro para cada fato no conjunto de teste e depois determinando a média de todos os valores de erro. A primeira coluna à esquerda mostra os quatro mercados-alvo, enquanto a segunda coluna mostra o erro associado ao primeiro conjunto de redes que não utilizaram dados de intercâmbio durante o treinamento, apenas os dados de mercado do próprio mercado-alvo. A terceira coluna representa o erro do segundo conjunto de redes que utilizou dados de intermarket. Finalmente, a quarta coluna indica a redução percentual de erro que resulta da utilização de dados intermediários durante o treinamento, calculada tomando a diferença entre os erros médios nas colunas 2 e 3 e dividindo pelo valor na coluna 2.


Como evidenciado por esses resultados, até mesmo o uso mínimo de dados intermarket pode melhorar o desempenho da rede. O erro médio da rede foi reduzido entre 1,9% nos títulos do Tesouro e 6,5% no S & P 500. Com o uso de dados de entrada mais extensos, além do pré-processamento mais sofisticado, a alteração dos parâmetros de treinamento durante o treinamento e o uso de outros critérios de treinamento e teste, a precisão preditiva pode ser aumentada ainda mais.


As redes neurais são uma excelente ferramenta para combinar dados técnicos, fundamentais e de inter-mercado diferentes, de outra forma, dentro de um quadro quantitativo para análises sinérgicas. Padrões ocultos e relacionamentos entre um mercado-alvo e o mercado inter-relacionado podem ser encontrados através do uso de redes neurais. Nos mercados globais de hoje, seria imprudente ignorar esses dados valiosos, concentrando-se muito estreitamente na análise do mercado único.


Mas a tecnologia da rede neural é apenas uma ferramenta. É um meio para um fim, não o fim em si. À medida que os comerciantes e os analistas de mercado se esforçam para entender os mercados financeiros e suas inter-relações através do uso de várias ferramentas analíticas, o aproveitamento das redes neurais representa apenas uma parte do quebra-cabeça, mas outras peças ainda estão faltando.


Naturalmente, outras tecnologias, como sistemas especialistas e algoritmos genéticos, ocuparão seu lugar ao lado das redes neurais na análise financeira. Algoritmos genéticos, que imitam as características associadas à evolução, são adequados para problemas de otimização, como a otimização de parâmetros de redes neurais. A mesma tecnologia incorporada em algoritmos genéticos também foi usada em sistemas classificadores e programação genética. Os sistemas classificadores executam um tipo de aprendizagem de máquina que gera regras a partir de exemplos, enquanto a programação genética vai ainda mais ao gerar automaticamente um programa a partir de um conjunto de construções primitivas. O uso dessas tecnologias pode ser o próximo no horizonte de previsão financeira.


A matemática da lógica difusa, wavelets e caos também está sendo aplicada em uma infinidade de domínios, incluindo a previsão financeira. Embora todas essas tecnologias continuem a se expandir, novas, sem dúvida, surgirão em breve. Mas os comerciantes não devem ser enganados em acreditar que qualquer uma dessas ferramentas é a resposta há muito procurada para a negociação, a ferramenta definitiva de inteligência artificial que, sozinha, produzirá lucros consistentes nos mercados financeiros globais.


Para implementar análises de mercado sinérgicas efetivamente na década de 1990, várias tecnologias analíticas terão que ser usadas. Para realizar isso de forma eficaz, os pontos fortes e fracos dessas tecnologias devem ser entendidos para que possam ser utilizados um para o outro para máxima eficácia e ganho máximo.


Lou Mendelsohn, 813 973-0496, fax 813 973-2700, é presidente da Market Technologies Corporation, Wesley Chapel. FL. Ele foi um dos pioneiros da simulação histórica e back-testing em software de computador pessoal no início dos anos 80 e introduziu o conceito de análise de mercado sinérgico através da aplicação de redes neurais para previsão financeira. O Sr. Mendelsohn agradece James T. Lilkendey e Phillip Arcuri, do Grupo de Tecnologias Predictivas, por sua assistência na elaboração desses artigos.


Hecht-Nielsen, R. [1990]. Neurocomputador, Addison-Wesley Publishing Company, Inc.


Mendelsohn, Lou [1993]. & Ndash; Treinar redes neurais, & # 8221; STOCKS & amp; COMMODITIES, novembro.


_____ [1993]. & # 8220; Pré-processamento de dados para redes neurais. & # 8221; STOCKS & amp; COMMODITIES, outubro.


_____ [1993]. Desenvolvimento de redes neurais para previsão financeira, & # 8221; STOCKS & amp; COMMODITIES, setembro.


_____ [1991]. & # 8220; Os conceitos básicos do desenvolvimento de um sistema de comércio neural. & # 8221; Análise técnica de STOCKS & amp; COMMODITIES, Volume 9: junho.


Rumelhart, D. E., e J. L. McClelland [1986]. Processamento Distribuído Paralelo, Volumes I e 2, Instituto de Tecnologia de Massachusetts.


Reimpresso da Análise Técnica de.


Stocks & amp; Revista Commodities. (C) 1993 Technical Analysis, Inc.,


4757 California Avenue S. W., Seattle, WA 98116-4499, (800) 832-4642.


Com sede em Wesley Chapel, Flórida, ao norte de Tampa, Market Technologies, os fabricantes do VantagePoint Software permanecem na vanguarda da pesquisa de software comercial e desenvolvimento de software. Nosso trabalho está enraizado na aplicação de tecnologias de inteligência artificial para a análise do intermarket dos mercados financeiros globais interconectados de hoje, utilizando uma poderosa ferramenta matemática conhecida como redes neurais.


SnowCron.


FREE E. Mail Classes.


Neste artigo: um exemplo de uso do nosso software Neural Networks para criar um sistema completo de negociação de rede neural.


Este exemplo usa a linguagem de script incorporada do Cortex, então leia o guia de linguagem de script primeiro.


Usando Redes Neurais para criar Estratégia de Negociação FOREX.


Neste tutorial on-line gratuito, você encontrará o "ciclo completo" do uso de redes neurais (Cortex Neural Networks Software) para negociação Forex (ou negociação no mercado de ações, a idéia é a mesma).


Você aprenderá como escolher entradas para as redes neurais artificiais e como decidir o que usar como saída.


Você encontrará um exemplo de um script pronto para usar que permite a realização de otimização de redes neurais tanto da estrutura da Rede Neural (número de neurônios) quanto do sistema de negociação forex (stop loss etc.)


Finalmente (a parte que não está presente na maioria dos tutoriais), você aprenderá o que fazer a seguir. Afinal, o Cortex Neural Networks Software não pode fazer negócios em tempo real, você precisa usar algo como Trade Station, MetaQuotes ou MetaTrader. Como transportar o sistema de negociação FOREX do Cortex para sua plataforma de negociação favorita? Você precisa lidar com DLLs, controles ActiveX e programação de baixo nível? A resposta é não.


O software Cortex Neural Networks vem com o recurso fácil de usar que permite que você porta facilmente a rede Neural resultante (treinada) para a linguagem de script da sua plataforma de negociação. Sem DLLs, DDE, ActiveX ou quaisquer outras soluções de baixo nível - tudo é simples e simples.


Nota importante: este NÃO é um tutorial "como negociar". Em vez disso, ele diz como usar o software Cortex Neural Networks, mas você ainda precisa inventar seu próprio sistema de negociação. Aquele que usamos aqui é apenas um ponto de partida, e não deve ser usado como uma estratégia de negociação forex "tal como está". A idéia deste texto é ensinar você a criar sistemas de negociação baseados em NN e a portá-los para a plataforma de negociação de sua escolha. O exemplo é, no entanto, ovesimplificado, e só pode ser usado como ilustração dos princípios de negociação. Da mesma forma, o sistema de negociação MACD, que pode ser encontrado em muitos tutoriais, já não está funcionando bem (à medida que os mercados mudaram), mas ainda é um bom exemplo de usar indicadores para negociação mecânica.


Em duas palavras: faça sua própria análise.


Outra nota importante: o tutorial usa exemplos, muitos deles. Para tornar sua vida mais fácil, incluí todos eles, não apenas fragmentos. No entanto, torna o texto muito mais longo. Além disso, eu estou indo do primeiro, desajeitado, sistema de negociação forex, para mais avançado, explicando sempre o que foi melhorado e por quê. Seja paciente ou salte diretamente para a seção que você precisa.


Nota importante final: o código não é algo esculpido em pedra, ele pode mudar enquanto este texto foi escrito. As versões finais dos arquivos de script estão incluídas no arquivo Cortex.


Armadilhas de sinais FOREX BUY / SELL: O que há de errado com exemplos "simples"?


No guia do usuário do Cortex Neural Networks Software, usamos um exemplo simples de uma Rede Neural Física, prevendo o preço do estoque GENZ. Para descobrir o que há de errado com essa abordagem, vamos fazer o mesmo exemplo "simples", usando MSFT. TXT, em vez do GENZ. TXT (use 800 registros no conjunto de aprendizado, pois o MSFT. TXT é um pouco mais curto, então GENZ. TXT).


Simplesmente não funcionaria! Por quê?


O motivo se tornará evidente, se você se perguntar: "Qual é a razão pela qual a previsão da rede neural de valores futuros pode ser feita primeiro?"


A resposta é: é aprender a fazer o que é chamado de reconhecimento de padrões de redes neurais, reconhecer padrões e, se houver uma lógica oculta nesses padrões, então mesmo um novo padrão (com a mesma lógica) será reconhecido.


Isso é um truque - "com a mesma lógica". Não há nem um, mas três problemas aqui.


Primeiro de tudo, se você olhar para o preço das ações da Microsoft, você vai notar, que estava indo para baixo na parte de "aprendizagem" dos nossos dados, e para os lados - na parte de "teste". Portanto, é possível que a lógica tenha mudado.


Em segundo lugar, e ainda mais importante - QUAL É O TESTE PADRÃO? Você vê, se ensinamos a rede neural no intervalo de 10 a 100, e depois apresentamos algo na faixa de 1 a 3 - eles são padrões diferentes! 10, 20, 30 e 1, 2, 3 são similares aos humanos porque - PORQUE - temos essa capacidade de dividir por dez, quando apresentados com números que terminam com zero. É o que é chamado de pré-processamento dos dados e, por padrão, o NN não pode fazê-lo.


Podemos ensiná-lo? Claro. O que é EXACTAMENTE nós precisamos ensiná-lo?


Este é o terceiro e o mais importante. Não precisamos da previsão de preços! Nós não ligamos! O que precisamos é FOREX comprar sinais de venda.


Agora, espere um minuto! Nós precisamos de um) para ter nossa contribuição (aprendendo e testando) no mesmo intervalo e precisamos b) poder tomar decisões comerciais com base nela? Não é o que chamamos de indicador? Bingo?


Então, é o que vamos fazer - vamos construir um indicador, alimentá-lo ao NN como uma entrada, e tentaremos obter uma previsão do valor do indicador, e não o preço do estoque sem valor!


Em nosso primeiro exemplo, vamos carregar cotações de estoque do disco, abrir o arquivo de Rede Neural e iniciar a aprendizagem - tudo em um modo automatizado.


Crie um novo arquivo de script (ou abra o que veio com o arquivo Cortex Neural Networks Software) e ligue para stock_nn. tsc.


Antes de mais, precisamos baixar os valores de preço do arquivo MSFT. TXT. Nós vamos usar o indicador CLV (veja abaixo), mas para calcular, precisamos de valores ajustados por divisão para Alto e Baixo, não apenas para fechar. Aqui é como obtê-los.


stocks_nn. tsc, parte 1.


A primeira linha atribui o caminho para a variável strStockPath, é claro, você terá que editá-la, se seu arquivo de dados estiver localizado no diretório diferente.


Na segunda linha, especificamos que esse caminho não é relativo (o "relativo" à localização do arquivo Cortex. exe).


O TABLE_LOADER recebe o caminho, a string vazia para a "linha de partida", 1 - para pular a primeira linha (nomes das colunas), parte da linha de rodapé do arquivo (a última linha em MSFT. TXT não contém dados), é também instruído a carregar a coluna número 0 (e chamar arrDate), 2 (arrHigh), 3 (arrOow), 4 (arrC) e 6 (arrClose).


Para obter uma descrição completa do TABLE_LOADER, consulte o guia de referência SLANG.


Então, calculamos dividir, dividindo o Fechar ajustado por fechar, e use esse valor para ajustar baixo e alto.


O arquivo MSFT. TXT contém os dados mais recentes PRIMEIRAMENTE, enquanto nós os quermos ÚLTIMOS.


Em seguida, precisamos criar um indicador. Digamos que será um indicador de Close Location Value, embora na "vida real" eu provavelmente use mais de um indicador como entrada NN.


O indicador de Valor de localização está calculado como.


CLV = ((Close - Low) - (High - Close)) / (High - Low), onde Close, Low e High são para o intervalo, não necessariamente para uma única barra. Note-se que queremos no intervalo de 0 a 1, para facilitar a normalização no alcance do NN's (o que é, mais uma vez, 0-1).


stocks_nn. tsc, parte 3.


Em seguida, precisamos criar um arquivo de atraso. Vamos usar atrasos iguais a 1, 2. 9 (Para obter detalhes sobre as funções do arquivo, consulte o guia de referência SLANG). Observe que a caixa de diálogo NN do Cortex pode produzir atrasos simples automaticamente (você pode usar um botão "Gerar atraso"). Mas, mais tarde, neste texto, vamos trabalhar com atrasos complexos (o que significa que não são 1, 2, 3. mas 1, 3, 64), então precisamos criar o código que pode lidar com essa tarefa em de forma mais flexível.


stocks_nn. tsc, parte 4.


Tendo o arquivo de atraso, estamos prontos para criar nossa primeira rede neural. Esta função requer muitos parâmetros, então fique atento. No entanto, o código é muito simples.


By the way, a maior parte deste código pode ser removido, se você acha que pode manipular números, em vez de nomes significativos em seu código, no entanto, isso seria uma prática muito ruim de codificação.


stocks_nn. tsc, parte 5.


Agora, depois que temos uma rede neural e o arquivo atrasado com dados, precisamos ensinar a rede. O arquivo de atraso (msft_ind. lgg) possui 1074 registros, por isso é razoável usar 800 como um conjunto de aprendizado, e os restantes 274 como um conjunto de testes.


Você pode, claro, abrir um arquivo de rede e clicar no botão "Executar" na guia "Aprender". Mas, como esta é uma introdução à programação avançada do software Cortex Neural Networks, vamos usar SLANG built_in linguagem de script.


O código a seguir exibe a caixa de diálogo modal com as configurações do ann NN. Observe que, se você quiser ter um privilégio de clicar no botão "Executar", você precisa alterar o.


stocks_nn. tsc, parte 6.


O bStartLearning pode ser 0, caso em que a caixa de diálogo aguardará sua entrada, ou 1, então a aprendizagem começará de forma automática.


O bResumeScript, se for igual a 1, retomará o script, se você fechar a caixa de diálogo clicando no botão OK.


O bReset é usado para redefinir a rede antes do início do aprendizado.


Execute o script e aguarde até que o contador de épocas ultrapasse 1000, então clique em "Parar". Vá para a guia "Aplicar" e clique em "Aplicar". Isso executará todo o conjunto de dados (aprendendo e testando) através do NN e crie o arquivo. APL, contendo tanto a entrada-saída original quanto a previsão gerada pelo NN, desta forma você pode facilmente traçá-los e compilar uns contra os outros .


Vá para a guia "Saída", selecione o arquivo msft_ind. apl, clique em "Procurar arquivo", "Selecionar campos", depois selecione "Não" na caixa de listagem esquerda e (pressionando a tecla CTRL enquanto seleciona com o mouse ) Clv e NN: Clv na caixa de listagem direita. Clique em "Gráfico" para ver como é boa a nossa previsão. Bem. É mais ou menos bom, do que podemos dizer olhando para ele. Ainda assim, nada extraordinário.


Este foi apenas um exemplo do que você pode fazer com o script SLANG e como automatizar as tarefas de rotina do Cortex. No entanto, até agora, não fizemos nada que você não pudesse fazer "à mão". Bem. quase nada, porque se você quiser criar um arquivo de atraso personalizado, com, digamos, Clv-100, Clv-50, Clv-25. colunas, então você terá que usar SLANG (ou Excel.), porque você não pode fazer no Cortex sem scripts.


FOREX Trading Strategy: o que otimizar?


Aqui está o nosso próximo problema. Precisamos de uma boa previsão, ou precisamos do que podemos usar para negociar com lucro? A questão parece estranha, mas apenas pense nisso por um momento. Digamos que temos uma ótima previsão de 1 hora. 95% de precisão. Ainda assim, até que ponto o preço pode ir em uma hora? Não muito longe, estou com medo. Compará-lo com a situação, quando você tiver uma predição bastante imprecisa de 10 horas. Será melhor?


Para responder a esta pergunta, precisamos realmente negociar, uma comparação simples dos erros médios produzidos pelos dois NNs não ajudará.


A segunda parte (do mesmo problema) está na forma como definimos uma "boa previsão". Digamos que tenhamos uma rede, que produza a previsão, que é 75% precisa. Compare-o com o NN, que está produzindo uma previsão 100% precisa. O último é melhor. Agora, DIVIDE a saída (predição) do NN 100% preciso em 10. Teremos uma rede MUITO imprecisa, pois seu sinal está longe do sinal que usamos como "saída desejada". E, no entanto, pode ser usado da mesma forma que usamos NN 100% preciso, tudo o que temos a fazer é multiplicá-lo por 10!


Veja, o NN é criado, ajustando o erro quadrático médio e não a correlação, portanto, ao menos em teoria, um NN melhor pode mostrar resultados ruins, quando usado para o estoque real / negociação Forex.


Para resolver esse problema, precisamos testar nossos NNs usando negociação e usar os resultados dessa negociação (lucro e rebaixamentos) para decidir se esse NN é melhor que o outro.


Vamos fazer isso. Vamos criar um programa, que pode ser usado para afinar a NN, e desta vez, por ajuste fino, vamos significar resultados comerciais.


Neural Network Trading: poucas notas curtas.


Em primeiro lugar, no nosso exemplo acima, a aprendizagem "automática" nunca vai parar, porque não especificamos nenhum critério de parada. No diálogo, ou na função CREATE_NN, você pode fornecer o min. erro (quando o NN o atinge, ele pára e, se bResumeScript estiver definido como 1, a caixa de diálogo será fechada e o script será retomado). Também você pode fornecer o número máximo de épocas, ou ambos. Não estou usando isso no exemplo abaixo, pelo menos nem sempre, porque estou planejando assistir a aprendizagem e clicar em STOP quando penso que o NN está pronto. Se quiser fazê-lo no modo totalmente automático, preste atenção a esses parâmetros.


Segundo. Uma das maneiras de tornar a rede menor, mais rápida e precisa é começar a pequena rede e aumentar seu tamanho, o neurônio pelo neurônio. Obviamente, o número de neurônios de entrada é determinado pelo número de colunas de dados de entrada (mas podemos também variá-las) e o número de neurônios de saída deve ser igual ao número de colunas de dados de saída (geralmente um, mas não necessariamente ). Isso significa que precisamos otimizar o número de neurônios na (s) camada (s) oculta (s).


Além disso, como mencionei, não sabemos realmente quais dados usar. Will Clv-15 (15 dias atrasados) aumenta a precisão de nossa previsão? Precisamos de Clv-256? Será melhor usar ambos no mesmo NN, ou vai adicionar Clv-256 arruinar nosso desempenho?


Usando ciclos aninhados para tentar diferentes parâmetros de entrada, você pode:


Crie o NN, da mesma forma que o fizemos para os dados do stock (deixe-me repetir, para o NN, não há diferença entre os estoques e FOREX, aconteceu que eu tenho alguns arquivos de dados de alta qualidade para o FOREX que eu quero processar , enquanto escreve este texto). Experimente diferentes combinações de atrasos. Tente um número diferente de neurônios na camada oculta. . e diferentes combinações de diferentes indicadores. . e assim por diante.


No entanto, se você tentar todas as combinações possíveis de todos os parâmetros possíveis, você NUNCA obterá seus resultados, independentemente da rapidez com que seu computador esteja. Abaixo, usaremos alguns truques para reduzir os cálculos ao mínimo.


A propósito, pode parecer que, se você começar a partir de um neurônio escondido, aumente-o para 2, 3 e assim por diante, e em algum momento o erro (qualidade da previsão) ou o lucro (se você testar o NN por negociação usando) começará a diminuir, então você terá seu vencedor. Infelizmente, não posso provar que, após o primeiro "pico de desempenho", não pode haver um segundo. Isso significa que o erro pode ser igual a 100, 30, 20, 40, 50 (foi apenas no mínimo, certo?) E depois 30, 20, 10, 15,. (o segundo mínimo). Nós apenas temos que testar todos os números razoáveis.


Terceiro. A otimização é uma espada de dois gumes. Se você otimizar demais o seu código, pode não funcionar fora dos dados que você usou para ajustá-lo. Eu farei o meu melhor para evitar essa armadilha. Se você quiser fazer otimizações adicionais para o seu código ou NN, aconselho você a fazer uma pesquisa na Internet, para saber mais sobre os problemas ocultos dessa abordagem. Também vou prestar atenção à suavidade da curva de lucro. O lucro que se parece com 0, -500, 1000, -100, 10000 pode ser grande, mas o lucro de 0, 100, 200, 300, 400. é melhor, pois é menos arriscado. Podemos conversar sobre isso mais tarde.


Finalmente, para este exemplo, vamos usar FOREX, em vez de preços de ações. Do ponto de vista do NN, não há diferença, e do meu ponto - Forex é muito mais divertido de negociar. Se você preferir ações, o código pode ser facilmente modificado.


Uma estratégia de negociação FOREX para jogar.


Em primeiro lugar, vamos criar um protótipo do nosso código, que pode ser facilmente otimizado no futuro. Será um sistema de negociação, que usa uma Rede Neural para negociar e produz um gráfico (lucro contra o número comercial). Também calculará a redução, como medida de robustez do nosso sistema comercial.


forex_nn_01.tsc, parte 1.


A principal diferença aqui é que usamos funções, em vez de colocar todo o código no bloco principal do programa. Desta forma, é muito mais fácil de gerenciar.


Em segundo lugar, temos uma função TestNet. Eu estou usando um algoritmo muito simples de negociação. O indicador CLV está confinado a um intervalo de 0 - 1 (nossa versão do CLV é), então quando o indicador cruza o dBuyLevel (veja o código acima), eu estou comprando, quando ele está cruzando o dSellLevel, estou vendendo.


Obviamente, não é a melhor estratégia de negociação, mas fará para o nosso propósito (apenas por enquanto). Se você deseja melhorar, aqui estão algumas dicas. Primeiro, você pode querer ter um sistema, isso não é SEMPRE no mercado. Em segundo lugar, você pode querer usar mais de um indicador como entradas e, talvez, mais de um NN, para que a decisão de negociação seja feita com base em poucos indicadores previstos. Vamos adicionar algumas melhorias ao algoritmo de negociação mais tarde.


Usamos alguns pressupostos padrão da negociação FOREX: spread é de 5 pontos, leverade é 100, min. O lote é de US $ 100 (mini-FOREX).


Vamos dar uma olhada no nosso sistema "comercial". Mais uma vez, é uma simplificação excessiva. Uma nota importante: o TestNn () é chamado último e tem acesso a todas as variáveis ​​que foram criadas nesse ponto. Então, se você vir uma variável que eu estou usando, sem inicializar, isso provavelmente significa que foi inicializado em NewNn (), TeachNn () ou alguma outra função que foi chamada antes de TestNn ().


Para tornar as coisas mais fáceis, os comentários são colocados no código.


forex_nn_01.tsc, parte 2.


Poucas palavras sobre o levantamento. Existem poucas maneiras de calculá-lo, e estamos usando o que considero mais "honesto". A redução é uma medida de instabilidade do nosso sistema. O que é uma chance, que perderá dinheiro? Digamos que o valor inicial é de US $ 1000. Se o lucro for 100, 200, 300, 400, a retirada é 0. Se for 100, 200, 100, então a retirada é 0.1 (10%), já que acabamos de perder um valor, igual a 1/10 de o depósito inicial (de 1200 a 1100).


Eu recomendaria fortemente o uso de sistemas de negociação com grandes descontos.


Além disso, aqui eu uso um drawdown, que é para ser usado com tamanho de lote variável. No entanto, nas amostras reais, que vêm com o eBook, você verá outra versão:


Como você pode ver, aqui sempre usamos 1000 (o valor inicial) para calcular a redução. A razão é simples: sempre usamos o mesmo tamanho de lote (sem gerenciamento de dinheiro ainda), então não há diferença, quanto dinheiro acumulamos em nossa conta, um lucro médio deve ser constante. O pior cenário possível neste caso parece assim: desde o início ($ 1000 em conta), estamos perdendo dinheiro. Se usarmos 1000 $ para calcular a retirada, obteremos a pior redução. Isso nos ajudará a não nos enganar. Por exemplo, digamos, trocamos por algum tempo, e nós temos $ 10.000 $ em nossa conta. Then we loose some money, and we now have $8,000. Then we have recovered, and got $12,000. Good trading system? Provavelmente não.


Let's repeat the logic again, as it is very important (and it will become even more important, when we start doing money management). We trade using fixed size lots. So, statistically, there is no guarantee, that the maximum loss will not happen at the very beginning, when we only have $1000. And if it happens, we will have -1000$ (10,000 - 8,000), so the trading system is probably too risky.


When we talk about the money management (probably, not in this text), we will have to use different approach to drawdown calculation.


Note, that in this trading system, I am using the worse possible scenario: I am buying using High and selling, using Low. Many testers do not follow these rules, and create trading systems, that work fine on historical data. But in the real life, these trading systems have very poor performance. Por quê?


Take a look at the price bar. It has Open, High, Low and Close. Do you know, how the price was moving inside the bar? No. So, let's say, your trading system generated a "buy" signal, at the bottom of the price bar (if dLow.


Note that I am using dLotSize equal 0.1 lot ($100). Obviously, in the "real" trading, you will benefit greatly, if the lot size is calculated depending on the money you have, something like:


forex_nn_01.tsc, part 3.


However, we are doing testing here, not trading. And for testing, we need, among other things, to see how smooth the profit curve is. This is much easier to do if the lot size is the same (in ideal situation, for dLotSize = 100 we will get a straight line, with some positive slope, while in case of the adjustable lot size we will get an exponent, that is much harder to analyze).


Later in this text, we will apply money management rules to our trading system, but not yet.


After we are done with the last part of our testing function, let's walk through the rest of the code.


The following function creates a CLV indicator. It takes the interval as a parameter, which means that we can call it many times, during the optimization, passing different numbers.


Note, that I am using the NN that works in the 0 - 1 interval. The data can be normalized, of course, but I chose to divide the indicator by 2 and to add 0.5, so that it is in 0 - 1 range.


forex_nn_01.tsc, part 4.


To make lag file, we can use the CREATE_LAG_FILE function. Alternatively, we can do it by explicitly providing all the necessary code. In this case, we have more control, and we are going to need it, if we begin varying number of lagged columns and so on.


forex_nn_01.tsc, part 5.


The nRemoveFirst parameter is important. Many functions, like indicators, moving averages, lag generators, for that matter, do not work well within the first few records of the dataset. Let's say we have MA(14) - what will it place in the records 1 - 13? So we choose to simply remove the first few (unreliable) records.


For the NewNn, as well as for all functions of this program, we need to pass as parameters only what can be changed during optimization process. For example, there is no need to pass a "skip before" parameter, as it is always the same.


forex_nn_01.tsc, part 6.


The TeachNn function simply brings up the NN dialog.


forex_nn_01.tsc, part 7.


Finally, we need a charting function. It is not mandatory, but it is always a good idea to see what our profit line looks like. The following code uses the XML to produce a chart, so it is a good idea to read the tutorial. Alternatively, you can draw the chart, rather than saving it in a file. To do it, use one of the samples, that are in the samples/scripts directory. Finally, you can modify the code, to produce HTML, rather than XML. HTML is easier to learn, but the code itself will be a bit less readable.


forex_nn_01.tsc, part 8.


Compile and Run the script.


Bem. As expected, using 7 hours as an interval for the CLV produced very poor results:


FOREX Trading Strategies and Optimization.


The reason for the poor results is quite obvious: we used the Interval, Stop Loss, buy and sell levels and other parameters, that were purely random - we just picked first that came in mind! What if we try few combinations?


FOREX Trading Signals: What to optimize?


First of all, by overoptimizing the buy and sell levels, we can ruin our future performance. However we still can tune them, especially, if the performance is close for close values of buy and sell limits. For example, if we have -10% profit at buy limit equal 0.3, and +1000% profit when it equals 0.35, then there is probably a lucky coincidence, and we should not use 0.35 for our trading system, as in future it will probably not happen again. If, instead, we have -10% and +10% (instead of +1000%), it may be safer to use.


Generally, our trading system should be built for WORSE possible scenario, as if during the "real" trading the performance will be better, then during the test, we will survive, but not the other way around.


We can vary the value for the indicator interval, provided we have enough trades, so that we can be confident, in terms of statistics, in the performance of a system.


We certainly can vary the number of neurons, I don't think it can be overoptimized easily.


We can vary number of inputs and lags for inputs. It is possible to overoptimize this, but it is not very likely to happen.


And, of course, we can try different indicators.


Accurate FOREX Signals: How to optimize?


As have already been mentioned, if we start trying all possible combinations, it will take forever. So we are going to cheat. We will create pre-defined sets of parameters, that we think are reasonable, and pass them to the program.


To make as few calculations as possible, note, that Clv-1 and Clv-2 are, probably, important, but what about Clv-128? And - if we already have Clv-128, do we need Clv-129? Probably, not. So we are going to have something like Clv-1, Clv-2, Clv-4, Clv-8, . Clv-128 with just few variations, which will make our calculation time thousands times shorter.


FOREX Professional System Trading: Can it work at all?


What is it exactly we want to predict? Until this point we have used 1 hour chart for EURUSD, and we were predicting the next bar's CLV. Will the CLV+2 be better? What about CLV+3?


Also, especially considering the poor performance of our first trading system, it would be nice to know, that - at least in the "ideal" world, the goal (profitable trading) can be achieved.


To answer these questions, let's create a simple testing program. We assume, that our prediction is 100 % accurate, and, based on this assumption, we will use CLV+N, not the NN predicted one. That's right - we are going to take data from the future, and to use them instead of the NN prediction. This approach wouldn't work in the real life, of course, but at leats, it will give us some ideas of what to expect.


When looking at the results, please keep in mind, that we are not using any advanced money management, our lot size is set to a minimum $100. If you use variable lot sizes, results will be dramatically different. But even at a lot size set to 0.1 we can see (below) that getting the information from the future is an ultimate trader's "holly graal".


forex_nn_02.tsc, part 1.


You are already familiar with this code, it was used in FOREX_NN_01.TSC. It handles data loading. The only difference is in the part that obtains the list of files in the "images" directory and deletes all files with the. PNG extention. The reason for this code is simple: during our tests we are going to create many - may be, thousands - image files. We don't want them to hung around after we are done. So at the beginning of the script we are deleting images, created by other scripts.


forex_nn_02.tsc, part 2.


Just a few comments. We do not want to try all possible values for, for example, CLV interval. Instead, we can create an array, that contains only values we want to test. Then (see below) we will walk through this array.


Stop losses are important part of any trading strategy, so I have decided to vary them as well. It is a dangerous idea, however, as it is easy to overoptimize the system.


I am planning to test different values for buy and sell levels, but it will be done in cycle, without using arrays.


Unlike in our previous example, we want to have a large XML file, containing many images. To do it, I have moved the code, that is forming the XML header and footer outside of the Chart function. Read one of the online XML tutorials for details.


Note, that I am using 0 as the first lag, which means, that first I am testing the indicator (CLV) that was not "shifted" from the future. Just to get an idea, how good out "trading system" would be without NN (horrible, is the right word. It is loosing all the money).


Cortex uses the Internet Explorer control to display XML pages. When pages grow large, it takes a lot of memory. If your computer cannot handle it, consider creating multiple XML or HTML pages, instead. In the case of forex_nn_02, it should not be a problem, as the page is relatively short. Alternatively (that is what I am doing in scripts later in this text), create XML file, but do not open it from Cortex. Open them using Internet Explorer instead - unlike IE control, the Internet Explorer does not have the memory problem.


Now the code that is trying different combinations of parameters.


forex_nn_02.tsc, part 3.


Here, we are using nested cycles. In every cycle, we are assidning some variable (for example, nInterval for the outer cycle). This way the cycle will assign values of all elements of a corresponding array, one in a time. Then WITHIN it, the inner cycle is used, and so on, so that all combinations of all array elements are tested.


In the innermost cycle, I am calling the Test() function, to "test trade", and Chart() to add a new picture to a list of images saved on disk. Note, that this Chart() does not show any images, until all cycles are completed.


The Test() and CreateClv() functions are almost the same as in the previous example. The only real difference is due to the fact that it is called more then once. To do it, I am calling ARRAY_REMOVE to cleanup arrays.


Also, notice, that we are only creating charts for the combinations of parameters, that produce trading system with positive profit. Otherwise, we call "continue", to skip the Chart() function.


Finally, we have Take Profit now, so our trading system can be a bit more flexible.


forex_nn_02.tsc, part 4.


The Chart() function was broken into two pieces. The header and the footer should be written to the XML file only once, so they were moved to the main part of the program.


Also, I am using the counter, to save files under the different names. The information about parameters is written to the header of an image, so we can easily see which one it is. Finally, images are only saved for winning configurations, meaning the balance at the end should be more, then at the beginning.


forex_nn_02.tsc, part 5.


Run the program (it will take some time to complete). You will end up with a large XML page with images, one for each winning configuration.


Some of the results are great, however, as we used data "from the future", this system will not work in the real life. Actually, if you look at the Test() function, you will notice, that the cycle stops before we reach the last element of arrClose:


for(nBar = nRemoveFirst + 1; nBar.


THIS IS C++, just an example.


As you can see, the code is really simple. Now lets do the same using the SLANG script. As in examples before, we will keep the overall structure of the code, so that this example looks familiar. The only difference is that instead of using the built-in APPLY_NN function, we call the function of our own. The code that we do not use (such as cycles) is commented, but not removed.


Note, that the logic behind it was discussed in Neural Networks and Stock / Forex Trading article already. Briefly, the output of this script is formated to be compatible with the MQL, MetaTrader's scripting engine. MetaTrader is a trading platform we use, if you want something different, like TradeStation, for example, you will have to alter the code to comply to its syntax.


Then, in the following chapters, we are going to insert this code in the MetaTrader's indicator, and to use it to trade.


Porting script to trading platform.


The next step is not really required, but it is something, that may be useful. We are going to create a version of a tsc file (one above), but this time, we will use SLANG (Cortex scripting language) to emulate APPLY_NN function. The reason is, in the next chapter we are going to port it to the scripting language of a MetaTrader trading platform, so it is a good idea to make sure everything works.


After we run this function, we discover, that the result it produces is the same, as the forex_nn_05a produced, which means the code works fine. :


Note, that there is a difference at the beginning of the charts, as "our" NN does not try to process the data at the beginning (where lag is incomplete), while the built-in NN does not "know" about this problem. Of course, it doesn't affect the result, as the beginning of the chart is ignored by using the nRemoveFirst parameter in our script (set to 200, which is guaranteed to be larger, then our lag).


Using third-party trading platform.


We have the NN that (more or less) can be used. We have the script, implementing this NN without calls to the Cortex-specific NN functions. Now we are going to port it to the trading platform that can be used for the real trading, which means it can contact brocker, place orders and earn (or loose) money.


As a trading platform, I am going to use MetaTrader.


Disclaimer: I am not related to MetaQuotes in any way. I do not work for them, I am not their affiliate and so on. I use MetaTrader, ONLY because I like it.


I find this program user-friendly, flexible and powerful, and "not a monster". Also, it is free (compare to other packages of this class).


The only (minor) problem is that it is not always easy to find the dealer using MT in your area. Then, when you do a research, you may find couple of brockers, with screenshots on their web sites, that look suspiciously familiar. Yes, they use MetaTrader, but they don't call it MetaTrader!


I have asked for clarification at the company's forum, and they have told me, that they don't reveal brockers using their services. Very strange.


One of the brockers that is not hiding the fact they use MT, is Alpari. They will allow you to open a Demo account, so that you can trade in a real time, but without risking your money.


I am not going to recommeng services of Alpari. Once again, I am not being paid for that. Try their Demo account, and use your own judgement. Or you can start your own research at Internet forums.


Finally, if you do not like the MT, you can probably follow the example below using TS, MS or some other trading platform. Este é apenas um exemplo.


Our MT-based trading system will include two files, the indicator and an expert. This is the way they call it in MQL (scripting language of MT), and I am going to follow this naming convention.


The indicator implements the neural network and draws a chart. An expert takes these data and does trading. As MetaTrader has a "strategy tester", we will be able to test our strategy, to see how good it is.


I will assume, that you are familiar with MQL programming, it is quite close to SLANG and tutorials can be found both at MetaQuotes and Alpari.


Finally, I am using the code structure, that is borrowed from MetaQuotes forum, permission to use it the author of the corresponding posts had granted me permission to use fragments of his code.


Also, as some of our MetaTrader code is the same for all experts and indicators, we moved it to a separate library file. MetaTrader's libraries are nothing but includable files. This library takes care of synhronization, when two or more expert are trying to run in the same time, as well as of few other things. If you use MetaTrader, it will help you to create robust experts, in any case, the MQL language is easy to understand.


mylib. mql, a helper library.


The code should look familiar, all I did was re-writing it, using slightly different language syntax of MQL.


This indicator has two buffers, and draws two lines, one for the original NOC, and one for the NN-predicted NOC. For trading, you don't have to draw both indicator lines, of course (see MQL tutorials to learn how to do it), but I have decided to show them together, so you can compare.


Another difference, that you should know about, is the way MT performs testing. It may, in some cases, be more accurate, then one we did (we did the worse case scenario). Of course, you can always to change the SLANG script from the examples above, to implement any logic you want.


The result of our testing in MT is a bit better, then in Cortex, due to all these reasons.


Keep in mind, that MT calculates the DD in a different way. I still think, that my way is better.


In should be especially noted, that no additional optimization had been performed using MetaTrader's optimizer. We have just plugged our MTS (mechanical trading system) in, and it worked as expected.


É isso. You can now create Cortex Neural Network, optimize it to do trading, and to port it to the trading platform of your choice.

Comments