L’algorithme de génération de ticks dans le testeur de stratégie du terminal MetaTrader 5
Création d’Expert Advisors - systèmes de trading automatisés dans MQL5
Le terminal MetaTrader 5 contient un environnement de développement intégré pour le développement de stratégies entièrement automatisées (robots de trading), qui peuvent effectuer des trades sans aucune intervention humaine. Un autre nom pour ces robots de trading est Expert Advisors. Les Expert Advisors et les indicateurs techniques du terminal MetaTrader 5 sont écrits en utilisant le MQL5 langage, qui englobe tous les avantages des langages de programmation modernes.
- la vitesse d’exécution ;
- la prise en charge de la programmation orientée objet (POO) ;
- la possibilité de déboguer.
La possibilité de déboguer des programmes dans MQL5 vous permet de créer un code avec le niveau de sécurité maximum possible, mais bien que nécessaire, ce n’est pas la seule condition requise pour le développement d’un système de trading rentable. Les systèmes de trading, qui sont capables de démontrer des résultats positifs tout au long d’un grand intervalle de données historiques, sont appelés robustes, qui est dérivé du mot anglais « robust », qui signifie tolérant aux défauts et aux erreurs.
Test des stratégies de trading
Avant de confier votre capital à un Expert Advisor, vous devez vous assurer que ses règles d’ouverture et de clôture des positions, ainsi que ses règles de gestion de l’argent, permettent l’attente de bénéfice. La façon la plus simple de tester cela est de simuler le travail de l’Advisor à l’aide des données historiques disponibles.
Le terminal client MetaTrader 5 dispose d’un composant intégré spécial, un testeur de stratégie pour obtenir les résultats du travail de l’Advisor avec des données historiques. Le processus d’une exécution unique de l’Expert Advisor sur un intervalle de dates est appelé le test de l’Expert Advisor. Ce test unique nous fournit une grande quantité d’informations utiles, nécessaires pour tirer des conclusions sur la robustesse de l’Expert Advisor.
Mais pour pouvoir faire confiance à ces résultats, le processus de test doit modéliser le plus fidèlement possible l’environnement actuel dans lequel l’Expert Advisor est exécuté. Le testeur MetaTrader 5 utilise une modélisation des prix tick par tick, en utilisant les valeurs historiques des spreads pour chaque instrument, sur lequel une opération de trading a lieu.
Un peu d’histoire sur le testeur de stratégie
MetaTrader 3
- Modèle de quatre prix - le prix est passé consécutivement par les étapes d’ouverture, de bas, de haut et de clôture pour la bougie haussière, et pour la bougie baissière, il est passé par Open, High, Low et Close ;
- Le modèle "Every 1 point" - utilise un modèle de vague 3-5-3, dans lequel le prix passe consécutivement par une vague de trois, puis une vague de cinq, puis une autre de trois, avec un incrément de 1 point ;
- Le modèle "Spread / 2" - utilise le même modèle que "Every 1 point", mais l’incrément de prix est la moitié du spread, indiqué par l’utilisateur.
La modélisation des prix a toujours été basée sur les barres de la trame temporelle testée, les informations provenant de trames temporelles inférieures n’ont pas été utilisées. Le testeur du terminal MetaTrader 3 avait de nombreuses lacunes, notamment une vitesse de test lente, une faible précision et le manque d’optimisation de l’Expert Advisor par les paramètres d’entrée.
MetaTrader 4
Le terminal MetaTrader 4 a remplacé le troisième terminal et a inclus un nouveau langage compilé MQL4 (le précédent MQL-II a été interprété), ainsi qu’une approche absolument nouvelle des tests. Maintenant, les tests peuvent être effectués en trois modes :
- Chaque tick (Every Tick) - génération de ticks dans la bougie, permet une modélisation maximale du travail d’Expert Advisor au trading réel, dans l’environnement de test ;
- Points de contrôle (Checkpoints) - un compromis entre la précision et la vitesse des tests;
- Par prix d’ouverture (Open Price) - le lancement de l’Expert Advisor ne se fait qu’à l’ouverture de la bougie, cela permet une évaluation très rapide de la stratégie.
Une différence importante par rapport au testeur du troisième terminal était que la stratégie de test du terminal MetaTrader 4 utilisait les données de prix de la plus jeune trame temporelle disponible pour la simulation de trading. Par conséquent, avec la présence de l’historique des minutes, tout au long de l’intervalle testé, les résultats des tests sont au maximum proches des résultats obtenus en ligne. En l’absence des trames temporelles sous-jacentes, la simulation de l’évolution des prix dans la barre est générée de la même manière que dans le terminal testeur de MetaTrader 3.
De plus, nous avons eu l’occasion d’effectuer une optimisation par énumération directe des paramètres d’entrée, ainsi qu’à l’aide d’un algorithme génétique. Cela nous a donné l’occasion d’accélérer considérablement le processus d’optimisation, en particulier pour les stratégies avec un grand nombre de paramètres d’entrée. Il est maintenant possible d’effectuer les tests réels dans le régime visuel. C’était un grand pas, qui a été apprécié par les traders.
Le nouveau terminal MetaTrader de la 5ème génération est basé sur l’expérience acquise lors de la conception des terminaux précédents, et cela s’applique au testeur de stratégie. Il est maintenant possible de tester des stratégies multi-devises, c’est-à-dire des stratégies qui sont tradées simultanément sur plusieurs instruments.
L’optimisation de la stratégie peut désormais être effectuée non seulement sur tous les cœurs de processeur disponibles, mais également sur des agents distants, situés sur d’autres ordinateurs du réseau local et du réseau Internet mondial. Cela vous permet de développer les puissances du testeur et d’effectuer des calculs cloud, qui étaient auparavant inaccessibles, directement dans le langage de MQL5.
Mais pour une compréhension de base du processus de test dans le terminal MetaTrader 5, il est essentiel de pouvoir comprendre comment se déroule la modélisation des prix dans un testeur de stratégie.
Algorithme de génération de ticks
Strategy Tester du terminal MetaTrader 5 n’utilise qu’un seul mode de modélisation des prix dans les tests - la génération de ticks sur la base des données historiques existantes sur des trames temporelles infimes des symboles utilisés. Les autres modes de simulation dans MetaTrader 4 ont été supprimés car malgré leur vitesse élevée, ils n’ont pas réussi à fournir une grande précision de test.
L’utilisation d’une trame temporelle M1 dans le testeur permet une simulation très précise de l’évolution des prix, avec un nombre minimum d’erreurs, contrairement à la simulation des ticks basée sur des trames temporelles seniors. En conséquence, les erreurs dans la modélisation des prix dans le testeur de stratégie MetaTrader 5 sont triviales, et les différences entre le prix simulé et le prix qui a eu lieu dans la réalité, ne peuvent être que dans l’échelle d’une barre de minute.
La possibilité d’effectuer une optimisation sur des agents locaux et distants, dans cette approche, peut compenser l’augmentation du temps de test. La génération de ticks est basée sur les entrées de minute mises en cache dans un format entier. Par conséquent, la génération de ticks se fait très rapidement.
Les barres de toutes les trames temporelles requises sont formées dans la base de données historiques du testeur de la manière habituelle (tout comme dans le terminal client) avec la réception des ticks générés. Le volume de tick 1 de la barre minute n’est soumise à aucune génération - elle peut être écrite avec la valeur Close.
Une barre avec 2 ticks n’est pas non plus générée - d’abord sa valeur de tick est enregistrée comme Open, puis un tick avec une valeur de Close est enregistrée.
Une barre avec 3 ticks est générée selon un schéma, pour les barres à trois ticks, il n’y a que 4 modèles de développement de barres :
- Je suis allé dans une direction et je suis revenu au niveau de Open
- Je suis allé d’un côté, je suis retombé et j’ai atteint un niveau Open
- Est allé dans une direction, est retombé, mais n’a pas atteint le niveau de Open
- Plusieurs points dans une direction
Point d’appui
Si la barre a plus de 3 ticks, les points d’appui sont d’abord générés. Le nombre de points d’appui ne peut pas être supérieur au volume de tick. Le cours d'ouverture n'est pas pris en compte dans le décompte des points d'appui, puisqu'il s'agit du point de départ. Nombre maximum de points d'appui - 11.
Les points d'appui sont répartis entre l’ombre d’ouverture, l’échelle de la bougie et l’ombre de la bougie de fermeture.
Selon le nombre de ticks, la distribution des points d’appui est la suivante (ombre d’ouverture - la portée de la bougie - ombre de fermeture) :
3 - 5 - 3Si la bougie n’a pas une des ombres, les points d’appui de ces ombres sont donnés à la magnitude des bougies.
2 - 6 - 2
2 - 5 - 2
2 - 4 - 2
2 - 3 - 2
1 - 4 - 1
1 - 3 - 1
1 - 2 - 1
1 - 1 - 1
La portée de la bougie est générée par un nombre impair de points d’appui. Si la portée a un nombre pair de points d’appui, alors le point supplémentaire "extra" est donné à l’une des ombres à condition que l’ombre ait déjà 2 points. Sinon, le point "extra" disparaît tout simplement.
Pour une bougie baissière (noire), la génération de points d’appui sur le modèle 3-5-3 est similaire :
Si la bougie est un doji, c’est-à-dire Close == Open, alors les bougies précédentes sont analysées, si la bougie précédente se levait, alors ce doji est considéré comme une bougie vers le bas.
Si l’ombre est générée à l’aide de trois points d'appui et de valeurs entières 3 / 4 la taille de l’ombre et 1 / 2 la taille de l’ombre sont égales (cela se produit lorsque la différence entre Ouvert et Bas ou Ouvert et Haut n’est pas supérieure à 2 points), alors la génération de l’ombre change de la manière suivante :
Si l’ombre est générée par deux points d’appui, les points de commande sont disposés de la manière suivante :
Formation d’un terrain de points d’appui de Bas en Haut
La portée de la bougie est générée par des vagues impulsionnelles, le nombre de vagues est calculé comme suit :
number of waves = (number of support points in the scope + 1) / 2.
Par exemple, si le nombre de points d’appui dans la portée de la bougie est égal à 5 (Figure 3-5-3), alors 3 vagues seront générées = (5 +1) / 2.
Chaque vague d’impulsion a un pas de longueur en points, qui est calculé par la formule :
step=(High-Low-1)/(quantity of waves)+1
Par exemple, la portée des bougies (Haut - Bas) = (1,3113 - 1,3100) = 0,0013 est de 13 points, tandis que le pas de longueur d’onde = (13-1) / 3 +1 = 5 points.
Après le pas d'impulsion, les points doivent être réduits d'un point. Plus loin dans le cycle, les positions des points d’appui sont calculées (pour une bougie haussière) :
prev=low
cycle
n1=prev+step
n2=prev+step-1
prev=n2
où :
- n1 - premier point d’appui d’impulsion
- n2 - deuxième point d’appui - le point de retour en arrière.
Appliquons cet algorithme à une bougie haussière dans un schéma 3-5-3, où le nombre de vagues est égal à 3 et le pas = 5 points, point = 0,0001 :
- Le premier pas. Variable prev = Low = 1,3100, entrez dans le cycle.
- Calculez les données de la première vague
- Nous calculons la position du point n1 = précédent + pas = 1,3100 + 5 * 0,0001 = 1,3105.
- Nous calculons la position du point n2 = précédent + pas-1 = 1,3100 + 5 * 0,0001-1 * 0,0001 = 1,3104 ;
- Attribuez la valeur n2: prev = 1,3104 à la variable prev;
- Calculer les données pour la deuxième vague
- Calculer la position du point n1 = précédent + pas = 1,3104 + 5 * 0,0001 = 1,3109.
- Nous calculons la position du point n2 = précédent + pas-1 + 5 = 1,3104 * 0,0001-1 * 0,0001 = 1,3108 ;
- Attribuez la valeur de n2: prev=1.3108 à la variable prev ;
- Calculer les données pour la troisième vague
- Nous calculons la position du point n1 = précédent + pas = 1,3108 + 5 * 0,0001 = 1,3113.
- Quittez le cycle, prev = n2 = 1,3112
Tout ce qui précède est démontré pour plus de clarté sur l’image :
Le calcul des points d’appui pour les bougies baissière se fait de la même manière :
prev=high
cycle
n1=prev-step
n2=prev-step+1
prev=n2
La génération de ticks est effectuée en fonction des points d’appui
Les ticks intermédiaires entre les points d’appui sont générés selon les règles suivantes :- Si le nombre de ticks est supérieur au nombre de points entre les points de support, alors une "scie" est générée.
- S’il y a un certain nombre de points entre les points d’appui, une séquence linéaire de ticks est générée.
Vérifier la séquence des ticks
En conclusion, comparons l’historique des ticks, enregistré depuis le serveur MetaQuotes-Demo le 13 mai 2010 de 13h00 à 13h30, avec la séquence de ticks générée par le testeur dans le terminal client MetaTrader 5. Un Expert Advisor a été utilisé pour enregistrer les ticks dans le journal de l’agent :
//+------------------------------------------------------------------+ //| Write_Ticks.mq5 | //| Copyright Copyright 2010, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ input datetime start=D'2010.05.13 13:00:00'; input datetime end=D'2010.05.13 14:00:00'; //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { MqlTick tick; datetime time=TimeCurrent(); //--- SymbolInfoTick(Symbol(),tick); Print(time,tick.bid); //--- if(time>end) ExpertRemove(); //--- }
L’historique des ticks a été collecté en ligne, à l’aide de l’indicateur décrit dans l’article Création d’indicateurs de ticks.
Les deux séquences de ticks - celle du testeur et celle stockée dans un fichier - sont représentées sur le graphique. Les ticks obtenus lors des tests sont représentés par une couleur verte, et les ticks obtenus sur le serveur de trading MetaQuotes-Demo, et enregistrés dans l’indicateur de fichier, sont représentés par une couleur bleue.
Vous pouvez pointer la souris vers n’importe quel point du graphique et lire des informations sur chaque tick dans les fenêtres contextuelles :
- origine (Testeur ou Historique) ;
- heure du tick ;
- prix du tick.
Le graphique montre clairement que la qualité des ticks de simulation dans le terminal client MetaTrader 5 testeur permet de tester de manière adéquate les Expert Advisors sur les données historiques.
Traduit du russe par MetaQuotes Ltd.
Article original : https://www.mql5.com/ru/articles/75
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Vous acceptez la politique du site Web et les conditions d'utilisation