Discussão do artigo "Redes neurais de maneira fácil (Parte 29): Algoritmo ator-crítico de vantagem (Advantage actor-critic)"

 

Novo artigo Redes neurais de maneira fácil (Parte 29): Algoritmo ator-crítico de vantagem (Advantage actor-critic) foi publicado:

Nos artigos anteriores desta série, conhecemos 2 algoritmos de aprendizado por reforço. Cada um deles tem suas próprias vantagens e desvantagens. Como costuma acontecer quando nos deparamos com esses casos, surge a ideia de combinar os dois métodos em um algoritmo que incorpore o melhor dos dois. E assim compensar as deficiências de cada um deles. Falaremos sobre tal combinação de métodos neste artigo.

Como vantagem do retreinamento dos modelos dos artigos anteriores, podemos mencionar o fato de podermos utilizar os EAs de teste do artigo anterior para verificar seus resultados de treinamento. Eu fiz isso. Depois de treinar o modelo, peguei o modelo de política retreinado e rodei o EA "REINFORCE-test.mq5" no testador de estratégia usando o modelo mencionado. O algoritmo para sua construção foi descrito no artigo anterior. E seu código completo pode ser encontrado no anexo.

Abaixo está um gráfico do balanço do EA durante os testes. É importante notar que o balanço aumentou bastante uniformemente durante o teste. Observe que o modelo foi testado com dados não incluídos no conjunto de treinamento. O que fala sobre a consistência da abordagem para construir um sistema de negociação. Para uma verificação impecável do trabalho do modelo, todas as operações foram realizadas com um lote mínimo fixo sem o uso de stop loss e take profit. O uso de tal EA é altamente desencorajado para negociação real, mas demonstra bem o trabalho do modelo treinado.

Gráfico de teste para o modelo treinado

No gráfico de preços, pode-se ver com que rapidez os negócios perdedores são fechados e as posições lucrativas são mantidas um pouco. Aqui é necessário prestar atenção para que todas as operações sejam realizadas na abertura de uma nova vela. Ao fazer isso, pode-se notar várias operações de negociação realizadas quase na abertura das velas (de fractal) de reversão.

Autor: Dmitriy Gizlyk

 

Olá,

Bom trabalho! Tenho trabalhado ativamente em algoritmos de negociação baseados em aprendizado por reforço e gosto de seus artigos sobre o assunto.

Tenho uma pergunta sobre os resultados. Vejo que você está mostrando apenas o desempenho de negociação dos primeiros 10 dias (2022-09-01 até 2022-09-10). O EA estava perdendo após o 10º dia?

/Rasoul

 

Oi Dmitriy

Muito obrigado pela série exaustiva e muito instrutiva de artigos. Muito bem feito.

Só uma pergunta: depois de baixar todo o código do anexo do seu último artigo (nº 29), não consigo compilar porque está faltando a definição da classe CBufferDouble, que eu suponho que deveria estar dentro de

NeuroNet_DNG\NeuroNet.mqh

mas não está.

Estou perdendo alguma coisa?

Obrigado!

Atenciosamente

Paolo

 
Paolo Miocchi #:

Oi Dmitriy

Muito obrigado pela série exaustiva e muito instrutiva de artigos. Muito bem feito.

Só uma pergunta: depois de baixar todo o código do anexo do seu último artigo (nº 29), não consigo compilar porque está faltando a definição da classe CBufferDouble, que, suponho, deveria estar dentro de

NeuroNet_DNG\NeuroNet.mqh

mas não está.

Estou perdendo alguma coisa?

Obrigado!

Com os melhores cumprimentos

Paulo

Olá, no último artigo, mudei CBufferDouble para CBufferFloat. Isso ajuda a executar a biblioteca na GPU sem o tipo double.

 

Oi Dmitriy,

Ótima série, sou um grande fã desse trabalho. Também tentei compilar o Reinforce EA e vi que ele também precisava do codificador aunto (é claro), então adicionei a última versão incluída (da postagem 22) VAE.mqh, mas, por algum motivo, ele não consegue encontrar as definições do Normal.mqh:


Tenho certeza de que fiz algo errado, espero que possa me ajudar.

Obrigado!

 
Eric Ruvalcaba #:

Oi Dmitriy,

Ótima série, sou um grande fã desse trabalho. Também tentei compilar o Reinforce EA e vi que ele também precisava do codificador aunto (é claro), então adicionei a última versão incluída (da postagem 22) VAE.mqh, mas, por algum motivo, ele não consegue encontrar as definições do Normal.mqh:


Tenho certeza de que fiz algo errado, espero que você possa ajudar.

Obrigado!

Olá, carregue a última versão deste artigo https://www.mql5.com/ru/articles/11804

Нейросети — это просто (Часть 34): Полностью параметризированная квантильная функция
Нейросети — это просто (Часть 34): Полностью параметризированная квантильная функция
  • www.mql5.com
Продолжаем изучение алгоритмов распределенного Q-обучения. В предыдущих статьях мы рассмотрели алгоритмы распределенного и квантильного Q-обучения. В первом мы учили вероятности заданных диапазонов значений. Во втором учили диапазоны с заданной вероятностью. И в первом, и во втором алгоритме мы использовали априорные знания одного распределения и учили другое. В данной статье мы рассмотрим алгоритм, позволяющей модели учить оба распределения.
 
Dmitriy Gizlyk #:

Olá, carregue a última versão deste artigo https://www.mql5.com/ru/articles/11804

Obrigado, Dmitriy, pela resposta rápida e por fornecer sua ajuda e tempo valioso, mas ainda obtive o mesmo resultado.


Aparentemente, o aprendizado do FQF chama o FQF.mqh


Que, por sua vez, exige o NeuroNet...


E, é claro, esse último chama o VAE.mqh


E a única versão que consegui encontrar foi a da postagem 22...

O uso dessa versão faz com que o VAE não encontre referência às funções Normal.mqh


Seria a versão do meu Editor?

Muito obrigado.

 

...Bem, por alguma razão, a biblioteca Normal não pode ser acessada no VAE.mqh se for chamada a partir do NeuroNet, eu realmente não sei por que (tentei em duas compilações diferentes)...

Então, resolvi isso adicionando a chamada para a Normal diretamente no VAE e na Neuronet, mas tive que me livrar do espaço Math no FQF:



estranho... mas funcionou:



 

A inicialização falhou devido à ausência do EURUSD_PERIOD_H1_REINFORCE.nnw ao executar as seguintes instruções

if(!Actor.Load(ACTOR + ".nnw", dError, temp1, temp2, dtStudied, false) ||

!Critic.Load(CRITIC + ".nnw", dError, temp1, temp2, dtStudied, false))

retorna INIT_FAILED;


Como resolver esse problema? Obrigado.


 

Outra solução para um aviso "... hidden method calling ..."

Na linha 327 de Actor_Critic.mq5:


Estou recebendo o aviso "comportamento obsoleto, a chamada de método oculto será desativada em uma versão futura do compilador MQL":

Isso se refere à chamada de "Maximum(0, 3)", que deve ser alterada para:

Portanto, nesse caso, temos que adicionar "CArrayFloat::" para especificar o método em questão. O método Maximum() é sobrescrito pela classe CBufferFloat, mas esse método não tem parâmetros.

Embora a chamada não deva ser ambígua porque tem dois parâmetros, o compilador quer que estejamos atentos ;-)

 
Zhongquan Jiang #:

A inicialização falhou devido à ausência do EURUSD_PERIOD_H1_REINFORCE.nnw ao executar as seguintes instruções

if(!Actor.Load(ACTOR + ".nnw", dError, temp1, temp2, dtStudied, false) ||

!Critic.Load(CRITIC + ".nnw", dError, temp1, temp2, dtStudied, false))

retorna INIT_FAILED;


Como resolver esse problema? Obrigado.


Nessas linhas, a estrutura de rede que deve ser treinada é carregada. Você precisa criar a rede e salvá-la no arquivo nomeado antes de iniciar esse EA. Você pode usar, por exemplo, a ferramenta de criação de modelos no Artigo nº 23

https://www.mql5.com/pt/articles/11273

Neural networks made easy (Part 25): Practicing Transfer Learning
Neural networks made easy (Part 25): Practicing Transfer Learning
  • www.mql5.com
In the last two articles, we developed a tool for creating and editing neural network models. Now it is time to evaluate the potential use of Transfer Learning technology using practical examples.