Discusión sobre el artículo "Random Decision Forest en el aprendizaje reforzado" - página 3

[Eliminado]  
FxTrader562:

Gracias por compartir este artículo tan útil.

Yo estaba tratando de implementar indicadores adicionales para el código, pero no soy un experto programador y no buena experiencia en cuanto a cómo utilizar las funciones de membresía y por lo tanto, no podía conseguir mi cabeza como la forma de añadir más indicadores que se utilizarán junto con las reglas dentro de la OnInit() función. El código sólo contiene el indicador RSI y crea las reglas de COMPRA y VENTA a partir de él. ¿Puede usted por favor proporcionar algunos códigos de ejemplo más de indicadores como la media móvil o MACD o estocástico o SAR para ser utilizado en el código?

Especialmente, quiero saber cómo crear reglas y añadir a las condiciones de entrada mientras se compara con el precio actual. El principal problema con el código actual es que a veces mantiene operaciones perdedoras durante mucho tiempo, mientras que el cierre de operaciones rentables rápidamente y por lo que cualquier consejo sobre esto será apreciado. Creo que es necesario filtrar más la lógica de salida.

También, tengo una pregunta si usted puede contestar por favor:

¿El archivo OPT se actualiza continuamente con el fin de mejorar las entradas y salidas en el tiempo después de mucho tiempo por el ajuste fino de la propia política?

¿O el EA sólo utiliza el probador de estrategia para optimizar los valores de EA y utiliza los mismos valores de entrada y salida de los cuales fueron rentables recientemente como EA optimizado regular?

Me refiero a que, al igual que otros EA de red neuronal, ¿ajusta su política general de entrada y salida de operaciones durante el transcurso de las operaciones?

Hola. Por favor, espere al próximo artículo. Allí voy a examinar el trabajo de otros indicadores, así como con una variedad de agentes. Y sin lógica difusa.

 
Maxim Dmitrievsky:

Hola. Por favor, espere a que el próximo artículo. Allí voy a examinar el trabajo de otros indicadores, así como con una variedad de agentes. Y sin lógica difusa.

Gracias por su rápida respuesta ... Voy a esperar ...

Si no te importa por favor puede mencionar cuando usted está planeando para publicar el próximo artículo con el código de implementación del indicador...

[Eliminado]  
FxTrader562:

Gracias por su rápida respuesta...esperaré..

Si no te importa por favor puede mencionar cuando usted está planeando para publicar el próximo artículo con el código de implementación del indicador...

Creo que 1-2 semanas en ruso, y luego lo traducirán

 

Pero incluso si el artículo será en ruso, todavía estará disponible para su descarga y uso en MT5 regular. ¿verdad?

Por cierto, tengo algunas sugerencias para mejorar la lógica de la función de recompensa. Ya que no estoy 100% seguro acerca de la codificacion por ahora y por lo tanto, no estoy jugando con el codigo ahora, pero si usted encuentra mis sugerencias utiles, por favor considere implementarlas en la proxima version.

Quiero que la función de recompensa recompense al agente basándose en la suma de las recompensas de 2 factores:

1.Beneficio neto( Orderprofit()+OrderCommission()+OrderSwap()): NetProfit(NP) para un cierre de orden particular Reward(RW1) será tratado por un Reward Factor(RF1) cuyo valor será cualquier cosa mayor que 1 de modo que mayor sea el beneficio de la operación mayor será la recompensa y mayor será la pérdida mayor será la recompensa negativa.

RW1=NP*MathPow(RF1,2); Por ejemplo, el valor de RF1 puede ser 1.1 o 1.2 o más.

Es decir, RW1 para un cierre de orden en particular debe ser la multiplicación de la ganancia neta (ganancia positiva o negativa) junto con el cuadrado del factor de recompensa (RF1).

2. Número de ganancias o pérdidas consecutivas (NCount): Otra Recompensa(RW2) debe ser dada en base a las Ganancias o pérdidas consecutivas por el Factor de Recompensa(RF2) y el número de pérdidas o ganancias consecutivas(NCount).

Antes de dar una recompensa el EA debe comprobar el beneficio o pérdida de la última orden para ese símbolo en particular y si se trata de una pérdida neta teniendo en cuenta la OrderCommission y OrderSwap, entonces se dará una recompensa más negativa y si la orden se cierra en beneficio, entonces se dará una recompensa más positiva.

RW2=MathPow(NCount,RF2); El valor de RF2 puede ser 1.1 o 1.2 o más

Por ejemplo, si la orden cerrada actual es positiva y la orden anterior es negativa, entonces NCount=1-1=0 y RW2 será cero. O si el pedido cerrado actual es positivo y el pedido anterior es positivo, entonces NCount=1+1=2 y entonces RW2=(2)^(1.2) cosiderando el valor de RF2=1.2

Ahora la Recompensa Neta (RW) para el cierre de una orden en particular debería ser RW=RW1+RW2.

Si usted puede implementar el código en la próxima versión de la EA, entonces será genial o si me puede decir dónde voy a añadir este código, entonces voy a tratar de hacerlo yo mismo.

La mejor parte que creo que será si podemos declarar RF1 y RF2 como variable global para la optimización por la EA de modo que se encuentra la mejor combinación de RF1 y RF2, mientras que las pruebas de avance de la EA

 

Hola Maxim Dmitrievsky,

Perdona que te haga tantas preguntas...porque este artículo me ha resultado muy útil mientras estudiaba e implementaba el aprendizaje automático a mql5..... Por supuesto, estoy esperando tu próximo artículo..

Mi pregunta es ¿cómo entrenar al agente para que desarrolle una política para maximizar el beneficio, NO el número de operaciones rentables?

He estudiado el código de updateReward() y updatePolicy() y me parece que sólo optimiza el número de operaciones rentables ignorando el beneficio de cada operación e ignorando si el saldo de la cuenta está creciendo o no.

Así que, ¿podría por favor mostrar un poco de luz sobre cómo integrar las cantidades de beneficios a la función de recompensa y hay una manera de hacerlo?

Traté de implementar mi propio código propuesto anteriormente, pero probablemente no funciona (aunque no había ningún error de codificación) o no sé cómo implementar. O probablemente, no entendí completamente lo que hace exactamente la función updateReward() y updatePolicy(). Apreciaría mucho su valiosa contribución si pudiera explicar un poco más sobre el código dentro de las dos funciones y cómo y qué es exactamente lo que almacena la RDFPolicyMatrix y cómo se utilizan los valores durante las entradas de la siguiente operación.

Gracias de antemano.

 

Puedo ver los mejores resultados del EA inmediatamente después de la optimización y a medida que el agente se entrena, los resultados empeoran día a día. Así que me preguntaba si es posible lanzar el optimizador desde el código después de cada pérdida. Es decir, en lugar de actualizar la recompensa por cada pérdida, el EA debería optimizarse para los datos de los últimos dos días hasta hoy.

Si el autor o alguien más sabe cómo implementar esto, entonces por favor compártalo.

 
Maxim Dmitrievsky:
No se trata más de árboles, sino de entrenar varios bosques con los mismos datos, sí. Porque el proceso de construcción es aleatorio y los resultados pueden variar. Me sorprendió que un conjunto de bosques da una mejora notable, es decir, entrenar varios bosques en los mismos datos y promediar los resultados. (5-15 piezas) También puedes hacer diferentes ajustes. Incluso mejores resultados deben ser en caso de bousting, pero no he llegado allí todavía.

Gracias por el artículo, es informativo y hay algo que tomar (al menos para mí).

Según tengo entendido, la lógica difusa se tomó como ejemplo para el artículo. No hay prohibiciones para obtener directamente el valor de ts (lo he implementado, no noté ninguna diferencia especial en la eficiencia - bosque sustituye completamente la lógica difusa.). Se puede considerar como otra forma de recompensar el objeto. Como me parece a mí (no puedo confirmar con el programa), aumentar el número de funciones de membresía optimizado no dará una ganancia, ya ahora el bosque obstruye la lógica difusa. Traté de promediar los resultados de los bosques (incluyendo difusa como en el artículo), el resultado mejorado, después de las redes neuronales de AlgLIB me sorprendió la velocidad de aprendizaje sobre los valores de varios años. Para establecer diferencias obvias que he utilizado la segunda forma de creación de bosques con indicación explícita de la utilización de diferente número de indicadores (bueno, para jugar con la composición de los indicadores ni siquiera se discute):

CDForest::DFBuildRandomDecisionForestX1(RDFpolisyMatrix,numberOfsamples,iNeuronEntra,iNeuronSal,number_of_trees,7,regularization,RDFinfo,RDF[0],RDF_report);
CDForest::DFBuildRandomDecisionForestX1(RDFpolisyMatrix,numberOfsamples,iNeuronEntra,iNeuronSal,number_of_trees,5,regularization,RDFinfo,RDF[0],RDF_report);

¿Puede decirme qué otras formas de recompensa se puede probar? Estoy interesado en la creación de un conjunto de bosques con diferentes formas de recompensa, por cierto, ¿el conjunto se llama promediación? o una fórmula especial para combinar el resultado? No creo que AlgLIB tenga conjuntos de bosques?

Puede ser útil para alguien, es inconveniente almacenar los datos en un montón de archivos cuando hay varios bosques, así que decidí hacerlo de esta manera:

StructToHiden strHider;
   strHider.iNeuronEntra=iNeuronEntra;
   strHider.iNeuronSal=iNeuronSal;
   strHider.iTrees=number_of_trees;
   DataTekOpt=TimeLocal();
   strHider.DataTekOpt=DataTekOpt;
   
   int filehnd=FileOpen(NameFile+"_fuzzy.txt",FILE_WRITE|FILE_BIN|FILE_COMMON);
      strHider.iBufsize=RDFfuzzy.m_bufsize;
      FileWriteStruct(filehnd, strHider);//cabecera del archivo de registro
      FileWriteArray(filehnd,RDFfuzzy.m_trees); //registro de árbol
      FileClose(filehnd);


int filehnd=FileOpen(NameFile+"_fuzzy.txt",FILE_READ|FILE_BIN|FILE_COMMON);
      FileReadStruct(filehnd,strHider);//leer la cabecera del fichero
      RDFfuzzy.m_nvars=strHider.iNeuronEntra;
      RDFfuzzy.m_nclasses=strHider.iNeuronSal;
      RDFfuzzy.m_ntrees=strHider.iTrees;
      RDFfuzzy.m_bufsize=strHider.iBufsize;
      DataTekOpt=strHider.DataTekOpt;
      FileReadArray(filehnd,RDFfuzzy.m_trees);//leer el árbol
      FileClose(filehnd);
La estructura es descrita por cualquier estructura, como su longitud es fija, resulta almacenar tanto ella como el bosque en un fichero (la estructura está necesariamente al principio). Un bosque - un archivo.

Gracias de nuevo por el artículo, gracias a él empecé a estudiar AlgLIB en serio.
[Eliminado]  
mov:

Gracias por el artículo, informativo y en aplicación hay mucho que asimilar (al menos para mí).

Según tengo entendido, la lógica difusa se tomó como ejemplo para el artículo. No hay prohibiciones para obtener ts valor directamente (lo he implementado, no noté ninguna diferencia especial en la eficiencia - bosque sustituye por completo la lógica difusa). Se puede considerar como otra forma de recompensar el objeto. Como me parece a mí (no puedo confirmar con el programa), aumentar el número de funciones de membresía optimizado no dará una ganancia, ya ahora el bosque obstruye la lógica difusa. Traté de promediar los resultados de los bosques (incluyendo difusa como en el artículo), el resultado mejorado, después de las redes neuronales de AlgLIB me sorprendió la velocidad de aprendizaje sobre los valores de varios años. Para establecer diferencias obvias que he utilizado la segunda forma de creación de bosques con indicación explícita de la utilización de diferente número de indicadores (bueno, para jugar con la composición de los indicadores ni siquiera se discute):

¿Puede decirme qué otras formas de recompensa se puede intentar? Estoy interesado en la creación de un conjunto de bosques con diferentes formas de recompensa, por cierto, ¿el conjunto se llama promediación? o una fórmula especial para combinar el resultado? No creo que AlgLIB tenga conjuntos de bosques?

Puede ser útil para alguien, es inconveniente almacenar los datos en un montón de archivos cuando hay varios andamios, así que decidí hacerlo de esta manera:

La estructura es descrita por cualquier estructura, como su longitud es fija, resulta almacenar tanto ella como el bosque en un fichero (la estructura está necesariamente al principio). Un bosque - un archivo.

Gracias de nuevo por el artículo, gracias a él empecé a estudiar AlgLIB en serio.

Sí, la lógica difusa como ejemplo. Yo mismo ya he renunciado a ella, porque después de varios experimentos resultó que no tiene mucho sentido utilizarla en esta forma.

Usted puede tratar de recompensar en forma de Sharpe Ratio actual o R^2 en las ofertas. O usted puede evaluar no los resultados de las operaciones en absoluto, pero, por ejemplo, las condiciones del mercado - si usted compró y la tendencia ha estado creciendo durante algún tiempo, la señal es adecuada. Algo por el estilo.

Por conjunto me refería a la simple media de los resultados, sí. Pero para cada bosque puede establecer sus propios predictores y / u objetivos.

Estoy planeando escribir un artículo adicional sólo con el conjunto de agentes + algunas ventajas más, en la forma de una clase. Probablemente lo terminaré pronto.

Un punto más importante no tocado en este artículo - la estimación de los errores de clasificación del bosque en las muestras de entrenamiento y de prueba (oob), este punto también será descrito.

Gracias por los ejemplos de código, también hay una opción de guardar a través de la serialización

 
Maxim Dmitrievsky: + algunas ventajas más, en forma de clase. Probablemente lo terminaré pronto.

Por favor, si es posible, considere como un ejemplo de la función de formación por la historia, por ejemplo, cuando se lanza un Asesor Experto (emulación de comercio), sin utilizar un probador de estrategias. Traté de hacerlo yo mismo, pero puedo ver que mis manos están torcidas, funciona, pero es muy inferior en la eficiencia de la formación a la formación en el probador de estrategias.

[Eliminado]  
mov:

Por favor, si es posible, considere como un ejemplo de la función de formación por la historia, por ejemplo, cuando se lanza un Asesor Experto (emulación de comercio), sin utilizar el probador de estrategias. Traté de hacerlo yo mismo, pero puedo ver que mis manos están torcidas, funciona, pero es muy inferior en la eficiencia de la formación a la formación en el probador de estrategias.

Sí, un probador virtual también está en los planes, pero por ahora tenemos que perfeccionar otros aspectos, por ejemplo, la selección automática y la reducción de los predictores son los más importantes ahora, para que el modelo no sería tanto reentrenado en la historia.