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

 
Maxim Dmitrievsky:

https://www.mql5.com/ru/code/127

Sólo hay algún error en el código, creo que el indicador se normaliza incorrectamente

Es correcto, simplemente se normaliza a un intervalo diferente de [0;1].


Para simplificar puedes dejar la misma función CalcRegression que tienes (pero ten en cuenta que b ya devuelve con signo contrario*, es decir, no necesitas cambiar el signo por segunda vez). Encuentra experimentalmente, por qué valor necesitas multiplicar el resultado, para obtenerlo en el rango [-0,5;0,5]. Y luego añadir +0,5 para desplazar el centro de 0 a 0,5.


*Esta fórmula te dará b con el signo correcto si los precios más antiguos tienen el índice más alto de la matriz.

 
Dr. Trader:

Todo es correcto, sólo que no está normalizado en [0;1] sino en otro intervalo.


Para simplificar puedes dejar la misma función CalcRegression que tienes (pero ten en cuenta que b ya devuelve con signo contrario, es decir, no necesitas cambiar el signo por segunda vez). Encuentra experimentalmente, por qué valor necesitas multiplicar el resultado, para obtenerlo en el rango [-0,5;0,5]. Y luego añadir +0,5 para desplazar la media de 0 a 0,5.


para diferentes plazos necesitamos diferentes máximos y mínimos, no es muy conveniente, me parece que normalizar en un intervalo de historia más grande es lo mejor
 
Dr. Trader:

*Esta fórmula te dará b con el signo correcto si los precios más antiguos tienen el índice más alto de la matriz.


sólo hay que añadir otro búfer normalizado al indicador sobre el búfer existente :)
 

La pendiente de la regresión también podría ser interesante. Prueba de espalda y adelante. En resumen, parece que se puede trabajar con esta lógica y experimentar con diferentes predictores.


Archivos adjuntos:
 
Maxim Dmitrievsky:

La pendiente de la regresión también podría ser interesante. Prueba de espalda y adelante. En resumen, parece que se puede trabajar con esta lógica y experimentar con diferentes predictores.


Gracias por el código, lo he probado. He empeorado. Pero tomé sólo 1 mes para la optimización en lugar de un año, quería comprobarlo rápidamente. En Fronttest he visto como el EA primero es normal, luego poco a poco empieza a aplanar el equilibrio y luego se ralentiza. Sigue viviendo un poco de los nuevos datos, no está mal.

Yo cambiaría esto

1) double a3 = regr[0]; - el índice cero es el más antiguo por tiempo. El último bar (el más nuevo) aquí sería el 49 (ya que el 50 fue tomado), es mejor. Pero el último puede ser redibujado, así que el 48 es mejor. También es necesario comprobar si el indicador está sobredimensionado.
Lo mismo pasa con el rsi, has quitado el que era más nuevo. Tiene sentido tratar de eliminar el que tiene índice cero, como el más anticuado.

2) La tercera versión del Asesor Experto de Yuri tiene la función RNN con cuatro parámetros, por lo que se puede combinar con 3 rx y la tendencia. En general, la función se puede complementar con nuevos parámetros, como se escribe en el artículo de Yuri, pero cada parámetro +1 duplicará el número de coeficientes.

3) No me gustan las paradas y los despegues, sus valores óptimos cambian constantemente en los bares nuevos. Para ser más precisos, no hay valores óptimos, sólo hay ciertos valores "convenientes" para un EA en un intervalo de tiempo específico. Además, los corredores pueden dibujar velas antes de las paradas. Intentaría hacer una previsión en cada nueva barra y simplemente mantener la operación en esta dirección hasta la siguiente barra y previsión, y ahí voltear si es necesario.

4)

   int handle=iRSI(_Symbol,0,9,PRICE_OPEN);
   double rsi[30];
   CopyBuffer(handle,0,0,28,rsi);

El handle debe ser inicializado en OnInit, y no cada vez que se crea un EA. Y además el array tiene 30 elementos, y sólo se copian 28. Es decir, no se puede acceder a los índices 28 y 29 (nadie lo hace, pero nunca se sabe), no se llenan.

 
Dr. Trader:


Gracias por el código, lo he probado. Tengo uno peor. Pero sólo he tomado 1 mes para la optimización en lugar de un año, quería probarlo rápidamente. La prueba frontal muestra que mi Asesor Experto es bueno al principio, luego comienza a aplanar el equilibrio y luego se ejecuta hacia abajo. Sigue viviendo un poco de los nuevos datos, no está mal.

Yo cambiaría esto

1) double a3 = regr[0]; - el índice cero es el más antiguo por tiempo. El último bar (el más nuevo) aquí sería el 49 (ya que el 50 fue tomado), es mejor. Pero el último puede estar sobredimensionado, así que 48 es mejor. También es necesario comprobar si el indicador está sobredimensionado.
Lo mismo con el rsi, has quitado el que era más nuevo. Tiene sentido tratar de eliminar el que tiene índice cero como el más antiguo.

2) En la tercera versión del EA de Yuri la función RNN contiene cuatro parámetros, puede tomar tanto 3 rsi como tendencia con ella. En general, la función puede ser ampliada con nuevos parámetros, como está escrito en el artículo de Yuri, pero cada parámetro +1 duplicará el número de coeficientes.

3) No me gustan las paradas y los despegues, sus valores óptimos cambian constantemente en los bares nuevos. Para ser más precisos, no hay valores óptimos, sólo hay ciertos valores "convenientes" para un EA en un intervalo de tiempo específico. Además, los corredores pueden dibujar velas antes de las paradas. Intentaría hacer una previsión en cada nueva barra y simplemente mantener la operación en esta dirección hasta la siguiente barra y previsión, y ahí voltear si es necesario.

4)

El handle debe ser inicializado en OnInit, y no cada vez que se crea un EA. Y además el array tiene 30 elementos, y sólo se copian 28. Es decir, no se puede acceder a los índices 28 y 29 (nadie lo hará, pero puede querer hacerlo), no están llenos.


Hmm, ¿sí? Pensaba que el cero al copiar el buffer devolvía el primer valor. hay que comprobarlo...

https://www.mql5.com/ru/docs/series/copybuffer

He añadido el trailing en lugar de sl y así sucesivamente, los resultados no son mucho mejores

sobre el mango, sí, para la regresión lo puse en el init, para radsy me olvidé de hacerlo

Ahí tengo que elegir el forward con el mayor factor de beneficio, y el backtest debe ser más o menos el mismo, así que con estos parámetros la parrilla es capaz de hacer una predicción decente. Si miro las estadísticas, no veo por qué se me ha pasado, no veo por qué no se me ha pasado, y no veo por qué.

Y RNN3 da muchas menos señales por alguna razón.

Todavía no entiendo muy bien si es mejor que la función de normalización tome un array de 5000 barras en lugar de 50, para que encuentre más correctos los máximos y mínimos desde el principio y no los actualice con el tiempo, porque al principio de las pruebas recibiremos valores no del todo correctamente normalizados para la entrada, pero después cada vez más precisos

Además, seguiría detrenciando los gráficos y alimentando valores más digeribles para la parrilla, no estoy seguro todavía de cómo mejorar, por ejemplo, la pendiente de la regresión y la autocorrelación en una serie estacionaria, ya que no soy muy bueno en econometría, ahora estoy viendo videoclips

Y también quiero comparar más tarde esta RNN con un MLP normal, pero no será una comparación adecuada allí, porque el MLP tendrá que alimentar algo a la salida. Otra opción, hacer un comité de 3 RNN y alimentar sus resultados en RNN :D, o en alguna NS convolucional. Se necesitará mucho tiempo para optimizar incluso a través de claud. Mejor aún, alimentar 3 RNN en el MLP y darle salida con incrementos de precio, así se libra del sobreentrenamiento, en teoría. Es decir, la RNN desempeñará un papel de autocodificador http://cyberleninka.ru/article/n/avtoenkoder-podhod-k-ponizheniyu-razmernosti-vektornogo-prostranstva-s-kontroliruemoy-poterey-informatsii


 
Maxim Dmitrievsky:




Encontrar una cotización que se pueda aplicar a ARIMA es casi imposible. Pero ese fue el final de la conferencia.

¿QUÉ PASA CON GARCH? Es mucho más prometedor y muy utilizado en el marco temporal de menos de un día, incluso para el comercio de alta frecuencia.

 
SanSanych Fomenko:


Encontrar una cotización a la que se pueda aplicar ARIMA es casi imposible. Pero ese fue el final de la conferencia.

¿QUÉ PASA CON GARCH? Es mucho más prometedor y muy utilizado en el marco temporal de menos de un día, incluso para el comercio de alta frecuencia.


Acabo de empezar a familiarizarme con estas cosas, aún no he experimentado. Sólo he oído hablar de la basura :)

¿Qué opinas del uso de RNN como autoencoder para MLP?

Por lo que he entendido la red recurrente es un autoencoder del tipo con un conjunto de reglas lógicas:


 
Maxim Dmitrievsky:

Bueno, ¿y qué hay de la sustracción de las tendencias y luego la aplicación de la autoregresión a las mismas, y luego meter los valores en el NS, junto con la pendiente de la regresión? Acabo de empezar a familiarizarme con estas cosas, aún no he experimentado

será mejor que experimentes de inmediato.

Se ahorrará mucho tiempo y conocimientos innecesarios.

 
SanSanych Fomenko:


Encontrar una cotización que se pueda aplicar a ARIMA es casi imposible. Pero ese fue el final de la conferencia.

¿QUÉ PASA CON GARCH? Es mucho más prometedor y ampliamente utilizado en el marco temporal de menos de un día, incluso para el comercio de alta frecuencia.

Yo también lo he visto. En mi opinión, no es nuestro tema.