Encontrar un conjunto de indicadores para alimentar las entradas de la red neuronal. Discusión. Una herramienta para evaluar los resultados.

 

Saludos a todos los participantes y visitantes del foro.


Quiero ofrecer a todos los interesados que discutan y busquen un conjunto de indicadores más adecuados para alimentar las entradas de las redes neuronales.

La rentabilidad de la red neuronal en mi programa puede ser utilizado como una herramienta de estimación, también puedo poner MQL4 Expert Advisor con una red neuronal entrenado. Dentro de unos límites razonables, por supuesto.


Tengo un perseptrón auto-escrito (en java) con un número arbitrario de capas y neuronas en cada capa que entreno con un algoritmo genético de la biblioteca JGAP (http://jgap.sourceforge.net/).

El número de neuronas en la primera capa es igual al número de entradas y en la segunda capa - arbitrariamente, en la tercera capa 1 neurona. La red neuronal produce señales de trading (salida de la red neuronal >0,5 - compra, salida de la red neuronal<-0,5 - venta). Las señales son procesadas por un probador de trading autoescrito que, basándose en la señal de la red neuronal, invierte la posición (o entra en el mercado, si no se abre ninguna posición). La función objetivo del algoritmo genético es el beneficio resultante. Este enfoque, en mi opinión, nos permite minimizar todos los errores posibles y acercar la formación lo más posible al comercio real. Exporto la red entrenada a MQL4 Expert Advisor y la pruebo en el probador de estrategias de MT4. Formo las entradas para la red neuronal en el indicador de MT4 y las descargo en un archivo. El indicador y el Asesor Experto son formados por el programa y se escriben en los archivos (menos confusión y menos errores).

Para mí, las redes de 4 capas no dan más beneficios (normalmente menos) que las de 3 capas, pero tardan más en entrenarse.
He entrenado una red 8-10-1 durante 4 días en una Core2 Quadro 2.3. 10 hilos paralelos con diferentes poblaciones iniciales compitiendo para ver "quién tiene más beneficios". Han pasado 4 días y unas 4000 generaciones con 200 cromosomas en una población. El máximo beneficio se obtuvo en las primeras 2000 generaciones, más allá de eso, el beneficio no aumentó. El mayor aumento de beneficios se produjo en las primeras 100 generaciones.

He comprobado los resultados de esta red en el probador de estrategias de MT4. He descubierto que la red casi nunca alcanza el umbral de +-0,5 y la señal de comercio no se activa. La razón no está clara, es decir, he comprobado la corrección de la exportación a MQL4 (para los mismos valores de las entradas en Java y MQL4 la red da los mismos valores, tal vez todo el flujo entrante debería haber sido presentado, no algunos valores al azar). He bajado el umbral a 0,4 y parece que funciona... Entonces descubrí que el Asesor Experto no puede invertir una posición de una sola vez... Mi Asesor Experto cerrará la barra y el precio tendrá tiempo para moverse antes de la siguiente barra. En el período de aprendizaje (estoy aprendiendo en 1-08-09 a 1-10-09) el beneficio en MT4 fue menor que en mi probador, en el período de prueba en MT4 (1-10-09 a 1-11-09), la red fue rentable. He mirado qué puntos de entradas no rentables se producen y me da la impresión de que los datos que entran en la red neuronal no llevan suficiente información...

I red neuronal de entrada: (k=100)

a[0]=(iMA(NULL,0, 13,0,MODE_EMA,PRICE_CLOSE, i)-Close[ i])* k;
a[1]=(iMA(NULL,0, 21,0,MODE_EMA,PRICE_CLOSE, i)-Close[ i])* k
a[2]=(iMA(NULL,0, 34,0,MODE_EMA,PRICE_CLOSE, i)-Close[ i])* k
a[3]=(iMA(NULL,0, 55,0,MODE_EMA,PRICE_CLOSE, i)-Close[ i])* k
a[4]=(iMA(NULL,0, 89,0,MODE_EMA,PRICE_CLOSE, i)-Close[ i])* k
a[5]=(iMA(NULL,0, 144,0,MODE_EMA,PRICE_CLOSE, i)-Close[ i])* k*0.9;
a[6]=(iMA(NULL,0, 233,0,MODE_EMA,PRICE_CLOSE, i)-Close[ i])* k*0.8;
a[7]=(iMA(NULL,0, 377,0,MODE_EMA,PRICE_CLOSE, i)-Close[ i])* k*0.6;
Entiendo cómo funcionan los indicadores, pero no los entiendo ni el mercado lo suficiente como para elegir un número mínimo de indicadores por mí mismo...

He buscado en el foro y he encontrado (el autor del post del que he tomado la idea, por desgracia, no lo recuerdo):

a[0]=(iMA(NULL,0, 3,0,MODE_EMA,PRICE_CLOSE, i)-iMA(NULL,0, 5,0,MODE_EMA,PRICE_CLOSE, i))*200;
a[1]=(iMA(NULL,0, 5,0,MODE_EMA,PRICE_CLOSE, i)-iMA(NULL,0, 8,0,MODE_EMA,PRICE_CLOSE, i))*200;
a[2]=(iMA(NULL,0, 8,0,MODE_EMA,PRICE_CLOSE, i)-iMA(NULL,0, 13,0,MODE_EMA,PRICE_CLOSE, i))*200;
a[3]=(iMA(NULL,0, 13,0,MODE_EMA,PRICE_CLOSE, i)-iMA(NULL,0,21,0,MODE_EMA,PRICE_CLOSE, i))*150;
a[4]=(iMA(NULL,0, 21,0,MODE_EMA,PRICE_CLOSE, i)-iMA(NULL,0, 34,0,MODE_EMA,PRICE_CLOSE, i))*150;
a[5]=(iMA(NULL,0, 34,0,MODE_EMA,PRICE_CLOSE, i)-iMA(NULL,0, 55,0,MODE_EMA,PRICE_CLOSE, i))*150;
a[6]=(iMA(NULL,0, 55,0,MODE_EMA,PRICE_CLOSE, i)-iMA(NULL,0, 89,0,MODE_EMA,PRICE_CLOSE, i))*140;
a[7]=(iMA(NULL,0, 89,0,MODE_EMA,PRICE_CLOSE, i)-iMA(NULL,0, 144,0,MODE_EMA,PRICE_CLOSE, i))*130;
a[8]=(iMA(NULL,0, 144,0,MODE_EMA,PRICE_CLOSE, i)-iMA(NULL,0, 233,0,MODE_EMA,PRICE_CLOSE, i))*120;
estudiado en 10 hilos, 200 generaciones, tamaño de la población 200 para el período 1-08-09 a 1-10-09 (mi probador java da los resultados):
red 9-10-1 : beneficio 10521
9-20-1 neto : beneficio 10.434
Red 9-30-1 : beneficio 10361
Red 9-50-1 : beneficio 10059
el resultado es bueno, pero parecía ser mejor con la versión anterior... tendré que ponerlo con las entradas anteriores (no guardé los resultados del último entrenamiento)

Se necesitan multiplicadores adicionales para ajustar los valores en el rango de -1 a +1


Después de leer lo que he escrito, me puse a pensar en un posible error en la exportación de la red neuronal entrenada al Asesor Experto - debe ser probado de nuevo.

P.D. Ahora estoy escribiendo una red neuronal recurrente de estructura arbitraria (según tengo entendido, la red neuronal recurrente tiene en cuenta no sólo el valor, sino también el ángulo de inclinación).

 

El problema es parecido al suyo. El enfoque es diferente.

Soy aún menos genetista que ingeniero, pero lo entiendo a grandes rasgos.

Permítame hacerle algunas preguntas, la función de objetivo de maximizar la puntuación no es la mejor opción. Si he entendido bien desde el ejemplo anterior - que va a buscar un conjunto de sistemas, en su caso - 9, bueno, a simple vista la optimización de las ganancias de las paradas + más fantasía total al menos un sistema (aquí se utiliza un indicador) tiene al menos 2-3 cientos de posibles variantes. No obtendremos esas variantes dentro del marco, digamos que el CCI o el RSI quedarán fuera de la vista. Entonces tenemos un indicador mágico para el momento actual. Que sea mov(20) -mov(10) > < 0. Cómo calcular o al menos estimar cuánto durará la situación .

 
iliarr >> :

Tengo un perseptrón autoescrito (en java) con un número arbitrario de capas y neuronas en cada capa lo entreno con un algoritmo genético de la biblioteca JGAP (http://jgap.sourceforge.net/).

¿Cómo se hace la formación? Describa el algoritmo de entrenamiento.

Si recuerdo correctamente - JGap, es sólo una biblioteca para el algoritmo genético y nada más, nada que ver con NS. Quizá la cuestión sea cómo se forma el genoma y la corrección de la selección de la función de aptitud.

 

La formación de una red con Ga tiene muchos escollos, que probablemente no podrá resolver... Como mínimo, la pregunta "¿Cuánto tiempo funcionará la red tan bien como en el entrenamiento?" no me parece posible, cuando se entrena con Ga.

Recomiendo ir a una solución de problemas de predicción estándar con ns-i.

 
rip >> :

¿Cómo se lleva a cabo la formación? Describa el algoritmo de entrenamiento.

Si no recuerdo mal - JGap es sólo una biblioteca para el algoritmo de genes y nada más, no tiene nada que ver con NS. Quizá la cuestión sea cómo se forma el genoma y la corrección de la selección de la función de aptitud.

JGap es una librería que implementa un algoritmo genético. para mí es una caja negra a la que hay que dar una función objetivo que depende de un vector de cierta longitud. el algoritmo genético de esta librería selecciona los valores de este vector para que la función objetivo sea máxima. mi función objetivo da como resultado el beneficio de un pase histórico de un emulador de trading que refleja las señales de una red neuronal. el vector cuyos valores selecciona el algoritmo genético, determina los pesos de las redes neuronales.

ivandurak >> :

El problema es parecido al suyo. El enfoque es diferente.

Soy menos genetista que ingeniero, pero entiendo lo esencial.

Permítame hacerle algunas preguntas, la función objetivo de maximizar la puntuación no es la mejor opción. Si he entendido bien desde el ejemplo anterior - que va a buscar un conjunto de sistemas, en su caso - 9, bueno, a simple vista la optimización de las ganancias de las paradas + más fantasía total de al menos un sistema (aquí se utiliza un indicador) tiene al menos 2-3 cientos de posibles variantes. No obtendremos esas variantes dentro del marco, digamos que el CCI o el RSI quedarán fuera de la vista. Entonces tenemos un indicador mágico para el momento actual. Que sea mov(20) -mov(10) > < 0. Cómo calcular o al menos estimar cuánto durará la situación benigna .

Desgraciadamente, no dispongo de suficientes recursos informáticos para buscar los indicadores óptimos (red 9-10-1 en 10 hilos, 200 generaciones, tamaño de la población 200 de 1-08-09 a 1-10-09 aprendida en una hora, aunque el número de pesos de las neuronas (longitud del vector que recoge el algoritmo genético) = 181)

Necesito un conjunto de indicadores que reflejen la situación del mercado. los indicadores deben ser sencillos, preferiblemente estándar de MT4 (cuestión de implementación y posibles errores) sólo hay 30 de ellos. ningún objetivo Los indicadores deben dar información donde el mercado va. los necesito para obtener la mayor información posible de las fluctuaciones de precios.


Me gusta esto... Creo que cómo y qué escribir, formular, y más comprensión aparece... gracias al foro y a ti ivandurak . :)

 
iliarr >> :

JGap es una librería que implementa un algoritmo genético. mi función objetivo es una caja negra a la que hay que dar una función objetivo que depende de un vector de cierta longitud. el algoritmo genético de esta librería ajusta los valores de este vector para que la función objetivo sea máxima. mi función objetivo genera beneficios a partir de la historia que pasa un emulador de trading que procesa las señales de la red neuronal. el vector cuyos valores ajusta el algoritmo genético, define los pesos de las neuronas de la red neuronal.

Eso es exactamente lo que quiero decir...


¿Cómo se forma un vector que luego se pasa a JGap, es sólo un vector de valores W o son valores W codificados.

Cuál es la función f objetivo. Puedo dar un ejemplo - si tomamos como objetivo la función f E[i](t) = D[i](t) - Y[i](t), donde E es un error, D es un valor esperado en la salida, Y es un valor obtenido al alimentar la muestra de entrenamiento X, i es la norma de la neurona, t es el número de época. Si tomamos E[i](t) = Sign(D[i](t) - Y[i](t))*(D[i](t) - Y[i](t))^2 en una serie de tareas, el resultado es mucho mejor. Por ejemplo, si formamos una serie que refleje los atractores de los sistemas dinámicos clásicos (Lorenz, Henon, Rössler,...), podemos incluso entrenar la red para que se aproxime a esos datos, no profundamente pero sí.


No lo he probado :) porque no creo que funcione :)

 
Con un diseño como éste, se puede conseguir una evitación casi vertical sin deslizamientos. ¿Abordará el tema del sobreentrenamiento en las neuronas?
 
IlyaA >> :
Con un diseño como éste, se puede conseguir una evitación casi vertical sin que se produzcan deslizamientos. ¿Va a abordar el tema del reentrenamiento en la neurona?

Y puede que no haya ningún tipo de reconversión... Si el autor grafica el error en la muestra de prueba, se puede saber de inmediato lo que ocurre con el reentrenamiento.

 
rip >> :

Y la reconversión puede que no se produzca... Si el autor cita como gráfico el error en una muestra de prueba, se puede saber de un vistazo lo que ocurre con el sobreentrenamiento.


Estoy de acuerdo. Funciona con una caja negra. El sobreentrenamiento es muy probable. Querida iliarr ¿puedes publicar el horario de la formación?
 
iliarr >>:.............

No deberías usar los brazos que agitan. O mejor dicho, no debería utilizar sólo las medias móviles. Trate de experimentar con un conjunto de diferentes tipos de indicadores, preferiblemente el algoritmo de cada indicador debe ser radicalmente diferente de los demás. Entonces obtendrá más información para la red.

Un punto más.

Usted está utilizando un sistema de comercio inverso basado en señales NN. Es exactamente lo mismo que el experto estándar de muvingaverage. Ni mejor ni peor.

Busque una forma de determinar el tamaño de SL y TP con la ayuda de NN, y formas de acompañar las posiciones abiertas. También se puede abrir al azar.


StatBars escribió :>>

En el entrenamiento de la red con ha un montón de escollos, que difícilmente puede resolver... Como mínimo, resolver la pregunta "¿Cuánto tiempo funcionará la red tan bien como en el entrenamiento?" no me parece posible, cuando se entrena con Ga, en absoluto.

Recomiendo ir a una solución de problemas de predicción estándar ns-ey.

El AG es sólo una herramienta de optimización (destornillador para la máquina). Con unas diferencias mínimas puedes utilizarlo o cualquier otro algoritmo de optimización (destornillador).

 

Hola

Siempre he estado interesado en aprender sobre NS, pero en cuanto empiezo a leer algo de literatura sobre el tema mi cabeza empieza a hervir y finalmente no puedo ni siquiera entender qué es NS

¿podría dar un ejemplo sencillo (en los dedos, por así decirlo) para explicar lo que es

Gracias

Razón de la queja: