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?
- [ARCHIVIO] Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 3.
- Prevedere il futuro con le trasformate di Fourier
- COME COMMERCIARE IN NIENTE?
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.
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.
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
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,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.
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.
![MQL5 - Linguaggio delle strategie di trading integrato nel client terminal MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati