Aprendizaje automático en el trading: teoría, práctica, operaciones y más - página 1064

 
Maxim Dmitrievsky:

Porque los modelos siguen siendo una mierda ^) con grandes errores, necesitan modelos que funcionen más tiempo

por ejemplo 2 meses de aprendizaje y 1 semana de comercio

Puede que tengas razón, pero no creo que se descubra ningún modelo de este tipo por parte del RDF que funcione incluso durante un día completo hasta que podamos hacer simulaciones ilimitadas de velas aleatorias similares a "ALPHA ZERO" algo.

Porque los mercados cambian casi cada hora y un modelo fallará terriblemente si de repente se produce una noticia o si el mercado cambia su comportamiento por alguna razón. Pero si hemos hecho millones de simulaciones de velas, entonces probablemente el sistema puede recuperarse con una pérdida mínima ante un cambio de mercado y puede recuperar rápidamente la pérdida después. Eso parece ser posible.

Voy a probar tanto tu método de selección de modelos como mi método de simulación de velas para ver cómo va todo:))

Por cierto, probé con 1 día de entrenamiento, 5 días de entrenamiento, etc. y falló al día siguiente:))))))))))))))))

Así que un modelo puede no funcionar... aunque puede que me equivoque...

 

Además, tengo una petición más Maxim...

Cuando publiques tu artículo, por favor, intenta comentar el código lo máximo posible para que sea rápido y fácil para los demás entender el código y así poder avanzar más rápido...

De lo contrario, si me lleva mucho tiempo entender el código, me llevará aún más tiempo modificarlo.

Así que te pido que añadas tantos comentarios y explicaciones del código como sea posible. Por ahora intentaré entenderlo rápidamente y te preguntaré si no entiendo algo:))

 
FxTrader562:

Además, tengo una petición más Maxim...

Cuando publiques tu artículo, por favor, intenta comentar el código lo máximo posible para que sea rápido y fácil para los demás entender el código y así poder avanzar más rápido...

De lo contrario, si me lleva mucho tiempo entender el código, me llevará aún más tiempo modificarlo.

Así que te pido que añadas tantos comentarios y explicaciones del código como sea posible. Por ahora intentaré entenderlo rápidamente y te preguntaré si no entiendo algo:))

Ok, ahora solo cambio constantemente muchas cosas y no tiene sentido comentarlo

también puedes pensar en cómo cambiar las salidas... tal vez utilizar zigzag con diferentes ajustes en lugar de la función de recompensa o algo más
 
Maxim Dmitrievsky:

Ok, ahora solo cambio constantemente muchas cosas y no tiene sentido comentarlo

también puedes pensar en cómo cambiar las salidas... tal vez utilizar zigzag con diferentes ajustes en lugar de la función de recompensa o algo más

Sólo he echado un vistazo rápido al código. Pero hasta ahora no he descubierto exactamente dónde están los indicadores o cómo decide las entradas de comercio. Así que no estoy seguro de qué hacer con la salida. ¿Te refieres a la salida con GDMH?

Acabo de hacer la prueba con varias configuraciones, pero parece colocar operaciones completamente al azar.

Además, en la fase de pruebas no crea los archivos de texto "Mtrees".

Me refiero a que el código que has proporcionado no está completo, ¿verdad? O es capaz de colocar operaciones si se adjunta directamente al gráfico sin optimización.

 
FxTrader562:

Sólo he echado un vistazo rápido al código. Pero hasta ahora no he descubierto exactamente dónde están los indicadores o cómo decide las entradas de comercio. Así que no estoy seguro de qué hacer con la salida.

Acabo de ejecutar la prueba con varias configuraciones, pero parece colocar operaciones completamente al azar, así como mostró un comportamiento extraño y por lo tanto, acabo de reiniciar mi servidor. ¿Tiene algo que ver con los núcleos reales del VPS?

Además, en la fase de pruebas no crea los archivos de texto "Mtrees", ¿verdad?

Cuando se ejecuta por primera vez en el probador elegir "verdadero"

Hará intercambios al azar y aprenderá entonces y guardará los modelos

La segunda carrera elige falso. Eso es todo. Y sube modelos y cambiará en +.

A continuación, en EA puedes añadir agentes, ahora tienes 5 agentes, 100 características para cada agente, 50 árboles

CRLAgents *ag1=new CRLAgents("RlExp1iter",5,100,50,regularize,learn);

En esta función añadimos 100 precios de cierre para cada agente (100 predictores). Y luego normalizar los datos. Puede añadir diferentes indicadores, por ejemplo, las primeras 50 características - precios de cierre, las siguientes 25 rsi, las siguientes 25 adx, o cambiar el número de predictores cuando declare el agente

void calcSignal()
  {
   sig1=0;
       
   for(int i=0;i<ArraySize(ag1.agent);i++) - the agents are stored in "ag1.agent" array. We have 5 agents, so array size is 5
     {   
      CopyClose(_Symbol,0,0,100,ag1.agent[i].inpVector); - for each agent from array (now we have 5 agents) fill predictors (100 close prices). For each feature we fill a single value
      normalizeArrays(ag1.agent[i].inpVector);
     }
   sig1=ag1.getTradeSignal(); this function return averaged signal for all agents
  }

Después de cada operación actualiza las políticas, cuando cierra la operación - actualiza la recompensa (TD, diferencia temporal RL)

void placeOrders()
  {
   if(countOrders(0)!=0 || countOrders(1)!=0)
     {
      for(int b=OrdersTotal()-1; b>=0; b--)
         if(OrderSelect(b,SELECT_BY_POS)==true)
            switch(OrderType())
              {
               case OP_BUY:
                  if(sig1>0.5)
                  if(OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),0,Red))
                     ag1.updateRewards();

                  break;

               case OP_SELL:
                  if(sig1<0.5)
                  if(OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),0,Red))
                     ag1.updateRewards();

                  break;
              }
      return;
     }

   if(sig1<0.5 && (OrderSend(Symbol(),OP_BUY,lotsOptimized(),SymbolInfoDouble(_Symbol,SYMBOL_ASK),0,0,0,NULL,OrderMagic,INT_MIN)>0))
     {
      ag1.updatePolicies(sig1);
     }

   else if(sig1>0.5 && (OrderSend(Symbol(),OP_SELL,lotsOptimized(),SymbolInfoDouble(_Symbol,SYMBOL_BID),0,0,0,NULL,OrderMagic,INT_MIN)>0))
     {
      ag1.updatePolicies(sig1);
     }

Uso realmente sencillo de la biblioteca

En el modo tren te mostrará los registros con los errores de cada iteración

2018.09.16 01:33:27.319 2018.09.13 23:59:59   Agent 5 Model 40 passed with errors: 0.2422178988326848  0.5097276264591439
2018.09.16 01:33:27.319 2018.09.13 23:59:59   Agent 5 Model 41 passed with errors: 0.2295719844357977  0.4824902723735409
2018.09.16 01:33:27.319 2018.09.13 23:59:59   Agent 5 Model 42 passed with errors: 0.2558365758754864  0.4961089494163424
2018.09.16 01:33:27.319 2018.09.13 23:59:59   Agent 5 Model 43 passed with errors: 0.2422178988326848  0.4863813229571984
2018.09.16 01:33:27.319 2018.09.13 23:59:59   Agent 5 Model 44 passed with errors: 0.2422178988326848  0.4766536964980545
2018.09.16 01:33:27.319 2018.09.13 23:59:59   Agent 5 Model 45 passed with errors: 0.245136186770428  0.5379377431906615
2018.09.16 01:33:27.319 2018.09.13 23:59:59   Agent 5 Model 46 passed with errors: 0.2587548638132296  0.4912451361867704
2018.09.16 01:33:27.319 2018.09.13 23:59:59   Agent 5 Model 47 passed with errors: 0.2480544747081712  0.4776264591439689
2018.09.16 01:33:27.319 2018.09.13 23:59:59   Agent 5 Model 48 passed with errors: 0.2636186770428016  0.5009727626459144
2018.09.16 01:33:27.319 2018.09.13 23:59:59   Agent 5 Model 49 passed with errors: 0.2616731517509728  0.490272373540856

En el modo de comercio en el probador mostrar los errores finales en el subconjunto de tren y de prueba para cada agente

2018.09.16 01:34:18.107 2018.09.13 23:59:59   RlExp1iter TRAIN LOGLOSS
2018.09.16 01:34:18.107 2018.09.13 23:59:59   0.23249 0.22763 0.24222 0.24125 0.24416
2018.09.16 01:34:18.107 2018.09.13 23:59:59   RlExp1iter OOB LOGLOSS
2018.09.16 01:34:18.107 2018.09.13 23:59:59   0.46790 0.46887 0.46498 0.46790 0.47471

Resultado para 100 precios de cierre:


 
Maxim Dmitrievsky:

