Filtro Hodrick-Prescott

 

¡Hola, queridos programadores!

¿Quién se compromete a resolver, creo, una tarea sencilla de escribir un indicador? Necesito escribir un indicador que filtre las series con el filtro Hodrick-Prescott. La función está disponible en MATLAB, si no me equivoco, se puede convertir en una DLL utilizando el compilador de MATLAB. En consecuencia, necesitamos crear un indicador, que se dirija a esta Dll. En la entrada debemos introducir los siguientes parámetros: longitud de la serie, parámetro de suavizado. La salida es un componente de tendencia (que se dibujará en el gráfico) y un componente cíclico (oscilador).

No puedo hacerlo yo mismo; no conozco el compilador de MATLAB ni MQL4.

Tengo una descomposición para el Eurodólar H4 en el gráfico. Como se ha visto casi a lo largo de la historia, la peculiaridad del movimiento del precio era que después de romper la tendencia, el precio se movía a una distancia igual a la diferencia entre el extremo anterior y la tendencia, en resumen, la amplitud era casi la misma. La excepción son los últimos datos, pero allí es extrema. Básicamente, un indicador de este tipo debería volver a dibujarse si el número de puntos de datos es pequeño; sin embargo, si se aumentan, por ejemplo, hasta 2000, no surgirán problemas de redibujado.

 
Constantin писал(а) >>

En el gráfico hay una descomposición para el Eurodólar H4 . Como casi puede ver...

No es visible. ¿De qué gráfico se trata?

 

 
No veo un retraso en el movimiento. Significa que el autor no entiende lo que ha puesto, o que hay un error en el algoritmo y el indicador se sobredimensiona.
 
Neutron >> :
No veo un retraso en el movimiento. Significa que el autor no entiende lo que ha puesto, o que hay un error en el algoritmo y el indicador se redibuja.

No hay lag, porque no es un muwink en general. Se resuelve el problema de minimizar la función para una serie dada. Por supuesto, cuando la serie se mueve, si la longitud de la serie es pequeña, se redibujará cuando aparezca nueva información, especialmente si hay picos. Descripción del filtro en http://en.wikipedia.org/wiki/Hodrick-Prescott_filter

 
Constantin писал(а) >>

En principio, esta función está en MATLAB, si no me equivoco, se puede convertir en una DLL utilizando el compilador de Matlab. En consecuencia, cree un indicador que se ocupe de este Dll.

Creo que el mundo es más sencillo que con un dll.

Aquí está la función que necesitamos minimizar para construir este filtro digital:

Podemos ver que en esta formulación el filtro sólo puede funcionar con datos históricos, ya que para calcular el valor de la línea de tendencia en el momento actual necesitamos conocer no sólo los valores anteriores de esta tendencia sino también un paso adelante t[i+1]. Dicho filtro mostrará, en la historia, la coincidencia exacta de la curva suave con el kotir (esto es lo que el autor citó en el primer post como demostración), mientras que en el borde derecho del kotir habrá un sobredimensionamiento increíble.

Esto es lo que he encontrado en la web:

No he podido encontrar ninguna receta preparada para construir este filtro. En realidad, tomemos y construyamos nosotros mismos un funcional para el borde derecho de BP (la ecuación superior).

Tomemos una derivada de la misma por el parámetro y[0] - valor actual e igualémosla a cero, e inmediatamente obtendremos una expresión recurrente para el filtro HP requerido (ecuación inferior). Veamos cómo las propiedades de suavizado del filtro dependen del parámetro de suavizado w:

Aquí, la línea verde es cotier, la línea negra es w=0,5, etc. Puedes ver que todo funciona correctamente - hay un inevitable desfase que es mayor cuanto más fuerte es el antialiasing y el borde derecho no se redibuja. Ahora podemos codificarla también en MQL.

//+------------------------------------------------------------------+
//| Moving Average HP.mq4 |
//| Code by Neutron |
//+------------------------------------------------------------------+
#property indicator_chart_window
#property indicator_color1 Blue
#property indicator_width1 3
extern double w=0.1;
int Start,i,m;
double MA[5000],Y[5000];
int start()
{
Start=5000;
MA[Start]=Open[Start];
MA[Start-1]=Open[Start-1];
for (i=Start-2;i>=0;i--) MA[i]=w*(Open[i]-2.*MA[i+1]+MA[i+2])+2.*MA[i+1]-MA[i+2];
}
int init()
{
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,MA);
return(0);
}

Así es como resultó:

El azul es HP, el verde es cotier, el rojo es un filtro Watterout de 2º orden (para comparar).

De hecho, este filtro trata de captar honestamente las tendencias lineales. ¡Mira la funcionalidad en la parte superior del post - muestra que además de minimizar la desviación de muving del kotir (primera suma), hay un requisito para minimizar la segunda derivada (segunda suma)! Y después de todo, la segunda derivada de la línea es cero, y el requisito de minimizarla es igual al requisito de maximizar la aspiración a la línea de tendencia para un vector de datos de entrada arbitrario. Me gustó el enfoque.

P.D. Es interesante, si en la expresión del funcional para exigir la minimización de la primera derivada (la ecuación superior) en lugar de la segunda, obtenemos una fórmula de recurrencia muving para la media exponencial EMA (la ecuación inferior):

Resulta que la media exponencial es el más suave de todos los movimientos posibles.

 

Este es el aspecto del oscilador (línea azul) basado en este filtro HP (rojo):

Ya puedes probar a comerciar :-)

Comprar cuando el nivel del oscilador está por encima de cero, vender cuando está por debajo. El indicador está en Attach.

Archivos adjuntos:
difhp.mq4  1 kb
 
Neutron писал(а) >>

Resulta que la media exponencial es la más suave de todas las posibles muwings

Sí, hay un artículo sobre el tema.

No lo he hecho en el artículo, pero desarrollando la misma idea de suavidad ema se puede conseguir una buena suavidad:

Azul - EMA15 con un desfase de 5.

Rojo - MA más suave con el mismo retraso.

Archivos adjuntos:
stan.zip  147 kb
 
HP Close, UGCOZN M1,
rojo =1600
azul =100
amarillo = EMA 14, cloze.
 
Korey >> :
UGCOZN

UGKOSN - ¡son cinco! Debo haber tardado 10 segundos en darme cuenta de lo que es. >> También se llama UGKGYV.

 
Bueno, el JPY no está permitido, (hay chicas que se ven en el sitio)
Razón de la queja: