Discusión sobre el artículo "Programamos una red neuronal profunda desde cero usando el lenguaje MQL" - página 5

 
Los parámetros de las redes profundas en forma de variables externas son demasiado inflexibles.
 

He modificado la entrada "bodyPer". En lugar de cargar simplemente la longitud relativa del cuerpo, calculo este valor : bodyPer=0,5+((cierre-apertura)/p100)/2;

De modo que más que la longitud relativa, la variable también captura la dirección de la vela. Eso libera un hueco para una 4ª variable, supongo.

 

int error=CandlePatterns(rates[0].high,rates[0].low,rates[0].open,rates[0].close,rates[0].close-rates[0].open,_xValues);

Aquí pasamos los datos de una vela que aún no se ha formado. En realidad, todos los parámetros serán los mismos cuando se abra la vela. Todos serán = rates[0].open

 
Vasily Pototsky #:

int error=CandlePatterns(tasas[0].alta,tasas[0].baja,tasas[0].apertura,tasas[0].cierre,tasas[0].cierre-tasas[0].apertura,_xValores);

Aquí pasamos los datos de una vela que aún no se ha formado. En realidad, todos los parámetros serán los mismos cuando se abra la vela. Todos serán = rates[0].open

¡Incorrecto!

int copied=CopyRates(_Symbol,0,1,5,rates);

Aquí la copia se realiza no desde la barra cero, sino desde la primera, por lo que aquí

CandlePatterns(rates[0].high,rates[0].low,rates[0].open,rates[0].close,rates[0].close-rates[0].open,_xValues);

serán los valores de la última barra....

No creo que sea necesario copiar 5 barras, bastará con copiar 1 barra pasada así:

int copied=CopyRates(_Symbol,0,1,1,rates);
 

¡¡¡Hola Anddy, gran trabajo has hecho!!!

¡Estoy analizando tu código para adaptarlo a mi estrategia y hasta ahora puedo decir que tu DNN es increíble! Gracias por compartirlo.

Sólo tengo una duda: no reconozco el uso de "yValues[2]>0.6" en ninguna situación. Después de varios intentos con diferentes activos, no se cerró ninguna operación debido a esta condición. ¿Es esto correcto?

Gracias.

Un saludo,
Alexandre

En este foro, por favor, comente en portugués. Utiliza la herramienta de traducción automática o comenta en uno de los foros en otro idioma.

 
Comportamiento extraño cada vez que se cambia la variable de tendencia, los resultados del entrenamiento son siempre diferentes, ¿por qué?

Hay un error lógico en el código.

   double trend=0; // также при trend=100 результаты много лучше и больше количество точек оптимизаций!? 
   if(uod>0)
     {
      highPer=high-close;
      lowPer=open-low;
      bodyPer=close-open;
      trend=1;

     }
   else
     {
      highPer=high-open;
      lowPer=close-low;
      bodyPer=open-close;
      trend=-1; // стоял ноль!
     }
 
Nikolai Kalinin #:
Comportamiento extraño cada vez que se cambia la variable de tendencia, los resultados del entrenamiento son siempre diferentes, ¿por qué?

Hay un error lógico en el código.

Especificidad de la función de activación.

Cuantas más capas, más atenuación - los valores estarán más cerca de 0.

Offset arregla un poco este problema.

Así que cuando el umbral se establece en 0.6, la mayoría de los conjuntos posibles son descartados. Y si estás alimentando algún número enorme o varios números grandes a la entrada, entonces incluso un pase directo traerá más valores posibles al final de la red neuronal.

Y cuantos más valores alcancen o crucen el límite del umbral, más posiciones o más oportunidades de encajar (memorizar el recorrido) el gráfico de precios en la red neuronal.
 
Ivan Butko #:

Especificidad de la función de activación.

Cuantas más capas, más atenuación - los valores estarán más cerca de 0.

El desplazamiento arregla un poco este problema.

Así que cuando el umbral se establece en 0,6, la mayoría de los conjuntos posibles se descartan. Y si estás alimentando algún número enorme o varios números grandes a la entrada, entonces incluso un pase directo traerá más valores posibles al final de la red neuronal.

Y cuantos más valores alcancen o crucen el límite del umbral, más posiciones o más oportunidades de encajar (recuerde la trayectoria) el gráfico de precios en la red neuronal.

De todos modos, los resultados del entrenamiento son siempre muy variables con cualquier tipo de optimización, lo que plantea ciertas dudas sobre su aplicabilidad al trading real - siempre habrá mejores parámetros de pesos en las combinaciones de reordenación. ¿Cuál es la explicación para esta peculiaridad de esta NS?

 
Nikolai Kalinin #:

De todas formas, los resultados del entrenamiento son siempre muy variables con cualquier tipo de optimización, lo que plantea ciertas dudas sobre la aplicabilidad para el trading real - siempre habrá mejores parámetros de pesos en la reordenación de combinaciones. ¿Cuál es la explicación para esta peculiaridad de este NS?

Le das mucha importancia a este NS, de hecho todos los NS y todo lo relacionado con MO, en general - en cualquier lugar donde haya multiplicaciones de números por números y un sumador en la función de activación - todo será un ajuste al gráfico. Un sistema totalmente inestable.

Además, la fijación de precios es un proceso no estacionario. Cada vez hay nuevos datos, y si divides el gráfico en patrones, tenderán a funcionar al 50% en el historial.

NS es para sistemas estacionarios, repetitivos.

Pero en Forex y demás necesitas sistemas más avanzados, inteligentes. Algo así como varios NSs, de alguna manera conectados entre sí, de alguna manera mágicamente adaptarse al cambio de las estadísticas del patrón, etc

NS en sí es una memorización de la trayectoria de los precios, o el promedio de los resultados, si la cantidad de nuevos datos es más que posibles combinaciones de números obtenidos por multiplicación (o simplemente hablando - la arquitectura NS más simple con dos o tres entradas).

Es interesante indagar en ello, construir arquitecturas, añadir neuronas y capas. Pero, es absolutamente inútil, no es mejor que cruzar mashka.
 
Ivan Butko #:

Le das mucha importancia a esta NS, de hecho a todas las NS y a todo lo relacionado con MO, en general - en cualquier lugar donde haya multiplicaciones de números por números y un sumador en la función de activación - todo será un ajuste al gráfico. Un sistema totalmente inestable.

Además, la fijación de precios es un proceso no estacionario. Cada vez hay nuevos datos, y si divides el gráfico en patrones, tenderán a funcionar al 50% en el historial.

NS es para sistemas estacionarios, repetitivos.

Pero en Forex y demás necesitas sistemas más avanzados, inteligentes. Algo así como varios NSs, de alguna manera conectados entre sí, de alguna manera mágicamente adaptarse al cambio de las estadísticas del patrón, etc

NS en sí es una memorización de la trayectoria de los precios, o el promedio de los resultados, si la cantidad de nuevos datos es más que posibles combinaciones de números obtenidos por multiplicación (o simplemente hablando - la arquitectura NS más simple con dos o tres entradas).

Es interesante indagar en ello, construir arquitecturas, añadir neuronas y capas. Pero, es completamente inútil, no es mejor que cruzar la mashka.

Ivan, gracias por la aclaración. Cualquier estadística tiene tendencia a repetirse. En principio, si se utiliza un indicador integral en la optimización (entrenamiento) del NS, entonces podemos ver por los puntos cómo y cuándo se produce la transición de la ignorancia al conocimiento - cómo operar mejor. La búsqueda de una variable significativa es una conversación aparte. ¿Has conseguido resolver el problema de escalar las entradas más de 4 veces?