Intenté usar la 'Biblioteca de Funciones de Transformada Rápida de Fourier' ('Library of FFT Fast Fourier Transform Functions'), pero no puedo averiguar cómo usar estas funciones, por alguna razón todas tienen las mismas descripciones. Ayuda, por favor! ¿Cómo, por ejemplo, tener los valores de Close de las 8 últimas barras para obtener su espectro, y luego dejar las 4 primeras frecuencias (como el filtro de paso bajo) y recuperar la señal?
- Aprendizaje automático en el trading: teoría, práctica, operaciones y más
- Filtros FIR
- Predicción del futuro con transformadas de Fourier
Dudo que sea posible sacar 4 frecuencias de 8 barras, no es que sea lo único que queda.
La conversión (FFT) de 8 valores discretos de la señal dará 8 frecuencias, dejando 4 frecuencias inferiores, obtenemos el filtro LF de las fluctuaciones del curso actual.
Me enviaron una aproximación de Fourier, si te interesa, puede ser útil.
#property library //-------------------------------------------------------------------------------- double b = 0.7; double c1,c2,c3,c4,b2,b3; double e1,e2,e3,e4,e5,e6,n,w1,w2,t3f; int ft3; b2=b*b; b3=b2*b; c1=-b3; c2=(3*(b2+b3)); c3=-3*(2*b2+b+b3); c4=(1+3*b+b3+3*b2); //============================================== double af_T3( int i,int pt3, double ct3) { //--------------------------- if (ft3==0) {n=pt3; if (n<1) n=1; n=1+0.5*(n-1); w1=2/(n+1); w2=1-w1; ft3=1;} //------------------------ e1=w1*ct3+w2*e1; e2=w1*e1+w2*e2; e3=w1*e2+w2*e3; e4=w1*e3+w2*e4; e5=w1*e4+w2*e5; e6=w1*e5+w2*e6; t3f=c1*e6+c2*e5+c3*e4+c4*e3; return(t3f); }
#property copyright "ANG3110@latchess.com" //---------------------------------------- #property indicator_chart_window #property indicator_buffers 1 #property indicator_color1 Blue //------------------------------- #import "af_T3.ex4" int af_T3( int i,int pt3, double ct3); //------------------------------- extern int hrf = 2; extern int hrT3 = 6; extern int days = 1; //----------------------------------------- double ak[],bk[],fx[],w,ak0,ss,sc,sk,dfx[]; double pi=3.1415926535897932384626433832795; int T,sm,k; double t3[],ct3,dc[]; int pt3; //========================================== int init() { IndicatorBuffers(5); SetIndexStyle(0,DRAW_LINE); SetIndexBuffer(0,fx); SetIndexBuffer(1,t3); SetIndexBuffer(2,ak); SetIndexBuffer(3,bk); SetIndexBuffer(4,dc); //-------------------------- pt3=hrT3*60/Period(); T=days*1440/Period(); w=2*pi/T; k=T/(hrf*60/Period()); return(0); } //*************************************************** int start() { //----------------- int n,i,cbi; //------------------ cbi=Bars-IndicatorCounted()-2; for(i=cbi; i>=0; i--) { //--------------------- ct3=Close[i]; t3[i]=af_T3(i,pt3,ct3); dc[i]=Close[i]-t3[i]; } //-------------------------- ak0=0.0; for (n=0; n<=k; n++) { sc=0.0; ss=0.0; for (i=0; i<=T-1; i++) { if (n==0) ak0+=dc[i]; if (n!=0) {sc=sc+dc[i]*MathCos(n*i*w); ss=ss+dc[i]*MathSin(n*i*w);} } ak[n]=sc*2/T; bk[n]=ss*2/T; } ak0=ak0/T; //-------------------------- for (i=0; i<=T-1; i++) { sk=0.0; for (n=1; n<=k; n++) { sk=sk+ak[n]*MathCos(n*i*w)+bk[n]*MathSin(n*i*w);} fx[i]=ak0+sk+t3[i]; } //--------------------------- return(0); } //****************************************************
Tal vez también puedas decirme por qué, si en lugar de la biblioteca, el primer código se inserta directamente en un indicador, muestra el tiempo en África.
Parece que soy el único del departamento de radio. 1 bar es una frecuencia, un valor constante, f(x)=k0. 2 barras son 2 frecuencias, f(x)=k0+k1*Sin(a1*x+b1), etc.
Tenedor de libros, el tiempo en África se forma debido a la variable ft3, no está definido, por lo que se obtienen diferentes valores.
Aquí hay un ejemplo (indicador) en el que estudié Fourier...
Mira en el código allí - no es difícil.
Por defecto, el espectro de una función periódica se emite...
Puede enviar el indicador que desee. Lo que se haga después con el espectro es tu imaginación.
Ahora quiero recoger patrones de los espectrogramas obtenidos y "meterlos" todos en una red neuronal para su reconocimiento.
Cargado el archivo
Archivos adjuntos:
lsv:
Parece que soy el único del departamento de radio. 1 bar es una frecuencia, un valor constante, f(x)=k0. 2 barras son 2 frecuencias, f(x)=k0+k1*Sin(a1*x+b1), etc.
Por lo que recuerdo, 8 barras en la FFT producen 8 frecuencias,Parece que soy el único del departamento de radio. 1 bar es una frecuencia, un valor constante, f(x)=k0. 2 barras son 2 frecuencias, f(x)=k0+k1*Sin(a1*x+b1), etc.
pero la mitad de ellos son simétricos a la otra mitad (desplazados por pi parece)
Así que realmente quedan 4.
No puede ser de otra manera.
Una frecuencia (sinusoide) contiene 3 parámetros - G(t) = A*Sin(w*t+p)
Las frecuencias (w) son fijas, lo que deja dos parámetros: la amplitud (A) y la fase (p).
En cualquier transformación a partir de K variables independientes (valores de barra)
se pueden obtener como máximo K parámetros independientes.
Es decir, a partir de 8 compases se pueden obtener un máximo de 4 frecuencias (2 parámetros por compás)
klot, su archivo no está disponible por alguna razón. Inicialmente quería utilizar Fourier para extraer la tendencia, es decir, como un filtro FFT, pero recordé que Fourier asume que la sección analizada se repite. Es decir, si hay barras con precios 10,11, 13, 12, entonces Fourier asume que serán seguidas por barras 10,11, 13, 12, 10,11, 13, 12. Y esto estropea toda la idea.
![MQL5 - Lenguaje de estrategias comerciales para el terminal de cliente MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese