L'apprentissage automatique dans la négociation : théorie, modèles, pratique et algo-trading - page 3269

 
mytarmailS #:
Quel est donc l'objectif final de cette corrélation ?

Vous avez découvert quelle implémentation est la plus rapide, laquelle donne des résultats identiques, laquelle n'en donne pas... Qu'allez-vous faire de ces connaissances ?

Je vais pouvoir calculer ce que d'autres ne peuvent pas faire en raison de limitations techniques.

 
mytarmailS #:
Les tests, la visualisation et l'action rapide sont également possibles.

L'optimisation finale est également normale, pour reprendre les paramètres des accords.

 
fxsaber #:

J'ai d'abord essayé de faire la variante frontale, c'est-à-dire de compter toutes les lignes à chaque fois. J'ai eu l'impression qu'il y avait une erreur dans Alglib, car je ne l'ai pas trouvée dans le mien.


Le résultat coïncide souvent.


Mais dans certaines situations, ce n'est pas le cas.


Si c'était toujours comme ça, ce serait ma faute. Mais il y a quelque chose de louche ici.

J'ai fait

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


La matrice 2 contient les 5 premières réponses, puis des zéros.
J'ai remplacé Res.Col(Corr.Row(0), i) ; par Res.Row(Corr.Row(0), i) ;

Les matrices sont devenues similaires, mais IsEqual ne passe toujours pas. Il y a quelque chose d'autre quelque part...
 
Forester #:

Remplacement de Res.Col(Corr.Row(0), i) ; par Res.Row(Corr.Row(0), i) ;

Il semble que ce soit une erreur.

 
Forester #:
Fabriqué

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


La Matrice2 contient les 5 premières correspondances, puis des zéros.
J'ai remplacé Res.Col(Corr.Row(0), i) ; par Res.Row(Corr.Row(0), i) ;

Les matrices sont devenues similaires, mais IsEqual ne passe toujours pas. Il y a quelque chose d'autre quelque part...

J'ai trouvé le problème

Cela devrait ressembler à ceci

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) ;
}

 
Et PearsonCorrM2 peut être accéléré par 2 fois si vous comptez par triangle, c'est-à-dire en commençant par la fin. Comptez 100 lignes avec tous, puis 99 avec tous les 0-99, 99 et 100ème déjà comptés - vous pouvez simplement copier. ...50ème ligne avec tous jusqu'à 50ème, etc. Et ne comptez pas avec lui-même car =1.

P.S.
En général, votre code est beau et concis. Je ferais tout en loops))))
 
Forester #:
Et PearsonCorrM2 peut être accéléré de 2 fois si vous comptez par triangle, c'est-à-dire en commençant par la fin. Comptez 100 lignes avec tous, puis 99 avec tous les 0-99, 99 et 100ème déjà comptés - vous pouvez simplement copier. ...50ème ligne avec tous jusqu'au 50ème et ainsi de suite.
J'ai lu quelque part que l'on pouvait calculer rapidement la corrélation grâce à la transformée de Fourier rapide... C'est aussi une option pour accélérer.
 
residuals_a = a_mat - a_mat. column_means residuals_b = b_mat - b_mat. column_means a_residual_sums = residuals_a. column_sums b_residual_sums = residuals_b. column_sums residual_products = dot_product( residuals_a. transpose, residuals_b)
sum_products = sqrt( dot_product( a_residual_sums, b_residual_sums))
corrélations = produits_résiduels / produits_somme 
 
mytarmailS #:
J'ai lu quelque part qu'il était possible de lire rapidement la corrélation grâce à une transformée de Fourier rapide... C'est aussi une option pour accélérer.

Je l'ai fait. Cela a du sens lorsque la longueur de la chaîne est importante. Je vous montrerai un jour.

 
Forester #:

Le problème a été trouvé

Cela devrait être comme ceci

Exactement, merci ! Je ne comprends pas pourquoi la mauvaise option fonctionnait avec inCols < 100.
Raison: