Redes Neurais - Duvida Técnicas

 

Boa tarde pessoal tudo bem? Espero que sim.
Estou trabalhando em um robô utilizando de Redes Neurais Artificiais como projeto de conclusão da minha faculdade. 
Estou com algumas duvidas técnicas  com relação a construção e principalmente o ponto de treinamento e talvez até duvidas conceituais.
Li já vários artigos já disponíveis aqui na comunidade e já estou me baseando neles pra fazer meus testes e construir meu robô.


https://www.mql5.com/pt/articles/497 - REDES NEURAIS: DA TEORIA À PRÁTICA

https://www.mql5.com/pt/articles/1562 - RECEITAS PARA REDES NEURAIS

https://www.mql5.com/pt/articles/7447  - REDES NEURAIS DE MANEIRA FÁCIL


Peço desculpas adiantadas pela questão longa, vou tentar dividir, e quem souber tiras as duvidas sobre qualquer ponto ficarei grato. 


Duvidas:

  1. Considerando que vou utilizar indicadores técnicos e cada um pode ver janelas de períodos diferentes, cada Neurônio será um indicador técnico. Nesse caso a quantidade de entrada de dados para cada neurônio seria diferente?
  2. Ainda sobre o ponto (1), esta certo pensar que as entradas de um neurônio é essa janela de tempo com a série de preços? 
  3. Lendo outros artigos científicos e exemplos, vi sugestões onde existe uma primeira camada para normalização do dados, e dentro desse contexto, o texto indicava camada com N neurônios, porem esses neurônios não estavam ligados a nenhum indicador técnicos. Se por exemplo ele usa uma única técnica para calculo de previsão da série, qual o sentido de ter uma camada com 5, 10, 15, 30 neurônios com a mesma estrutura? Não enxergo o que varia, apenas o tamanho da série. 
  4. Nos artigos que deixei acima vi que nem todos os casos o treinamento da rede neural é feito dentro do Metatrader, porem existe um caso que é feito todo no Metatrader e escolhi esse caminho por achar mais pratico. No artigo https://www.mql5.com/pt/articles/497  ele mostra a utilização da ferramenta "Testador de Estratégia". Dentro do conceito de Rede Neural MLP faz sentido eu utilizar da parte de otimizar a estratégia como TREINAMENTO da rede ou somente depois de já ter a rede refinada eu usaria o "Testador de Estratégia".

Vou deixar só essas perguntas rs

Muito obrigado a todos. 

 
Julian Nunes:

Boa tarde pessoal tudo bem? Espero que sim.
Estou trabalhando em um robô utilizando de Redes Neurais Artificiais como projeto de conclusão da minha faculdade. 
Estou com algumas duvidas técnicas  com relação a construção e principalmente o ponto de treinamento e talvez até duvidas conceituais.
Li já vários artigos já disponíveis aqui na comunidade e já estou me baseando neles pra fazer meus testes e construir meu robô.


https://www.mql5.com/pt/articles/497 - REDES NEURAIS: DA TEORIA À PRÁTICA

https://www.mql5.com/pt/articles/1562 - RECEITAS PARA REDES NEURAIS

https://www.mql5.com/pt/articles/7447  - REDES NEURAIS DE MANEIRA FÁCIL


Peço desculpas adiantadas pela questão longa, vou tentar dividir, e quem souber tiras as duvidas sobre qualquer ponto ficarei grato. 


Duvidas:

  1. Considerando que vou utilizar indicadores técnicos e cada um pode ver janelas de períodos diferentes, cada Neurônio será um indicador técnico. Nesse caso a quantidade de entrada de dados para cada neurônio seria diferente?
  2. Ainda sobre o ponto (1), esta certo pensar que as entradas de um neurônio é essa janela de tempo com a série de preços? 
  3. Lendo outros artigos científicos e exemplos, vi sugestões onde existe uma primeira camada para normalização do dados, e dentro desse contexto, o texto indicava camada com N neurônios, porem esses neurônios não estavam ligados a nenhum indicador técnicos. Se por exemplo ele usa uma única técnica para calculo de previsão da série, qual o sentido de ter uma camada com 5, 10, 15, 30 neurônios com a mesma estrutura? Não enxergo o que varia, apenas o tamanho da série. 
  4. Nos artigos que deixei acima vi que nem todos os casos o treinamento da rede neural é feito dentro do Metatrader, porem existe um caso que é feito todo no Metatrader e escolhi esse caminho por achar mais pratico. No artigo https://www.mql5.com/pt/articles/497  ele mostra a utilização da ferramenta "Testador de Estratégia". Dentro do conceito de Rede Neural MLP faz sentido eu utilizar da parte de otimizar a estratégia como TREINAMENTO da rede ou somente depois de já ter a rede refinada eu usaria o "Testador de Estratégia".

Vou deixar só essas perguntas rs

Muito obrigado a todos. 

1 - Sim! A quantidade de entradas será sua quantidade de indicadores.
2 - Cada indicador será uma entrada, se tiver 6 indicadores você terá 6 entradas. Após as entradas vem os neurônios ocultos, nesse caso, cada neurônio receberá o produto das 6 entradas vezes os pesos e posteriormente ativados. Se tiver 3 neurônios ocultos, terá a multiplicação das entradas pelos pesos 3x. Esse 3 neurônios depois de ativados numa função (exemplo: ArcTangente) viram as entradas da próxima camada oculta ou de saída.
Supondo que você tenha 6 entradas, 3 neurônios ocultos e uma saída, o diagrama da rede neural ficar com 6 círculos na esquerda, 3 círculos no meio e 1 na na direita, todos ligados por linhas que representam os pesos.
3 - para trabalhar no meta te aconselho a fazer a RN do tamanho que descrevi acima. 6/3/1 se quiser uma saída, ou 6/3/2 se quiser 2 saídas. Todas as entradas tem que ser normalizadas e equiparada, você tem indicadores com valores completamente distintos, portanto você deve ajustar as entradas para valores de 0 a 1 ou -1 a 1, existem funções que fazem isso com base nas máximas e mínimas.
4 - Para rodar RN no meta você deve definir exatamente o tamanho da RN no código e nos INPUT colocar todos os pesos. É através do INPUT que você vai otimizar sua rede neural utilizando o Algoritmo Genético do MT5.

 
Joao Luiz Sa Marchioro:
1 - Sim! A quantidade de entradas será sua quantidade de indicadores.
2 - Cada indicador será uma entrada, se tiver 6 indicadores você terá 6 entradas. Após as entradas vem os neurônios ocultos, nesse caso, cada neurônio receberá o produto das 6 entradas vezes os pesos e posteriormente ativados. Se tiver 3 neurônios ocultos, terá a multiplicação das entradas pelos pesos 3x. Esse 3 neurônios depois de ativados numa função (exemplo: ArcTangente) viram as entradas da próxima camada oculta ou de saída.
Supondo que você tenha 6 entradas, 3 neurônios ocultos e uma saída, o diagrama da rede neural ficar com 6 círculos na esquerda, 3 círculos no meio e 1 na na direita, todos ligados por linhas que representam os pesos.
3 - para trabalhar no meta te aconselho a fazer a RN do tamanho que descrevi acima. 6/3/1 se quiser uma saída, ou 6/3/2 se quiser 2 saídas. Todas as entradas tem que ser normalizadas e equiparada, você tem indicadores com valores completamente distintos, portanto você deve ajustar as entradas para valores de 0 a 1 ou -1 a 1, existem funções que fazem isso com base nas máximas e mínimas.
4 - Para rodar RN no meta você deve definir exatamente o tamanho da RN no código e nos INPUT colocar todos os pesos. É através do INPUT que você vai otimizar sua rede neural utilizando o Algoritmo Genético do MT5.

Boa tarde. Muito obrigado João por sua resposta. 

Havia conseguido um contato com um professor de IA e ele conseguiu me ajudar com algumas duvidas e você acredito que completou com outras respostas.

Acho que agora consigo formular melhor as duvidas.
A parte dos indicadores serem minhas entradas ficou claro.
Entendi melhor a parte da normalização dos dados.


Quando coloquei o Testador de Estratégias do MT como opção para treinar a rede, é porque eu estou pensando muito na praticidade dele de recuperar os dados do historico e passar por eles e ir inserindo na minha rede. Pesquisando na comunidade eu consegui achar alguns exemplos de como recuperar o historico de dados e conseguir trabalhar com eles.
Então esse fds vou testar isso e já montar efetivamente a primeira rede e testar.

Vou deixar algumas duvidas, se puder contribuir:

1 - no MT quando eu uso o CopyBuffer, eu determino o tamanho da série que vou recuperar. Existe um tamanho "certo", uma formulação, algum padrão para isso? Ou esse tamanho da série é justamente uma das parte da particularidade de cada robô.


2 - Meu professor pediu para eu enviar para ele alguns exemplos de entrada e de saidas que eu espero pra ele testar la com as ferramentes dele. Eu estou com dificuldade pra essa SAÍDA.
Eu não tenho uma saída esperada para comparar como ele deseja.
Entendo que esse formato de rede não funciona assim e talvez eu até tenha me expressado mal com ele, mas de qualquer forma, é a garantia de que a rede esta convergindo.
Como eu faria: eu iria montar a rede (varios formatos), treinar e ir para o testador de estratégia do MT e usar da ferramenta pra entender como ela esta se comportando do mercado.
Seria essa a melhor forma ?

3 - APRENDIZADO: no momento escolhi o backpropagation. Voce acha uma boa opção dentro do contexto do mercado financeiro?
Meu professor sugeriu que eu verificasse redes de Hopfield.
Voce chegou a trabalhar com ela?

Obrigado novamente. 
Como testar um robô de negociação antes da compra
Como testar um robô de negociação antes da compra
  • www.mql5.com
A compra de um robô de negociação no Mercado MQL5 apresenta uma vantagem distinta em relação a todas as outras opções similares - um sistema automatizado oferecido pode ser inteiramente testado diretamente no terminal MetaTrader 5. Antes da compra, um Expert Advisor pode e deve ser cuidadosamente executado em todos os modos não favoráveis no...
 
Não consegui implementar a hopfield. Acabei implementando uma deep learning que se ajusta melhor ao testador de estratégia. Talvez o hopfield seja possível implementar, mas eu não entendi direito o conceito e não consegui.
A que implemente é como está imagem  está página.



A saída é o valor que sai após a ativação no último neurônio.
Se usar o arctangente para ativar os valores saíram entra -1 e 1. Portanto se der > X é compra, se der < X é venda. Se tiver 2 neurônios de saída põe N1> X compra, N2> X venda. Valores inferiores não faz nada. 
 
Joao Luiz Sa Marchioro:
Não consegui implementar a hopfield. Acabei implementando uma deep learning que se ajusta melhor ao testador de estratégia. Talvez o hopfield seja possível implementar, mas eu não entendi direito o conceito e não consegui.
A que implemente é como está imagem  está página.



A saída é o valor que sai após a ativação no último neurônio.
Se usar o arctangente para ativar os valores saíram entra -1 e 1. Portanto se der > X é compra, se der < X é venda. Se tiver 2 neurônios de saída põe N1> X compra, N2> X venda. Valores inferiores não faz nada. 

Desculpa a demora, não tinha visto que voce tinha respondido.
Lendo novamente os artigos e procurando respostas, entendi que houve um erro de conceito da minha parte.
No meu caso eu estava interpretando uma rede Supervisionada como se fosse "não supervisionada", por isso minha dificuldade pra entender o valor de Saída para comparar com o valor de saída da rede.
E novamente estou travado rs. 

Para uma serie de entradas eu tenho um valor de saída como referencia. Esse valor de referencia que pra mim esta sendo um problema de enxergar. 
Me da a impressão que vou ter que ir Tick a tick ou a cada candle fechado olhar todos os meus indicadores (que sao minhas entradas) e montar essa serie.
Resumindo: eu preciso de um ALVO, e eu não enxergo como fazer isso via cógido.

Achei uma sugestão de usar o ZIGZAG, mas era codigo em Python, agora estou tentando achar algo parecido para o MQL. 
A idéia é o ZIGZAG no ponto mais baixo devolver o valor -1, e no ponto mais alto devolver 1. Séria uma forma "automatica" de ter essas saídas para testar a rede. 
Como é meu TCC ainda estou tentando achar uma saida pra nao jogar fora.

Por hora sem Hopfiled.


 
Julian Nunes:


Para uma serie de entradas eu tenho um valor de saída como referencia. Esse valor de referencia que pra mim esta sendo um problema de enxergar. 
Me da a impressão que vou ter que ir Tick a tick ou a cada candle fechado olhar todos os meus indicadores (que sao minhas entradas) e montar essa serie.
Resumindo: eu preciso de um ALVO, e eu não enxergo como fazer isso via cógido.




Independente do indicador que vc usar, selecione um determinado range de dados dele e coloque num array.

Normalize o array, tendo como base o Maximo e Minima [do range presente/existente nesse array] , eu costumo normalizar de 0 a 100.


Por ex: Se seu array possui valores que variam entre -250 a +50, ao normaliza-lo a minima que eh -250 sera zero, e a maxima que eh 50 sera 100.

desse modo voce tem o range todo normalizado entre valores de 0 a 100. 


Nao use normalizacao de -1 a 1 nem de 0 a 1 nessa etapa! Quem vai gerar isso eh a rede neural, pela saida da funcao sigmoid.


O seu input precisa apenas ser normalizado, e precisa ser num range "analogico", tal como de 0 a 100.

Jogue isso para treino nas funcoes neurais, e voce tera o output desejado e os parametros de ajustes do treino, o qual pode ser comprovado via Forward-Test, em dados de historico.


Caso utiize mais de um indicador, normalize todos os arrays de todos eles com o mesmo range, por ex de 0 a 100, e use-os como imput da rede.

Toda vez que seu array for atualizado, normalize, fez algum shift, entrou novos dados, normalize. Sempre num range razoavel de ser transformado numa onda senoidal, tal como valores de 0 a 100 os sao.

 
Julian Nunes:

Boa tarde pessoal tudo bem? Espero que sim.
Estou trabalhando em um robô utilizando de Redes Neurais Artificiais como projeto de conclusão da minha faculdade. 
Estou com algumas duvidas técnicas  com relação a construção e principalmente o ponto de treinamento e talvez até duvidas conceituais.
Li já vários artigos já disponíveis aqui na comunidade e já estou me baseando neles pra fazer meus testes e construir meu robô.


https://www.mql5.com/pt/articles/497 - REDES NEURAIS: DA TEORIA À PRÁTICA

https://www.mql5.com/pt/articles/1562 - RECEITAS PARA REDES NEURAIS

https://www.mql5.com/pt/articles/7447  - REDES NEURAIS DE MANEIRA FÁCIL


Peço desculpas adiantadas pela questão longa, vou tentar dividir, e quem souber tiras as duvidas sobre qualquer ponto ficarei grato. 


Duvidas:

  1. Considerando que vou utilizar indicadores técnicos e cada um pode ver janelas de períodos diferentes, cada Neurônio será um indicador técnico. Nesse caso a quantidade de entrada de dados para cada neurônio seria diferente?
  2. Ainda sobre o ponto (1), esta certo pensar que as entradas de um neurônio é essa janela de tempo com a série de preços? 
  3. Lendo outros artigos científicos e exemplos, vi sugestões onde existe uma primeira camada para normalização do dados, e dentro desse contexto, o texto indicava camada com N neurônios, porem esses neurônios não estavam ligados a nenhum indicador técnicos. Se por exemplo ele usa uma única técnica para calculo de previsão da série, qual o sentido de ter uma camada com 5, 10, 15, 30 neurônios com a mesma estrutura? Não enxergo o que varia, apenas o tamanho da série. 
  4. Nos artigos que deixei acima vi que nem todos os casos o treinamento da rede neural é feito dentro do Metatrader, porem existe um caso que é feito todo no Metatrader e escolhi esse caminho por achar mais pratico. No artigo https://www.mql5.com/pt/articles/497  ele mostra a utilização da ferramenta "Testador de Estratégia". Dentro do conceito de Rede Neural MLP faz sentido eu utilizar da parte de otimizar a estratégia como TREINAMENTO da rede ou somente depois de já ter a rede refinada eu usaria o "Testador de Estratégia".

Vou deixar só essas perguntas rs

Muito obrigado a todos. 

1 e 2 - Supondo que você trabalhe somente com dois indicadores, exemplo RSI e MACD, a quantidade de entradas na sua camada de entrada vai depender do intervalo e do timeframe. Se você trabalha com um intervalo considerando os 5 últimos dados da série e 2 timeframes diferentes, teremos 20 entradas. A quantidade de neurônios vai depender da dimensão do seu problema

3 - Você precisa normalizar os seus dados pois você está trabalhando com conceitos de espaço, se você nao realizar este tratamento você terá problemas de convergência. A camada escondida de uma MLP define o número de hiperplanos que corta o seu espaço e definir isso não é nada trivial para problemas reais. Veja a solução dos problemas AND e XOR por uma Perceptron e MLP, deve ficar mais claro os conceitos de espaço e cortes já que estão no R^2.

4 - Não faz sentido utilizar o Strategy Tester para treinar a sua rede visto que existem algoritmos que fazem este trabalho muito bem. Algoritmos genéticos são mais eficientes para definir a arquitetura de sua rede.

Abs.