Discusión sobre el artículo "Aplicando el método de Montecarlo al aprendizaje por refuerzo" - página 5

 

Gracias Maxim.

He estado jugando con el código y he introducido diferentes tipos de datos para los vectores de entrada de características. He probado con Close, Open, High, Low, Price Typical, Tick Volumes y derivados de éstos.

Estaba teniendo problemas con el optimizador de quejarse de "algún error después de que el pase completado", pero finalmente se las arregló para rastrear esto: los errores del optimizador se producen si los datos del vector de entrada tiene cualquier valor cero.

Cuando estaba construyendo una derivada, por ejemplo Close[1]-Close[2], a veces los valores cercanos son los mismos dando una derivada de cero. Para este tipo de valores vectoriales de entrada, la solución más sencilla era añadir una constante, por ejemplo 1000, a todos los valores vectoriales. Esto solucionaba los errores del optimizador y permitía que el RDF funcionara.

También he notado la consecuencia no deseada de ejecutar las mismas pruebas una y otra vez, la cantidad de ajuste de curvas aumenta para el período probado. A veces es mejor borrar los archivos RDF grabados y ejecutar la optimización de nuevo.

Sigo experimentando y tengo más ideas para otros tipos de funciones.


[Eliminado]  
Mark Flint:

Gracias Maxim.

He estado jugando con el código e introducido diferentes tipos de datos para los vectores de entrada de características. He probado Close, Open, High, Low, Price Typical, Tick Volumes y derivados de estos.

Estaba teniendo problemas con el optimizador de quejarse de "algún error después de la pasada completa", pero finalmente logró rastrear esto: los errores del optimizador se producen si los datos del vector de entrada tiene cualquier valor cero.

Cuando estaba construyendo una derivada, por ejemplo Close[1]-Close[2], a veces los valores cercanos son los mismos dando una derivada de cero. Para este tipo de valores del vector de entrada, encontré que la solución más sencilla era añadir una constante, digamos 1000, a todos los valores del vector. Esto solucionaba los errores del optimizador y permitía que el RDF funcionara.

También he notado la consecuencia no deseada de ejecutar las mismas pruebas una y otra vez, la cantidad de ajuste de curvas aumenta para el período probado. A veces es mejor borrar los archivos RDF grabados y ejecutar la optimización de nuevo.

Sigo experimentando y tengo más ideas para otros tipos de funciones.


Hola, Mark. Depende del algoritmo de selección de características (en el caso de este artículo se trata de 1 característica/otra característica (utilizando los rendimientos de los precios) en la "función de eliminación recursiva"), por lo que si tienes "0" en el divisor puede producirse "algún error" si utilizas cl[1]-cl[2].

Sí, las diferentes ejecuciones del optimizador pueden diferir, porque se utiliza un muestreo aleatorio, también algoritmo aleatorio RDF. Para solucionar esto puede utilizar MathSrand(number_of_passes) en el experto OnInint() func, u otro número fijo.

[Eliminado]  
Maxim Dmitrievsky:

Si, si reescribes toda la logica (RF include) en kernels open cl :) tambien random forest tiene la peor viabilidad de gpu y paralelismo

Hola Maxim, estaba mirando tu código. Me di cuenta de que a pesar de que los archivos con el mejor modelo, características y valores de los parámetros se guardan durante la optimización (" OFFLINE "). La política del agente de actualización y la recompensa del agente de actualización son también "OFFLINE" si decide ejecutar su EA, así que ¿cómo se actualizan las recompensas y la política, mientras que el EA se está ejecutando en vivo desde MQLInfoInteger (MQL_OPTIMIZATION) = = true en modo offline y cuando se ejecuta en una cuenta demo o real con su EA MQLInfoInteger (MQL_OPTIMIZATION) = = false . Me estoy perdiendo algo ????


//+------------------------------------------------------------------+
//|Actualizar política de agentes|
//+------------------------------------------------------------------+
CRLAgent::updatePolicy(double action,double &featuresValues[]) {
   if(MQLInfoInteger(MQL_OPTIMIZATION)) {
      numberOfsamples++;
      RDFpolicyMatrix.Resize(numberOfsamples,features+2);
      //variables de entrada
      for(int i=0;i<features;i++)
         RDFpolicyMatrix[numberOfsamples-1].Set(i,featuresValues[i]);
      //variables de salida
      RDFpolicyMatrix[numberOfsamples-1].Set(features,action);
      RDFpolicyMatrix[numberOfsamples-1].Set(features+1,1-action);
     }
  }
//+------------------------------------------------------------------+
//|Update agent reward|
//+------------------------------------------------------------------+
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);
     }
  }
[Eliminado]  
developeralgo:

Me he dado cuenta de que aunque los archivos con el mejor modelo, las características y los valores de los parámetros se guardan durante la optimización (" OFFLINE "). La política del agente de actualización y la recompensa del agente de actualización son también "OFFLINE" si decide ejecutar su EA, así que ¿cómo se actualizan las recompensas y la política, mientras que el EA se está ejecutando en vivo desde MQLInfoInteger (MQL_OPTIMIZATION) = = true en modo offline y cuando se ejecuta en una cuenta demo o real con su EA MQLInfoInteger (MQL_OPTIMIZATION) = = false . Me estoy perdiendo algo ????


Hola, la política y las recompensas no se actualizan en el comercio real, sólo es necesario para el aprendizaje de bosque aleatorio en el optimizador.

 
MetaQuotes Software Corp.:

Se ha publicado un nuevo artículo sobre la aplicación del método de Montecarlo en el aprendizaje por refuerzo:

Autor: Maxim Dmitrievsky

hay este archivo que falta, " #include <MT4Orders.mqh> " y las fonctions parecen MT4 fonction.

Entonces, ¿es un experto MT4 o un experto MT5?

[Eliminado]  
ffoorr:

hay este archivo que falta, " #include <MT4Orders.mqh> " y las fonctions parecen MT4 fonction.

Entonces, ¿es un experto MT4 o un experto MT5?

Esta librería te permite usar el estilo de órdenes mt4 en mt5

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

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

ok gracias

 

incorrecto o obsoleto:
CRLAgent::getRDFstructure(void) { ......

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

¿Otra versión del compilador?

 
Otto Pauser:

incorrecto o obsoleto:
CRLAgent::getRDFstructure(void) { ......

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

¿Otra versión del compilador?

Sí, han añadido una comprobación más estricta en la última versión.

 

Hola Maxim, gracias por tu trabajo, estaba tratando de probar tu código, sin embargo me muestra algunos errores en el archivo mq4 con el siguiente texto

getRDFstructure' - function already defined and has different type RL_Monte_Carlo.mqh 76 11

RecursiveElimination' - función ya definida y de tipo diferente RL_Monte_Carlo.mqh 133 11

updatePolicy" - función ya definida y de tipo diferente RL_Monte_Carlo.mqh 221 11

updateReward" - función ya definida y de tipo diferente RL_Monte_Carlo.mqh 236 11

setAgentSettings" - función ya definida y de tipo diferente RL_Monte_Carlo.mqh 361 12

updatePolicies' - función ya definida y de tipo diferente RL_Monte_Carlo.mqh 373 12

updateRewards' - función ya definida y de tipo diferente RL_Monte_Carlo.mqh 380 12

¿Sabes cómo resolver este problema?