Discussion de l'article "Développement d'un robot en Python et MQL5 (Partie 2) : Sélection, création et formation de modèles, testeur personnalisé Python" - page 2

 

Les prix des rangées s'avèrent être les meilleurs jetons.

J'étais auparavant sceptique en raison de leur non-stationnarité. Mais après quelques manipulations, j'ai également commencé à extraire des modèles décents sur ces caractéristiques.

Ainsi, de l'ignorance naît la connaissance, et de la connaissance naît l'ignorance :)

 
Ivan Butko #:
Une bonne motivation quand il y a des résultats !
Et, comme je m'en suis rendu compte, ce n'est pas une semaine à venir, ni un mois, mais une année normale de travail.

Merci beaucoup ! Oui, ça me motive beaucoup ! Je vais continuer à chercher) C'est encore le soir, j'ai une tasse de café et des idées de code avec moi)))))

 
Maxim Dmitrievsky #:

Dans l'ensemble, les prix en ligne s'avèrent être les meilleurs jetons.

J'étais auparavant sceptique en raison de leur non-stationnarité. Mais après quelques manipulations, j'ai également commencé à extraire des modèles décents sur ces caractéristiques.

Ainsi, de l'ignorance naît la connaissance, et de la connaissance naît l'ignorance :)

Voici un exemple de ce type d'essai, ma belle-mère est une trader avec une expérience de plus de 15 ans, elle ne cesse de dire qu'il est nécessaire de faire des jetons sur les volumes))) https://www.mql5.com/fr/code/50133

Индикатор Price / Volume
Индикатор Price / Volume
  • www.mql5.com
Одна из простых фич для машинного обучения
 
Yevgeniy Koshtenko #:

C'est le genre de chose que j'ai essayé, ma belle-mère est une négociatrice avec plus de 15 ans d'expérience, elle n'arrête pas de dire que nous devrions faire des jetons sur les volumes))) https://www.mql5.com/fr/code/50133

Oui, il est vrai que le plus souvent la volatilité est ajoutée (par exemple l'indicateur std), mais cela ne donne pas grand chose. Ou les incréments divisés par la volatilité.

 

Eugène, grâce à vos articles, j'ai commencé à étudier le ML en relation avec le trading, merci beaucoup pour cela.

Pourriez-vous expliquer les points suivants.

Après le traitement des données par la fonction label_data, leur volume est considérablement réduit (nous obtenons un ensemble aléatoire de barres qui satisfont aux conditions de la fonction). Ensuite, les données passent par plusieurs fonctions et nous les divisons en échantillons de formation et de test. Le modèle est entraîné sur l'échantillon d'entraînement. Ensuite, les colonnes ['labels'] sont retirées de l'échantillon de test et nous essayons de prédire leurs valeurs pour estimer le modèle. N'y a-t-il pas de substitution de concepts dans les données de test ? Après tout, pour les tests, nous utilisons des données qui ont passé la fonction label_data (c'est-à-dire un ensemble de barres non séquentielles sélectionnées à l'avance par une fonction qui prend en compte les données futures). Dans le testeur, il y a le paramètre 10 qui, si j'ai bien compris, devrait être responsable du nombre de barres pour conclure l'affaire, mais comme nous avons un ensemble de barres non séquentielles, ce que nous obtenons n'est pas clair.

Les questions suivantes se posent : Où est-ce que je me trompe ? Pourquoi toutes les barres >= FORWARD ne sont-elles pas utilisées pour les tests ? Et si nous n'utilisons pas toutes les barres >= FORWARD, comment pouvons-nous choisir les barres nécessaires à la prédiction sans connaître l'avenir ?

Je vous remercie.

 
Excellent travail, très intéressant, pratique et terre à terre. Il est difficile de voir un article aussi bon avec des exemples réels et pas seulement de la théorie sans résultats. Merci beaucoup pour votre travail et votre partage, je vais suivre cette série et l'attendre avec impatience.
 
Eric Ruvalcaba #:
Excellent travail, très intéressant, pratique et terre à terre. Il est difficile de voir un article aussi bon avec des exemples réels et pas seulement de la théorie sans résultats. Merci beaucoup pour votre travail et votre partage, je vais suivre cette série et l'attendre avec impatience.

Merci beaucoup ! Oui, il y a encore beaucoup de mises en œuvre d'idées à venir, y compris l'expansion de celle-ci avec la traduction en ONNX)

 
Y a-t-il une raison particulière d'utiliser RandomForestClassifier pour la sélection des caractéristiques et XGBclassifier pour la classification du modèle ?
 

Défauts critiques :

  1. Problèmes de prévention des fuites de données:
    • La fonction augment_data() crée de sérieux problèmes de fuite de données entre les ensembles de formation et de test.
    • L'augmentation mélange des données provenant de périodes différentes.
  2. Erreurs dans la méthodologie d'évaluation des performances:
    • Le test du modèle ne tient pas compte des conditions réelles du marché.
    • Le modèle est entraîné sur des données futures et testé sur des données historiques, ce qui est inacceptable.
  3. Problèmes techniques dans le code:
    • La fonction generate_new_features() crée des caractéristiques mais ne les renvoie pas (elle renvoie les données d'origine).
    • La fonction test_model() utilise X_test.iloc[i]['close'], mais il se peut que 'close' soit manquant après la transformation des caractéristiques.
  4. Traitement incohérent des données:
    • Les données sont étiquetées deux fois de manière différente ( markup_data() et label_data() ).
    • Les résultats du regroupement ( cluster ) ne sont pas utilisés dans la suite de la formation.
  5. Problèmes méthodologiques dans la stratégie de trading:
    • Sortie statique après 10 barres au lieu d'une stratégie adaptative
    • Pas de gestion du risque (à l'exception d'un simple stop-loss)
    • Pas de prise en compte des coûts de transaction (à l'exception d'un simple spread)
  6. Validation inefficace:
    • Pas de validation du modèle sur des données historiques en tenant compte de la structure temporelle (analyse "walk-forward").
    • La validation croisée est appliquée aux séries temporelles sans tenir compte de la spécificité des séries temporelles.

Recommandations d'amélioration :

  1. Éliminer les fuites de données - séparer strictement les données dans le temps
  2. Mise en œuvre d'une validation ascendante appropriée
  3. Mettre en œuvre des tests plus réalistes, en tenant compte des dérapages et des commissions.
  4. Finaliser la logique d'entrée et de sortie des positions.
  5. Utiliser des méthodes spécifiques aux séries chronologiques