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

 
Maxim Dmitrievsky:

Sí, es sólo mi función de transformación con cos y grado aleatorio, no un núcleo

RDF guardar la propia estructura si el archivo, por lo que si demasiadas muestras o características - los archivos pueden ser demasiado grandes, no estoy seguro acerca de millones de agentes :) Pero puede disminuir el error de clasificación y aumentar la estabilidad del modelo aumentando el número de agentes con diferentes características

Próximo momento - según mi experiencia, datos más grandes != mejor precisión en los nuevos datos. Si los predictores son malos, el resultado será igual de malo

También gdmh puede trabajar con conjuntos de datos extremadamente pequeños, y aproximarse a ellos es bueno para los datos futuros

Pero... podemos aplicar un modelo simple como la regresión logística + gdmh (en lugar de RDF), por lo que el proceso de aprendizaje será muy rápido, pero no sé acerca de la precisión

En cuanto a la GMDH, eso es exactamente lo que te informé cuando mencionaste por primera vez lo de la GMDH. Porque el propio GMDH actúa como una red neuronal y, por lo tanto, no hay uso de RDF aquí.

 
Maxim Dmitrievsky:

Sí, hay diferencias. Para tomar una decisión con RDF debe pasar por todos los nodos y hojas. Por lo tanto, si la estructura del RDF es grande, se necesitará más tiempo para cada decisión

Para ello es mejor utilizar modelos extremadamente rápidos (NN de aprendizaje rápido) con respuesta rápida. O un mejor hardware, incluyendo la GPU

Un problema más: el RDF es sensible al ruido en los datos, por lo que casi siempre se sobreajusta. Para reducir este efecto del ruido, es bueno incorporar la capa LDA o PCA al algoritmo

por lo que no es una tarea tan trivial como podría parecer a primera vista

¿Quiere decir que su implementación actual de RDF y su versión anterior de RDF son completamente diferentes? ¿Esta versión del RDF utiliza la política o algo más? No estoy seguro de los archivos ".rl". Pensé que eran similares a los archivos "Mtrees" de su versión anterior.

A ver qué pasa con la formación y las pruebas. Me he dado cuenta de que los modelos y los agentes no parecen funcionar correctamente a un valor muy grande. Por ejemplo, acabo de poner los agentes a 100 y los modelos a 100. Los agentes funcionaron, pero los modelos dejaron de funcionar a los 50 de cada agente. No sé por qué razón.

Por cierto, sólo estoy probando mi algo con RDF ya que usted ya ha implementado el código básico, porque he hecho miles y miles de combinaciones diferentes de optimización y pruebas en su versión anterior y por lo tanto, tengo una comprensión a través de su versión anterior de RDF. De lo contrario, tengo que escribir el código completo de "Monte carlo" algo utilizado en "ALPHA ZERO" para integrar a mi algo que puede tomar bastante tiempo para mí, ya que no soy un experto programador.

 
Maxim Dmitrievsky:

Hola, trata de entender este código, para empezar:

Aquí aprendemos RDF con cada 1 característica (1 entrada) y guardamos los números de las mejores características en un array ordenado (modelos). A continuación, podemos elegir los mejores

El siguiente paso es combinar cada uno de los mejores predictores con otros y comprobar de nuevo los errores, creo, y guardar el resultado. En este paso podemos aplicar algunas ecuaciones polinómicas

Bien, veamos ahora cómo implementar GMDH con este código.

Cuanto más puedas explicar el código, más rápido podré encontrar un puente. En realidad, mi problema es que soy un poco débil en la sintaxis de algunos conceptos básicos de C ++ como la clase, objetos, matrices, etc y por lo tanto, me tomo más tiempo para entender esos conceptos de aplicación, de lo contrario, habría escrito directamente el archivo de clase de GMDH y le dio a usted.

De todos modos, déjame ver.

Por favor, explíqueme bien estas 3 líneas. Creo que aquí es donde hay que aplicar la GMDH:

        m[i].Set(0,RDFpolicyMatrix[i][bf]); 
        m[i].Set(1,RDFpolicyMatrix[i][bf+1]);
        m[i].Set(2,RDFpolicyMatrix[i][bf+2]);

Me refiero a que por favor comenten estas 3 líneas

Creo que en mi código anterior cometí algún pequeño error en el bucle. Así que creo que aquí está el puente proporcionado si usted sabe exactamente lo que ha escrito sobre RDF:))... porque no sé mucho acerca de la implementación de la matriz...

 ///---Remaining values of Y starting from Y_1
  for(int i=1;i<3;i++)
  m[i]=CalculateNeuron(a);///---Calculate individual value of Y_1,Y_2,Y_3,...to feed to RDF inputs
 
 
Maxim Dmitrievsky:

esto es un array 2d (matriz), formato de la librería "alglib", simplemente lo llenamos con el número de predictor(bf) (índice 0 de la matriz), lo siguiente (1,2) son los valores de salida... error aquí :) necesitamos establecer valores con índices "features" y "features-1"

m - nuestra matriz actual con 1 característica y 2 salidas, peroRDFpolicyMatrix contiene todas las características + salidas

fijo

puede leerlo aquí http://www.alglib.net/dataanalysis/generalprinciples.php#header0

Ok, así que hay algún malentendido... déjame revisar de nuevo el código en cuanto a cómo enlazar esto con GMDH...

Si te haces a la idea, ponme al día para que no tenga que perder el tiempo pensando:))

Creo que el RDF y el GMDH son similares y, por lo tanto, es difícil integrarlos...

Déjame pensar de nuevo....

 
Maxim Dmitrievsky:

no, es fácil de integrar ... sólo cambiamos los vectores de entrada con gdmh, sólo algunas transformaciones

en el siguiente paso comprobaremos los grupos de predictores, combinados con otros (sólo algunos de la selección anterior)

Entonces, este bucle puede hacerlo todo para la transformación de la característica a la que se refiere:

A continuación, esta es la función para calcular Neuron:

A continuación, Y_Final=Y_All+Y_0;

Ahora hemos dividido las entradas en 3 partes y podemos ampliarlas a cualquier número si es necesario...

Aquí las entradas son las características o predictores y los pesos son pesos aleatorios... podemos tomarlos de la función aleatoria inicialmente y más tarde serán almacenados dentro de RDF después del entrenamiento

 
Maxim Dmitrievsky:

intenta rehacerlo para matrix ahora ))

pero... no necesitamos una suma aquí, necesitamos predictores separados en cada paso, sólo ampliar nuestra matriz para las características adicionales y añadirlos, y comprobar los errores de nuevo

ok, dame un poco de tiempo y pronto estará listo

Ok, no hay problema entonces, sólo hay que quitar el signo "+" para los predictores separados y obtendrá predictores individuales:

/// --- Remaining values ​​of Y starting from Y_1 
  for ( int a = 1 ; a < 3 ; a ++) 
  Y_All [a]=CalculateNeuron (a); /// --- Calculate the individual value of Y_1, Y_2, Y_3, ... to feed to RDF inputs...Here feature transformation done

Pero si usted tiene mejores maneras que también es grande:)). Debido a que este será muy lento debido a múltiples bucles for ... Así que una implementación muy bruto:))

Escribí este código sólo en una hora y por eso ni siquiera me gusta este código:))

Matrix no entra en mi cerebro:)))))))))))))))))))))))))))))))))
 
Maxim Dmitrievsky:

jeje... ¿qué tal la clasificación de la matriz 2d? :)

Además, le pediré que implemente al menos algunas variedades más de predictores en la versión final del EA:

1.Algunos indicadores de oscilación

2. Algunos indicadores de tendencia

3.Algunos indicadores de volumen

4.Algunos indicadores de marcos temporales superiores (buen filtro para señales ruidosas)

5. Algunos precios de cierre directo

Si no, tendré que seguir preguntando cuando tenga que añadir algo :)))...

Si puede cambiar instantáneamente de un sistema a otro en cada vela basado en el cambio del mercado, entonces será realmente grande!... De hecho, ese era el objetivo original que esperaba de esta versión cuando mencionaste lo de la spline, las transformaciones de características y el truco del kernel, etc... El truco del kernel habría ayudado a hacer el cálculo mucho más rápido incluso en un servidor regular para grandes datos también... Así que ahora tenemos que confiar sólo en modelos perfectamente entrenados y en la transformación rápida...

Por cierto, de los últimos 2 días de pruebas de avance tengo que decir que esta versión de RDF parece un poco más estable y fiable en comparación con la versión anterior de RDF ... Me refiero a las pruebas de avance coincide un poco con backtesting ... pero la versión anterior fue sobre todo el ajuste con los datos de optimización

 
Maxim Dmitrievsky:

la versión anterior era sólo un concepto con ideas base

puede añadir un indicador(es) en sí mismo, en lugar de los precios de cierre

No, no un indicador...me refiero a que me confundo cuando aplico varios indicadores simultáneamente en el bucle de la matriz de "ag1.agent"

¿Qué debo utilizar en lugar de"ArraySize(ag1.agent)" cuando utilizo un total de 100 Características, pero 50 para el cierre y 50 para el alto

for(int i=0;i<ArraySize(ag1.agent);i++)///---here
     {   
      CopyClose(_Symbol,0,0,50,ag1.agent[i].inpVector);
      normalizeArrays(ag1.agent[i].inpVector);
     }
for(int i=0;i<ArraySize(ag1.agent);i++)///---here
     {   
      CopyHigh(_Symbol,0,0,50,ag1.agent[i].inpVector);
      normalizeArrays(ag1.agent[i].inpVector);
     }

Entonces, ¿es correcto el código anterior para la declaración de agente como la siguiente?

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

Bueno, yo fui la primera persona que comentó en su foro en inglés:)))Desde ese día he ejecutado al menos más de 20.000 pruebas y optimizaciones diferentes a lo largo de todos mis servidores y todo tipo de combinaciones de configuraciones y, por lo tanto, tengo una mejor comprensión del concepto general... pero mi principal problema es que a veces incluso me quedo atascado con el código simple....

Y puedo prometerte que incluso si este algo puede empezar a converger un poco con el tiempo, entonces puedo optimizar el código para que funcione al menos 2 o 3 veces mejor que lo que publicarás :))... todo sólo desde mi experiencia y observaciones :)).

¿O este código de abajo es correcto?

Or

for(int i=0;i<50;i++)///---here
     {   
      CopyClose(_Symbol,0,0,50,ag1.agent[i].inpVector);
      normalizeArrays(ag1.agent[i].inpVector);
     }
for(int i=50;i<100;i++)///---here
     {   
      CopyHigh(_Symbol,0,0,50,ag1.agent[i].inpVector);
      normalizeArrays(ag1.agent[i].inpVector);
     }
 
Maxim Dmitrievsky:

Muchas gracias... Ahora, creo que puedo hacer más indicadores:))))))))

 
Maxim Dmitrievsky:

O como aquí, más sencillo

Sí, me gusta esto... Esto es de mi tipo :))

El ejemplo anterior es muy condicional y no puede aumentar más predictores ....

Por cierto, utilicé este método para simulaciones de velas aleatorias... pero tengo que cambiar los precios de entrada y salida de la operación también para el entrenamiento y por lo tanto, me confundí...

Por ahora probaré estos métodos de indicadores...y lo probaré y más adelante probaré el método de simulación de velas...ya que si tiene éxito entonces será la última versión de cualquier EA de aprendizaje automático que se haya creado en el mercado forex:))))