L'apprendimento automatico nel trading: teoria, modelli, pratica e algo-trading - pagina 3269

 
mytarmailS #:
Qual è l'obiettivo finale di tutta questa storia della correlazione?

Avete scoperto quale implementazione è più veloce, quale dà risultati identici, quale non li dà... Che cosa farete con questa conoscenza?

Sarò in grado di calcolare ciò che gli altri non possono fare a causa di limitazioni tecniche.

 
mytarmailS #:
Anche test e visualizzazione e azioni rapide, probabilmente.

Anche l'ottimizzazione finale è normale, per raccogliere i parametri delle offerte.

 
fxsaber #:

All'inizio ho provato a fare la variante frontale, cioè a contare tutte le righe ogni volta. Ho avuto l'impressione che ci sia un errore in Alglib, perché non sono riuscito a trovarlo nel mio.


Il risultato spesso coincide.


Ma in alcune situazioni non è così.


Se fosse sempre così, sarebbe colpa mia. Ma qui c'è qualcosa di strano.

Ho creato

Print(Matrix1);
Print("------------------");
Print(Matrix2);


La Matricex2 ha le prime 5 corrispondenze, poi gli zeri.
Ho cambiato Res.Col(Corr.Row(0), i); in Res.Row(Corr.Row(0), i);

Le matrici sono diventate simili, ma IsEqual non passa. C'è qualcos'altro da qualche parte...
 
Forester #:

Modificato Res.Col(Corr.Row(0), i); in Res.Row(Corr.Row(0), i);

Sembra che sia sbagliato.

 
Forester #:
Realizzato

Print(Matrix1);
Print("------------------");
Print(Matrix2);


La Matricex2 ha le prime 5 corrispondenze, poi gli zeri.
Ho cambiato Res.Col(Corr.Row(0), i); in Res.Row(Corr.Row(0), i);

Le matrici sono diventate simili, ma IsEqual non passa. C'è qualcos'altro da qualche parte...

Trovato il problema

Dovrebbe essere così

for (int i = 0; i < (int)Matrix.Cols(); i++)
{
if (i)
Vector.SwapCols(0, i);

CBaseStat::PearsonCorrM2(Vector, MatrixIn, MatrixIn.Rows(), 1, MatrixIn.Cols(), Corr);

Res.Col(Corr.Row(0), i);
}

 
E PearsonCorrM2 può essere accelerato di 2 volte se si conta per triangolo, cioè partendo dalla fine. Contare 100 righe con tutti, poi 99 con tutti 0-99, 99 e 100 già contati - si può semplicemente copiare. ...50 righe con tutti fino al 50, ecc. E non contare con se stesso perché =1.

P.S.
In generale, il tuo codice è bello e conciso. Io farei tutto in loops))))
 
Forester #:
E PearsonCorrM2 può essere accelerato di 2 volte se si conta per triangolo, cioè partendo dalla fine. Conta 100 righe con tutti, poi 99 con tutti 0-99, 99 e 100 già contati - puoi semplicemente copiarli. ...50 righe con tutti fino al 50° e così via.
Ho letto da qualche parte che è possibile calcolare rapidamente la correlazione attraverso la trasformata di Fourier veloce... Anche come opzione per accelerare.
 
residui_a = a_mat - a_mat. column_means residui_b = b_mat - b_mat. column_means a_residual_sums = residuals_a. column_sums b_residual_sums = residuals_b. column_sums residui_prodotti = dot_product( residuals_a. transpose, residuals_b)
sum_products = sqrt( dot_product( a_residual_sums, b_residual_sums))
correlazioni = residui_prodotti / somma_prodotti 
 
mytarmailS #:
Ho letto da qualche parte che è possibile leggere rapidamente la correlazione attraverso una trasformata di Fourier veloce... Anche come opzione per accelerare.

L'ho fatto. Ha senso quando la lunghezza della stringa è grande. Prima o poi ve lo mostrerò.

 
Forester #:

Trovato il problema

Dovrebbe essere così

Esattamente, grazie! Non capisco perché l'opzione sbagliata funziona con inCols < 100.