Discusión sobre el artículo "Características del Wizard MQL5 que debe conocer (Parte 6): Transformada de Fourier"

 

Artículo publicado Características del Wizard MQL5 que debe conocer (Parte 6): Transformada de Fourier:

La transformada de Fourier, introducida por Joseph Fourier, es un medio para descomponer puntos de datos de ondas complejos en componentes de ondas simples. Esta característica puede resultar útil para los tráders, así que hablaremos de ella en este artículo.

Realizando la compilación con la clase de señal RSI incorporada y la gestión de capital de margen fijo incorporada, obtendremos los siguientes resultados para EURJPY con el periodo de 2022.01.01 a 2023.01.01 y H4. Al ejecutar esta prueba, no estableceremos un objetivo de beneficio y no utilizaremos un stop loss por defecto, por lo que ambos parámetros serán iguales a cero. Nuestra intención es que las salidas estén completamente determinadas por la reversión de la señal o la activación del stop loss fijado por nuestro trailing stop.


r_1


Autor: Stephen Njuki

 

Hola Stephan,

Es un gran artículo aunque necesito estudiarlo más en detalle ya que hace 60 años que no utilizo las Transformadas de Fourier. Me sorprende que no haya habido otros comentarios. ¿Puedes publicar la fuente del expert mq5 para poder compilar las tres opciones en el expert y probarlas.


Gracias,

CapeCoddah

 

Hola,

Buen artículo. Una idea interesante. Un ejemplo de código mq5 para probar estas opciones sería genial. Gracias.

 

Hola

Expertos utilizados en los artículos se compilan a través de MQL5 asistente, por lo que el resto del código fuente ya está en su PC si usted tiene metatrader.

 

Hola Stephan

Dejé mi parte de matemáticas más querido (Fourier) durante 30 años. Así que es imposible hacer comentarios, pero he leído su maravilloso "ejercicio".

Siento no poder ayudarte, pero gracias por compartirlo.

 

Stephan

Gracias por la referencia, procederé a utilizarla y te haré saber mis resultados,

CapeCoddah

 

Hola Stephen

¡un artículo muy interesante!

Una sugerencia al respecto: Hay que borrar los parámetros "Puntos" y "Epiciclos" en la "Descripción de la clase", no se usan en el código y el compilador se queja después de compilar el EA generado.

Mi pregunta: El EA está funcionando sin problemas, pero no puedo reproducir sus resultados de ninguna manera, tal vez hice algo mal. ¿Podrías publicar el archivo *.set o incluso la fuente del EA que generaste?

¿Hiciste una prueba de avance?

De todos modos es una buena lección en el uso de la FFT. ¡Thank you!

 

Entiendo que el autor ni siquiera estudió la Transformada Rápida de Fourier :) Así es, para qué molestarse, la FT y la FFT están vacías y no aportan nada en el comercio. Yo solía hacer estas transformaciones hace 15 años en Matlab, y luego hice la transformación inversa a la forma temporal, y fue un completo fracaso. Las FFT son buenas en otros campos, por ejemplo el radar.

Pero las ondículas son mucho más interesantes. Si recortas todas las bandas de alta frecuencia y haces la transformación inversa al dominio del tiempo, obtendrás un excelente filtro de paso bajo sin retardos. Sin embargo, se puede hacer mucho más fácil - a través de filtros de 2 pasos.....

 

Hola,

me da 12 errores

 
en el primer guión, algunas cosas me molestaban, así que hice algunos cambios.

double CTrailingFT::ProcessFT(int Index) {
    double _ft = 0.0;
    static double _a[6]; // Matriz de tamaño fijo
    al_complex _f[5];    // 5 epiciclos

    // Rellenar _a con las diferencias de precio
    for(int p=0; p<6; p++) {
        _a[p] = m_close.GetData(Index+p) - m_close.GetData(Index+p+1);
    }

    // Sustituir la FFT Alglib por una FFT personalizada de 6 puntos
    CustomFFT6(_a, _f); // Función optimizada hipotética

    // Calcular _ft utilizando la frecuencia dominante (por ejemplo, la mayor magnitud)
    double maxMagnitude = 0.0;
    for(int s=0; s<5; s++) {
        double mag = MathSqrt(_f[s].re*_f[s].re + _f[s].im*_f[s].im);
        if(mag > maxMagnitude) {
            maxMagnitude = mag;
            _ft = _f[s].re; // O utilizar una combinación ponderada
        }
    }

    return _ft * 100.0; // Ajuste la escala según sea necesario
}

Sustituir Alglib por Custom FFT:

  • La FFT de Alglib puede ser más lenta para conjuntos de datos pequeños. Implementa una FFT ligera adaptada al tamaño de tu ventana (6 puntos).


Precalcule los términos MathExp(-2.0*M_PI*...) para evitar recalcularlos en cada tick.

ArrayResize(_a,6) y matrix.Init(6,5) dentro de ProcessFT() son ineficientes para HFT. Utiliza buffers de tamaño fijo.

Evite las operaciones matriciales en ProcessFT(). Calcular directamente el valor requerido para _ft utilizando frecuencias dominantes.


Tratamiento de errores:

Añadir comprobaciones para evitar la división por cero en _f[s].im / _f[s].re.Evitar operaciones matriciales en ProcessFT() . Calcule directamente el valor requerido para _ft utilizando frecuencias dominantes.

Tratamiento de errores:

  • Añadir comprobaciones para evitar la división por cero en _f[s].im / _f[s].re .


si alguien quiere el código para impliment CustomFFT6 sólo tiene que pedir.
 

Ya existen métodos mucho más eficaces que utilizan una estructura elemental (forma de M). Un cambio en sus parámetros da una imagen completa de los cambios en la dinámica de los precios (es la teoría del equilibrio de impulsos).

En cuanto a la transformada de Fourier, en mi opinión, es un método "rebuscado" para los mercados financieros, ya que el movimiento de los precios de los instrumentos financieros es un proceso no estacionario, y analizar tales procesos con ayuda de los métodos de Fourier resulta ineficaz.

En cuanto al análisis de ondículas, es más interesante, ya que se utilizan diversas estructuras ondulatorias. Sin embargo, esto no es más que una especie de selección subjetiva de patrones en lugar de utilizar una única estructura elemental, lo que se pone de manifiesto en la teoría del equilibrio de impulsos.