Tuesday 17 April 2018

Previsão de rede neural de forex


Previsão de Forex.
Este exemplo é muito semelhante ao anterior. A única diferença é que ele mostra dados para divisas (forex) pares de moedas.
Como trabalhar com o applet.
Se você não viu o primeiro exemplo, explore-o primeiro - a descrição básica está disponível lá. Neste applet, os dados a seguir estão disponíveis. Todos eles são valores próximos do fim do dia para todo o ano de 2007, ou seja, 313 valores. Como no applet anterior, cada uma dessas séries temporais tem os seguintes valores: zero para intervalo abaixo de 0, valor de fechamento no intervalo 0-número de valores e novamente zero após o último valor conhecido. EURUSD - USD EUR USD moeda estrangeira dados par USDJPY - EUR USD moeda estrangeira par data USDCHF - EUR USD moeda estrangeira par dados EURJPY - EUR USD moeda estrangeira par dados Observe novamente que este exemplo é fornecido apenas para ilustração. O comércio usando esta configuração simples geralmente não está longe de usar a previsão pelo último valor disponível. Observe também que, para o comércio, precisamos desenvolver regras de entrada e saída e que são mais importantes do que a previsão exata.
Aguarde até que o applet seja carregado.
Applet e descrição (c) Marek Obitko, 2008; A rede neural no applet usa classes Java BPNeuron e BPNet.
do NeuralWebspace, (c) Tom Vehovský, 1998, que foram modificados para os propósitos deste applet.

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.

Forex de previsão de rede neural
Gratuito durante os primeiros 7 dias.
com a mais alta precisão no mercado!
Hora mundial.
Dados do mercado Forex.
Bem-vindo à fonte mais precisa.
para Previsões de Mercado Forex.
Evite sem esforço as tendências Forex com a mais alta precisão no mercado. Forex-Forecasting utiliza inteligência artificial baseada em tecnologia de rede neural, métodos estatísticos avançados e análises de ondas não-periódicas. Esta tecnologia inovadora está agora disponível para você, o comerciante, com:

Usando Redes Neurais Recorrentes à Previsão de Forex.
Este artigo apresenta evidências empíricas de que um modelo de redes neurais é aplicável à previsão estatisticamente confiável das taxas de câmbio. Os dados da série temporária e os indicadores técnicos, como a média móvel, são alimentados a redes neurais para capturar as "regras" subjacentes ao movimento nas taxas de câmbio. As redes neurais recorrentes treinadas prevêem as taxas de câmbio entre o dólar americano e outras quatro principais moedas, ien japonês, Swiss Frank, British Pound e EURO.
Foram realizadas várias estimativas estatísticas da qualidade da previsão. Os resultados obtidos mostram que as redes neurais podem dar uma previsão com coeficiente de determinação múltipla não pior, em seguida, 0,65. O pré-processamento de dados estatísticos lineares e não-lineares, como o teste de Kolmogorov-Smirnov e os expoentes de Hurst para cada moeda, foram calculados e analisados. Palavras-chave: Redes Neurais, Taxa de Câmbio, Testes Estatísticos, Exponente Hurst, Teoria dos Sistemas Complexos.
O Forex é o maior e mais líquido dos mercados financeiros, com cerca de US $ 1 trilhão negociado todos os dias. Isso leva ao interesse sério para este setor de finanças e deixa claro que, por várias razões, qualquer comerciante em Forex deseja ter uma previsão precisa da taxa de câmbio. A maioria dos comerciantes usa de maneira antiga esse método tradicional de previsão como análise técnica com a combinação de um fundamental. Neste artigo, desenvolvemos abordagem de rede neural para análise e previsão de séries temporais financeiras baseadas não apenas na tecnologia de redes neurais, mas também em um paradigma de teoria de sistemas complexos e sua aplicabilidade à análise de vários mercados financeiros (Mantegna et al., 2000; Peters , 1996) e, em particular, para o Forex.
Ao escolher a arquitetura da rede neural e a estratégia de previsão, realizamos o pré-processamento de dados com base em alguns métodos de análise estatística ordinária e teoria de sistemas complexos: análise R / S, métodos de dinâmica não-linear e caótica (Mantegna et al., 2000 Peters, 1996).
No presente trabalho, não descrevemos todos eles. Apresentamos aqui apenas os resultados do teste de Kolmogorov-Smirnov e os resultados da análise R / S. No entanto, enfatizamos que a análise preliminar permitiu otimizar os parâmetros da rede neural, determinar o horizonte da previsibilidade e realizar a comparação da qualidade de previsão das moedas diferentes. Abaixo, damos algumas observações relativas às vantagens da tecnologia das redes neurais sobre os métodos tradicionais e comparamos nossa abordagem com os métodos de outros autores. Em primeiro lugar, a análise das redes neurais não pressupõe quaisquer limitações sobre o tipo de informação de entrada conforme a análise técnica. Poderia ser como indicadores de séries temporais, como informações sobre o comportamento de outros instrumentos financeiros.
Não é sem fundamento, que as redes neurais são usadas exatamente por investidores institucionais (fundos de pensão, por exemplo), que lidam com grandes carteiras e para quem as correlações entre diferentes mercados são essenciais. Em segundo lugar, em contraste com a análise técnica, que se baseia em recomendações comuns, as redes neurais são capazes de encontrar o melhor, para instrumentos financeiros, indicadores e ótima, para determinadas séries temporais, estratégia de previsão. Lembremos que, no presente estudo, prevemos as taxas de câmbio das moedas selecionadas apenas no mercado Forex. Como moedas para lidar, escolhemos a Libra britânica, o Swiss Frank, o EURO e o iene japonês.

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 comercial. 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 é errado com esta abordagem, vamos fazer o mesmo exemplo "simples", usando MSFT. TXT, em vez do GENZ. TXT (use 800 registros no conjunto de aprendizado, como 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.
Em primeiro lugar, se você olhar para o preço das ações da Microsoft, você notará que estava indo na parte "de aprendizado" de nossos dados e de lado - 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 parecem semelhantes ao humano porque - PORQUE - temos essa capacidade de dividir por dez, quando apresentado 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 seqüência vazia para a "linha de início", 1 - para ignorar a primeira linha (nomes das colunas), parte da linha do rodapé do arquivo (a última linha no 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 é realmente simples.
A propósito, a maior parte deste código pode ser removido, se você acha que pode lidar com números, em vez de nomes significativos em seu código, no entanto, essa seria uma prática de codificação muito ruim.
stocks_nn. tsc, parte 5.
Agora, depois de ter 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 que a aprendizagem comece.
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, tenho 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 temos uma rede, que produz a previsão, que é 75% precisa. Compará-lo 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 a negociação e usar resultados dessa negociação (lucro e redução) para decidir, se este NN for 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. Na caixa de 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 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 quais dados usar. Will Clv-15 (15 dias atrasados) aumenta a precisão de nossa previsão? Precisamos do 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. Experimente diferentes números 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 parece 0, -500, 1000, -100, 10000 pode ser ótimo, mas o lucro 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. Estou usando um algoritmo de negociação muito simples. O indicador CLV é limitado ao intervalo de 0 a 1 (nossa versão do CLV é), então, quando o indicador cruza o dBuyLevel (veja o código acima), estou comprando, quando 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 a redução. Existem poucas maneiras de calculá-lo, e estamos usando o que considero mais "honesto". A redução é uma medida de instabilidade do nosso sistema. Qual é a chance de 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. Então perdemos algum dinheiro, e agora temos US $ 8.000. Então recuperamos e obteve US $ 12.000. Bom sistema comercial? Provavelmente não.
Repita a lógica novamente, pois é muito importante (e será ainda mais importante, quando começarmos a gerir dinheiro). Nós trocamos usando lotes de tamanho fixo. Então, estatisticamente, não há garantia de que a perda máxima não acontecerá no início, quando apenas temos $ 1000. E se acontecer, teremos -1000 $ (10.000 - 8.000), então o sistema comercial provavelmente é muito arriscado.
Quando falamos sobre o gerenciamento de dinheiro (provavelmente, não neste texto), teremos que usar uma abordagem diferente para o cálculo de retirada.
Observe que, neste sistema comercial, estou usando o pior cenário possível: estou comprando usando High e vendendo usando Low. Muitos testadores não seguem essas regras e criam sistemas de negociação, que funcionam bem em dados históricos. Mas na vida real, esses sistemas de negociação têm desempenho muito fraco. Por quê?
Dê uma olhada na barra de preços. Tem Open, High, Low e Close. Você sabe, como o preço estava se movendo dentro da barra? Não. Então, digamos, seu sistema comercial gerou um sinal de "compra", na parte inferior da barra de preços (se dLow.
Observe que estou usando dLotSize igual a 0.1 lot ($ 100). Obviamente, na negociação "real", você se beneficiará muito, se o tamanho do lote for calculado dependendo do dinheiro que você possui, algo como:
forex_nn_01.tsc, parte 3.
No entanto, estamos fazendo testes aqui, não negociando. E para testes, precisamos, entre outras coisas, de ver quão suave é a curva de lucro. Isso é muito mais fácil de fazer se o tamanho do lote for o mesmo (na situação ideal, para dLotSize = 100, obteremos uma linha reta, com alguma inclinação positiva, enquanto que, no caso do tamanho do lote ajustável, obteremos um expoente, isto é muito mais difícil de analisar).
Mais adiante neste texto, aplicaremos regras de gerenciamento de dinheiro ao nosso sistema comercial, mas ainda não.
Depois de terminar com a última parte da nossa função de teste, vamos passar pelo resto do código.
A seguinte função cria um indicador CLV. Isso leva o intervalo como um parâmetro, o que significa que podemos chamá-lo muitas vezes, durante a otimização, passando números diferentes.
Observe que estou usando o NN que funciona no intervalo de 0 a 1. Os dados podem ser normalizados, é claro, mas optei por dividir o indicador em 2 e adicionar 0,5, de modo que esteja no intervalo de 0 a 1.
forex_nn_01.tsc, parte 4.
Para fazer um arquivo de atraso, podemos usar a função CREATE_LAG_FILE. Alternativamente, podemos fazê-lo fornecendo explicitamente todo o código necessário. Nesse caso, temos mais controle, e vamos precisar disso, se começarmos a variar o número de colunas atrasadas e assim por diante.
forex_nn_01.tsc, parte 5.
O parâmetro nRemoveFirst é importante. Muitas funções, como indicadores, médias móveis, geradores de atraso, para esse assunto, não funcionam bem dentro dos primeiros registros do conjunto de dados. Digamos que temos MA (14) - o que irá colocar nos registros 1 a 13? Então, escolhemos simplesmente remover os primeiros registros (não confiáveis).
Para o NewNn, bem como para todas as funções deste programa, precisamos passar como parâmetros apenas o que pode ser alterado durante o processo de otimização. Por exemplo, não é necessário passar um parâmetro "pular antes", pois é sempre o mesmo.
forex_nn_01.tsc, parte 6.
A função TeachNn simplesmente exibe a caixa de diálogo NN.
forex_nn_01.tsc, parte 7.
Finalmente, precisamos de uma função de gráficos. Não é obrigatório, mas é sempre uma boa idéia ver como é a nossa linha de lucro. O código a seguir usa o XML para produzir um gráfico, então é uma boa idéia ler o tutorial. Alternativamente, você pode desenhar o gráfico, em vez de salvá-lo em um arquivo. Para fazê-lo, use uma das amostras, que estão no diretório de amostras / scripts. Finalmente, você pode modificar o código, produzir HTML, em vez de XML. O HTML é mais fácil de aprender, mas o próprio código será um pouco menos legível.
forex_nn_01.tsc, parte 8.
Compile and Run the script.
Bem. Como esperado, o uso de 7 horas como intervalo para o CLV produziu resultados muito fracos:
FOREX Trading Strategies and Optimization.
A razão para os resultados ruins é bastante óbvia: usamos os níveis Interval, Stop Loss, buy and sell e outros parâmetros, que eram puramente aleatórios - acabamos de escolher primeiro que veio em mente! E se tentarmos poucas combinações?
Sinais de negociação FOREX: o que otimizar?
Em primeiro lugar, ao superestimar os níveis de compra e venda, podemos arruinar nossa performance futura. No entanto, ainda podemos sintonizá-los, especialmente, se o desempenho for próximo de valores próximos de limites de compra e venda. Por exemplo, se tivermos -10% de lucro no limite de compra igual a 0,3 e + 1000% de lucro quando é igual a 0,35, então provavelmente há uma coincidência afortunada, e não devemos usar 0,35 para o nosso sistema de negociação, já que no futuro provavelmente não acontecer novamente. Se, em vez disso, temos -10% e + 10% (em vez de + 1000%), pode ser mais seguro usar.
Geralmente, nosso sistema comercial deve ser construído para o cenário WORSE possível, como se durante a negociação "real" o desempenho fosse melhor, então, durante o teste, vamos sobreviver, mas não o contrário.
Podemos variar o valor do intervalo do indicador, desde que possamos trocas suficientes, para que possamos estar confiantes, em termos de estatísticas, no desempenho de um sistema.
Certamente, podemos variar o número de neurônios, não acho que possa ser superoptimizado facilmente.
Podemos variar o número de entradas e atrasos para as entradas. É possível superestimar isso, mas não é provável que aconteça.
E, claro, podemos tentar diferentes indicadores.
Sinais FOREX precisos: como otimizar?
Como já foi mencionado, se começarmos a tentar todas as combinações possíveis, isso levará uma eternidade. Então, vamos enganar. Vamos criar conjuntos de parâmetros pré-definidos, que pensamos serem razoáveis, e passá-los para o programa.
Para fazer o menor número possível de cálculos, note-se que o Clv-1 e o Clv-2 são, provavelmente, importantes, e o Clv-128? E - se já possuímos o Clv-128, precisamos do Clv-129? Provavelmente não. Então, vamos ter algo como Clv-1, Clv-2, Clv-4, Clv-8,. Clv-128 com apenas algumas variações, o que tornará o nosso tempo de cálculo mais vezes menor.
FOREX Professional System Trading: Isso pode funcionar?
O que exatamente nós queremos prever? Até este ponto, usamos um gráfico de 1 hora para o EURUSD, e estávamos prevendo o CLV do próximo bar. O CLV + 2 será melhor? E quanto ao CLV + 3?
Além disso, especialmente considerando o mau desempenho de nosso primeiro sistema comercial, seria bom saber que, pelo menos no mundo "ideal", o objetivo (negociação rentável) pode ser alcançado.
Para responder a essas perguntas, vamos criar um programa de teste simples. Nós assumimos que nossa previsão é 100% precisa e, com base nessa suposição, usaremos CLV + N, e não o NN previsto. Isso mesmo - vamos tirar dados do futuro e usá-los em vez da previsão NN. Essa abordagem não funcionaria na vida real, é claro, mas em breve, isso nos dará algumas idéias sobre o que esperar.
Ao analisar os resultados, lembre-se de que não estamos usando qualquer gerenciamento avançado de dinheiro, nosso tamanho de lote é definido como um mínimo de $ 100. Se você usa tamanhos de lote variáveis, os resultados serão dramaticamente diferentes. Mas mesmo em um tamanho muito definido para 0.1, podemos ver (abaixo) que obter a informação do futuro é o "selly graal" de um comerciante final.
forex_nn_02.tsc, parte 1.
Você já conhece esse código, ele foi usado em FOREX_NN_01.TSC. Ele lida com o carregamento de dados. A única diferença é na parte que obtém a lista de arquivos no diretório "imagens" e exclui todos os arquivos com a extensão. PNG. A razão para este código é simples: durante nossos testes, vamos criar muitos - podem ser, milhares - arquivos de imagem. Nós não queremos que eles se deslocassem depois que terminarmos. Então, no início do script, estamos excluindo imagens, criadas por outros scripts.
forex_nn_02.tsc, parte 2.
Apenas alguns comentários. Não queremos tentar todos os valores possíveis para, por exemplo, o intervalo CLV. Em vez disso, podemos criar uma matriz, que contém apenas os valores que queremos testar. Então (veja abaixo) iremos atravessar esta matriz.
Parar perdas são parte importante de qualquer estratégia de negociação, então eu decidi também alterá-las. É uma idéia perigosa, no entanto, como é fácil superestimar o sistema.
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. This is just an example.
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.

No comments:

Post a Comment