Cuando se ejecuta por primera vez en el probador elegir "verdadero"

Hará intercambios al azar y aprenderá entonces y guardará los modelos

La 2da. corrida elige falso. Eso es todo. Y sube modelos y cambiará en +

A continuación, en EA puedes añadir agentes, ahora tienes 5 agentes, 100 características para cada agente, 50 árboles

En esta función añadimos 100 precios de cierre para cada agente (100 predictores). Y luego normalizar los datos. Puede añadir diferentes indicadores, por ejemplo, las primeras 50 características - precios de cierre, las siguientes 25 rsi, las siguientes 25 adx, o cambiar el número de predictores cuando declare el agente

Después de cada operación actualiza las políticas, cuando cierra la operación - actualiza la recompensa (TD, diferencia temporal RL)

Uso realmente sencillo de la biblioteca

Sí, esto parece mucho más simple y robusto al mismo tiempo... vamos a experimentar y ver... Gran trabajo!!!!!

Entonces, ¿dónde está el uso de GDMH?

Estaba pensando en escribir mi código GDMH. Puedes mostrarme el código en el que se produce la entrada y la salida del RDF o en el que intentas implementar exactamente el GDMH para que yo intente escribir mi trozo de código y, entonces, podamos comparar los resultados tanto de tu código como del mío y evaluarlos.

 
FxTrader562:

Sí, esto parece mucho más simple, así como robusto al mismo tiempo... vamos a experimentar y ver... Gran trabajo !!!!!

Entonces, ¿dónde está el uso de GDMH?

Estaba pensando en escribir mi código GDMH. Puedes mostrarme el código en el que se produce la entrada y la salida del RDF o en el que intentas implementar exactamente el GDMH para que yo intente escribir mi trozo de código y, entonces, podamos comparar los resultados tanto de tu código como del mío y evaluarlos.

Aquí utilizo el núcleo simple CRLAgent::kernelizedMatrix(void) (en la biblioteca), por lo que necesito cambiar esta función para gdmh

 
Maxim Dmitrievsky:

Aquí utilizo el núcleo simple CRLAgent::kernelizedMatrix(void) (en la biblioteca), por lo que necesito cambiar esta función para gdmh

Ok, vamos a ver si puedo escribir mi propio código....

Si se trata sólo de la lógica GDMH, entonces puedo traducir o convertir fácilmente el GDMH algo en código MQL5, pero si tiene que ver con algunas otras funciones del núcleo o bibliotecas, entonces necesito tiempo para estudiar y convertir...

 
FxTrader562:

Otra característica: se puede configurar cada agente en comisión

CRLAgents *ag1=new CRLAgents("RlExp1iter",5,100,50,regularize,learn);
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   ag1.setAgentSettings(0,100,50,0.1); for each agent you can set number of features, number of trees and r setting, individually
   ag1.setAgentSettings(1,50,50,0.2);
   ag1.setAgentSettings(2,30,50,0.05);
   ag1.setAgentSettings(3,20,50,0.1);
   ag1.setAgentSettings(4,10,50,0.05);
//---
   return(INIT_SUCCEEDED);
  }

Cuando se rellenan los valores de los predictores sólo se cambian aquí:

void calcSignal()
  {
   sig1=0;
       
   for(int i=0;i<ArraySize(ag1.agent);i++)
     {   
      CopyClose(_Symbol,0,0,ArraySize(ag1.agent[i].inpVector),ag1.agent[i].inpVector);
      Print(ArraySize(ag1.agent[i].inpVector));
      normalizeArrays(ag1.agent[i].inpVector);
     }
   sig1=ag1.getTradeSignal();
  }

También puedes añadir diferentes grupos de agentes

CRLAgents *ag1=new CRLAgents("RlExp1iter1",5,100,50,regularize,learn);
CRLAgents *ag2=new CRLAgents("RlExp1iter2",1,20,50,regularize,learn);
CRLAgents *ag3=new CRLAgents("RlExp1iter3",18,5,50,regularize,learn);

 
FxTrader562:

Ok, vamos a ver si puedo escribir mi propio código....

Si se trata sólo de la lógica GDMH, entonces puedo traducir o convertir fácilmente el GDMH algo en código MQL5, pero si tiene que ver con algunas otras funciones del núcleo o bibliotecas, entonces necesito tiempo para estudiar y convertir...

Si usted puede convertir la lógica gmdh - será muy útil, entonces puedo cambiarlo para mi biblioteca

Razón de la queja: