Discusión sobre el artículo "Uso del algoritmo de aprendizaje automático PatchTST para predecir la acción del precio durante las próximas 24 horas" - página 2

 
A menudo me encuentro con que los resultados predichos de este modelo no son del todo coherentes con la situación real. No he hecho ningún cambio en el código de este modelo. ¿Podría orientarme? Muchas gracias.
 
Thomas Sawyer #:
A menudo me encuentro con que los resultados predichos de este modelo no son del todo coherentes con la situación real. No he hecho ningún cambio en el código de este modelo. ¿Podría orientarme? Muchas gracias.

Gracias por compartir su experiencia con el modelo. Ha planteado una cuestión válida sobre la coherencia de las predicciones. El modelo PatchTST funciona mejor cuando se integra en un enfoque de negociación global que tenga en cuenta múltiples factores del mercado. Le recomiendo que utilice las predicciones del modelo de manera más eficaz:

  1. Optimización de la ventana temporal:
  • Concéntrese en operar durante las horas pico (de 6:00 AM a 10:00 AM hora central de EE.UU.).
  • Utilice las predicciones del modelo principalmente durante estas horas, cuando los movimientos del mercado son más predecibles.
  • Preste especial atención a las desviaciones en torno a los máximos y mínimos diarios y semanales anteriores. Estas son sus principales zonas de oferta y demanda.
  1. Estrategia de integración del modelo:
  • Utilice las predicciones como parte de un análisis más amplio, no como señales independientes.
  • Busque Gaps de Valor Justo (GVF) en los rangos de precios pronosticados. He dado el código para un indicador que utilizo para FVGs en MQL5 abajo.
  • Combine las predicciones con patrones técnicos como banderas, cuñas y consolidaciones horizontales.
  • Considere las predicciones en el contexto de los precios diarios, semanales y mensuales.
  1. Gestión del riesgo:
  • Implemente stops más amplios (por ejemplo, stop-loss de 10 puntos o 100 pips para el Oro, 50 pips para el EURUSD, 65 pips del USDJPY, 60 pips del GBPUSD, 30 pips para el AUDUSD/NZDUSD, 40 pips para el USDCAD, 0,80 puntos para el Petróleo, 25 puntos para el US500, 75 puntos para el NQ, 200 puntos para el US30).
  • Utilice beneficios modestos para los parciales (es decir, recompensa por riesgo 1:1 para el primer parcial (70% de la posición inicial), deje un corredor (30% de la posición inicial)
  • Escale las posiciones en función de las condiciones del mercado - buenas operaciones con mucha confluencia, 2 - 3 veces el tamaño de la posición base.
  • Evite operar durante acontecimientos de gran impacto
  1. Creación de contexto:
  • Analice la estructura del mercado en múltiples marcos temporales: utilice 5 minutos y 15 minutos - es probable que haya una vela/barra/precio de cierre óptimo para entrar dentro de la hora en la que el modelo predice la entrada en su dirección de negociación.
  • Tenga en cuenta el estado actual del mercado (tendencia/ranging/consolidación/choppy/reversión): utilice esta información para planificar de antemano su hora óptima de negociación. Si lo que anticipa no se cumple, busque la siguiente oportunidad disponible que le ofrezca el modelo.
  • Busque confirmaciones de patrones en los rangos de precios previstos.
  • Concéntrese en la tendencia direccional y en los principales niveles de soporte/resistencia.
  1. Refinamiento de la entrada:
  • Espere confirmaciones estructurales antes de entrar en operaciones. Estructuras que hay que conocer mejor: dobles máximos/mínimos, cuñas, banderas alcistas/bajistas, máximos/mínimos MTR, clímax, especialmente en torno a zonas de soporte y resistencia/FVG clave.
  • No entre si anticipa un canal de tendencia. Los canales de tendencia son sus peores enemigos. Incluso si encuentra un canal de tendencia en un marco temporal superior, como 4 horas o un día, ¡NO CONTRATIENDA!
  • Busque patrones de consolidación dentro de los rangos pronosticados - juegue cada reversión. Este modelo realmente brilla con los retrocesos.
  • Considere la posibilidad de escalar en las posiciones en lugar de tomar entradas de tamaño completo. Tamaño inicial del 25% - escale a medida que el precio vaya a su favor hasta el tamaño total de la posición. No escale en contra de su posición, es decir, si la posición va en su contra.

Algunas observaciones personales adicionales:

  • Hay que estar atento y anticipar ciertas cosas con este modelo: Los retrocesos en torno a áreas clave son los más rentables.
    • Así que digamos que el modelo predice un cambio de color para una barra o marco de tiempo en particular. Ese es el momento de empezar a prestar atención. Busque 1 confluencia extra antes de entrar. Si usted no consigue esa confluencia, espere hasta que la consiga, incluso si el color ha cambiado, el comercio todavía puede funcionar. Mi punto es, este es un buen modelo de "tiempo" desde el punto de vista de "cuando" hay que empezar a preocuparse y prestar atención.
  • Este modelo da muchos falsos positivos, pero unas pocas grandes victorias enjugan todas las malas pérdidas.
  • Comience con 1 par y añada otro par cada semana. Escala tus modelos hasta 10 pares en total.
  • Obtendrá de 2 a 3 grandes operaciones cada semana.
  • Anticipe una ganancia semanal de entre el 0,5% y el 1,5%. Está arriesgando entre un 1,0% y un 2,5% cada semana en todos los pares. En otras palabras, usted negocia poco, se mantiene diversificado en múltiples instrumentos no correlacionados y se centra en intervalos de tiempo específicos. Conseguirás acertar con entre 3 y 6 instrumentos de forma consistente y eso hará que ganes la mayor parte de tu dinero. Por lo tanto, no se obsesione con una sola operación ni analice en exceso un solo punto de datos.
  • Si el cambio pronosticado se produce en torno a un acontecimiento noticioso, sáltelo y céntrese en otro par o espere a la siguiente señal de cambio de color.
  • Los canales de tendencia son su peor enemigo: si sospecha de ellos, olvídese del par ese día. Alternativamente, haga lo contrario de lo que el modelo le está diciendo, porque de lo contrario se verá atrapado en contra-tendencia perder.
  • Operar con este modelo es "incómodo" - realmente nunca confías en él y siempre sientes que "esta operación nunca funcionará, es tan contraintuitiva", pero ahí reside la belleza. Te hace hacer lo que no quieres hacer, que es lo correcto (lo que no quieres hacer, pero deberías hacer porque es lo correcto en esa situación).
  • Concepto de Inversiones Ocurre ~20 - 30% del tiempo: esto es cuando el modelo le está dando un color (rojo o verde), pero el mercado parece estar siempre haciendo lo contrario. Este es un escenario de inversión - nada está mal con el modelo y nada está mal con su comercio tampoco. Sólo tiene que darse cuenta de que se ha producido una inversión y empezar a hacer lo contrario o saltarse el par por completo hasta que las expectativas vuelvan a alinearse. Esto generalmente toma alrededor de 6 - 10 sesiones (alrededor de 2 - 4 días) para que una inversión se arregle. La forma más fácil de identificar una inversión con este modelo es utilizar el script python que te di para las predicciones del modelo - extraer los datos de forma secuencial para las últimas 6 sesiones (por lo que no tire de los últimos datos - hacer una mirada hacia atrás). Comprueba si las predicciones coinciden con los datos reales. Si no es así, se ha producido una inversión.

Las predicciones del modelo deben utilizarse como un componente de su análisis y no como el único elemento decisorio. Si incorpora estos elementos, podrá mejorar potencialmente la coherencia de los resultados de sus operaciones cuando utilice el modelo PatchTST.

Espero que le sirva de ayuda.

Fair Value Gap (FVG) Script que he mencionado (estos gaps funcionan de forma muy parecida a las zonas de oferta y demanda, según mi experiencia):

#property copyright "© ShashankRai1"
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
#property indicator_chart_window

input bool ShowMidpoint = false; // Mostrar línea de punto medio
input color UpFVGColor = clrGreen;  // Up FVG Color
input color DownFVGColor = clrRed;  // Abajo FVG Color

int OnInit()
{
    IndicatorSetString(INDICATOR_SHORTNAME, "Show FVG");
    return(INIT_SUCCEEDED);
}

void OnDeinit(const int reason)
{
    ObjectsDeleteAll(0, "FVG_");
}

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
{
    int start;
    if(prev_calculated == 0)
    {
        start = rates_total - 1;  // Procesar todos los datos disponibles
    }
    else
    {
        start = prev_calculated - 1;  // Procesar sólo las barras nuevas
    }

    for (int i = start; i >= 2; i--)  // Asegúrese de que tenemos al menos 3 barras
    {
        drawFVG(i, rates_total, time, open, high, low, close);
    }

    return(rates_total);
}

void drawFVG(int index, int total, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[])
{
    if (index < 2 || index >= total) return; // Asegurarnos de que tenemos suficientes barras

    if (close[index - 1] > open[index - 1] && high[index - 2] < low[index])
    {
        // Condición de vela cerrada al alza y existe gap
        string boxName = StringFormat("FVG_Box_Up_%d", index);
        if(ObjectCreate(0, boxName, OBJ_RECTANGLE, 0, time[index - 2], high[index - 2], time[index], low[index]))
        {
            ObjectSetInteger(0, boxName, OBJPROP_COLOR, UpFVGColor);
            ObjectSetInteger(0, boxName, OBJPROP_BGCOLOR, UpFVGColor);
            ObjectSetInteger(0, boxName, OBJPROP_BACK, true);
            ObjectSetInteger(0, boxName, OBJPROP_WIDTH, 1);
            ObjectSetInteger(0, boxName, OBJPROP_FILL, true);
            Print("Created Up FVG box at index ", index);
        }
        else
        {
            Print("Failed to create Up FVG box at index ", index, ". Error: ", GetLastError());
        }

        if (ShowMidpoint)
        {
            string lineName = StringFormat("FVG_Line_Up_%d", index);
            double midpoint = (high[index - 2] + low[index]) / 2;
            if(ObjectCreate(0, lineName, OBJ_TREND, 0, time[index - 2], midpoint, time[index], midpoint))
            {
                ObjectSetInteger(0, lineName, OBJPROP_COLOR, UpFVGColor);
                ObjectSetInteger(0, lineName, OBJPROP_STYLE, STYLE_DASH);
                ObjectSetInteger(0, lineName, OBJPROP_WIDTH, 1);
                Print("Created Up FVG midline at index ", index);
            }
            else
            {
                Print("Failed to create Up FVG midline at index ", index, ". Error: ", GetLastError());
            }
        }
    }
    else if (close[index - 1] < open[index - 1] && low[index - 2] > high[index])
    {
        // Condición de vela cerrada a la baja y existe gap
        string boxName = StringFormat("FVG_Box_Down_%d", index);
        if(ObjectCreate(0, boxName, OBJ_RECTANGLE, 0, time[index - 2], low[index - 2], time[index], high[index]))
        {
            ObjectSetInteger(0, boxName, OBJPROP_COLOR, DownFVGColor);
            ObjectSetInteger(0, boxName, OBJPROP_BGCOLOR, DownFVGColor);
            ObjectSetInteger(0, boxName, OBJPROP_BACK, true);
            ObjectSetInteger(0, boxName, OBJPROP_WIDTH, 1);
            ObjectSetInteger(0, boxName, OBJPROP_FILL, true);
            Print("Created Down FVG box at index ", index);
        }
        else
        {
            Print("Failed to create Down FVG box at index ", index, ". Error: ", GetLastError());
        }

        if (ShowMidpoint)
        {
            string lineName = StringFormat("FVG_Line_Down_%d", index);
            double midpoint = (high[index] + low[index - 2]) / 2;
            if(ObjectCreate(0, lineName, OBJ_TREND, 0, time[index - 2], midpoint, time[index], midpoint))
            {
                ObjectSetInteger(0, lineName, OBJPROP_COLOR, DownFVGColor);
                ObjectSetInteger(0, lineName, OBJPROP_STYLE, STYLE_DASH);
                ObjectSetInteger(0, lineName, OBJPROP_WIDTH, 1);
                Print("Created Down FVG midline at index ", index);
            }
            else
            {
                Print("Failed to create Down FVG midline at index ", index, ". Error: ", GetLastError());
            }
        }
    }
}
 
Shashank Rai #:

Gracias por su interés. Sí, esos cambios en los parámetros funcionarían en principio, pero hay algunas consideraciones importantes al cambiar a datos M1:

1. Volumen de datos: Entrenar con 10080 minutos (1 semana) de datos M1 significa manejar significativamente más puntos de datos que con H1. Esto supondrá:

  • Aumentará sustancialmente el tiempo de entrenamiento
  • Requerirá más memoria
  • Potencialmente necesitará aceleración GPU para un entrenamiento eficiente.

2. Ajustes en la arquitectura del modelo: En el paso 8 del entrenamiento del modelo y el paso 4 del código de predicción, es posible que desee ajustar otros parámetros para acomodar la secuencia de entrada más grande:

3. 3. Calidad de la predicción: Aunque obtendrá predicciones más detalladas, tenga en cuenta que los datos M1 suelen contener más ruido. Es posible que desee experimentar con diferentes longitudes de secuencia y ventanas de predicción para encontrar el equilibrio óptimo.

Gracias por la información. Mi ordenador es razonablemente capaz, con 256 GB y 64 núcleos físicos. Sin embargo, no le vendría mal una GPU mejor.

En cuanto actualice la GPU, probaré los ajustes de configuración actualizados.

 
Shashank Rai #:

Gracias por compartir su experiencia con el modelo. Usted plantea un punto válido sobre la consistencia de la predicción. El modelo PatchTST funciona mejor cuando se integra en un enfoque de negociación global que tenga en cuenta múltiples factores del mercado. Le recomiendo que utilice las predicciones del modelo de manera más eficaz:

  1. Optimización de la ventana temporal:
  • Concéntrese en operar durante las horas pico (de 6:00 AM a 10:00 AM hora central de EE.UU.).
  • Utilice las predicciones del modelo principalmente durante estas horas, cuando los movimientos del mercado son más predecibles.
  • Preste especial atención a las desviaciones en torno a los máximos y mínimos diarios y semanales anteriores. Estas son sus principales zonas de oferta y demanda.
  1. Estrategia de integración del modelo:
  • Utilice las predicciones como parte de un análisis más amplio, no como señales independientes.
  • Busque Fair Value Gaps (FVGs) en los rangos de precios pronosticados. He dado el código de un indicador que utilizo para FVGs en MQL5 a continuación.
  • Combine las predicciones con patrones técnicos como banderas, cuñas y consolidaciones horizontales.
  • Considere las predicciones en el contexto de los precios diarios, semanales y mensuales.
  1. Gestión del riesgo:
  • Implemente stops más amplios (por ejemplo, stop-loss de 10 puntos o 100 pips para el oro, 50 pips para el EURUSD, 65 pips del USDJPY, 60 pips del GBPUSD, 30 pips para el AUDUSD/NZDUSD, 40 pips para el USDCAD, 0,80 puntos para el petróleo, 25 puntos para el US500, 75 puntos para el NQ, 200 puntos para el US30).
  • Utilice beneficios modestos para los parciales (es decir, recompensa por riesgo 1:1 para el primer parcial (70% de la posición inicial), deje un corredor (30% de la posición inicial)
  • Escale las posiciones en función de las condiciones del mercado - buenas operaciones con mucha confluencia, 2 - 3 veces el tamaño de la posición base.
  • Evite operar durante acontecimientos de gran impacto
  1. Creación de contexto:
  • Analice la estructura del mercado a través de múltiples marcos temporales: utilice 5 minutos y 15 minutos - es probable que haya una vela/barra/precio de cierre óptimo para entrar dentro de la hora en la que el modelo predice la entrada en su dirección de negociación.
  • Tenga en cuenta el estado actual del mercado (tendencia/ranging/consolidación/choppy/reversión): utilice esta información para planificar de antemano su hora óptima de negociación. Si lo que anticipa no se cumple, busque la siguiente oportunidad disponible que le ofrezca el modelo.
  • Busque confirmaciones de patrones en los rangos de precios previstos.
  • Céntrese en la tendencia direccional y en los principales niveles de soporte/resistencia.
  1. Refinamiento de la entrada:
  • Espere confirmaciones estructurales antes de entrar en operaciones. Estructuras que hay que conocer mejor: dobles máximos/mínimos, cuñas, banderas alcistas/bajistas, máximos/mínimos MTR, clímax, especialmente en torno a zonas de soporte y resistencia/FVG clave.
  • No entre si anticipa un canal de tendencia. Los canales de tendencia son sus peores enemigos. Incluso si encuentra un canal de tendencia en un marco temporal superior, como 4 horas o un día, ¡NO CONTRATIENDA!
  • Busque patrones de consolidación dentro de los rangos pronosticados - juegue cada reversión. Este modelo realmente brilla con los retrocesos.
  • Considere la posibilidad de escalar en las posiciones en lugar de tomar entradas de tamaño completo. Tamaño inicial del 25% - escale a medida que el precio vaya a su favor hasta el tamaño total de la posición. No escale en contra de su posición, es decir, si la posición va en su contra.

Algunas observaciones personales adicionales:

  • Hay que estar atento y anticipar ciertas cosas con este modelo: Los retrocesos en torno a áreas clave son los más rentables.
    • Así que digamos que el modelo predice un cambio de color para una barra o marco de tiempo en particular. Ese es el momento de empezar a prestar atención. Busque 1 confluencia extra antes de entrar. Si usted no consigue esa confluencia, espere hasta que la consiga, incluso si el color ha cambiado, el comercio todavía puede funcionar. Mi punto es, este es un buen modelo de "tiempo" desde el punto de vista de "cuando" hay que empezar a preocuparse y prestar atención.
  • Este modelo da muchos falsos positivos, pero unas pocas grandes victorias enjugan todas las malas pérdidas.
  • Comience con 1 par y añada otro par cada semana. Escala tus modelos hasta 10 pares en total.
  • Obtendrá de 2 a 3 grandes operaciones cada semana.
  • Anticipe una ganancia semanal de entre el 0,5% y el 1,5%. Está arriesgando entre un 1,0% y un 2,5% cada semana en todos los pares. En otras palabras, usted negocia poco, se mantiene diversificado en múltiples instrumentos no correlacionados y se centra en intervalos de tiempo específicos. Conseguirás acertar con entre 3 y 6 instrumentos de forma consistente y eso hará que ganes la mayor parte de tu dinero. Por lo tanto, no se obsesione con una sola operación ni analice en exceso un solo punto de datos.
  • Si el cambio pronosticado se produce en torno a un acontecimiento noticioso, sáltelo y céntrese en otro par o espere a la siguiente señal de cambio de color.
  • Los canales de tendencia son su peor enemigo: si sospecha de ellos, olvídese del par ese día. Alternativamente, haga lo contrario de lo que el modelo le está diciendo, porque de lo contrario se verá atrapado en contra-tendencia perder.
  • Operar con este modelo es "incómodo" - realmente nunca confías en él y siempre sientes que "esta operación nunca funcionará, es tan contraintuitiva", pero ahí reside la belleza. Te hace hacer lo que no quieres hacer, que es lo correcto (lo que no quieres hacer, pero deberías hacer porque es lo correcto en esa situación).
  • Concepto de Inversiones Ocurre ~20 - 30% del tiempo: esto es cuando el modelo le está dando un color (rojo o verde), pero el mercado parece estar siempre haciendo lo contrario. Este es un escenario de inversión - nada está mal con el modelo y nada está mal con su comercio tampoco. Sólo tiene que darse cuenta de que se ha producido una inversión y empezar a hacer lo contrario o saltarse el par por completo hasta que las expectativas vuelvan a alinearse. Esto generalmente toma alrededor de 6 - 10 sesiones (alrededor de 2 - 4 días) para que una inversión se arregle. La forma más fácil de identificar una inversión con este modelo es utilizar el script python que te di para las predicciones del modelo - extraer los datos de forma secuencial para las últimas 6 sesiones (por lo que no tire de los últimos datos - hacer una mirada hacia atrás). Comprueba si las predicciones coinciden con los datos reales. Si no es así, se ha producido una inversión.

Las predicciones del modelo deben utilizarse como un componente de su análisis y no como el único elemento decisorio. Al incorporar estos elementos, puede mejorar potencialmente la coherencia de los resultados de sus operaciones cuando utilice el modelo PatchTST.

Espero que le sirva de ayuda.

Fair Value Gap (FVG) Script que he mencionado (estos gaps funcionan de forma muy parecida a las zonas de oferta y demanda, según mi experiencia):

Muchas gracias por tu paciente respuesta y desinteresado compartir. Nunca antes había visto respuestas tan detalladas y profesionales. Leeré su artículo repetidamente. Estos conocimientos son especialmente valiosos para mí. Mis mejores deseos para usted.
 
Thomas Sawyer #:
Muchas gracias por su paciente respuesta y por compartirla desinteresadamente. Nunca había visto respuestas tan detalladas y profesionales. Leeré su artículo repetidamente. Estos conocimientos son especialmente valiosos para mí. Mis mejores deseos para usted.

Muchas gracias. ¡¡Sus amables palabras significan mucho!! Si necesita más ayuda, no dude en ponerse en contacto con nosotros.