English Русский 中文 Español Deutsch 日本語
preview
Experimentos com redes neurais (Parte 6): O perceptron como uma ferramenta de previsão de preços autossuficiente

Experimentos com redes neurais (Parte 6): O perceptron como uma ferramenta de previsão de preços autossuficiente

MetaTrader 5Sistemas de negociação | 23 agosto 2023, 09:20
260 0
Roman Poshtar
Roman Poshtar

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

  1. 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.
  2. 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.
  3. 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:

  1. Número de neurônios na camada oculta;
  2. Função da ativação neuronal;
  3. Número de épocas de aprendizado;
  4. 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:

Otimização

Resultados da otimização do EA:

Otimização


Otimização

Abaixo estão os 5 melhores resultados do primeiro teste forward:

Teste 1


Teste 2


Teste 3


Teste 4


Teste 5


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

Arquivos anexados |
Perceptron_MA_4.mq5 (39.78 KB)
NeuralNets.mqh (7.83 KB)
Gestão de dinheiro de negociação Gestão de dinheiro de negociação
Neste artigo, veremos várias novas maneiras de criar sistemas de gerenciamento de dinheiro e identificar seus principais recursos. Hoje, existem algumas estratégias de gerenciamento de dinheiro para todos os gostos. Tentaremos considerar várias maneiras de administrar o dinheiro com base em diferentes modelos matemáticos de crescimento.
Teoria das Categorias em MQL5 (Parte 7): Domínios Multiconjuntos, Relativos e Indexados. Teoria das Categorias em MQL5 (Parte 7): Domínios Multiconjuntos, Relativos e Indexados.
A teoria das categorias é um ramo diversificado e em expansão da matemática que só recentemente começou a ser abordado na comunidade MQL5. Esta série de artigos tem como objetivo analisar alguns de seus conceitos para criar uma biblioteca aberta e utilizar ainda mais essa maravilhosa seção na criação de estratégias de negociação.
Implementando um algoritmo de treinamento ARIMA em MQL5 Implementando um algoritmo de treinamento ARIMA em MQL5
Neste artigo, implementaremos um algoritmo que aplica o modelo integrado de autorregressão com média móvel (modelo Box-Jenkins) usando o método de minimização de função de Powell. Box e Jenkins afirmaram que a maioria das séries temporais pode ser modelada usando uma ou ambas das duas estruturas.
Algoritmo de recompra: modelo matemático para aumentar a eficiência Algoritmo de recompra: modelo matemático para aumentar a eficiência
Neste artigo, usaremos o algoritmo de recompra como um guia para um entendimento mais profundo da eficiência dos sistemas de negociação e começaremos a trabalhar com os princípios gerais de aumentar a eficiência de negociação usando matemática e lógica, bem como aplicar os métodos mais inovadores para aumentar a eficiência no contexto de usar qualquer sistema de negociação.