Aiuto con Fourier - pagina 9

 
ANG3110 писал (а):

Non è un cattivo risultato se facciamo una spina dorsale per la decomposizione di Fourier. In particolare, possiamo facilmente estrapolare la regressione in avanti e tracciare la Fourier relativa ad essa. È possibile adattare una scanalatura come supporto e tracciare la somma delle armoniche, in una finestra separata, come se la scanalatura continuasse linearmente. Si può basare su una media che varia dolcemente come T3 spostata di mezzo periodo indietro per adattarsi esattamente ai dati, ed estrapolare la fine con una parabola, che è regolata per il minimo RMS, e tracciare la Fourier relativa a questa estrapolazione. Ma in ogni caso, c'è un'alta probabilità di ripetere i cicli se costruiamo diverse varianti dell'estrapolazione di Fourier con periodi diversi e ottimizziamo ogni variante rispetto al minimo RMS. Se c'è una coincidenza nelle letture di diverse varianti, esse possono essere considerate probabili. Se c'è un ulteriore anticipo o ritardo, questo produrrà un segnale di differenza correttivo che può essere utilizzato per l'autotuning o il ricalcolo. Questo ricorda il rivelatore FATF nei ricevitori radio, che è il più efficiente e immune alle interferenze.
In realtà non è un problema così grande emettere serie di Fourier senza ritardi nel tempo in modo che la fine sia vicina alla serie. È l'uscita di Fourier delle quotazioni future che è interessante. Hai postato degli screenshot del tuo indicatore che traccia la serie di Fourier per il tempo futuro che coincide bene con la realtà. Su quali principi funziona?
 
shobvas писал (а):

Beh, in realtà non è un problema così grande emettere la serie di Fourier senza andare avanti nel tempo, in modo che la fine fosse vicina alla serie. È interessante emettere la Fourier delle citazioni future. Hai postato degli screenshot del tuo indicatore che traccia la serie di Fourier per il tempo futuro che coincide bene con la realtà. Su quali principi funziona?
La decomposizione è fatta rispetto a LinearRegressin là. Come in una radio, per ottenere la migliore udibilità, è auspicabile sintonizzarsi su un minimo di rumore e un massimo di segnale, cioè la sintonizzazione è fatta con un minimo di RMS. Per cambiare facilmente il periodo - si applica una linea retta o uno script di canale di regressione. I dati finali vengono catturati e trasmessi all'indicatore. Così, spostando le linee, cambiamo istantaneamente il periodo e ricalcoliamo l'intero quadro. Il commento mostra l'RMS e le regolazioni sono fatte secondo l'RMS minimo più un piccolo spostamento a occhio per far coincidere il più possibile gli alti e i bassi. Abbiamo anche aggiunto la possibilità di cambiare il numero di armoniche attraverso la funzione GetAsyncKeyState(int nVirtKey), quindi premendo le frecce appropriate sulla tastiera possiamo aggiungere o sottrarre rapidamente il numero di armoniche. Lo stesso viene fatto per mezzo di uno script, che disegna il tutto. Ho già scritto un po' sulle impostazioni e le varianti in precedenza. Per diversi periodi e diverse plausibilità il numero di armoniche è preso in modo diverso.
Ma si possono ottenere risultati più o meno soddisfacenti se l'armonica minima è da 12 a 24 ore e il periodo minimo di 2-3 giorni o più. Questo è per le previsioni giornaliere. Per le previsioni globali la tecnica è la stessa ma i periodi sono più lunghi, ovviamente. A seconda della scala, le previsioni mensili e annuali a lungo raggio coincidono molto bene con i dati reali, soprattutto su alcune frequenze, che si ripetono periodicamente con un grado di probabilità molto elevato. Per ottenere statistiche su queste frequenze - viene realizzato un intelligente analizzatore di spettro, che può anche essere trascinato su tutta la gamma temporale.
 
ANG3110 писал (а):
La decomposizione è fatta rispetto a LinearRegressin. La coda è come una radio, per ottenere la migliore udibilità, è auspicabile sintonizzarsi per il minimo rumore e il massimo segnale, cioè la sintonizzazione è fatta secondo il minimo RMS. Per cambiare facilmente il periodo - si applica una linea retta o uno script di canale di regressione. I dati finali vengono catturati e trasmessi all'indicatore. Così, spostando le linee, cambiamo istantaneamente il periodo e ricalcoliamo l'intero quadro. Il commento mostra l'RMS e le regolazioni sono fatte secondo l'RMS minimo più un piccolo spostamento a occhio per far coincidere il più possibile gli alti e i bassi. Abbiamo anche aggiunto la possibilità di cambiare il numero di armoniche attraverso la funzione GetAsyncKeyState(int nVirtKey), quindi premendo le frecce appropriate sulla tastiera possiamo aggiungere o sottrarre rapidamente il numero di armoniche. Lo stesso viene fatto per mezzo di uno script, che disegna il tutto. Ho già scritto un po' sulle impostazioni e le varianti in precedenza. Per diversi periodi e diverse plausibilità il numero di armoniche è preso in modo diverso.
Ma si possono ottenere risultati più o meno soddisfacenti se l'armonica minima è da 12 a 24 ore e il periodo minimo di 2-3 giorni o più. Questo è per le previsioni giornaliere. Per le previsioni globali la tecnica è la stessa ma i periodi sono più lunghi, ovviamente. A seconda della scala, la scala temporale lunga, i mesi e gli anni produrranno un ottimo adattamento con i dati reali, specialmente con alcune frequenze, che si ripetono periodicamente con un grado di probabilità molto alto. Al fine di ottenere statistiche su queste frequenze - viene realizzato un intelligente analizzatore di spettro, che può anche essere trascinato su tutta la gamma temporale.

Non capisco davvero questo...
La serie di Fourier è costruita dalla differenza di prezzo e dal valore della linea di regressione, giusto?

Non è molto chiaro riguardo alla coda però.... Qual è la regolazione del minimo RMS?
Grazie in anticipo per le risposte =)
 
shobvas писал (а):
Non capisco davvero...
Una serie di Fourier è costruita dalla differenza di prezzo e dal valore della linea di regressione, giusto?

Non è molto chiaro riguardo alla coda, però.... Qual è la regolazione del minimo RMS?
Grazie in anticipo per le risposte =)

Sì, prima calcoliamo le coordinate LR[i]. Poi array dc[i]=Close[i]-LR[i]; Dall'array dc[i] costruire la Fourier fx[i]. E aggiungere le coordinate LR[i]. fx[i]=fx[i]+LR[i] o fx[i]+=LR[i]; Se estrapoliamo, calcoliamo LR[i] e fx[i] prima e dopo i=0 (potete prenderlo da soli).
La "coda" è ciò che è noto da i=T a i=0; poiché possiamo spostare, restringere o allungare il periodo di stima (T) con lo script, ricalcoliamo automaticamente la "coda" RMS ad ogni spostamento.
Cioè 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 impostato per il minimo RMS (sq).
Nei miei screenshot, la "coda" è mostrata in giallo e verde, mentre l'estrapolazione è mostrata in rosso e blu.
In generale, all'inizio tutte queste costruzioni richiedono molto tempo e sforzo mentale, e se senti di non essere ancora pronto, aspetta di maturare. Altrimenti, potreste stancarvi di tutto questo, e non sarete soddisfatti dei risultati.
 
ANG3110 писал (а):
Sì, prima calcoliamo le coordinate LR[i]. Poi array dc[i]=Close[i]-LR[i]; Dall'array dc[i] costruire la Fourier fx[i]. E aggiungere le coordinate LR[i]. fx[i]=fx[i]+LR[i] o fx[i]+=LR[i]; Se estrapoliamo, calcoliamo LR[i] e fx[i] prima e dopo i=0 (potete prenderlo da soli).
La "coda" è ciò che è noto da i=T a i=0; poiché possiamo spostare, restringere o allungare il periodo di stima (T) con lo script, ricalcoliamo automaticamente la "coda" RMS ad ogni spostamento.
Cioè 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 impostato per il minimo RMS (sq).
Nei miei screenshot, la "coda" è mostrata in giallo e verde, mentre l'estrapolazione è mostrata in rosso e blu.
In generale, all'inizio tutte queste costruzioni richiedono molto tempo e se senti di non essere ancora pronto, aspetta di essere abbastanza maturo, altrimenti potresti stancarti di tutto e non essere contento dei risultati.

Quindi, il minimo RMS è impostato da T, ho capito bene?
O il numero di frequenze armoniche nella decomposizione di Fourier è regolato dal minimo RMS?

Tuttavia, la cosa più interessante, cioè come si fa l'estrapolazione della funzione di Fourier, ancora non l'hai detto =)
 
shobvas писал (а):
Quindi il minimo RMS è impostato su T, ho ragione?
O il numero di frequenze armoniche nella decomposizione di Fourier è regolato dal minimo RMS?

Tuttavia, la cosa più interessante è come viene estrapolata la funzione di Fourier =)
Come risultato del calcolo di una regressione lineare avremo la formula LR[i]=b+a*i;
Come risultato del calcolo di Fourier avremo il numero di armoniche N, i coefficienti ak[k],bk[k], dove k corrisponde al numero armonico (k=0. ..N); e la formula per il calcolo di Fourier sum=0.0; for(k=0; k<=N; k++) sum+=ak[k]*MathCos(w*k*i)+bk[k]*MathSin(w*k*i); fx[i]=sum;
Ora, se vogliamo estrapolare, diciamo, mezzo periodo in avanti, calcoliamo
dati da T a -T/2; for(int i=T; i>=-T/2; i--), ma poiché gli array devono contenere solo indici positivi, mettiamo ciò che va da -1 a -T/2 nel secondo array, oppure c'è un trucco per aggirare la divisione in 2 array spostando tutti gli elementi indietro di +T/2, e questo spostamento viene considerato quando si disegna. Il resto della descrizione ha senso solo se abbiamo già esperienza in tali costruzioni. Negli script, non abbiamo alcun problema con il disegno in avanti. Negli indicatori, dovremmo usare SetIndexShift( );
 

Cioè, si calcola fx[i] a i<0 con la formula:

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

Come questo?

E voi costruite la funzione di Fourier per quale periodo? [T,0]?

 
shobvas писал (а):

Cioè, si calcola fx[i] a i<0 con la formula:

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

Come questo?

E voi costruite la funzione di Fourier per quale periodo? [T,0]?

SetIndexShift(0,T/2);

per (i=T; i>=-T/2; i--)
{
sum=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]=somma+b+a*i;
}
 

Come si calcolano esattamente i coefficienti ak, bk?

L'integrale è preso su quale intervallo, da T a 0 o cosa?

 
shobvas писал (а):

Come si calcolano esattamente i coefficienti ak, bk?

L'integrale è preso su quale intervallo, da T a 0 o cosa?


per (int k=0; k<=N; k++)
{
sum_cos=0.0;
sum_sin=0.0;
per (int i=0; i<T; i++)
{
sum_cos+=(Close[i]-b-a*i)*MathCos(w*k*i);
sum_sin+=(Close[i]-b-a*i)*MathSin(w*k*i);
}
ak[k]=somma_cos*2/T;
bk[k]=somma_sin*2/T;
}
ak[0]=ak[0]/2;
Motivazione: