Discusión sobre el artículo "Redes neuronales en el trading: Modelos del espacio de estados"

 

Artículo publicado Redes neuronales en el trading: Modelos del espacio de estados:

Una gran cantidad de los modelos que hemos revisado hasta ahora se basan en la arquitectura del Transformer. No obstante, pueden resultar ineficientes al trabajar con secuencias largas. En este artículo le propongo familiarizarse con una rama alternativa de pronóstico de series temporales basada en modelos del espacio de estados.

Recientemente, se ha generalizado el paradigma de adaptar grandes modelos a nuevos problemas previamente entrenados con grandes conjuntos de datos de origen aleatorios de una amplia gama de áreas, como texto, imágenes, audio, series temporales, etc.

Aunque este concepto es independiente de la elección específica de la arquitectura, la mayoría de los modelos se basan en un tipo de arquitectura: el Transformer y su capa central de Self-Attention. La eficacia de la capa de Self-Attention se debe a su capacidad de dirigir la información de forma precisa a una ventana de contexto, lo que permite modelar datos complejos. Sin embargo, esta propiedad posee desventajas fundamentales: la imposibilidad de modelar algo fuera de una ventana finita y el escalamiento cuadrático con respecto a la longitud de la ventana.

En problemas de modelado de secuencias, una solución alternativa podría ser el uso de modelos de secuencia del espacio de estados estructurados (Space Sequence Models — SSM). Estos modelos pueden interpretarse como una combinación de redes neuronales recurrentes (RNN) y redes neuronales convolucionales (CNN). Esta clase de modelos se puede calcular de forma muy eficiente usando una escala lineal o casi lineal de la longitud de la secuencia. Además, posee mecanismos fundamentales para modelar dependencias de largo alcance en ciertas modalidades de datos.

Uno de los algoritmos que permite usar modelos del espacio de estados para el pronóstico de series temporales se propone en el artículo "Mamba: Linear-Time Sequence Modeling with Selective State Spaces". En este se introduce una nueva clase de modelos del espacio de estados de muestra.


Autor: Dmitriy Gizlyk

 
Según tengo entendido, en su pipeline en el paso 1 necesitamos ejecutar Research.mq5 o ResearchRealORL.mq5 con detalles como los siguientes :

si se ejecuta Research.mq5:
Propósito:
Predecir acciones de trading (compra/venta, volumen, TP, SL) usando Encoder (Enc.nnw) y Actor (Act.nnw).
Recopilar las trayectorias de estas acciones y guardarlas en TotalBase.dat.
Requisitos:
Requiere un codificador (Enc.nnw) y un actor (Act.nnw) previamente entrenados.
Sin estos dos archivos, el EA no puede funcionar, ya que depende de ellos para codificar el estado del mercado y predecir las acciones.

Resultados: TotalBase.dat (datos binarios de la trayectoria).


si se ejecuta ResearchRealORL.mq5:
Finalidad:
Simular el comercio basado en la historia real de Signals\Signal1.csv (en lugar de predicciones de Actores).
Recoger las trayectorias de estas operaciones y guardarlas en TotalBase.dat.
Requisitos:
Requiere el archivo Signals\Signal1.csv que contiene el historial de operaciones (hora de apertura/cierre, tipo, volumen, precio, etc.).
No requiere Encoder o Actor, ya que utiliza los datos de Signal1.csv en lugar de la predicción.

Salida: TotalBase.dat (datos binarios de la trayectoria).


¿Cómo podemos ejecutar el paso 1 porque no tenemos un codificador (Enc.nnw) y un actor (Act.nnw) previamente entrenados, por lo que no podemos ejecutar Research.mq5, y no tenemos el archivo SignalsSignal1.csv, por lo que tampoco podemos ejecutar ResearchRealORL.mq5?

MetaQuotes:

Echa un vistazo al nuevo artículo: Redes Neuronales en Trading: Modelos de espacio de estados.

Autor: Dmitriy Gizlyk

 
trungns #:
Según tengo entendido, en su pipeline en el paso 1 necesitamos ejecutar Research.mq5 o ResearchRealORL.mq5 con detalles como los siguientes :

si se ejecuta Research.mq5:
Propósito:
Predecir acciones de trading (compra/venta, volumen, TP, SL) usando Encoder (Enc.nnw) y Actor (Act.nnw).
Recopilar las trayectorias de estas acciones y guardarlas en TotalBase.dat.
Requisitos:
Requiere un codificador (Enc.nnw) y un actor (Act.nnw) previamente entrenados.
Sin estos dos archivos, el EA no puede funcionar, ya que depende de ellos para codificar el estado del mercado y predecir las acciones.

Resultados: TotalBase.dat (datos binarios de la trayectoria).


si se ejecuta ResearchRealORL.mq5:
Finalidad:
Simular el comercio basado en la historia real de Signals\Signal1.csv (en lugar de predicciones de Actores).
Recoger las trayectorias de estas operaciones y guardarlas en TotalBase.dat.
Requisitos:
Requiere el archivo Signals\Signal1.csv que contiene el historial de operaciones (hora de apertura/cierre, tipo, volumen, precio, etc.).
No requiere Encoder o Actor, ya que utiliza los datos de Signal1.csv en lugar de la predicción.

Salida: TotalBase.dat (datos binarios de la trayectoria).


¿Cómo podemos ejecutar el paso 1 porque no tenemos un codificador (Enc.nnw) y un actor (Act.nnw) previamente entrenados, por lo que no podemos ejecutar Research.mq5, y no tenemos el archivo SignalsSignal1.csv, por lo que tampoco podemos ejecutar ResearchRealORL.mq5?

Hola,

En Research.mq5 puedes encontrar

//--- cargar modelos
   float temp;
//---
   if(!Encoder.Load(FileName + "Enc.nnw", temp, temp, temp, dtStudied, true))
     {
      CArrayObj *encoder = new CArrayObj();
      if(!CreateEncoderDescriptions(encoder))
        {
         delete encoder;
         return INIT_FAILED;
        }
      if(!Encoder.Create(encoder))
        {
         delete encoder;
         return INIT_FAILED;
        }
         delete encoder;
     }
   if(!Actor.Load(FileName + "Act.nnw", temp, temp, temp, dtStudied, true))
     {
      CArrayObj *actor = new CArrayObj();
      CArrayObj *critic = new CArrayObj();
      if(!CreateDescriptions(actor, critic))
        {
         delete actor;
         delete critic;
         return INIT_FAILED;
        }
      if(!Actor.Create(actor))
        {
         delete actor;
         delete critic;
         return INIT_FAILED;
        }
      delete actor;
      delete critic;
     }
//---

Por lo tanto, si usted no tiene modelo preentrenado EA generará modelos con parámetros aleatorios. Y puedes recoger datos de trayectorias aleatorias.

Sobre ResearchRealORL.mq5 puedes leer más en el artículo.

Neural networks made easy (Part 67): Using past experience to solve new tasks
Neural networks made easy (Part 67): Using past experience to solve new tasks
  • www.mql5.com
In this article, we continue discussing methods for collecting data into a training set. Obviously, the learning process requires constant interaction with the environment. However, situations can be different.
 
Utilice elbotón CÓDIGO (Alt-S) al insertar código.

Un moderador ha corregido el formato esta vez. Por favor, formatea el código correctamente en el futuro; los mensajes con código formateado incorrectamente pueden ser eliminados.

en trajectory.mqh, capa 2-4 (alrededor de la línea 604) en la carpeta mamba

creo que hay un problema:
movido new CLayerDescription() dentro del bucle Mamba para que cada una de las 3 capas obtenga su propia asignación
así es como yo lo escribiría.

   for(int i = 2; i <= 4; i++)
     {
      if(!(descr = new CLayerDescription()))
         return false;
      descr.type = defNeuronMambaOCL;
      descr.window = BarDescr;                                       //ventana
      descr.window_out = 4 * BarDescr;                               //Dimensión interior
      prev_count = (int)(descr.count = HistoryBars);                  //Unidades
      descr.batch = 1 e4;
      descr.activation = None;
      descr.optimization = ADAM;
      if(!encoder.Add(descr))
        {
         delete descr;
         return false;
        }
     }

que alguien me diga si estoy bien o mal.

 
Seyedsoroush Abtahiforooshani #:

en trajectory.mqh, capa 2-4 (alrededor de la línea 604) en la carpeta mamba

Creo que hay un problema:
movió new CLayerDescription() dentro del bucle Mamba, por lo que cada una de las 3 capas obtiene su propia asignación
así es como yo lo escribiría.

Que alguien me diga si estoy bien o mal.

Buenas tardes,Seyedsoroush Abtahiforooshani.

En este caso, no formamos una capa, sino que sólo hacemos una descripción de su arquitectura. Y el programa genera capas de neuronas basándose en esta descripción. En la variante inicial, cuando descr = new CLayerDescription() se forma fuera del array, formamos un objeto descr para capas individuales y pasamos su puntero el número de veces necesario. El objeto descr no cambia cuando se forman las capas del modelo. Es por eso que las capas de neuronas se forman idénticas en arquitectura, pero cada una de ellas obtiene sus propios parámetros.
Cuando se traslada la formación del objeto a un bucle, nada cambia para el modelo que se está creando. Sólo creamos descr duplicados adicionales , que serán borrados inmediatamente después de que se forme el modelo. Esto añade algunas operaciones extra y consumo de memoria al formar el modelo. No hay ningún impacto en el funcionamiento del modelo.