Tentei usar a 'Biblioteca de Funções de Transformação de Fourier Rápida FFT' ('Biblioteca de Funções de Transformação de Fourier Rápida FFT'), mas não consigo descobrir como usar essas funções, por alguma razão todas elas têm as mesmas descrições. Ajude, por favor! Como, por exemplo, ter valores próximos de 8 últimas barras para obter seu espectro, depois deixar as 4 primeiras freqüências (como filtro de baixa passagem) e obter sinal de volta?
- Prevendo o futuro com as transformações de Fourier
- Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos
- Pergunte!
Duvido que seja mesmo possível obter 4 freqüências em 8 barras, não que seja tudo o que resta.
A conversão (FFT) de 8 valores de sinal discretos dará 8 freqüências, deixando 4 freqüências mais baixas, obtemos o filtro LF das flutuações do curso atual.
Eles me enviaram uma aproximação de Fourier, se você estiver interessado, ela pode vir a 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); } //****************************************************
Talvez você também possa me dizer porque, se ao invés da biblioteca, o primeiro código é inserido diretamente em um indicador, ele mostra o tempo na África.
É como se eu fosse o único do departamento de rádio. 1 barra é uma freqüência, um valor constante, f(x)=k0. 2 barras são 2 freqüências, f(x)=k0+k1*Sin(a1*x+b1), etc.
Bookkeeper, o clima na África é formado por causa da variável ft3, não é definido, então você obtém valores diferentes.
Aqui está um exemplo (indicador) no qual estudei Fourier...
Veja o código ali - não é difícil.
Por padrão, o espectro de uma função periódica é emitido...
Você pode enviar qualquer indicador que desejar. O que fazer com o espectro depois é sua imaginação.
Agora quero coletar padrões dos espectros obtidos e "enfiar" tudo isso em uma rede neural para reconhecimento.
Carregou o arquivo
Arquivos anexados:
lsv:
É como se eu fosse o único do departamento de rádio. 1 barra é uma freqüência, um valor constante, f(x)=k0. 2 barras são 2 freqüências, f(x)=k0+k1*Sin(a1*x+b1), etc.
Até onde me lembro, 8 barras em FFT produzem 8 freqüências,É como se eu fosse o único do departamento de rádio. 1 barra é uma freqüência, um valor constante, f(x)=k0. 2 barras são 2 freqüências, f(x)=k0+k1*Sin(a1*x+b1), etc.
mas metade delas são simétricas à outra metade (deslocadas por pi, ao que parece)
Então isso realmente deixa 4.
Não pode ser de outra forma.
Uma freqüência (sinusoidal) contém 3 parâmetros - G(t) = A*Sin(w*t+p)
As freqüências (w) são fixas, o que deixa 2 parâmetros - amplitude (A) e fase (p).
Em qualquer transformação de variáveis independentes de K (valores de barra)
é possível obter no máximo parâmetros independentes K.
Ou seja, a partir de 8 barras é possível obter um máximo de 4 freqüências (2 parâmetros por barra)
klot, seu arquivo não está disponível por algum motivo. Inicialmente eu queria usar Fourier para extrair a tendência, ou seja, como um filtro FFT, mas lembrei que Fourier assume que a seção analisada se repete. Ou seja, se houver barras com preços 10,11, 13, 12, então Fourier assume que elas serão seguidas por barras 10,11, 13, 12, 10,11, 13, 12. E isto estraga toda a idéia.
Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se