Ayuda con Fourier
- Aprendizaje automático en el trading: teoría, práctica, operaciones y más
- Filtros FIR
- Predicción del futuro con transformadas de Fourier
#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.
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
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)