Efecto de borde en el camino hacia el GRAAL - página 2

 
Y qué wavelets se usaron, yo usé wavelets de Matlab. Los efectos de los bordes parecen ser menos visibles ahí, pero por supuesto están ahí (no pueden evitarlo) También probé con descomposiciones (aproximaciones) y una red neuronal. En los datos en los que la red aprendió muy fresco. y aprende malla parece fácil, pero en los nuevos - el infierno. He llegado a la conclusión de que las ondículas son algo bueno, especialmente si se aplica el espacio de retardo. Pero hasta ahora no lo he aplicado en la práctica.
 
vladevgeniy писал(а) >>
Y qué tipo de wavelets usaste, yo usé los de Matlab. Parece que los efectos de los bordes son menos visibles, pero por supuesto están ahí (no pueden evitarlo) También intenté aplicar descomposiciones (aproximaciones) y una red neuronal. En los datos en los que la red aprendió muy fresco. y aprende malla parece fácil, pero en los nuevos - el infierno. He llegado a la conclusión de que las ondículas son algo bueno, especialmente si se aplica el espacio de retardo. Pero hasta ahora no lo he aplicado en la práctica.

Utiliza las ondículas de Dobeshi. Dicen que las ondículas de Meyer son menos propensas a los efectos de borde, pero aún no lo he probado.

El caso es que cuesta mucho tiempo programar cada método.

¿Qué son las ondículas de Matlab? Nunca he trabajado en Matlab.

¿Te refieres a los polinomios? ¿Qué tal ha funcionado?

 
Desperado писал(а) >>

El cruce de niveles no da un resultado muy atractivo. Esto también se me ha ocurrido a mí.

En el indicador la distribución de máximos y mínimos sigue una ley gaussiana, sólo que con diferente MO.

Los máximos tienen aproximadamente 0,3, los mínimos -0,3.

Cuanto más alta es la barra, más fiables son las señales y menos.

Y no es interesante ganar 200 puntos al mes :)

Sí, desgraciadamente, o se distorsiona o se retrasa.

No me gusta la distribución normal de Gauss. Yo prefiero la Lognormal. Pero eso, desgraciadamente, no le conviene a todo el mundo. Llegué a la conclusión de que es razonable hacer una aproximación por ajuste (como escribí arriba). Y si hay un resultado, o algo interesante, entonces ajustaré la función de distribución. En general, las desviaciones no son grandes, por lo que se puede confiar en ellas.

 
Desperado, matlab cualquier caja de herramientas de matlab sobre wavelets. Puede obtener la descomposición y el detalle necesarios y la aproximación. M, entonces se utiliza una dll transitiva y se conecta a la métrica a través de una dll. Creo que también hay una función de Mayer, o quizás no, no lo recuerdo. Pero se puede ahorrar tiempo en la programación, aunque tuve muchos problemas para traducir las matrices de Matlab a variables regulares y viceversa. He intentado reescribir la famosa biblioteca escrita en Delphi en C++ (hay muchas en la red). Ahí es donde se observaron las mayores distorsiones de los bordes. Pero Matlab no tiene nada de eso, aunque también hace curvas (le gusta dibujar ganchos en los bordes al hacer la tendencia). Intenta construir simplemente la wavelet requerida en Matlab, y si te gusta el resultado, puedes conectarla a Mt a través de una dll.
 
vladevgeniy писал(а) >>
Desperado, cualquier matlab que puedas encontrar en la caja de herramientas de Matlab sobre wavelets. Puedes obtener la descomposición que necesitas y el detalle y la aproximación. Se escribe la función M, luego una dll de transición, y se conecta vía dll a MT. Creo que también hay una función de Mayer, o quizás no, no lo recuerdo. Pero se puede ahorrar tiempo en la programación, aunque tuve muchos problemas para traducir las matrices de Matlab a variables regulares y viceversa. He intentado reescribir la famosa biblioteca escrita en Delphi en C++ (hay muchas en la red). Ahí es donde se observaron las mayores distorsiones de los bordes. Pero Matlab no tiene nada de eso, aunque también hace curvas (le gusta dibujar ganchos en los bordes al hacer la tendencia). Intenta construir simplemente la wavelet requerida en Matlab, y si te gusta el resultado, puedes conectarla a Mt a través de una dll.

Muchas gracias. En realidad, ese es el delph que utilicé :) Sólo había un módulo allí, lo convertí en una biblioteca.

Trataré de encontrar Matlab primero.

 
infinum13 писал(а) >>

No me gusta la distribución normal de Gauss. El lognormal es mejor. Pero eso, desgraciadamente, tampoco le viene bien a todo el mundo. Llegué a la conclusión de que es razonable aproximar por ajuste (como escribí arriba). Y si hay un resultado, o algo interesante, entonces ajustaré la función de distribución. En general, las desviaciones no son grandes, así que también puedo confiar en esta.

He probado su algoritmo. Como se esperaba en principio, elimina el ruido fino. Funciona bien con periodos pequeños y grandes TFs.

Veré lo que puedo hacer con él.

Su resultado se muestra con la línea roja. Y necesito algo como la línea verde.

 

Ese es el tipo de línea verde que se obtiene en Matlab, con grandes niveles de descomposición. Todo se hace con una línea de código. Hay un modo especial de eliminación de ruido por wavelet, en el que se selecciona el tipo de wavelet, y hay algunos parámetros más. La tarea principal es hacer un dll transitorio. Ese módulo Delph tiene efectos de borde muy fuertes, sí. No sé cómo, pero en Matlab se reducen mucho, a veces incluso parece que no hay ninguno.

El último Matlab ocupa casi 4 gigas en un torrent. )))) Es mejor usarlo. Comprobado y el dll compila bien y se acopla bien.

 

Del artículo adjunto:

Nuestra aplicación -la predicción- señala la importancia crítica que tienen para nosotros los valores finales. Nuestra serie temporal es finita, y los valores n, n-1, n-2, ..., son los que más nos interesan. Cualquier función wavelet simétrica es problemática para el manejo de dicho límite (o borde). Tampoco podemos utilizar los coeficientes wavelet si estos coeficientes se han calculado a partir de valores de datos "futuros". Un asymmetric filter puede permitirnos sortear este problema. Dicha función wavelet puede tratar adecuadamente el borde de importancia para nosotros. Los primeros valores de nuestra serie temporal, que también constituyen un límite, pueden ser tratados arbitrariamente como resultado, pero esto no tiene ninguna consecuencia práctica.

Según tengo entendido, la función no simétrica se basa únicamente en los valores anteriores de la serie temporal.

Simétrico: sobre valores pasados y futuros. Por ejemplo, aquí del algoritmo CDF 9/7:

// Predecir 1

a=-1.586134342;

for (i=1; i<n-2; i+=2) {

x[n-1]+=2*a*x[n-2];

}

x[i]+=a*(x[i-1]+x[i+1]);

Los efectos de borde que crea la última línea.

Según el artículo, por cierto, lo escribió un indyuke:

Aquí, cada coeficiente de wavelet se calcula únicamente sobre los valores anteriores de la fila.

Es posible alinear, por supuesto:

La región desconocida es una función simétrica y se rellena con algo como x[n-1]+=2*a*x[n-2]

Se supone que debe ser redibujado.

Si quieres jugar con él, haz clic aquí.

Archivos adjuntos:
 
vladevgeniy писал(а) >>

Ese es el tipo de línea verde que se obtiene en Matlab, con grandes niveles de descomposición. Todo se hace con una línea de código. Hay un modo especial de eliminación de ruido por wavelet, en el que se selecciona el tipo de wavelet, y hay algunos otros parámetros. La tarea principal es hacer un dll transitorio. Ese módulo Delph tiene efectos de borde muy fuertes, sí. No sé cómo, pero en Matlab se reducen mucho, a veces incluso parece que no hay ninguno.

El último Matlab ocupa casi 4 gigas en un torrent. )))) Es mejor usarlo. Lo he comprobado y la dll compila bien y se acopla bien.

Perdona por la pregunta estilo RTFM, pero podrías describir en pocas palabras,

¿cómo crear una dll en MathLab y llamarla desde MT4?

Si es posible, con un ejemplo.

 

Oh, lo habría tenido fácil hace un par de meses. Lo he olvidado todo. Pero es estándar en Matlab, hay una descripción en el manual. En general, encontrarás una ayuda de muy buena calidad en Matlab. Después de la compilación se crea un archivo .dll y lib junto con un par de otros menos importantes. En el archivo m tendrás una función en lenguaje matlab y esta función es llamada desde la dll intermedia. Sólo tienes que llamar a la inicialización allí primero, bueno la helpe lo tiene. Sin embargo, hay un "pero". Necesitamos sobrecargar las variables double string, etc. en mxArray y luego llamar a la función en Matlab y luego de vuelta en C.

Este es un ejemplo de cómo trabajar con mxArray en C

mxArray *inm = mxCreateDoubleMatrix(1,size,mxREAL); se crea una variable mxArray de tamaño para la matriz de entrada
memcpy(mxGetPr(inm), &in[0], size*sizeof(double)); se rellena con las variables de la matriz de entrada

entonces la función de matlab se llama

entonces el array de salida de mxArray se convierte en un doble

// ---------------------- convertir mxArray a doble ------
memcpy(out, mxGetPr(outm), size*sizeof(double))


Esto es más o menos ahora, es difícil de recordar exactamente.

Inclusiones para trabajar con mxArray

#include "mex.h"

se encuentran en la carpeta matlab

Razón de la queja: