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

 
СанСаныч Фоменко #:

Les quantiles sont des probabilités. Nous supprimons/remplaçons donc les données dont la probabilité de tomber dans la fourchette de moins de 1 %/plus de 99 % ou d'autres quantités. Nous ne pouvons pas couper les quantités - nous avons des distributions asymétriques et à queue.

Ils écrivent que la valeur de remplacement est mieux considérée comme une prédiction de cette quantité par le ME. Mais cela me semble un peu exagéré.

Le fait est qu'il est souvent difficile de déterminer la distribution sur l'automate.

Souvent, elle est censée être log-normale, mais c'est simplement à cause des valeurs aberrantes - il n'y a pas de logique à cela.

Et si l'on prend un quantile, cela signifie que l'on coupe sur toute la plage, ce qui ne suffira pas à éliminer les valeurs aberrantes.


Sur le deuxième échantillon, j'ai obtenu un résultat très étrange - l'apprentissage se faisait rapidement sans aucune manipulation, mais après avoir supprimé les lignes contenant des valeurs aberrantes, l'effet de l'apprentissage est devenu presque égal à zéro.

J'ai maintenant activé le taux d'apprentissage lent - je vais le mettre en place pendant la nuit - pour voir si cela donne quelque chose.

Sinon, il s'avère que l'ensemble du processus d'apprentissage est basé sur la mémorisation des valeurs aberrantes, du moins avec les prédicteurs publics que j'utilise dans l'expérience.

 
Aleksey Vyazmikin #:

Justement, il est souvent difficile de déterminer la distribution sur un véhicule automatique.

Souvent, elle est censée être lognormale, mais c'est uniquement à cause des émissions - il n'y a pas de logique pour qu'il en soit ainsi.

Et si l'on prend un quantile, cela signifie que l'on coupe sur toute la plage, ce qui sera insuffisant pour éliminer les valeurs aberrantes.


Sur le deuxième échantillon, j'ai obtenu un résultat très étrange - l'apprentissage se faisait rapidement sans aucune manipulation, mais après avoir supprimé les lignes contenant des valeurs aberrantes, l'effet de l'apprentissage est devenu presque égal à zéro.

J'ai maintenant activé le taux d'apprentissage lent - je vais le mettre en place pendant la nuit - je verrai si cela donne quelque chose.

Sinon, il s'avère que l'ensemble du processus d'apprentissage est basé sur la mémorisation des valeurs aberrantes, du moins avec les prédicteurs publics que j'utilise dans l'expérience.

J'ai fait fonctionner le modèle jusqu'à EA en hiver (j'ai posté les résultats sur ce fil de discussion) et j'ai obtenu le résultat inverse : les erreurs de classification, qui étaient inférieures à 20 %, ont été capturées par les valeurs aberrantes. En conséquence, 80% des prédictions correctes ont été annulées par ces erreurs.

Une chose est claire pour moi : il faut se débarrasser des valeurs aberrantes. Et le véritable résultat du modèle est sans valeurs aberrantes.

 
СанСаныч Фоменко #:

J'ai rattrapé le modèle pour l'EA en hiver (j'ai posté les résultats sur ce fil). J'ai obtenu le résultat inverse : les erreurs de classification, et elles étaient inférieures à 20%, ont été rattrapées par les valeurs aberrantes. En conséquence, 80% des prédictions correctes ont été annulées par ces erreurs.

Une chose est claire pour moi : il faut se débarrasser des valeurs aberrantes. Et le véritable résultat du modèle est sans valeurs aberrantes.

Sur les bords, il y a clairement un déplacement de la probabilité vers une certaine classe - et ce n'est pas mauvais en soi, ce qui est mauvais, c'est que ces observations ne sont pas suffisantes pour tirer des conclusions statistiquement significatives.

Il est donc normal qu'il y ait plus de zéros dans les valeurs aberrantes et plus de uns dans les autres - cela dépend de l'ensemble des prédicteurs.

Il arrive également que si une valeur aberrante est observée de deux côtés, l'un des côtés est plus proche des zéros et l'autre des uns.

 
Aleksey Vyazmikin #:

Où puis-je voir le code final ?

J'ai tout posté dans ce fil de discussion.

 
Rorschach #:

Les sources sont ouvertes, vous pouvez y jeter un coup d'œil. Fonction de calcul de la corrélation, sur le côté droit il y a une inscription [source], après avoir cliqué dessus vous serez dirigé vers le code. Nous nous intéressons aux lignes 2885-2907. Dans la ligne 2889 la covariance est utilisée, après avoir cliqué sur cov, toutes les mentions de cov dans le code apparaîtront à droite, après avoir cliqué sur la ligne avec def cov.... permet d'accéder à la fonction de covariance, et ainsi de suite. MQL est un langage de type C, tous les langages de type C sont similaires à ~90%, vous pouvez comprendre C#, Java, Python, JavaScript sans trop de problèmes.

Merci. Je me suis un peu calmé sur l'algorithmisation, j'y jetterai un coup d'œil quand l'enthousiasme reviendra.

 
fxsaber #:

Je crois que j'ai déjà tout posté dans ce fil.

J'ai lu bien sûr, mais d'après la chronologie, Forester a trouvé une erreur, vous l'avez approuvée, puis une partie du code a été corrigée.

Et à la fin, je n'ai pas vu la version complète du code final ici. Je ne veux pas dire que vous êtes obligé de poster le code, j'ai juste demandé...

 
Aleksey Vyazmikin #:

Je l'ai lu bien sûr, mais selon la chronologie, Forester a trouvé une erreur, vous l'avez approuvée, puis une partie du code a été corrigée.

Et au final, je n'ai pas vu la version complète du code final ici. Je ne veux pas dire que vous êtes obligé de poster le code, j'ai juste demandé...

Rapide et ligne par ligne (corrigé).

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

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

fxsaber, 2023.10.01 09:38

#include <Math\Alglib\statistics.mqh> // https://www.mql5.com/ru/code/11077

const matrix<double> CorrMatrix( const matrix<double> &Matrix )
{
  matrix<double> Res = {};
  
  const CMatrixDouble MatrixIn(Matrix);
  CMatrixDouble MatrixOut;  

  if (CBaseStat::PearsonCorrM(MatrixIn, MatrixIn.Rows(), MatrixIn.Cols(), MatrixOut)) // https://www.mql5.com/ru/code/11077
    Res = MatrixOut.ToMatrix();
  
  return(Res);
}

const matrix<double> CorrMatrix2( const matrix<double> &Matrix )
{
  matrix<double> Res = {};
  Res.Init(Matrix.Cols(), Matrix.Cols());
  
  const CMatrixDouble MatrixIn(Matrix);
  CMatrixDouble Vector(Matrix);
  CMatrixDouble Corr;

  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);
  }
  
  return(Res);
}
 
fxsaber #:

Rapide et ligne par ligne (corrigé).

Merci de votre attention !

 
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


n'est rien d'autre qu'une analogie du graal des 4rosh avec un arrêt court.

 
Renat Akhtyamov #:

n'est rien d'autre que l'analogie d'un graal à 4 branches avec un arrêt court.

l'analogie de votre hedge fund avec un solde négatif.