Aiuto con Fourier

 
Ho provato a usare 'Library of FFT Fast Fourier Transform Functions' ('Biblioteca di funzioni di trasformata veloce di Fourier'), ma non riesco a capire come usare queste funzioni, per qualche motivo hanno tutte le stesse descrizioni. Aiuto, per favore! Come, per esempio, avere i valori Close delle ultime 8 barre per ottenere il loro spettro, poi lasciare le prime 4 frequenze (come un filtro passa basso) e ottenere il segnale indietro?
 
Dubito che sia possibile ottenere 4 frequenze su 8 barre, non che sia tutto ciò che resta.
 
La conversione (FFT) di 8 valori discreti del segnale darà 8 frequenze, lasciando 4 frequenze inferiori, si ottiene il filtro LF delle fluttuazioni del corso attuale.
 
Mi hanno mandato un'approssimazione di Fourier, se ti interessa, potrebbe tornarti utile.

#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); }
//****************************************************

Forse puoi anche dirmi perché, se invece della libreria, il primo codice è inserito direttamente in un indicatore, mostra il tempo in Africa.




 
lsv писал (а):
La conversione (FFT) di 8 valori discreti del segnale darà 8 frequenze, lasciando 4 frequenze inferiori, si ottiene un filtro LF dell'oscillazione del corso attuale.

Un minimo di 2 barre è necessario per determinare 1 periodo. Le frequenze 4, 2 e 1 sono così determinate.
 
Mi sembra di essere l'unico del reparto radio. 1 bar è una frequenza, un valore costante, f(x)=k0. 2 barre sono 2 frequenze, f(x)=k0+k1*Sin(a1*x+b1), ecc.
 
Ragioniere, il tempo in Africa è formato a causa della variabile ft3, non è definita, quindi si ottengono valori diversi.
 
lsv писал (а):
Ragioniere, il tempo in Africa è formato a causa della variabile ft3, non è definita, quindi si ottengono valori diversi.

Grazie... vediamo se riusciamo a capirlo...
 

Ecco un esempio (indicatore) su cui ho studiato Fourier...
Guarda nel codice - non è difficile.
Per impostazione predefinita, lo spettro di una funzione periodica viene emesso...
Puoi inviare qualsiasi indicatore tu voglia. Cosa fare dopo con lo spettro è la vostra immaginazione.
Ora voglio raccogliere i modelli dagli spettrogrammi ottenuti e "spingere" il tutto in una rete neurale per il riconoscimento.

Caricato il file

 
lsv:
Mi sembra di essere l'unico del reparto radio. 1 bar è una frequenza, un valore costante, f(x)=k0. 2 barre sono 2 frequenze, f(x)=k0+k1*Sin(a1*x+b1), ecc.
Per quanto mi ricordo, 8 barre in FFT producono 8 frequenze,
ma la metà di loro è simmetrica all'altra metà (spostata di pi greco, sembra)
Quindi ne rimangono davvero 4.

Non può essere altrimenti.
Una frequenza (sinusoide) contiene 3 parametri - G(t) = A*Sin(w*t+p)
Le frequenze (w) sono fisse, il che lascia 2 parametri - ampiezza (A) e fase (p).

In qualsiasi trasformazione da K variabili indipendenti (valori della barra)
si possono ottenere al massimo K parametri indipendenti.
Cioè da 8 barre si può ottenere un massimo di 4 frequenze (2 parametri per barra)
 
klot, il tuo file non è disponibile per qualche motivo. Inizialmente volevo usare la Fourier per estrarre il trend, cioè come un filtro FFT, ma mi sono ricordato che la Fourier implica che la sezione analizzata si ripete. Cioè se ci sono barre con prezzi 10,11, 13, 12, allora la Fourier implica che saranno seguite da barre 10,11, 13, 12, 10,11, 13, 12. E questo rovina l'intera idea.