Ajuda com Fourier - página 9

 
ANG3110 писал (а):

Não é um mau resultado se fizermos uma espinha dorsal para a decomposição de Fourier. Em particular, podemos facilmente extrapolar a regressão para frente e traçar o Fourier em relação a ela. É possível encaixar uma muda como suporte e traçar a soma das harmônicas, em uma janela separada, como se a muda continuasse linearmente. Você pode baseá-lo em uma média variável suavemente como T3 deslocado por meio período de volta para caber exatamente nos dados, e extrapolar o final com uma parábola, que é ajustada para RMS mínimo, e traçar o Fourier em relação a esta extrapolação. Mas, em qualquer caso, há uma alta probabilidade de repetição de ciclos se construirmos várias variantes da extrapolação de Fourier com períodos diferentes e otimizarmos cada variante com respeito ao RMS mínimo. Se houver coincidência nas leituras de várias variantes, elas podem ser consideradas prováveis. Se houver mais avanço ou atraso, isto produzirá um sinal de diferença corretiva que pode ser usado para o autoajuste ou recálculo. Isto faz lembrar o detector FATF em receptores de rádio, que é o mais eficiente e imune a interferências.
Na verdade, não é um problema tão grande produzir séries de Fourier sem pensar a tempo para que o final esteja próximo da série. É a produção de Fourier de citações futuras que é interessante. Você publicou screenshots de seu indicador traçando a série Fourier para o tempo futuro, o que coincide bem com a realidade. Em que princípios funciona?
 
shobvas писал (а):

Bem, na verdade não é um problema tão grande produzir a série Fourier sem chegar à frente no tempo, de modo que o final estava próximo da série. É interessante produzir a Fourier de citações futuras. Você publicou screenshots de seu indicador traçando a série Fourier para o tempo futuro, o que coincide bem com a realidade. Em que princípios funciona?
A decomposição é feita em relação ao LinearRegressin lá. Cauda como em um rádio, para obter a melhor audibilidade, é desejável sintonizar com um mínimo de ruído e um máximo de sinal, ou seja, a sintonização é feita com um mínimo de RMS. Para mudar facilmente o período - um roteiro de linha reta ou de canal de regressão é aplicado. Os dados finais são capturados e transmitidos para o indicador. Assim, ao mover as linhas, mudamos instantaneamente o período e recalculamos o quadro inteiro. O comentário mostra o RMS e os ajustes são feitos de acordo com o RMS mínimo mais um pequeno deslocamento a olho nu para fazer altos e baixos coincidirem o máximo possível. Também adicionamos a capacidade de alterar o número de harmônicas através da função GetAsyncKeyState(int nVirtKey), então, pressionando as setas apropriadas no teclado, podemos adicionar ou subtrair rapidamente o número de harmônicas. O mesmo é feito por meio de um roteiro, que desenha tudo. Eu já escrevi um pouco sobre configurações e variantes antes. Para períodos diferentes e plausibilidade diferente, o número de harmônicas é tomado de forma diferente.
Mas resultados mais ou menos satisfatórios podem ser obtidos se a harmonia mínima for de 12 a 24 horas e período mínimo de 2 a 3 dias ou mais. Isto é para a previsão diária. Para a previsão global a técnica é a mesma, mas os períodos são mais longos, é claro. Dependendo da escala, as previsões mensais e anuais de longo alcance coincidem muito bem com os dados reais, especialmente em algumas freqüências, que se repetem periodicamente com um grau de probabilidade muito alto. A fim de obter estatísticas sobre estas freqüências - é feito um analisador de espectro inteligente, que também pode ser arrastado por toda a faixa de tempo.
 
ANG3110 писал (а):
A decomposição ali é feita em relação ao LinearRegressin. A cauda é como um rádio, para obter a melhor audibilidade, é desejável sintonizar para o mínimo ruído e máximo sinal, ou seja, a sintonia é feita de acordo com o RMS mínimo. Para mudar facilmente o período - um roteiro de linha reta ou de canal de regressão é aplicado. Os dados finais são capturados e transmitidos para o indicador. Assim, ao mover as linhas, mudamos instantaneamente o período e recalculamos o quadro inteiro. O comentário mostra o RMS e os ajustes são feitos de acordo com o RMS mínimo mais um pequeno deslocamento a olho nu para fazer altos e baixos coincidirem o máximo possível. Também adicionamos a capacidade de alterar o número de harmônicas através da função GetAsyncKeyState(int nVirtKey), então, pressionando as setas apropriadas no teclado, podemos adicionar ou subtrair rapidamente o número de harmônicas. O mesmo é feito por meio de um roteiro, que desenha tudo. Eu já escrevi um pouco sobre configurações e variantes antes. Para períodos diferentes e plausibilidade diferente, o número de harmônicas é tomado de forma diferente.
Mas resultados mais ou menos satisfatórios podem ser obtidos se o harmônico mínimo for de 12 a 24 horas e período mínimo de 2 a 3 dias ou mais. Isto é para a previsão diária. Para a previsão global a técnica é a mesma, mas os períodos são mais longos, é claro. Dependendo da escala, as previsões mensais e anuais de longo alcance coincidem muito bem com os dados reais, especialmente em algumas freqüências, que se repetem periodicamente com um grau de probabilidade muito alto. A fim de obter estatísticas sobre estas freqüências - é feito um analisador de espectro inteligente, que também pode ser arrastado por toda a faixa de tempo.

Eu realmente não entendo isto...
A série Fourier é construída a partir da diferença de preço e do valor da linha de regressão, certo?

Mas não está muito claro sobre a cauda.... O que é o ajuste para o RMS mínimo?
Obrigado antecipadamente pelas respostas =)
 
shobvas писал (а):
Eu realmente não entendo...
Uma série de Fourier é construída a partir da diferença de preço e do valor da linha de regressão, certo?

Não está muito claro sobre a cauda, embora.... O que é o ajuste para o RMS mínimo?
Obrigado antecipadamente pelas respostas =)

Sim. Primeiro calculamos as coordenadas LR[i]. Em seguida, array dc[i]=Close[i]-LR[i]; From array dc[i] build Fourier fx[i]. E acrescente as coordenadas LR[i]. fx[i]=fx[i]+LR[i] ou fx[i]+=LR[i]; Se extrapolarmos, calculamos LR[i] e fx[i] antes e depois de i=0 (você mesmo pode pegá-lo).
A "cauda" é o que se conhece de i=T a i=0; Como podemos mudar, encolher ou esticar o período de estimativa (T) com o roteiro, recalculamos automaticamente o RMS da "cauda" com cada mudança.
Isso é sq=0,0; for (int n=0; n<T; n+++) sq+=(Close[i0+n]-fx[n])*(Close[i0+n]-fx[n]); sq=MathSqrt(sq/T); e ajustado para RMS mínimo (sq).
Em minhas capturas de tela, a "cauda" é mostrada em amarelo e verde, enquanto a extrapolação é mostrada em vermelho e azul.
Geralmente, a princípio todas estas construções levam muito tempo e esforço mental, e se você sente que ainda não está pronto, espere até amadurecer. Caso contrário, você pode ficar cansado de tudo isso, e não ficará satisfeito com os resultados.
 
ANG3110 писал (а):
Sim. Primeiro calculamos as coordenadas LR[i]. Em seguida, array dc[i]=Close[i]-LR[i]; From array dc[i] build Fourier fx[i]. E acrescente as coordenadas LR[i]. fx[i]=fx[i]+LR[i] ou fx[i]+=LR[i]; Se extrapolarmos, calculamos LR[i] e fx[i] antes e depois de i=0 (você mesmo pode pegá-lo).
A "cauda" é o que se conhece de i=T a i=0; Como podemos mudar, encolher ou esticar o período de estimativa (T) com o roteiro, recalculamos automaticamente o RMS da "cauda" com cada mudança.
Isto é sq=0,0; for (int n=0; n<T; n+++) sq+=(Close[i0+n]-fx[n])*(Close[i0+n]-fx[n]); sq=MathSqrt(sq/T); e ajustado para RMS mínimo (sq).
Em minhas capturas de tela, a "cauda" é mostrada em amarelo e verde, enquanto a extrapolação é mostrada em vermelho e azul.
Em geral, no início todas estas construções levam muito tempo e se você sentir que ainda não está pronto, espere até estar maduro o suficiente. Caso contrário, você pode se cansar de tudo isso e não ficará satisfeito com os resultados.

Então, o RMS mínimo é definido por T, eu entendo bem?
Ou o número de freqüências harmônicas na decomposição de Fourier é ajustado pelo RMS mínimo?

No entanto, o mais interessante, ou seja, como é feita a extrapolação da função de Fourier, você ainda não disse =)
 
shobvas писал (а):
Então o RMS mínimo está definido para T, estou certo?
Ou o número de freqüências harmônicas na decomposição de Fourier é ajustado pelo RMS mínimo?

Entretanto, o mais interessante é como é feita a extrapolação da função de Fourier =)
Como resultado do cálculo de uma regressão linear, teremos a fórmula LR[i]=b+a*i;
Como resultado do cálculo de Fourier teremos o número de harmônicas N, coeficientes ak[k],bk[k], onde k corresponde ao número harmônico (k=0. ..N); e fórmula para o cálculo de Fourier soma=0,0; for(k=0; k<=N; k++) soma+=ak[k]*MathCos(w*k*i)+bk[k]*MathSin(w*k*i); fx[i]=sum;
Agora, se quisermos extrapolar, digamos, meio período adiante, calculamos
dados de T a -T/2; for(int i=T; i>=-T/2; i--), mas como as arrays devem conter apenas índices positivos, colocamos o que de -1 a -T/2 na segunda arrays, ou há um truque para contornar a divisão em 2 arrays, deslocando todos os elementos de volta por +T/2, e este deslocamento é considerado ao desenhar. O resto da descrição só faz sentido se já tivermos experiência em tais construções. Nos scripts, não temos nenhum problema com o desenho para frente. Nos indicadores, devemos usar SetIndexShift( );
 

Ou seja, você calcula fx[i] a i<0 por fórmula:

soma=0,0; for(k=0; k<=N; k++) soma+=ak[k]*MathCos(w*k*i)+bk[k]*MathSin(w*k*i); fx[i]=sum;

Assim?

E você constrói a função Fourier para que período? [T,0]?

 
shobvas писал (а):

Ou seja, você calcula fx[i] a i<0 por fórmula:

soma=0,0; for(k=0; k<=N; k++) soma+=ak[k]*MathCos(w*k*i)+bk[k]*MathSin(w*k*i); fx[i]=sum;

Assim?

E você constrói a função Fourier para que período? [T,0]?

SetIndexShift(0,T/2);

para (i=T; i>=-T/2; i--)
{
soma=0,0;
for(int k=0; k<=N; k++) sum+=ak[k]*MathCos(w*k*i)+bk[k]*MathSin(w*k*i);
fx[i+T/2]=sum+b+a*i;
}
 

Como são calculados exatamente os coeficientes ak, bk?

A integral é tomada em que intervalo? De T a 0 ou o quê?

 
shobvas писал (а):

Como são calculados exatamente os coeficientes ak, bk?

A integral é tomada em que intervalo? De T a 0 ou o quê?


para (int k=0; k<=N; k++)
{
sum_cos=0,0;
sum_sin=0,0;
para (int i=0; i<T; i++)
{
sum_cos+=(Fechar[i]-b-a*i)*MathCos(w*k*i);
sum_sin+=(Close[i]-b-a*i)*MathSin(w*k*i);
}
ak[k]=sum_cos*2/T;
bk[k]=sum_sin*2/T;
}
ak[0]=ak[0]/2;
Razão: