Salut à tous les traders ! Aujourd'hui, je vais vous parler d'un pseudo-indicateur qui n'utilise pas de buffers. Son but principal ? Démontrer la technique des calculs multi-threads. Cet indicateur peut émettre des commandes pour des calculs longs, le tout effectué dans des fils séparés, créés pour les objets de graphique avec un expert conseiller dédié.
Cet exemple s'adresse aux utilisateurs possédant des connaissances en programmation.
L'idée vient d'un article sur les WebRequests Asynchrones Multi-Threads. Vous pouvez y trouver tous les détails techniques sur la façon dont les messages (événements) sont dispatchés et comment les ressources sont utilisées pour transmettre des données entre les graphiques.
L'indicateur utilise une mise en œuvre plus "compacte" de la technique, en utilisant des objets de graphique au lieu de fenêtres de graphique complètes. Vous trouverez plus de détails sur le forum.
Assurez-vous que l'expert conseiller de travail - MultiThreadedObjectWorker - est compilé avant de compiler et d'exécuter l'indicateur lui-même - MultiThreadedIndicator.
Paramètres d'entrée
- sinput int _Cores = 1; - nombre de threads à utiliser (ne dépassez pas le nombre de cœurs physiques disponibles)
- sinput int _Tasks = 1; - nombre de pseudo-tâches à exécuter en parallèle (utilisez un nombre supérieur au nombre de cœurs pour voir la performance parallèle)
- input string MultiThreadedScriptPath = "Experts\MultiThreadedObjectWorker.ex5"; - doit indiquer le chemin de l'expert conseiller de travail
Chaque pseudo-tâche calcule une série de fonctions sqrt (à des fins de démonstration uniquement). Cela peut être modifié dans vos projets MQL pour intégrer d'autres algorithmes gourmands en temps.
Pour démarrer les calculs parallèles après que l'indicateur soit attaché à un graphique, il suffit de cliquer sur le graphique. Toutes les phases importantes du processus (tant dans les programmes MQL5 clients que dans les travailleurs) sont enregistrées.
Le programme MQL client émettant des requêtes de calcul parallèles peut être non seulement un indicateur, mais aussi un expert conseiller. Les scripts et services ne sont pas supportés par la plateforme.
En utilisant le fichier d'en-tête MultiThreadedObjectWorker.mqh, vous devrez implémenter votre propre gestion des données entre le client MQL5 et l'expert conseiller de travail.
Voici deux exemples des logs.

Exécution de 4 tâches sur 2 cœurs (2 threads en parallèle)
Lorsque l'on exécute 4 tâches sur 2 cœurs, cela génère 2 threads parallèles, ce qui permet une exécution deux fois plus rapide que sur 1 cœur (comparez 3354ms ci-dessus et 6240ms ci-dessous).

Exécution de 4 tâches sur 1 cœur (thread unique - programme MQL standard)
Plus de cœurs, plus de vitesse !
Articles connexes
- Découvrez l'indicateur Tymen STARC Bands MTF pour MetaTrader 5
- Découvrez l'indicateur 3 en 1 Stochastic pour MetaTrader 5
- Découvrez l'Indicateur Donchian Ultimate pour MT5 : Un Outil Indispensable pour les Traders
- Découvrez le 3XMA_Ichimoku : Un Indicateur Incontournable pour MetaTrader 5
- Découvrez la classe CEROnRingBuffer pour calculer l'Efficiency Ratio sur MetaTrader 5