
Experimentos com redes neurais (Parte 6): O perceptron como uma ferramenta de previsão de preços autossuficiente
Introdução
Boa tarde, queridos usuários da comunidade MQL5. Uma técnica de aprendizado de máquina que pode ser usada para prever preços de mercado é o perceptron. O uso do perceptron pode ser uma ferramenta útil para traders e investidores que buscam informações adicionais sobre preços futuros no mercado.
Conceitos gerais
O perceptron é uma rede neural simples composta por um ou mais neurônios que aceitam dados de entrada, processam esses dados e produzem uma saída. O perceptron foi desenvolvido por Frank Rosenblatt em 1957 e, desde então, tem sido amplamente aplicado em vários campos, inclusive na análise financeira e na previsão de preços do mercado de ações.
O perceptron pode ser usado para resolver problemas de classificação e regressão, incluindo a previsão de preços. No caso mais simples, um perceptron consiste em um único neurônio que recebe várias variáveis de entrada e produz um único sinal de saída. Por exemplo, para prever o preço no mercado Forex, você pode usar os seguintes dados de entrada: taxa de câmbio, volume de negociação, índice de preços ao consumidor e outros fatores. Após processar esses dados, o neurônio gera um sinal de saída, que é uma previsão para o par de moedas.
Princípio de funcionamento do perceptron
O perceptron funciona com base no princípio de aprendizado supervisionado. Isso significa que o perceptron é treinado com dados históricos para determinar as relações entre vários fatores do mercado e os preços. Esses dados são usados para ajustar os pesos do neurônio, que determinam a importância de cada fator de entrada para a previsão dos preços das ações.
O perceptron pode operar no modo de aprendizado e no modo de previsão. No modo de treinamento, o perceptron utiliza dados históricos e preços reais no mercado Forex como entrada, e então ajusta seus pesos de forma a minimizar o erro de previsão
Benefícios de usar um perceptron para prever os preços no Forex
- Usar o perceptron para prever os preços no mercado Forex oferece várias vantagens. Primeiramente, o perceptron é capaz de se adaptar às mudanças no mercado e ajustar suas previsões de acordo com novos dados. Isso o torna mais eficiente do que métodos tradicionais de análise de dados, como análise estatística e séries temporais, que nem sempre conseguem se adaptar às mudanças do mercado.
- Em segundo lugar, o perceptron pode trabalhar com um grande número de dados de entrada, o que possibilita levar em consideração diversos fatores que afetam os preços. Isso pode resultar em previsões de preços mais precisas do que os métodos tradicionais de análise de dados.
- Em terceiro lugar, o perceptron pode ser treinado com grandes quantidades de dados, permitindo utilizar uma quantidade significativa de dados históricos para treinamento e previsão de preços.
No entanto, o uso do perceptron para prever preços também apresenta algumas desvantagens. Primeiramente, o perceptron pode ser suscetível a picos ou erros nos dados, o que pode resultar em previsões de preços imprecisas. Em segundo lugar, treinar um perceptron requer uma grande quantidade de dados históricos. Se os dados históricos não representarem suficientemente a situação atual do mercado, as previsões do perceptron podem ser imprecisas.
Além disso, ao usar um perceptron para previsão de preços, é possível encontrar um problema de aprendizado excessivo, em que o perceptron se torna sensível demais aos dados históricos e não consegue se adaptar às novas mudanças no mercado. Para combater esse problema, diversas técnicas de regularização podem ser usadas, como regularização L1 e L2, que ajudam a controlar os pesos dos neurônios e evitam o treinamento excessivo.
O perceptron pode ser usado em combinação com outros métodos de previsão, como o Modelo Autorregressivo (ARIMA) ou Suavização Exponencial, para obter previsões mais precisas e confiáveis. Por exemplo, você pode usar um perceptron para prever uma tendência de preço de longo prazo e o ARIMA ou a Suavização Exponencial para previsões de curto prazo. Lembre-se de que os dados históricos usados para treinar o perceptron podem não coincidir com as condições atuais do mercado. Em tais casos, os resultados das previsões podem ser imprecisos. Portanto, o modelo deve ser atualizado regularmente para que possa refletir adequadamente as mudanças no mercado.
Parâmetros do perceptron para otimização
Um perceptron é um dos tipos mais simples de redes neurais, que consiste em uma camada de entrada, camadas ocultas e uma camada de saída. Ele pode ser usado para várias tarefas, como classificação, regressão ou processamento de imagens. No entanto, para que o perceptron funcione efetivamente, é necessário escolher seus parâmetros corretamente.
Os parâmetros do perceptron são valores que definem sua estrutura e comportamento. Eles incluem o número de camadas ocultas, o número de neurônios em cada camada, a função de ativação, a taxa de aprendizado e muitos outros. Parâmetros ajustados corretamente permitem que o perceptron obtenha os melhores resultados.
Aqui estão alguns parâmetros do perceptron que podem ser otimizados:
Número de camadas ocultas
O número de camadas ocultas determina a complexidade do modelo. Se o modelo for muito simples, ele poderá falhar e, se for muito complexo, poderá ocorrer um treinamento excessivo. Portanto, o número de camadas ocultas deve ser escolhido de maneira otimizada, com base no problema a ser resolvido.
Número de neurônios em cada camada
O número de neurônios em cada camada também afeta a complexidade do modelo. Um grande número de neurônios pode aumentar a precisão das previsões, mas ao mesmo tempo aumentar o tempo de treinamento. O número de neurônios deve ser ideal para uma tarefa específica.
Abaixo está um exemplo de regulagem do número de neurônios nas camadas de entrada, oculta e de saída. Neste caso, é utilizada a biblioteca NeuralNets:
int OnInit() { // set the number of neurons in the input, hidden and output layers int n_inputs = 2; int n_hidden = 3; int n_outputs = 1; // create a perceptron object CNeuralNet ann; // add layers ann.AddLayer(n_inputs); ann.AddLayer(n_hidden, CNeuralNet::TANH); ann.AddLayer(n_outputs, CNeuralNet::TANH); // set learning parameters ann.SetLearningRate(0.1); ann.SetMomentum(0.9); ann.SetMaxEpochs(1000); ann.SetDesiredAccuracy(90); // create arrays to store input and target values double inputs[][2] = {{0,0}, {0,1}, {1,0}, {1,1}}; double targets[] = {0, 1, 1, 0}; // train the perceptron ann.Train((double*)inputs, targets, 4); // test the perceptron double output; ann.Compute((double*)inputs[0], output); Print("0 XOR 0 = ", output); ann.Compute((double*)inputs[1], output); Print("0 XOR 1 = ", output); ann.Compute((double*)inputs[2], output); Print("1 XOR 0 = ", output); ann.Compute((double*)inputs[3], output); Print("1 XOR 1 = ", output); }
Neste exemplo, criamos um perceptron com dois neurônios de entrada, três neurônios ocultos e um neurônio de saída. Também definimos parâmetros de treinamento, como taxa de treinamento, momento e número máximo de épocas. Em seguida, criamos arrays para armazenar valores de entrada e alvo, além de treinar o perceptron com esses dados. Após testar o perceptron com quatro entradas diferentes, exibimos os resultados na tela.
Função de ativação
A função de ativação determina como o neurônio deve responder à entrada. Existem muitas funções de ativação, como sigmoid, ReLU e tangente hiperbólica. A escolha da função de ativação também depende do problema a ser resolvido.
Abaixo está um exemplo de uso de diferentes funções de ativação:
int OnInit() { // set the number of neurons in the input and output layers int n_inputs = 2; int n_outputs = 1; // create a perceptron object CNeuralNet ann; // add layers ann.AddLayer(n_inputs); ann.AddLayer(3, CNeuralNet::TANH); ann.AddLayer(n_outputs, CNeuralNet::SIGMOID); // set learning parameters ann.SetLearningRate(0.1); ann.SetMomentum(0.9); ann.SetMaxEpochs(1000); ann.SetDesiredAccuracy(90); // create arrays to store input and target values double inputs[][2] = {{0,0}, {0,1}, {1,0}, {1,1}}; double targets[] = {0, 1, 1, 0}; // train the perceptron ann.Train((double*)inputs, targets, 4); // test the perceptron double output; ann.Compute((double*)inputs[0], output); Print("0 XOR 0 = ", output); ann.Compute((double*)inputs[1], output); Print("0 XOR 1 = ", output); ann.Compute((double*)inputs[2], output); Print("1 XOR 0 = ", output); ann.Compute((double*)inputs[3], output); Print("1 XOR 1 = ", output); }
Neste exemplo, adicionamos uma camada oculta com três neurônios e selecionamos a função de ativação "tanh" para a camada oculta e "sigmoid" para a camada de saída.
Taxa de treinamento
A taxa de treinamento determina quão rapidamente a rede neural alterará seus pesos. Uma taxa de treinamento muito alta pode levar a um overflow, enquanto um valor muito baixo pode resultar em um treinamento demorado. É necessário escolher a taxa de treinamento que seja ideal para uma tarefa específica.
Regularização
A regularização é um método usado para evitar o superajuste. Consiste em adicionar termos adicionais à função de erro que penalizam o modelo por ter pesos muito grandes. A regularização reduz a dispersão das previsões e melhora a capacidade de generalização do modelo.
Inicialização dos pesos
A inicialização dos pesos é a configuração inicial dos pesos para cada neurônio no perceptron. Pesos inicializados incorretamente podem fazer com que o modelo convirja para o mínimo local da função de erro, em vez do mínimo global. Portanto, é necessário escolher o método correto para inicializar os pesos.
Tamanho do lote
O tamanho do lote determina quantas amostras de dados serão usadas em uma iteração de treinamento. Um tamanho de lote muito pequeno pode retardar o processo de aprendizado, enquanto um tamanho de lote muito grande pode causar estouro de memória. Escolha o tamanho de lote que seja ideal para uma tarefa específica.
Otimizador
Um otimizador é um algoritmo usado para atualizar os pesos de um modelo durante o treinamento. Existem muitos otimizadores, como descida de gradiente estocástica, Adam e RMSprop. Cada otimizador tem suas vantagens e desvantagens, e a escolha do melhor depende da tarefa.
Em geral, os parâmetros ideais do perceptron dependem do problema a ser resolvido. É necessário experimentar diferentes valores de parâmetros para encontrar o conjunto ideal para uma tarefa específica. O aprendizado de máquina é o processo de melhorar iterativamente um modelo, e parâmetros ajustados corretamente são essenciais para obter melhores resultados.
Transferindo indicadores e preços para o perceptron para análise de mercado
Indicadores são equações matemáticas usadas para analisar o mercado e ajudar a identificar tendências, pontos de entrada e saída, além de níveis de suporte e resistência. Alguns dos indicadores mais comuns que podem ser usados no perceptron para analisar o mercado Forex incluem:
- Média móvel (Moving Average);
- Índice de Força Relativa (Relative Strength Index, RSI);
- Osciladorestocástico (Stochastic Oscillator);
- MACD (Moving Average Convergence Divergence).
Passar o preço de fechamento e os indicadores para o perceptron permite que o modelo leve em consideração vários aspectos da análise de mercado e crie previsões de preços mais precisas. Por exemplo, um modelo pode usar uma média móvel para determinar a tendência geral do mercado e, em seguida, usar um oscilador estocástico para determinar um ponto de entrada no mercado.
No entanto, passar um grande número de indicadores para um perceptron pode levar a um problema de redundância de dados. A redundância de dados pode levar a um ajuste excessivo do modelo e a uma baixa capacidade de generalização. Portanto, é necessário escolher os indicadores mais significativos para uma tarefa específica de análise de mercado.
Além disso, a transferência de dados para o perceptron requer um pré-processamento adequado dos dados. Por exemplo, se os dados contiverem valores ausentes, é necessário resolver esse problema, preenchendo os valores ausentes com valores médios ou removendo linhas com valores ausentes.
É necessário escolher os parâmetros ideais para o perceptron, de modo que o modelo possa treinar e prever os preços da melhor maneira possível. Alguns dos principais parâmetros que precisam ser otimizados incluem:
- Número de neurônios na camada oculta;
- Função da ativação neuronal;
- Número de épocas de aprendizado;
- Tamanho dos minipacotes de dados para treinamento.
A seleção dos parâmetros ideais pode ser feita por tentativa e erro ou usando algoritmos de otimização, como um algoritmo genético ou um método de otimização baseado em gradientes.
Exemplos e aplicação prática
Aqui, vamos considerar um exemplo de um EA baseado em um perceptron simples que passa a distância entre dois indicadores de média móvel como entradas. Passe a distância entre o indicador de média móvel com o valor 1 e o indicador de média móvel com o valor 24. Use médias móveis exponenciais com base no fechamento (CLOSE), mas primeiro normalize esses valores convertendo-os em pontos.
Use a distância nas velas 1, 4, 7, 10 (4 parâmetros) como entradas. Na saída do perceptron, obtemos dois valores - abrir uma posição de compra e abrir uma posição de venda. Essas condições não são padrão. Elas são fornecidas como um exemplo do uso do perceptron. Nosso exemplo atual será o mais simples possível. Então vamos lá.
Aqui, apresentarei todos os parâmetros para otimização e testes foward para não me repetir mais no texto:- Mercado Forex;
- Par de moedas EURUSD;
- Período H1;
- StopLoss 300 e TakeProfit 600. O TakeProfit no Expert Advisor é definido como StopLoss multiplicado por 2;
- Modo de otimização e teste "Somente preços de abertura", "Rápido (algoritmo genético)" e "Máximo de critério complexo". É muito importante usar o modo "Máximo critério complexo", já que mostrou resultados mais estáveis e lucrativos em comparação com "Máxima lucratividade";
- Faixa de otimização de 3 anos. De 2019.04.19 a 2022.04.19 . 3 anos não é algum tipo de critério. Você pode tentar mais ou menos sozinho;
- Intervalo de teste forward de 1 ano. De 2022.04.19 a 2023.04.19.
- Depósito inicial 10.000 unidades;
- Alavancagem 1:500.
Otimização:
Parâmetros de otimização do Expert Advisor:
Resultados da otimização do EA:
Abaixo estão os 5 melhores resultados do primeiro teste forward:
Considerações finais
Em conclusão, o perceptron é uma ferramenta poderosa para previsão de preços no mercado Forex. Pode ser usado por si só ou em combinação com outros métodos de análise de dados. No entanto, para obter os melhores resultados ao usar um perceptron para prever preços no Forex, é necessário estar ciente de suas limitações e levar em consideração o contexto dos dados históricos. Também é necessário ter conhecimento e experiência no trading de Forex e compreender o alto risco associado ao trading de Forex.
Obrigado pela atenção, amigos, e até breve!
Traduzido do russo pela MetaQuotes Ltd.
Artigo original: https://www.mql5.com/ru/articles/12515





- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso
Oi Roman,
Dois ótimos artigos! Acabei de ler os dois pela primeira vez.
Como ainda não estudei o código, gostaria de saber se o objeto CNeuralNet é uma reformulação de seus cálculos anteriores do Perceptron? Parece muito interessante, pois as abordagens iniciais de ângulo e leque falharam miseravelmente em meus testes avançados. Estou usando o EURUSD H4 de 1/1/2020 a 1/1/0203 como treinamento e de 1/1/2023 a 5/1/2023 como testes avançados.O ângulo falha, pois há tendências estendidas com pausas que o acionam, mas não revertem e interrompem e levam a conta à falência com a primeira queda por volta de 1/2/2023, enquanto seus testes seguem essa queda perfeitamente. A abordagem do ventilador não realiza nenhuma operação no teste avançado.
Fique bem, aguardo seus próximos artigos.
CapeCoddah
P.S.
Acabei de examinar seus dois arquivos de origem e tenho algumas perguntas.
Parece que há partes faltando com base nos códigos-fonte de seus artigos anteriores sobre o Perceptron.
O EA fornecido parece ser o seu EA de otimização. No entanto, ele não usa o objeto CNeuralNet que eu esperava ver.
O EA de teste avançado está faltando, pois o EA anexado não usa os resultados da execução de otimização do GA como entrada para a matriz de pesos, por exemplo, a matriz EURUSD.
Ou não percebi uma mudança lógica em sua filosofia do Perceptron?
Oi Roman,
Dois ótimos artigos! Acabei de ler os dois pela primeira vez.
Como ainda não estudei o código, gostaria de saber se o objeto CNeuralNet é uma reformulação de seus cálculos anteriores do Perceptron? Parece muito interessante, pois as abordagens iniciais de ângulo e leque falharam miseravelmente em meus testes avançados. Estou usando o EURUSD H4 de 1/1/2020 a 1/1/0203 como treinamento e de 1/1/2023 a 5/1/2023 como testes avançados.O ângulo falha porque há tendências estendidas com pausas que o acionam, mas não revertem, interrompem e levam a conta à falência com a primeira queda por volta de 1/2/2023, enquanto seus testes seguem essa queda perfeitamente.
Fique bem, estou ansioso por seus próximos artigos.
CapeCoddah
P.S.
Acabei de examinar seus dois arquivos de origem e tenho algumas perguntas.
Parece que há partes faltando com base nos códigos-fonte de seus artigos anteriores sobre o Perceptron.
O EA fornecido parece ser o seu EA de otimização. Entretanto, ele não usa o objeto CNeuralNet que eu esperava ver.
O EA de teste avançado está faltando, pois o EA anexado não usa os resultados da execução de otimização do GA como entrada para a matriz de pesos, por exemplo, a matriz EURUSD.
Ou não percebi uma mudança lógica em sua filosofia do Perceptron?
Olá, meu amigo. Não estou entendendo bem, portanto, peço que expresse seus pensamentos gradualmente. A otimização depende da profundidade de influência do perceptron usado nas configurações. Cada par tem suas próprias conclusões. Também depende do número de passagens, pois seu valor é infinito.
Olá, Roman,
Agradeço a rapidez da resposta. Acho que entendo a otimização do GA no sentido de que os resultados podem variar de uma execução para outra usando períodos de tempo idênticos e que os resultados serão diferentes dependendo da data de início, da duração do teste e de cada par. O que eu não esperava é que, quando uma execução de treinamento de 3 anos produzisse um lucro de 50%, o EA falharia em 5 dias perdendo toda a posição inicial ou não realizaria nenhuma negociação durante a execução real.
Meu objetivo final é desenvolver um EA Perceptron para swing trading que seja treinado por um período fixo e seja executado por apenas um mês após a última data do período de treinamento. Em seguida, ele seria treinado novamente pelo mesmo período, mas o período inicial seria um mês depois, seguido pela execução do segundo mês para dados reais, como uma SMA contínua. Minha base para isso é a suposição de que o mercado Forex muda gradualmente de direção e que qualquer rede "treinada" será mais precisa nos primeiros meses após o treinamento e, em seguida, perderá gradualmente a precisão à medida que as condições do mercado continuarem a mudar. Também entendo que pode haver mudanças seminais no mercado que terão um impacto direto na precisão de qualquer rede "treinada". Esse tipo de mudança terá um impacto significativo em todas as mudanças futuras.
Observo que o Angle Perceptron é muito bom em detectar o início das reversões antes que elas aconteçam. Infelizmente, ele também é bom em detectar pausas nas tendências e emitir uma negociação antecipando a reversão que, nesse caso, não acontece.Como a tendência continua, isso leva a uma perda significativa devido ao grande SL que, no início da execução do teste real, causa a perda da posição inicial. Acho que parte do problema é que o loop do 100 Perceptron requer ajuste adaptativo para reduzir o número total de negociações com base no saldo da conta.
Meus problemas imediatos são do P.S. do meu comentário original.
Em suas postagens anteriores, você publicou um EA para otimização (opt) e um segundo EA para teste de negociação (trade). Nesta postagem, há apenas um: O EA Perceptron_MA_4. Acredito que esse EA possa ser usado para executar otimizações do GA diretamente correspondentes às suas versões anteriores do OPT. Porém, não há uma versão Trade incluída para testes futuros. Se isso for intencional, posso adaptar esse EA para carregar os resultados do GA e produzir um EA para testes futuros.
Além do EA, você postou um objeto de classe, NeualNet, como um arquivo de inclusão, que eu não analisei. O que me surpreendeu foi que o EA Perceptron_MA_4 não usa esse arquivo de inclusão. O que eu esperava era que houvesse uma versão otimizada do EA que incluísse a classe CNeuralNet e também usasse uma das técnicas de normalização da sua postagem da Parte 5. Além disso, haveria uma versão Trade separada para testes futuros. Acho que a criação dos objetos de classe é uma direção muito boa a ser tomada. Como um objeto, torna-se muito fácil usar vários Perceptrons diferentes ao mesmo tempo em um EA, por exemplo, para negociações, configurações de stop loss ou take profit ou, possivelmente, até mesmo para criar uma estratégia de negociação adaptável usando estratégias alternativas para tendências de mercado plano.
Olá. Você está na direção certa. Se precisar de ajuda com uma tarefa específica, escreva para mim e tentarei ajudá-lo. Basta escrever em particular.
Artigo publicado Experimentos com redes neurais (Parte 6): O perceptron como uma ferramenta autossuficiente de previsão de preços:
Autor: Roman Poshtar