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

 
Maxim Dmitrievsky #:

C'est le ministère de la défense

Cela ne fait aucune différence si le schéma de l'EA d'origine est le même : si vous voyez un schéma, ouvrez.

 
fxsaber #:

Dans MQL5, les éléments d'une telle matrice sont calculés en ~55 heures sur ma vieille machine. La consommation de mémoire est minimale.

La longueur des lignes est de 100.

Un million par un million ou 100 ? Est-ce la matrice d'entrée ?
Et la sortie est 1000000* 1000000 ? C'est un téraoctet. L'avez-vous lu ligne par ligne et l'avez-vous transféré sur un disque ?
Quelle fonction avez-vous utilisée ? PearsonCorrM, PearsonCorrM2, PearsonCorr2 ou standard ?

 
fxsaber #:

Cela ne fait aucune différence si le modèle de l'EA d'origine est le même : si vous voyez un modèle, ouvrez-le.

C'est différent ici, l'EA génère des signaux par lui-même.

Et les modèles doivent être liés à la logique. J'ai essayé les trades directionnels et le min reversal, il y a des patterns pour les deux, relativement bons.

 
Forester #:

S'agit-il d'un million de fois un million ou de 100 ? Est-ce la matrice d'entrée ?

L'entrée est 100x1000000.

Et la sortie est 1000000*1000000 ? C'est un téraoctet. Vous l'avez compté ligne par ligne et l'avez transféré sur disque ?

Ligne par ligne. Je n'ai rien téléchargé du tout. Dans le contexte de la recherche de modèles, en gros, dans chaque ligne, nous devons trouver uniquement les situations où Abs(Corr[i]) > 0.9. Pour ce faire, nous n'avons pas besoin d'écrire la matrice, mais simplement de compter ses lignes.

Quelle fonction avez-vous utilisée pour effectuer le comptage ? PearsonCorrM, PearsonCorrM2, PearsonCorr2 ou la fonction standard ?

Je n'ai pas trouvé de fonction interne pour le calcul ligne par ligne. Alglib m'a semblé lent. J'essaie ma propre version.

 
Maxim Dmitrievsky #:

C'est différent, le NS génère ses propres signaux.

Et les ensembles de modèles devraient être liés à la logique. J'ai essayé les transactions directionnelles et les inversions min, il y a des modèles pour les deux, relativement bons.

C'est une bonne idée.

 
Maxim Dmitrievsky #:

Je l'ai mis de côté pour l'instant, les résultats ne sont pas meilleurs que ceux du MO, bien que le MO soit également nul en termes de fluidité de l'équilibre.

5 minutes, demi-entraînement


Il est intéressant de voir le risque plus.
 
fxsaber #:

Ligne par ligne. Je n'ai rien écarté. Dans le contexte de la recherche de modèles, en gros, dans chaque ligne, vous devez trouver uniquement les situations où Abs(Corr[i]) > 0.9. Pour ce faire, vous n'avez pas besoin d'écrire la matrice, mais simplement de compter ses lignes.

A est exact. Pour chaque ligne, il y aura probablement 1-5 mille lignes corrélées seulement, elles peuvent être sauvegardées si nécessaire.

fxsaber #: Je n'ai pas trouvé de logiciel standard pour le calcul ligne par ligne. Alglib semble lent. J'essaie ma propre variante.

Je pense que PearsonCorrM2 fonctionnera rapidement. On charge 1 matrice complète, la 2ème matrice d'une ligne à vérifier. Et si nous partons de la fin, nous pouvons spécifier la taille de la première matrice comme étant le numéro de la ligne suivante, de sorte que nous ne recalculons pas la corrélation de manière répétée pour les lignes en dessous de la ligne testée.

 
Forester #:

Je pense que PearsonCorrM2 serait une voie rapide.

J'ai d'abord douté de sa rapidité.

// Считает Pos-строку.
const matrix<double> CorrMatrix( const matrix<double> &Matrix, const int Pos )
{
  matrix<double> Res = {};
  
  const CMatrixDouble MatrixIn(Matrix);
      
  matrix<double> Column;
  Column.Assign(Matrix.Col(Pos));
  Column.Init(Column.Cols(), 1);
  
  const CMatrixDouble Vector(Column);
  CMatrixDouble MatrixOut;  

  if (CBaseStat::PearsonCorrM2(Vector, MatrixIn, MatrixIn.Rows(), 1, MatrixIn.Cols(), MatrixOut))
    Res = MatrixOut.ToMatrix();
  
  return(Res);
}

J'ai essayé l'un d'entre eux, mais je n'ai mesuré que le point culminant. Quelque chose de lent, alors je fabrique le mien.

 

Ce n'est pas comme si personne d'autre que moi n'était au courant.


Pearson est invariant pour les actions de multiplication et d'addition.

void OnStart()
{
  const double a = 2, b = 7;  
  const vector<double> Vector = {1, 2, 3, 4};
    
  Print(Vector.CorrCoef(Vector * a + b));   // 1
  Print(Vector.CorrCoef((Vector + a) * b)); // 1
}

Je n'ai pas senti l'addition, malgré la formule simple. Et le wiki le dit expressément.

Ключевым математическим свойством коэффициента корреляции Пирсона является то, что он инвариант при отдельных изменениях положения и масштаба двух переменных. То есть мы можем преобразовать X в a + bX и преобразовать Y в c + dY, где a, b, c и d - константы с b, d>0, без изменения коэффициента корреляции.

En particulier, cette matrice initiale
[[1,2,3]
 [1,2,3]
 [2,4,4]]

a une matrice de corrélation unitaire (lignes par colonnes).

 
fxsaber #:

Pearson est invariant pour les actions de multiplication et d'addition.

Il n'est probablement pas très bon pour les données sur les prix.