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

 

Forum sur le trading, les systèmes de trading automatisés et les tests de stratégies de trading

L'apprentissage automatique dans le trading : théorie, modèles, pratique et algorithme de trading

Maxim Dmitrievsky, 2023.10.01 10:55 AM

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_sommaires

Il semble qu'il s'agisse d'un calcul frontal de la matrice de corrélation.

 
fxsaber #:
C'est vrai, merci ! Je ne comprends pas pourquoi la mauvaise option fonctionnait avec inCols < 100.

Apparemment

Sens = 1 e-10
trop. Aléatoire - la corrélation moyenne est probablement de l'ordre de 0.
 
Forester #:

Probablement trop. Aléatoire - il y a une corrélation moyenne d' environ 0, probablement.

Ce n'est pas l'erreur moyenne qui est mesurée ici, mais la différence maximale entre les éléments correspondants.

Forum sur le trading, les systèmes de trading automatisés et les tests de stratégies de trading

L'apprentissage automatique dans le trading : théorie, modèles, pratique et algo-trading

fxsaber, 2023.10.01 09:38 pm

bool IsEqual( matrix<double> &Matrix1, const matrix<double> &Matrix2, const double Sens = 1 e-10 )
{
  Matrix1 -= Matrix2;  
  
  const bool Res = (MathMax(MathAbs(Matrix1.Max()), MathAbs(Matrix1.Min())) < Sens);
  
  Matrix1 += Matrix2;
  
  return(Res);
}


C'est pourquoi il n'est pas clair comment le mauvais code

  for (int i = 0; i < (int)Matrix.Rows(); i++)

obtient une correspondance.

inRows = 5 inCols = 50 
matrix<double> Matrix1 = CorrMatrix(Matrix) - 242 mcs, 0 MB
matrix<double> Matrix4 = CorrMatrix2(Matrix) - 117 mcs, 0 MB
IsEqual(Matrix1, Matrix4) = true 
 
Forester #:
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'au 50ème, etc. Enfin, ne comptez pas avec lui-même car =1.
Je crains que cela ne serve à rien.
inRows = 100 inCols = 15000 
matrix<double> Matrix1 = CorrMatrix(Matrix) - 14196778 mcs, 1717 MB
matrix<double> Matrix4 = CorrMatrix2(Matrix) - 538256223 mcs, 1717 MB
IsEqual(Matrix1, Matrix4) = true 
Le terrible frein va quand même ralentir. Ici, sans équivoque, vous ne pouvez pas vous passer d'outils faits maison.
 
fxsaber #:

C'est pourquoi il n'est pas clair comment, avec le mauvais code.

obtient une correspondance.

J'ai compris, si vous intervertissez les calculs des matrices, vous obtenez une non-concordance.

inRows = 5 inCols = 50 
matrix<double> Matrix4 = CorrMatrix2(Matrix) - 113 mcs, 0 MB
matrix<double> Matrix1 = CorrMatrix(Matrix) - 214 mcs, 0 MB
IsEqual(Matrix1, Matrix4) = false 

C'est-à-dire que des déchets de la mémoire pendant le calcul de la première matrice se sont retrouvés dans la nouvelle matrice et, par miracle, ont coïncidé avec le résultat souhaité.

 
fxsaber #:

Je pense que c'est un calcul frontal de la matrice de corrélation.

Oui, si on fait des μl sans cycles sur de nouvelles matrices, ça ne sera pas plus rapide ?
 
fxsaber #:
196

500 secondes contre 14 - c'est pourquoi je me souviens qu'il est

PearsonCorrM

le plus rapide, à cause de l'algorithme.

Maxim Dmitrievsky #:
Oui, si vous le faites sur de nouvelles matrices µl, ne sera-t-il pas plus rapide ?

Je pense que les 9 fonctions utilisées dans PearsonCorrM et PearsonCorrM2 peuvent être réécrites en matrices et comparées. En principe, il faudrait une heure de travail pour réécrire les déclarations et les références des matrices. En même temps, nous découvrirons si les matrices sont meilleures que les tableaux din.

Titres
IsFiniteMatrix(
IsFiniteVector(
AblasInternalSplitLength(
AblasSplitLength(
RMatrixGemmK(
RMatrixGemm(
RMatrixSyrk2(
RMatrixSyrk(
RankX(

 
Forester #:

Je pense que les 9 fonctions utilisées dans PearsonCorrM et PearsonCorrM2 peuvent être réécrites en matrices et comparées. En principe, il faudra une heure de travail pour réécrire les annonces et les références des matrices. En même temps, nous découvrirons si les matrices sont meilleures que les tableaux din.

Tout est déjà fait : MQ les a réécrites pour leurs matrices.

Forester #:

500 sec vs 14 - c'est pour cela que je m'en suis souvenu.

le plus rapide, à cause de l'algorithme.

Je ne me suis pas rendu compte de l'algorithme. NumPy n'est pas loin derrière uniquement parce qu'il n'effectue pas de calculs répétés.

NumPy semble avoir un algorithme différent de celui d'ALglib, car les performances sont très différentes. Mais il est clair que dans l'énorme communauté Python, il y a eu un algorithmiste très fort qui a consacré un temps décent à l'étude de cette question.
 
fxsaber #:

C'est déjà fait : les MQ les ont réécrits pour les adapter à leurs matrices.

Et c'est devenu plus lent...)

 
Forester #:

Et il s'est ralenti ? ))))

Comparez avec l'ancienne version d'Alglib. Je n'ai pas de données indiquant qu'il est devenu plus lent.