Discussão do artigo "Aplicando o método de Monte Carlo no aprendizado por reforço" - página 5

 

Obrigado, Maxim.

Tenho brincado com o código e introduzi diferentes tipos de dados para os vetores de entrada de recursos. Tentei Close, Open, High, Low, Price Typical, Tick Volumes e seus derivados.

Eu estava tendo problemas com o Otimizador reclamando de "algum erro após a conclusão da passagem", mas finalmente consegui descobrir isso: os erros do otimizador ocorrem se os dados do vetor de entrada tiverem valores zero.

Quando eu estava construindo uma derivada, por exemplo, Close[1]-Close[2], às vezes os valores próximos são os mesmos, resultando em uma derivada de zero. Para esses tipos de valores de vetores de entrada, descobri que a correção mais simples era adicionar uma constante, digamos 1000, a todos os valores de vetores, o que eliminava os erros do otimizador e ainda permitia que o RDF funcionasse.

Também notei a consequência não intencional de executar os mesmos testes várias vezes: a quantidade de ajuste de curva aumenta para o período testado. Às vezes, é melhor excluir os arquivos RDF registrados e executar a otimização novamente.

Ainda estou experimentando e tenho mais ideias para outros tipos de recursos.


[Excluído]  
Mark Flint:

Obrigado, Maxim.

Tenho brincado com o código e introduzi diferentes tipos de dados para os vetores de entrada de recursos. Tentei Close, Open, High, Low, Price Typical, Tick Volumes e seus derivados.

Eu estava tendo problemas com o otimizador que reclamava de "algum erro após a conclusão da passagem", mas finalmente consegui descobrir isso: os erros do otimizador ocorrem se os dados do vetor de entrada tiverem valores zero.

Quando eu estava construindo uma derivada, por exemplo, Close[1]-Close[2], às vezes os valores próximos são os mesmos, resultando em uma derivada de zero. Para esses tipos de valores de vetor de entrada, descobri que a correção mais simples era adicionar uma constante, digamos, 1000, a todos os valores de vetor, o que eliminava os erros do otimizador e ainda permitia que o RDF funcionasse.

Também notei a consequência não intencional de executar os mesmos testes várias vezes: a quantidade de ajuste de curva aumenta para o período testado. Às vezes, é melhor excluir os arquivos RDF registrados e executar a otimização novamente.

Ainda estou experimentando e tenho mais ideias para outros tipos de recursos.


Olá, Mark. Depende do algoritmo de seleção de recursos (no caso deste artigo, é 1 recurso/outro recurso (usando retornos de preço) na "função de eliminação recursiva"), portanto, se você tiver "0" no divisor, esse "algum erro" pode ocorrer se você estiver usando cl[1]-cl[2].

Sim, diferentes execuções do otimizador podem ser diferentes, pois ele usa uma amostragem aleatória, além do algoritmo aleatório RDF. Para corrigir isso, você pode usar MathSrand(number_of_passes) na função expert OnInint() ou outro número fixo.

[Excluído]  
Maxim Dmitrievsky:

Sim, se você reescrever toda a lógica (incluindo RF) em kernels de cl aberto :) a floresta aleatória também tem a pior viabilidade e paralelismo de gpu

Maxim, estava examinando o seu código e percebi que, embora os arquivos com o melhor modelo, recursos e valores de parâmetros sejam salvos durante a otimização ("OFFLINE"), a política do agente de atualização e a recompensa do agente de atualização também estão "OFFLINE". A política do agente de atualização e a recompensa do agente de atualização também estão "OFFLINE" se você decidir executar o seu EA, então como as recompensas e a política estão sendo atualizadas enquanto o EA está sendo executado ao vivo, já que MQLInfoInteger(MQL_OPTIMIZATION) == true no modo offline e quando executado em uma conta de demonstração ou ao vivo com o seu EA MQLInfoInteger(MQL_OPTIMIZATION) == false. Estou perdendo alguma coisa ????


//+------------------------------------------------------------------+
//|Atualização da política do agente|
//+------------------------------------------------------------------+
CRLAgent::updatePolicy(double action,double &featuresValues[]) {
   if(MQLInfoInteger(MQL_OPTIMIZATION)) {
      numberOfsamples++;
      RDFpolicyMatrix.Resize(numberOfsamples,features+2);
      //variáveis de entrada
      for(int i=0;i<features;i++)
         RDFpolicyMatrix[numberOfsamples-1].Set(i,featuresValues[i]);
      //variáveis de saída
      RDFpolicyMatrix[numberOfsamples-1].Set(features,action);
      RDFpolicyMatrix[numberOfsamples-1].Set(features+1,1-action);
     }
  }
//+------------------------------------------------------------------+
//|Recompensa de atualização do agente|
//+------------------------------------------------------------------+
CRLAgent::updateReward(void) {
   if(MQLInfoInteger(MQL_OPTIMIZATION)) {
      if(getLastProfit()>0) return;
      double randomReward = (getLastOrderType()==0) ? 1 : 0;
      RDFpolicyMatrix[numberOfsamples-1].Set(features,randomReward);
      RDFpolicyMatrix[numberOfsamples-1].Set(features+1,1-randomReward);
     }
  }
[Excluído]  
developeralgo:

Olá, Maxim, estava examinando seu código. Percebi que, embora os arquivos com o melhor modelo, recursos e valores de parâmetros sejam salvos durante a otimização ("OFFLINE"). A política do agente de atualização e a recompensa do agente de atualização também estão "OFFLINE" se você decidir executar o seu EA, então como as recompensas e a política estão sendo atualizadas enquanto o EA está sendo executado ao vivo, já que MQLInfoInteger(MQL_OPTIMIZATION) == true no modo offline e quando executado em uma conta de demonstração ou ao vivo com o seu EA MQLInfoInteger(MQL_OPTIMIZATION) == false. Estou perdendo alguma coisa ????


Olá, a política e as recompensas não são atualizadas na negociação real, elas são necessárias apenas para o aprendizado da floresta aleatória no otimizador.

 
MetaQuotes Software Corp.:

Novo artigo Aplicando o método Monte Carlo no aprendizado por reforço foi publicado:

Autor: Maxim Dmitrievsky

Há este arquivo que está faltando, " #include <MT4Orders.mqh> " e as funções se parecem com a função MT4.

Então, trata-se de um especialista em MT4 ou MT5?

[Excluído]  
ffoorr:

Há um arquivo que está faltando, " #include <MT4Orders.mqh> " e as funções se parecem com as funções do MT4.

Então, trata-se de um especialista em MT4 ou MT5?

Essa biblioteca permite que você use o estilo de ordens do MT4 no MT5

https://www.mql5.com/ru/code/16006

MT4Orders
MT4Orders
  • www.mql5.com
Данная библиотека позволяет работать с ордерами в MQL5 (MT5-hedge) точно так же, как в MQL4. Т.е. ордерная языковая система (ОЯС) становится идентичной MQL4. При этом сохраняется возможность параллельно использовать MQL5-ордерную систему. В частности, стандартная MQL5-библиотека будет продолжать полноценно работать. Выбор между ордерными...
 
Maxim Dmitrievsky:

ok, obrigado

 

errado ou obsoleto:
CRLAgent::getRDFstructure(void) { ......

correto:
void CRLAgent::getRDFstructure(void) {......

Outra versão do compilador?

 
Otto Pauser:

incorreto ou obsoleto:
CRLAgent::getRDFstructure(void) { ......

correto:
void CRLAgent::getRDFstructure(void) {......

Outra versão do compilador?

Sim, eles adicionaram uma verificação mais rigorosa na última versão.

 

Olá, Maxim, obrigado pelo seu trabalho. Eu estava tentando testar seu código, mas ele mostra alguns erros no arquivo mq4 com o seguinte texto

'getRDFstructure' - função já definida e com tipo diferente RL_Monte_Carlo.mqh 76 11

'RecursiveElimination' - função já definida e de tipo diferente RL_Monte_Carlo.mqh 133 11

'updatePolicy' - função já definida e de tipo diferente RL_Monte_Carlo.mqh 221 11

'updateReward' - função já definida e de tipo diferente RL_Monte_Carlo.mqh 236 11

'setAgentSettings' - função já definida e de tipo diferente RL_Monte_Carlo.mqh 361 12

'updatePolicies' - função já definida e de tipo diferente RL_Monte_Carlo.mqh 373 12

'updateRewards' - função já definida e com tipo diferente RL_Monte_Carlo.mqh 380 12

Você sabe como resolver esse problema?