Discusión sobre el artículo "Guía de aprendizaje automático para MetaTrader 5 (Parte 1): Correcciones relacionadas con la fuga de datos y las marcas de tiempo"

 

Artículo publicado Guía de aprendizaje automático para MetaTrader 5 (Parte 1): Correcciones relacionadas con la fuga de datos y las marcas de tiempo:

Antes incluso de empezar a utilizar el aprendizaje automático en nuestras operaciones en MetaTrader 5, es fundamental abordar uno de los riesgos más ignorados: la fuga de datos. En este artículo se analiza cómo las fugas de datos, en particular la «trampa de la marca de tiempo» de MetaTrader 5, pueden distorsionar el rendimiento de nuestro modelo y dar lugar a señales de trading poco fiables. Al profundizar en los mecanismos de este problema y presentar estrategias para evitarlo, allanamos el camino para crear modelos de aprendizaje automático sólidos que ofrezcan predicciones fiables en entornos de negociación en tiempo real.

El data snooping o la fuga de datos pueden parecer sutiles, pero su impacto en los modelos de aprendizaje automático puede ser monumental y devastador. Imagina que estás estudiando para un examen y, sin darte cuenta, echas un vistazo a las respuestas antes de tiempo. Tu puntuación perfecta te da la sensación de haberla ganado, pero en realidad estás haciendo trampa. Esto es precisamente lo que ocurre cuando utilizamos las marcas de tiempo predeterminadas de MetaTrader 5 en el aprendizaje automático: la fuga de datos corrompe inesperadamente la integridad de tu modelo.

Cómo te engañan las marcas de tiempo de MetaTrader 5

EURUSD M5 - MetaTrader5

MetaTrader 5 etiqueta la barra de 5 minutos que comienza a las 18:55, es decir, la penúltima barra de arriba, como:
Time Open High Low Close

2 Apr 18:55

  1.08718

  1.08724

  1.08668

  1.08670

Al indicar la hora en el inicio, MetaTrader 5 da a entender que los datos de esta barra estaban disponibles a las 18:55:00, ¡nada menos que 5 minutos antes de que cerrara realmente! Si tu modelo utiliza esto durante el entrenamiento, es como darle a un estudiante las respuestas del examen 5 minutos antes de que empiece la prueba. Para contrarrestar esto, deberíamos evitar usar las barras de tiempo precompiladas de MetaTrader 5 y, en su lugar, usar datos de ticks para crear las barras que usamos en nuestros modelos.

Autor: Patrick Murimi Njoroge

 

Las barras de actividad no resuelven todos los problemas que mencionas para las barras de tiempo. Por ejemplo, usted escribió:

The Subtle Intra-Bar Leakage: However, a more subtle form of data leakage can still occur within the very formation of that time bar. If a significant event transpires midway through a 1-minute bar (e.g., at 09:00:35), any features derived from that bar (such as its high price or a flag for the event) will inevitably incorporate this information by the bar's end.

Si construyes barras de igual volumen, igual rango u otras barras personalizadas basadas en ticks, marcarás dicha barra con una única etiqueta de todos modos, y se filtrará (o más preciso, se difuminará) la información sobre el precio alto en toda la barra.

La única manera de resolver esto - es construir "barras" con las características específicas (que va a utilizar) en mente. Por ejemplo, en caso de que los máximos o mínimos sean las características principales, usted debería intentar, probablemente unas "barras" en zigzag con extermos marcados con el tiempo exacto.

En realidad, el enfoque con timeframes constantes, y específicamente limitándolos a M1 es problemático en el contexto de la fuga de datos en MT5. Etiquetar las barras M1 con el tiempo final no es mucho mejor que con el tiempo inicial, en mi opinión.


Para aquellos que estén interesados en construir barras personalizadas (gráficos) de forma nativa en MT5, hay un artículo con la implementación en MQL5 de barras de igual volumen, igual rango y renko. Por supuesto, usted puede marcar las barras con el tiempo final en el código fuente abierto.

Custom symbols: Practical basics
Custom symbols: Practical basics
  • www.mql5.com
The article is devoted to the programmatic generation of custom symbols which are used to demonstrate some popular methods for displaying quotes. It describes a suggested variant of minimally invasive adaptation of Expert Advisors for trading a real symbol from a derived custom symbol chart. MQL source codes are attached to this article.
 
Stanislav Korotky #:

Las barras de actividad no resuelven todos los problemas que mencionas para las barras de tiempo. Por ejemplo, usted escribió:

Si construyes barras de igual volumen, igual rango u otras barras personalizadas basadas en ticks, marcarás una barra de este tipo con una única etiqueta de todos modos, y se filtrará (o más exactamente, se difuminará) la información sobre el precio alto en toda la barra.

La única manera de resolver esto - es construir "barras" con las características específicas (que va a utilizar) en mente. Por ejemplo, en caso de que los máximos o mínimos sean las características principales, debería intentar, probablemente unas "barras" en zigzag con extermos marcados con la hora exacta.

En realidad, el enfoque con plazos constantes, y específicamente limitándolos a M1 es problemático en el contexto de la fuga de datos en MT5. Etiquetar barras M1 con tiempo final no es mucho mejor que con tiempo inicial, imho.


Para aquellos que estén interesados en construir barras personalizadas (gráficos) de forma nativa en MT5, hay un artículo con la implementación en MQL5 de barras de igual volumen, igual rango y renko. Por supuesto, usted puede marcar las barras con el tiempo final en el código fuente abierto.

El objetivo de las barras basadas en la actividad es mejorar la información de las propiedades estadísticas contenidas en las barras, como una menor heteroskedasticidad y una mejor normalidad. La solución a la fuga sutil dentro de la barra que he propuesto consiste en etiquetar las barras utilizando su hora de finalización, de modo que todos los eventos que se produzcan dentro de la barra queden recogidos en la marca de tiempo. Un ejemplo útil es cuando se utilizan características derivadas de la marca de tiempo, como las transformaciones de Fourier, en el entrenamiento del modelo. Si utiliza la convención de MetaTrader5, en la que las barras se etiquetan por el inicio del periodo, estará informando erróneamente a su modelo. La distinción puede no importar mucho para algunos modelos, pero tiene un gran impacto en aquellos que pretenden explotar la naturaleza cíclica de los mercados. Espero haber aclarado mi intención.


 
Stanislav Korotky #:

Las barras basadas en la actividad no resuelven todos los problemas que mencionas para las barras de tiempo. Por ejemplo, escribiste:

Si creas barras del mismo volumen, rango u otras barras personalizadas basadas en ticks, de todas formas estarás marcando dicha barra con una única etiqueta, y la información sobre el precio máximo se filtrará (o más exactamente, se difuminará) a lo largo de toda la barra.

La única forma de resolver este problema es crear "barras" teniendo en cuenta las características específicas (que vaya a utilizar). Por ejemplo, si las características principales son máximos o mínimos, debería intentar crear una "barra en zigzag" con extermos marcados exactamente en el tiempo.

El enfoque de marco temporal constante, y en particular la limitación a M1, es problemático en el contexto de la fuga de datos de MT5. Marcar barras M1 con la hora de fin no es, en mi opinión, mucho mejor que con la hora de inicio.


Para aquellos interesados en crear barras personalizadas (gráficos) de forma nativa en MT5, está el artículo con la implementación en MQL5 de las barras Equal Volume, Equal Range y Renko. Por supuesto, puedes marcar las barras con la hora de finalización en el código fuente abierto.

¿Qué quieres decir cuando afirmas "Si creas barras del mismo volumen, rango u otras barras personalizadas basadas en ticks, de todas formas estarás marcando dicha barra con una única etiqueta, y la información sobre el precio máximo se filtrará (o más exactamente, se difuminará) a lo largo de toda la barra"?

 
Patrick Murimi Njoroge #:

¿Qué quieres decir cuando afirmas "Si creas barras del mismo volumen, rango u otras barras personalizadas basadas en ticks, estarás marcando dicha barra con una única etiqueta de todos modos, y la información sobre el precio máximo se filtrará (o más exactamente, se difuminará) a lo largo de toda la barra"?

No entiendo lo que no está claro. Mi frase era una respuesta directa a tu frase, citada en mi mensaje anterior, para que veas el contexto. No importa cómo se forman las barras, cada propiedad de la barra se atribuye por una sola marca de tiempo, y el "evento" real de la propiedad no coincide con ese tiempo.
 
Stanislav Korotky # :
No entiendo lo que no está claro. mi frase es una respuesta directa a su frase que he citado en el post anterior. No importa cómo se forme la barra, todas las propiedades de la barra se atribuyen por una sola marca de tiempo, y los "eventos" reales de las propiedades no coinciden con ese tiempo.

Ahora entiendo el significado de desenfoque.

 
Patrick Murimi Njoroge #:

Ahora entiendo el significado del desenfoque.

Mi arreglo tiene en cuenta que el usuario va a entrenar modelos con etiquetado de triple barrera. En mi opinión, la complejidad de evitar el mencionado desenfoque es mayor que la información que se obtiene en esta configuración. No obstante, voy a realizar algunos experimentos teniendo esto en cuenta. Si ya has realizado alguno, te agradecería que compartieras los resultados y la configuración del experimento.
 
Patrick Murimi Njoroge #:

Ahora entiendo el significado del desenfoque.

Tiene razón en que el desenfoque intra-barra no se soluciona con barras basadas en la actividad. Cuando se cierra una barra en dólares, su característica alta refleja un precio que llegó en algún tick anterior dentro de esa barra. La marca de tiempo de la barra es correcta, pero el origen temporal de la característica se pierde. Ningún tipo de barra -tiempo, tick, volumen, dólar o desequilibrio- elimina esto, porque la agregación es el propio mecanismo de construcción de la barra. Una barra en zigzag lo resuelve específicamente para el máximo/mínimo, por construcción: el extremo está siempre al cierre. Eso es una ventaja genuina para las estrategias cuya característica principal es el extremo del precio.

En lo que me opondría es en la fusión de desenfoque con sesgo de anticipación. Son dos problemas distintos. El sesgo de anticipación significa que la etiqueta se construye utilizando información posterior a la marca de tiempo asociada a la observación: el modelo se entrena en el futuro. Las barras basadas en la actividad solucionan este problema: la marca de tiempo es el momento en el que el conjunto de información de la barra está completo, por lo que ninguna etiqueta ve más allá. El desenfoque dentro de la barra significa que una característica se agrega a lo largo del tiempo sin registrar en qué momento de la barra llegó cada componente. Esto reduce la resolución, pero no hace que el modelo vea el futuro. Tanto una barra M1 con una hora incorrecta como una barra dólar con una hora correcta desdibujan sus características, pero sólo una de ellas provoca un sesgo de previsión.

Sobre el etiquetado M1 de hora final frente a hora inicial: Yo no diría que la hora final es sólo marginalmente mejor. Se elimina la trampa específica descrita en la Parte 1 de esta serie, donde las marcas de tiempo por defecto de MetaTrader 5 implica la disponibilidad de información cinco minutos antes del cierre de la barra. Esa es una fuente concreta, medible de rendimiento backtest inflado, no una solución cosmética. Si se soluciona adicionalmente el desenfoque intra-barra es una cuestión aparte.

Su punto más amplio - que el artículo no distingue suficientemente lo que el muestreo basado en la actividad resuelve de lo que no lo hace - es justo. En una versión futura se debería explicar que la ingeniería de rasgos tick a tick, y no la elección de barras, es la respuesta teóricamente completa al desenfoque, a costa de una complejidad de datos y de modelización sustancialmente mayor. Añadiré esa aclaración a la conclusión. Actualmente estoy racionalizando el repositorio de esta serie, pero muy pronto editaré también estos errores.