Discussão do artigo "Redes neurais em trading: Previsão probabilística de séries temporais (Conclusão)"

 

Novo artigo Redes neurais em trading: Previsão probabilística de séries temporais (Conclusão) foi publicado:

Apresentamos a você o framework K²VAE e uma variante de como integrar as abordagens propostas a um sistema de trading. Você verá como a abordagem híbrida Koopman-Kalman-VAE ajuda a construir modelos adaptativos e interpretáveis. Ao final do artigo, veremos os resultados práticos obtidos com as soluções implementadas.

Como já mencionamos, o treinamento do modelo é realizado em duas etapas sequenciais. Primeiro, realizamos o treinamento offline com 15 anos de histórico do par EURUSD no timeframe H1. Esse conjunto de dados abrange todos os tipos de situações de mercado: de longos períodos laterais a tendências bruscas, de fases tranquilas a picos de volatilidade. Graças a isso, o modelo conseguiu aprender a diversidade do comportamento do mercado. O Encoder aprendeu a destacar os principais padrões e a transformar o estado do mercado em uma representação compacta, porém informativa, que se tornou a base para a tomada de decisões pelo Agente. Já o Actor, utilizando o feedback do Critic e do Director, formou uma estratégia robusta, capaz de operar com eficiência em diferentes condições.

Em seguida, veio a segunda etapa: o treinamento online com dados de 2024, organizado no testador de estratégias do MetaTrader 5. Aqui, o modelo operou em um regime próximo ao tempo real, analisando o mercado vela a vela. Ele enfrentou ruídos, flutuações aleatórias e distorções características do mercado real. Essa abordagem permitiu não apenas continuar o treinamento do modelo, mas também adaptar seu comportamento à dinâmica real, aprimorar a estratégia e aumentar a robustez em condições de incerteza.

Após a conclusão do treinamento, realizamos o teste com novos dados, as cotações de janeiro a março de 2025, mantendo todos os parâmetros usados durante o treinamento. Os resultados do teste são apresentados abaixo.

Os resultados do teste mostram que o modelo apresentou lucro positivo no período histórico selecionado. O lucro líquido total foi de $821.90 com um depósito inicial de $100.0, o que indica crescimento do capital. Ao mesmo tempo, cabe observar que o Profit Factor ficou em 1.06, o que indica uma ligeira superioridade dos lucros sobre as perdas.


Autor: Dmitriy Gizlyk

 

Estou tendo alguns problemas com o VAE.mqh e descobri que o seguinte funciona muito bem para contornar o problema.

bool CVAE::calcInputGradients(CNeuronBaseOCL *NeuronOCL)
  {
   if(!OpenCL || !NeuronOCL)
      return false;
//---
   if(!OpenCL.SetArgumentBuffer(def_k_VAECalcHiddenGradient, def_k_vaehg_input, NeuronOCL.getOutput().GetIndex()))
      return false;
   if(!OpenCL.SetArgumentBuffer(def_k_VAECalcHiddenGradient, def_k_vaehg_inp_grad, NeuronOCL.getGradient().GetIndex()))
      return false;
   if(!OpenCL.SetArgumentBuffer(def_k_VAECalcHiddenGradient, def_k_vaehg_random, m_cRandom.GetIndex()))
      return false;
   if(!OpenCL.SetArgumentBuffer(def_k_VAECalcHiddenGradient, def_k_vaehg_gradient, Gradient.GetIndex()))
      return false;
   if(!OpenCL.SetArgument(def_k_VAECalcHiddenGradient, def_k_vaehg_kld_mult, m_fKLD_Mult))
      return false;
      
   // Calcular tamanhos de trabalho adequados
   uint neurons_count = (uint)Neurons();
   uint local_size = 64;  // ou 32, 128, 256, dependendo de sua GPU
   
   // Arredondar o tamanho global para que seja divisível pelo tamanho local
   uint global_size = ((neurons_count + local_size - 1) / local_size) * local_size;
   
   uint work_offset[] = {0};
   uint work_size[] = {global_size};
   uint local_work_size[] = {local_size};
   
   if(!OpenCL.Execute(def_k_VAECalcHiddenGradient, 1, work_offset, work_size, local_work_size))
      return false;
  //--- 
   return true;
  }
 
Eu também tentei o mesmo método de teste. Primeiro, usei o Study para aprender com dados históricos 1.000.000 vezes, gerando os arquivos nnw relevantes. Depois, usei o StudyOnline para aprender com dados de um ano (durante esse período, não houve receita; a conta de US$ 10.000 ficou sem dinheiro rapidamente e, após o término da simulação, atualizei parte dos arquivos nnw). Por fim, os resultados do teste foram basicamente os mesmos do StudyOnline (sem lucro).