English Русский 中文 Español Deutsch 日本語 Português 한국어 Italiano Türkçe
Les forêts aléatoires prédisent les tendances

Les forêts aléatoires prédisent les tendances

MetaTrader 5Systèmes de trading | 13 janvier 2022, 15:46
279 0
СанСаныч Фоменко
СанСаныч Фоменко

Introduction

L'objectif initial de la construction de tout système de trading est de prédire le comportement d'un instrument de marché, par exemple une paire de devises. Les objectifs des prédictions peuvent être différents. Nous nous contenterons de prévoir les tendances, ou pour être précis, de prévoir la croissance (positions longues) ou la baisse (positions courtes) des cotations des paires de devises.

Pour prédire le comportement des devises, un trader attache quelques indicateurs à un graphique de paires de devises et essaie de trouver un modèle qui a un pouvoir prédictif.

Cet article considère la sélection automatique de modèles et leur évaluation préliminaire à l'aide du package Rattle, qui est une bibliothèque du système d'analyse des statistiques R.


1. À propos du Rattle

Nous allons utiliser R pour prédire le comportement des paires de devises, ce qui est idéal pour prévoir les marchés financiers. Cela dit, R est principalement un langage de programmation pour les statisticiens qualifiés et dépasse l'entendement de nombreux traders. La complexité de R est exacerbée par le fait que les outils de prédiction sont nombreux et dispersés dans de nombreux packages qui rendent les fonctionnalités de base de R.

Rattle (l'outil d'analyse R pour apprendre facilement) rassemble un ensemble de packages R, qui sont importants pour développer des systèmes de trading mais pas faciles à utiliser séparément par les novices. Il n'est pas nécessaire de connaître et de comprendre R pour commencer à travailler avec Rattle. Le résultat du travail avec Rattle sera un code en R, qui peut être utilisé pour développer un véritable système de trading. Cependant, à ce stade, la connaissance de R va être nécessaire.

Dans tous les cas, le Rattle est un outil irremplaçable au stade de la conception d'un système de trading. Il permet même aux débutants de voir rapidement les résultats de diverses idées et de les évaluer.

Rattle (Williams, 2009) est un logiciel libre avec un code source ouvert créé sous forme de package, qui fait partie de R (R Developing working group, 2011). Puisqu'il s'agit d'un logiciel libre, le code source de Rattle et R est disponible sans limitations. Le code source de Rattle est écrit en С et les utilisateurs sont autorisés et encouragés à étudier le code, le tester et l'étendre.


2. Description des données sources

Les calculs effectués dans cet article sont basés sur un ensemble de données contenant les cotations de six paires de devises EURUSD, GBPUSD, USDCHF, USDJPY, EURGBP, USDCAD avec des cours de fermeture sur la période Н1 pour la période du 10.01.2011 au 24.12.2013. Les données comprennent plus de 18 000 bar, ce qui rend le calcul fiable. L'ensemble de données basé sur les paires de devises ci-dessus a été utilisé pour rechercher des modèles prédisant les positions longues et courtes.

L'ensemble de données avec les guillemets initiaux se trouve dans le fichier joint nommé kot60_110101_131231_UA.txt.


2.1. Création d'une variable cible

Dans un premier temps, nous devons définir ce que nous allons prévoir exactement. Malgré la simplicité apparente, la sélection de l'objectif correct pour la prédiction et les données qui présenteront cet objectif sous la forme d'un ensemble de nombres sont fondamentales.

Quant à l'idée de prédire une tendance, elle repose sur la volonté de trader avec une tendance.

Selon la définition d'une « tendance », « une tendance haussière est lorsque chaque prix successif est supérieur à celui trouvé plus tôt » et c'est l'inverse pour la tendance baissière. Ainsi, la nécessité de prédire le prix d'une paire de devises découle de la définition. Si le taux initial de l'EURUSD est de 1,3500 et que le taux prévu est de 1,3550, alors il s'agit d'une tendance haussière et cela incite à l'achat.

Cependant, les ordres de base sont « achat » et « vente » alors que la prédiction concerne le niveau des prix. Par exemple, le niveau de prix est utilisé dans les systèmes de trading pour prédire une percée de niveau. Pour mettre en œuvre l'idée de trader dans les tendances, une comparaison de prix supplémentaire doit être effectuée. Apparemment, nous prédisons une chose différente de ce que nous allions trader !

Par conséquent, si le système de trading suit les tendances par conception, alors le modèle doit prédire les tendances. Le modèle doit être formé pour reconnaître les tendances, la variable cible ne doit prendre que deux valeurs « achat » et « vente ». Dans la forme de code (catégorique), la variable cible ressemblera à « 1 » et « -1 ».

Il existe une différence fondamentale entre les modèles utilisant la population des données sources pour calculer le prix d'un instrument financier et les modèles affiliant une population des données sources à une classe. Les modèles du premier type appartiennent aux modèles de régression et les modèles du second type appartiennent aux modèles de classification.

Des modèles prédictifs de type régression sont utilisés pour calculer une certaine valeur dans le futur. Quand ce futur arrivera, nous aurons la valeur factuelle avec laquelle comparer celle prédite.

Des modèles prédictifs de type classification sont utilisés pour calculer la classe à laquelle sera affiliée une population de données sources reçues au moment de la prédiction. Deux classes « longue » et « courte » seront ainsi. Comme dans tout autre modèle de type de qualification, ces deux classes n'ont pas de taille spécifiée. Ainsi, la classe « longue » ne peut être comparée à la classe « courte ». Bien que nous allons coder « long » en « 1 » et « court » en « 0 » pour plus de commodité, cela ne signifie pas que « long » est supérieur à « court ». Pour souligner cela, pour de telles variables qualitatives, R et, par conséquent, Rattle présentent un type spécialisé de variables catégorielles (nominales).

Les positions longues et courtes en tant que variables cibles n'existent pas et c'est la principale différence avec les variables indépendantes décrites ci-dessous. Cet aspect s'accorde avec le fait que nous allons prédire un futur qui n'existe pas dans le moment présent. Nous pouvons bien tirer des tendances sur les données historiques car nous connaissons l'avenir par rapport au passé.

Pour distinguer les tendances sur les données historiques, nous allons utiliser le ZigZag. C'est un indicateur brillant pour les données historiques et inutile pour les données réelles car le dernier lien et parfois le précédent sont redessinés. Comme il n'y a pas de dynamique sur les données historiques, on peut tirer de très belles tendances avec cet indicateur.

L'indicateur ZigZag avec le paramètre « distance entre les points d'inversion » égal à 0,0035 dollar a été utilisé pour le calcul de la variable cible. La figure 1 représente le résultat.

Fig. 1. L'indicateur ZigZag

Fig. 1. L'indicateur ZigZag

Maintenant, les valeurs de l'indicateur doivent être converties en une valeur catégorielle où « long » = 1 et « court » = 0. 

Le résultat est illustré sur la figure 2.

Fig.2. L'indicateur ZigZag sous forme catégorielle

Fig. 2. L'indicateur ZigZag sous forme catégorielle

Effectuons la dernière opération avec la variable cible. Si nous déplaçons l'indicateur ZigZag vers la gauche, la barre actuelle correspondra à la valeur future de l'indicateur ZigZag. Dans cet article le décalage se fait d'une barre, ce qui équivaut à une prédiction d'une longueur d'avance pour les données utilisées une heure à l'avance.

Le décalage peut être effectué pour un plus grand nombre de barres et il sera corrélé à une prédiction pour un plus grand nombre de barres. Cette approche diffère des autres approches prédictives où la valeur précédente peut être utilisée pour prédire plusieurs valeurs futures conduisant à une sommation des erreurs de prédiction.

Les modèles mis en évidence dans cet article ainsi que les modèles de classification en général, n'accumulent pas les erreurs. Dans les modèles de classification, la prédiction pour deux barres en avant a sa propre erreur de prédiction qui n'est en aucun cas liée à l'erreur de prédiction pour une barre en avant.


2.2. Création de variables indépendantes

Les variables indépendantes ou prédicteurs sont appelés ainsi parce qu'ils viennent au modèle depuis l'extérieur. Ce sont des variables externes mesurables ou des variables calculées sur la base de ces variables externes. Toutes les données économiques et financières, y compris les cotations des paires de devises, sont des variables indépendantes car leurs valeurs sont le résultat de l'activité des acteurs du marché. Les données reçues des indicateurs techniques appartiennent à la même catégorie car elles sont calculées sur la base des cotations.

La sélection des variables indépendantes est tout aussi importante que le choix de la variable cible. En fait, c'est la sélection de variables indépendantes qui définit le succès de la modélisation. La majeure partie du temps consacré au développement du modèle est consacrée à l'analyse et à la sélection d'un ensemble de variables indépendantes.

Les variables du fichier source kot60_110101_131231_UA contenant six cotations de paires de devises, l'heure et la date, peuvent être définies comme prédicteurs.

Le temps et les données sont plutôt intéressants du point de vue de cette méthode. Il y a toujours eu des tentatives pour utiliser le temps et les données dans les systèmes de trading. Dans nos modèles, la prise en compte de certaines données cachées sur la dépendance des cotations à l'heure et au jour de la semaine peut être révélée automatiquement par les modèles de classification. La seule chose à faire ici est de convertir ces deux variables sous la forme catégorielle. Le temps doit devenir une catégorie à 24 niveaux et la date doit devenir une variable catégorielle à cinq niveaux pour correspondre au nombre de jours de la semaine.

Outre les prédicteurs de source, nous allons créer des prédicteurs supplémentaires qui, à mon avis, révèlent l'existence de tendances dans les cotations de source. Nous allons utiliser des indicateurs bien connus pour créer des prédicteurs supplémentaires.

Les indicateurs suivants seront utilisés : 5,10 et 15 ; MACD(12,26,9), RSI avec les périodes 14,21,28. En plus d'eux, nous allons utiliser des incréments de cotations et des moyennes mobiles. Toutes ces conversions doivent être appliquées aux six cotations des paires de devises.

L'indicateur ZigZag sera inclus dans le nombre de variables indépendantes à des fins de soutien. Il ne sera pas utilisé pour développer des modèles car sa valeur sur la barre la plus à droite est inconnue.

Nous avons donc 88 variables indépendantes, une variable cible et une variable de service (ZigZag). La quantité de données pour chacune des variables est de 18083 barres.

Cet ensemble de données possède la forme de l'espace de travail R et se trouve dans la pièce jointe à cet article sous le nom de TC.RData. Cet ensemble de données peut être utilisé comme suit :

  • charger R ;
  • charger la bibliothèque Rattle ;
  • onglet Fichier/Espace de travail ;
  • trouver le fichier TC.RData sur le disque et chargez-le.

3. Analyse intelligente des données sources

Le package Rattle propose un ensemble d'outils pour le traitement préliminaire ou intelligent des données - l'exploration de données.

3.1. Saisie et aperçu

Considérons quelques opportunités qui deviennent disponibles après avoir effectué les actions mentionnées dans la section ci-dessus.

Le résultat peut être vu sur l'image représentée sur la Fig. 3.

Fig. 3. Écran d'accueil de Rattle

Fig. 3. Écran d'accueil de Rattle

Le développement d'un modèle dans Rattle a lieu lorsque nous passons de l'onglet Données à l'onglet Journal.

Le premier onglet de Rattle est Données. Conformément à son nom, cet onglet permet de charger des données qui pourront être exploitées ultérieurement.

Les deux boutons Feuilles de calcul et Ensemble de données R nous intéressent particulièrement.

Le bouton Feuilles de calcul permet de télécharger des fichiers Excel. Si le lecteur souhaite tester ses idées, il peut préparer son propre fichier Excel, puis essayer Rattle.

Pour répéter les actions décrites dans cet article ou effectuer des actions supplémentaires avec un fichier contenant des données brutes joint à cet article, utilisez le bouton Ensemble de donnés R. Ce bouton charge le fichier au format R. Le fichier est appelé « Répertoire de travail » ou « Fichier de travail ». Ils ont une extension sur le disque .RData. Ce fichier peut être téléchargé sur R et il sera disponible en cliquant sur ce bouton après lui.

Téléchargez notre fichier préparé et obtenez la partie supérieure de l'image sur la figure 4 et la partie inférieure de l'image sur la figure 5.

Fig. 4. Partie supérieure du fichier source

Fig. 4. Partie supérieure du fichier source

Fig. 5. Partie inférieure du fichier source

Fig. 5. Partie inférieure du fichier source



3.2. Corrélation de la variable cible avec les variables indépendantes

Remarque. Le bouton « Exécuter » joue un rôle crucial. L'action se prépare mais n'est pas exécutée. Pour effectuer une action, appuyez sur le bouton « Exécuter ». Cela doit être fait à chaque fois en répétant les actions décrites dans cet article.

La figure 4 montre une liste de variables, leurs caractéristiques et le rôle de ces variables. Étant donné que nous n'allons pas utiliser l'indicateur ZigZag dans les modèles et que nous ne pourrons pas le faire de toute façon, nous le marquerons comme celui à ignorer, c'est-à-dire défini sur Ignorer.

D'autres variables sont utilisées comme variables d'entrée, à l'exception de la dernière, qui est utilisée comme variable cible.

Le bouton Partition joue un rôle important dans la justification du niveau de confiance des résultats de la modélisation. À l'aide de ce bouton, l’ensemble de données peut être divisé en trois parties si nécessaire. Les proportions de l'ensemble de données utilisées pour la formation, la validation et le test du modèle sont spécifiées à ce stade.

Dans le champ suivant, la semence pour le capteur de nombres pseudo-aléatoires est spécifiée. Par exemple, 70 % des données sources collectées pour l'ensemble de données de formation sont sélectionnées de manière aléatoire dans l'ensemble de données source. En conséquence, les deux autres parties de 15 % (comme dans notre cas) sont également des séquences de barres aléatoires.

Par conséquent, en changeant Semence à partir de l'ensemble de données source, on peut obtenir une quantité indéfinie de divers ensembles de données de formation et autres.

Fig. 6. Corrélation des variables

Fig. 6. Corrélation des variables

Trouvez une colonne avec le nom ZZ.35 dans la table reçue. L'échantillon présenté dans la table ci-dessous a été extrait de cette colonne.

Variable
ZZ.35
 RSI_cad.14
 -0.0104122177
 JPY.dif2
 -0.0088412685
 EUR.dif3
 -0.0052379279
 CHF.dif3
 -0.0049692265
 GBP.dif3
 -0.0047409208
 GBP.dif1
  0.0044691430
 MA_cad.15.dif1
 -0.0039004722
 JPY.dif1
 -0.0023831247
 GBP.dif2
 -0.0015356091
 EUR.dif2
 -0.0013759749
 CHF.dif2
 -0.0012447101
 EUR.dif1
 0.0005863149
 MA_cad.10.dif1
 0.0023981433
 CHF.dif1
 0.0024543973
 MA_gbp.5.dif1
 0.0043757197
 MA_cad.5.dif1
 0.0075424397
 MA_gbp.10.dif1
 0.0094964069
 EURGBP.dif1
 0.0095990416
 CAD.dif1
 0.0110571043

Table 1.  Corrélation des variables

Comme on peut le voir, il existe une liste assez longue de variables ayant une corrélation avec ZZ.35 inférieure à 0,01. Le niveau de corrélation, inférieur à 0,1 ne permet pas de tirer une conclusion sur l'influence des variables indépendantes sur la variable cible.

À ce stade, nous allons noter ce fait et l'utiliser comme il convient après l'évaluation des modèles.

Dans les modèles de classification, le degré d'influence des prédicteurs sur la variable cible joue un rôle très important. À un faible niveau de corrélation, le prédicteur d'appariement est considéré comme le bruit dans le modèle, ce qui conduit à son recyclage. Le recyclage du modèle se produit lorsque le modèle commence à prendre en compte des détails et des prédicteurs non significatifs pour la variable cible.

Il n'y a pas de recommandations sur le niveau de corrélation. Habituellement, ils utilisent le nombre magique de statistiques – 5 %. C'est inexact par essence. La suppression des prédicteurs, qui sont le bruit dans le modèle, conduit à la réduction de l'erreur de prédiction. La suppression d'un prédicteur qui n'est pas le bruit dans le modèle entraîne une augmentation de l'erreur de prédiction. Par conséquent, la liste minimale de prédicteurs utiles pour le modèle est établie par des expériences.


3.3. Mise à l'échelle

Certains modèles, comme les machines à vecteurs de support (SVM), sont très sensibles à différentes échelles de prédicteurs, ce qui signifie ce qui suit. Par exemple, les données sur la paire de devises EURUSD changent dans la limite de 0,5, tandis que l'USDJPY change dans quelques dizaines d'unités. Pour exclure différentes échelles de prédicteurs, ils doivent être ramenés à une échelle dans l'onglet Transformer. Il est préférable que les fluctuations des prédicteurs se produisent dans la limite de [0-1].

Pour effectuer une mise à l'échelle, sélectionnez Transform/Rescale/Scale [0-1]. Après cela, nous cochons toutes les variables et appuyons sur le bouton « Exécuter ».


3.4. Conversion à la forme catégorielle

La conversion sous forme catégorielle permet de convertir la valeur d'une variable numérique en un facteur à plusieurs niveaux. L'indicateur RSI est le premier à être converti en un facteur multi-niveaux. On pense qu'il indique une inversion de tendance lorsque ses valeurs approchent de zéro ou de 100.

Pour convertir les valeurs de l'indicateur RSI sous la forme catégorielle, sélectionnez : Transformer/Recoder/KMeans. Ce faisant, définissez le nombre de niveaux de facteur sur 8. Cochez tous les indicateurs RSI et appuyez sur « Exécuter ».

Après avoir défini la variable ZZ.35 sur Ignorer, nous pouvons passer au développement de modèles.


4. Algorithme général du modèle de classification

Les modèles suivants sont disponibles en Rattle :

  • modèle de classification arborescente (Tree);
  • modèle de forêt aléatoire (forêt) ;
  • modèle d'amélioration des arbres (ada) ;
  • modèle de machines à vecteurs de support (SVM) ;
  • modèle linéaire généralisé (glm) ;
  • modèle de réseau de neurones (NNET).

Malgré la différence fondamentale entre les modèles de classification (nous ne parlons pas uniquement de ceux disponibles dans Rattle), tous ont des caractéristiques communes décrites ci-dessous.

Prenons un ensemble de formation constitué de chaînes (dans notre cas, le nombre est 18030), contenant des valeurs de prédicteurs (88 dans notre cas) et la valeur de la variable cible (« long » et « court »).

N'importe lequel des algorithmes de classification aborde le problème de la séparation des combinaisons de valeurs de prédicteur correspondant à « long » des combinaisons de valeurs de prédicteur correspondant à « court ». Il s'agit d'une étape de formation d'un modèle.

Vient ensuite l'étape de vérification du modèle.

Comme nous avons divisé l'ensemble de données source en trois parties, nous prenons un autre ensemble de données et considérons des combinaisons de prédicteurs comparés à ceux reçus au stade de la formation. Chaque combinaison de prédicteurs est établie si elle appartient à « court » ou « long ». Étant donné que l'ensemble de données de vérification contient ces valeurs connues, le résultat est comparé aux données factuelles. Le rapport entre les positions factuelles longues et courtes et celles prédites est l'erreur de prédiction.

Si le résultat ne nous convient pas, nous pouvons revenir à l'étape de l'analyse intelligente des données pour améliorer le résultat. Malheureusement, la qualité de cette étape est complètement définie par l'expérience d'un trader. Des modifications sont apportées à l'ensemble de données source, puis un modèle est à nouveau développé.

Si nous trouvons les résultats obtenus sur les ensemble de données de formation et de vérification satisfaisants, alors nous vérifions le modèle sur l’ensemble de données de test, c'est-à-dire celui qui n'a pas été utilisé.

La qualité du modèle est définie non seulement par une petite erreur de prédiction mais aussi par une petite différence entre les valeurs de cette erreur sur différents ensembles de données. Cela montre le caractère robuste du modèle et l'absence de reconversion ou comme les traders l'appellent l'ultra ajustement.

Dans cet article, seul un modèle de forêt aléatoire va être examiné en détail.


5. Modèle de forêt aléatoire

5.1. Sommaire

L'algorithme du travail d'un trader est le suivant. Un ensemble d'indicateurs est ajouté à une cotation d'une paire de devises et une décision de trade est prise en jugeant le total des cotations actuelles et des données d'indicateur.

Dans le système de trading le plus simple « Moving Average », ils achètent si le prix actuel est supérieur à la moyenne mobile et vendent s'il est inférieur. Ils peuvent ajouter des conditions supplémentaires telles que les données reçues de l'indicateur RSI. En conséquence, un trader obtient un arbre de décision. Dans les feuilles de cet arbre se trouvent les cotations de la paire de devises, les valeurs de la moyenne mobile et l'indicateur RSI. La racine de l'arbre ne contient que deux valeurs - « achat » et « vente ».

Le processus décrit de construction d'un arbre a été automatisé dans le modèle des arbres de classification. En conséquence, il n'y a qu'un seul arbre, ou, dans l'argot des traders, un seul modèle.

L'algorithme d'un arbre unique est incapable de construire des modèles précis car la diversité conduit à l'instabilité, ce qui peut être vu lors de la construction d'arbres de décision séparés.

Un lecteur peut vérifier cette déclaration lui-même en utilisant le modèle Arbre dans Rattle. Ce modèle implémente l'algorithme décrit de la construction d'un arbre.

L'idée du modèle de forêt aléatoire est d'inclure de nombreux arbres de classification (modèles) dans le modèle, pas un seul. Ainsi, la forêt aléatoire a tendance à avoir une résistance plus élevée aux changements de données et au bruit (c'est-à-dire des variables qui ont peu d'influence sur la variable cible).

Le caractère aléatoire utilisé par l'algorithme de forêt aléatoire se manifeste dans le choix à la fois des lignes de la table (observations) et des prédicteurs. Ce caractère aléatoire définit la résistance significative au bruit, aux valeurs aberrantes et au recyclage lors de la comparaison avec un classificateur arborescent autonome.

La probabilité définit également une efficacité de calcul importante. En construisant un arbre de décision autonome, le développeur du modèle peut sélectionner un sous-ensemble aléatoire d'observations disponibles dans l'ensemble de données de formation. En outre, à chaque nœud du processus de construction d'un arbre, ils ne considèrent qu'une petite partie de toutes les variables disponibles pour établir la meilleure proportion de fractionnement d'un ensemble de données. Cela conduit à un assouplissement significatif des exigences de performances de calcul.

Ainsi, le modèle de forêt aléatoire est un bon choix pour développer des modèles pour un certain nombre de raisons. Très souvent, un petit traitement préliminaire des données est nécessaire car les données ne sont pas censées être normalisées et l'approche est élastique aux valeurs aberrantes. La nécessité de sélectionner des variables peut être évitée car l'algorithme choisit efficacement son propre ensemble de variables. Comme beaucoup d'arbres sont construits en utilisant deux niveaux d'aléatoire (observations et prédicteurs), chaque arbre est un modèle indépendant efficace. Ce modèle n'est pas sujet au recyclage sur l'ensemble de données de formation.

Les algorithmes de forêts aléatoires génèrent souvent de 100 à 500 arbres. Lorsque le modèle final est développé, les décisions prises par chaque arbre sont intégrées en traitant les arbres comme égaux. La décision finale sur un assemblage d'arbres sera la décision sur la majeure partie des arbres constitutifs. Si 51 arbres sur 100 indiquent « long », alors la valeur « long » sera acceptée, cependant, avec moins de confiance.


5.2. Algorithme

5.2.1. Former un échantillon à partir d'un ensemble de données

L'algorithme de formation d'un arbre aléatoire génère de nombreux arbres de décision en utilisant l'agrégation bootstrap ou le bagging pour introduire le caractère aléatoire dans le processus de formation de l'échantillon. L'agrégation bootstrap consiste à rassembler un échantillon aléatoire d'observations dans un sac. De nombreux sacs formés dans un ordre aléatoire sont constitués d'observations sélectionnées reçues à partir d'observations sources sur l'ensemble de données de formation.

L'assemblage jusqu'aux sacs est effectué avec substitution. Cela signifie que chaque observation a une chance de plusieurs apparitions dans un certain sac. La taille de l'échantillon est souvent la même que celle de l'ensemble de données complet. La pratique montre que les deux tiers des observations seront inclus dans un sac (avec répétitions) et qu'un tiers ne sera pas pris en compte. Chaque sac d'observations est utilisé comme un ensemble de données de formation pour construire un arbre de décision. Les observations non comptabilisées peuvent être utilisées comme échantillon indépendant pour évaluer le résultat.


5.2.2. Formation du choix des prédicteurs

Le deuxième élément de base du caractère aléatoire concerne le choix des prédicteurs pour fractionner un ensemble de données. À chaque étape de création d'un nœud de décision séparé, c'est-à-dire à chaque point de fractionnement d'un arbre, un ensemble aléatoire et généralement petit de prédicteurs est sélectionné. Seuls les prédicteurs sélectionnés au point de fractionnement sont pris en compte. Pour chaque nœud dans la construction d'un arbre, ils considèrent un ensemble aléatoire différent des prédicteurs.


5.2.3. Caractère aléatoire

Formant des ensembles aléatoires de données et de variables, ils reçoivent des arbres de décision avec divers résultats en fonction du sous-ensemble de données. Ce changement même permet de traiter cet assemblage d'arbres comme une équipe d'experts coopérant avec différents niveaux de compétence qui font la prédiction la plus fiable.

La formation d'échantillons présente également un autre avantage significatif : l'efficacité des calculs. Le fait de ne considérer qu'une petite partie du nombre total de prédicteurs lors du fractionnement d'un ensemble de données réduit considérablement les volumes de calculs requis.

En créant chaque arbre de décision, l'algorithme de formation d'un arbre aléatoire ne coupe généralement pas les arbres de décision. Une forêt aléatoire avec des arbres ultra ajustés peut développer un très bon modèle, qui fonctionne bien sur de nouvelles données.


5.2.4. Calcul à l'assemblage

Lorsque l'on traite de nombreux arbres de décision comme un seul modèle, chaque arbre est également important dans la prise de décision finale. La majorité simple détermine le résultat. Cela signifie que 51 % de splits et 99 % de splits produiront la même classe, par exemple « long ».

Les calculs par Rattle sont partiels car l'utilisateur obtient le résultat sous forme de classe. Si le modèle est utilisé dans R, les résultats sous la forme d'une probabilité de classe deviennent disponibles.


5.3. Développement d'un modèle de forêt aléatoire

Pour créer un modèle, sélectionnez Modèle/Forêt. Le calcul démarré du modèle prendra quelques minutes pour nos données sources.

Je diviserai le résultat du calcul en plusieurs parties et commenterai chacune d'elles.

Revoyons les résultats apportés sur la figure 7.

Fig. 7. La partie supérieure des résultats d'ajustement du modèle de forêt aléatoire

Fig. 7. La partie supérieure des résultats d'ajustement du modèle de forêt aléatoire

Certaines informations sur ce chiffre doivent être soulignées.

TREND est une variable cible ici.

500 arbres ont été générés lors de la construction de ce modèle. Lors du fractionnement dans chaque nœud de l'arbre, 9 prédicteurs (variables) ont été utilisés. Par ailleurs, les boutons Erreurs et OOB ROC nous intéressent particulièrement.

Suivez ensuite les erreurs de prédiction, qui ressemblent à :

Estimation OOB du taux d'erreur : 15.97 %

Matrice de confusion :


01class.error
0496011630.1899396
18585677 0.1312930

Table 2. Tableau de contingence de la matrice d'erreurs pour l'ensemble de formation

Cela doit être interprété comme « L'erreur de sortie du sac est de 15,97 % ».

L'erreur de prédiction obtenue est significative. Il est important de comprendre comment elle a été obtenue ou pour être précis, si elle a été obtenue à la « sortie du sac ». Seule une partie de l'ensemble de données de formation a été utilisée pour développer ce modèle. Ce modèle, à son tour, constitue 70 % de l'ensemble de données source. Environ 60 % de l'ensemble de données de formation a été utilisé pour construire ce modèle et 40 % n'ont pas été utilisés. Ces 40 % de données sont appelés « Sortie du sac ». L'erreur de prédiction de 15,97 % a été reçue sur ces données.

Passer à autre chose.

Le tableau de contingence ou la matrice d'erreurs est interprété de la manière suivante. 

La ligne du haut contient les positions courtes et longues prévues. La colonne de gauche est une colonne avec les positions courtes et longues réelles, reçues de l'indicateur ZigZag pour les données historiques.

La valeur de 4960 avec les coordonnées (0,0) est un nombre de positions courtes et longues correctement prédites. La valeur suivante de 1163 est le nombre de positions courtes prédites comme des positions longues.

La valeur de 858 avec les coordonnées (1,0) est un nombre de positions longues prédites comme des positions courtes. La valeur de 5677 est le nombre de positions longues correctement prédites.

Ensuite, nous passons aux résultats de la modélisation.

Voici quelques lignes du grand tableau comprenant toutes les variables du modèle. Il s'agit d'un tableau de l'importance des variables.


01MeanDecreaseAccuracyMeanDecreaseGini
MA_eur.5.dif142.9741.8554.86 321.86
EUR.dif337.2146.3851.80177.34
RSI_eur.14 37.7040.1150.75254.61
EUR.dif2 24.6631.6438.24110.83
MA_eur.10.dif122.9425.3931.48193.08
CHF.dif3  22.9123.4230.1573.36
MA_chf.5.dif1  21.8123.2429.56135.34

Table 3. Importance des variables dans le modèle de forêt aléatoire

Il existe plusieurs évaluations de l'importance des variables. Le mot « importance » reflète ici le degré d'influence d'une certaine variable sur la variable cible. Plus la valeur est élevée, plus la variable est « importante ».

Ce tableau fournit des données pour exclure les valeurs les moins significatives du modèle. En statistique et en classification en particulier, plus un modèle est simple, mieux c'est, tant que la précision du modèle n'est pas sacrifiée.

Le bouton Erreurs est la dernière chose importante dans l'onglet Modèle. En appuyant dessus, nous recevrons la Fig.8.

Fig. 8. Dépendance de l'erreur de modélisation au nombre d'arbres

Fig. 8. Dépendance de l'erreur de modélisation au nombre d'arbres

6. Efficacité du modèle

L'évaluation de l'efficacité du modèle est effectuée dans l'onglet Évaluer, où Rattle donne accès à l'ensemble des options à cette fin.

Nous utiliserons la matrice d'erreurs, comme on l'appelait auparavant la table de contingence, dans la liste des options disponibles d'évaluation de l'efficacité du modèle.

Lorsque vous passez de l'onglet Modèle à l'onglet Évaluer, le dernier des modèles créés sera automatiquement signalé. Cela correspond au principe général de travail dans Rattle : nous créons et mettons en place un modèle puis explorons son efficacité dans l'onglet Évaluer.

Pour l'évaluation d'un modèle, l'ensemble de données pour effectuer le contrôle doit être spécifié. La ligne d'options suivante dans l'interface Rattle est un ensemble de sources de données alternatives.

Les quatre premières options de Données correspondent au fractionnement de l'ensemble de données spécifié dans l'onglet Données. Les options sont Formation, Validation, Test et Complet (l'ensemble). Le fractionnement de l'ensemble de données en ensembles de formation, de validation et de test a déjà été discutée.

La première option est censée valider le modèle sur l'ensemble de données de formation. Ce n'est généralement pas une bonne idée. Le problème avec l'évaluation du modèle sur l'ensemble de données de formation est que le modèle a été construit sur cet ensemble de données. Là, le modèle donnera un bon résultat car c'était au départ ce que nous essayions d'atteindre. Le modèle est conçu pour être utilisé sur des données auparavant inconnues.

Une approche est nécessaire pour assurer une bonne performance du modèle sur de nouvelles données. Dans le même temps, nous obtenons une évaluation réelle des erreurs du modèle, qui reflète la différence entre la prédiction du modèle et les données factuelles. Ce taux d'erreur sur un ensemble de données inconnu, et non celui de formation, est le meilleur moyen d'évaluer l'efficacité du modèle.

Nous utilisons l'ensemble de données de validation pour vérifier l'efficacité du modèle lors de sa création et de sa mise en place. Par conséquent, une fois le modèle créé, son efficacité sera vérifiée sur cet ensemble de données de vérification. Certaines options de configuration pour la création d'un modèle peuvent être modifiées. Nous comparons le nouveau modèle avec l'ancien avec son efficacité sur la base de l'ensemble de données de vérification. En ce sens, l'ensemble de données de vérification est utilisé dans la modélisation pour développer le modèle final. Nous avons donc toujours une estimation décalée de l'efficacité de notre modèle si nous nous appuyons sur l'ensemble de données de vérification.

L'ensemble de données de test est celui qui n'a pas du tout été utilisé pour créer le modèle. Dès que nous avons identifié « le meilleur » modèle basé sur l'ensemble de données de formation et de vérification, nous pouvons estimer l'efficacité du modèle sur l'ensemble de données de test. Il s'agit de l'évaluation de l'efficacité attendue pour toute nouvelle donnée. La quatrième option utilise l'ensemble de données complet pour évaluer le modèle. L'ensemble de données complet est un ensemble de données de formation, de vérification et de test. Ce n'est rien d'autre que de la curiosité et certainement pas une tentative d'obtenir des données précises.

Une autre opportunité disponible en tant que source de données fournie via l'exemple d'entrée. Il est disponible si l'option Score est sélectionnée comme type d'évaluation. Dans ce cas, une fenêtre de saisie de données supplémentaires s'ouvrira.

La matrice d'erreur sera utilisée pour prédire la variable cible catégorielle.

La matrice d'erreur montre les résultats factuels par rapport à ceux prédits. Il y a deux tables. La première montre les résultats quantitatifs et la seconda montre les résultats en pourcentage.

La matrice d'erreur se trouve dans l'onglet Évaluer de Rattle. Appuyer sur « Exécuter » implémentera le modèle sélectionné sur l'ensemble de données spécifié pour prédire le résultat de chaque observation dans cet ensemble de données. Ensuite, les prédictions sont comparées aux observations factuelles.

La figure 9 représente la matrice d'erreur pour le modèle de forêt aléatoire calculée précédemment.

Fig. 9. Résultat de l'évaluation du modèle de forêt aléatoire

Fig. 9. Résultat de l'évaluation du modèle de forêt aléatoire

La figure montre que l'erreur moyenne est de 0,167, soit 16,7 %. Au stade de la formation, l'erreur de prédiction était de 15,97 %. Nous pouvons considérer ces valeurs comme égales.

Effectuons un calcul pour l'ensemble de données de test. Le résultat est le suivant :

Matrice d'erreur pour le modèle Forêt aléatoire sur TC [test] (comptes) :


Prédits
Prédits
Réels  01
01016256
11931248

 Table 4. Matrice d'erreur pour le modèle de forêt aléatoire en termes absolus (ensemble de données de test)


Matrice d'erreur pour le modèle Forêt aléatoire sur TC [test] (proportions) :


Prédits
Prédits

Réels01Erreur
00.370.090.20
10.070.460.13

Table 5. Matrice d'erreur pour le modèle de forêt aléatoire en termes relatifs (ensemble de données de test)


Erreur globale : 0,1654994, erreur de classe moyenne : 0.1649244

L'erreur de prédiction est de 16,4 %.

Les trois chiffres sont approximativement égaux, ce qui est le signe d'un résultat raisonnable de la modélisation.

Veuillez noter que l'efficacité des modèles calculés par Rattle doit être vérifiée dans le Testeur de stratégie de МetaТrader 4 ou MetaTrader 5. Ensuite, il devrait être testé sur un compte démo et un compte réel avec de petits lots. Ce n'est qu'après tous les tests que nous pouvons tirer des conclusions définitives sur le modèle.



7. Améliorer le modèle

Lorsque nous avons exploré la corrélation de la pseudo-variable ZZ.35 avec les prédicteurs, nous avons découvert qu'un nombre important de prédicteurs avaient une faible corrélation avec la variable cible.

Supprimons les prédicteurs dont le coefficient de corrélation est inférieur à 0,01. Pour ce faire, définissez les prédicteurs pertinents sur Ignorer dans l'onglet Données et répétez le calcul du modèle de forêt aléatoire dans l'onglet Modèle.

Nous obtenons le résultat suivant :

  • erreur de prédiction sortie du sac = 15,77 % ;
  • erreur de prédiction pour l'ensemble de données de validation = 15,67 % ;
  • erreur de prédiction pour l'ensemble de données de test = 15,77 %.

Bien que l'erreur ait été réduite de manière insignifiante, l'écart entre les erreurs de prédiction pour différents ensembles de données a diminué. C'est un signe de la stabilité du modèle.

Vous pouvez continuer à supprimer les prédicteurs en suivant le tableau de corrélation. L'efficacité du modèle peut être améliorée, c'est-à-dire l'erreur de prédiction diminuée, en utilisant les données du tableau d'importance des prédicteurs qui a été obtenu dans le calcul du modèle.

Dans tous les cas, la suppression des prédicteurs peut être effectuée jusqu'à ce que la suppression d'un autre prédicteur entraîne une détérioration de l'efficacité du modèle. Vous pouvez vous arrêter à ce stade car vous disposez d'un modèle minimal et le plus efficace pour un nombre donné de prédicteurs.


8. Utiliser le modèle dans MetaTrader 4

En théorie, le trading avec Rattle peut être organisé de la manière suivante. Les données d'entrée pour Rattle dans Excel sont préparées par des outils externes pour la période du jour et de la nuit. À la fermeture de l'échange, un trader obtient les prix requis et les met dans le fichier source. Quelques minutes plus tard, les prévisions du lendemain sont prêtes et utilisables dès l'ouverture.

Le terminal МetaТrader 4 ou son analogue est nécessaire pour le trading intrajournalier.

Pour organiser un trading automatisé ou semi-automatisé à l'aide de Rattle, les éléments suivants sont nécessaires :

  • un modèle préalablement formé, qui a été enregistré en tant qu'espace de travail R ;
  • une bibliothèque de coopération du terminal et de R ;
  • le code dans R, qui transmet chaque nouveau bloc de données au modèle, obtient le résultat et renvoie le résultat de la modélisation au terminal.

L'entraînement de l'un des six modèles disponibles dans Rattle a été examiné ci-dessus. Le nombre de modèles de classification disponibles dans R passe à 150 mais Rattle ne leur est d'aucune utilité.

La bibliothèque d'interaction de R et du terminal МetaТrader 4 se trouve dans la CodeBase : mt4R pour le nouveau MQL4.

Le code en R, qui correspond au modèle entraîné est dans le journal (l'onglet Journal). Toutes les actions entreprises lors du développement du modèle sont enregistrées sous forme de code dans R. C'est ce qui doit être utilisé dans le trading réel.


Conclusion

Les traders débutants et expérimentés trouveront cet article utile pour l'évaluation préliminaire et la sélection d'un système de trading.

En utilisant le Rattle, le principal défi intellectuel dans le développement d'un système de trading est le bon choix de la variable cible et des prédicteurs nécessaires. Les traders expérimentés ont déjà des connaissances dans ce domaine et les novices auront la pratique nécessaire avec Rattle.


Traduit du russe par MetaQuotes Ltd.
Article original : https://www.mql5.com/ru/articles/1165

Fichiers joints |
Article.zip (6598.05 KB)
Pourquoi l'hébergement virtuel sur MetaTrader 4 et MetaTrader 5 est meilleur que les VPS habituels Pourquoi l'hébergement virtuel sur MetaTrader 4 et MetaTrader 5 est meilleur que les VPS habituels
Le réseau Virtual Hosting Cloud a été développé spécialement pour MetaTrader 4 et MetaTrader 5 et présente tous les avantages d'une solution native. Bénéficiez de notre offre gratuite de 24 heures - testez un serveur virtuel dès maintenant.
Le MQL5 Cookbook : Gestion des événements du graphique personnalisés Le MQL5 Cookbook : Gestion des événements du graphique personnalisés
Cet article examine les aspects de la conception et du développement d'un système d'événements de graphique personnalisé dans l'environnement MQL5. Un exemple d'approche de la classification des événements peut également être trouvé ici, ainsi qu'un code de programme pour une classe d'événements et une classe de gestionnaire d'événements personnalisés.
Le MQL5 Cookbook : Manipulation BookEvent Le MQL5 Cookbook : Manipulation BookEvent
Cet article considère BookEvent - une profondeur d'événement du marché, et le principe de son traitement. Un programme MQL, gérant les états de Profondeur du marché comme exemple. Il est écrit en utilisant l'approche orientée objet. Les résultats de la manipulation sont affichés à l'écran sous forme de panneau et de niveaux de profondeur de marché.
Le MQL5 Cookbook : Traitement de l'événement de TradeTransaction Le MQL5 Cookbook : Traitement de l'événement de TradeTransaction
Cet article considère les capacités du langage MQL5 du point de vue de la programmation par évènement. Le plus grand avantage de cette approche est que le programme peut recevoir des informations sur la mise en œuvre progressive d'une opération de trade. L'article contient également un exemple de réception et de traitement d'informations sur les opérations de trade en cours à l'aide du gestionnaire d'événements TradeTransaction. À mon avis, une telle approche peut être utilisée pour copier des transactions d'un terminal à un autre.