![MQL5 - Langage des stratégies de trading intégré au terminal client MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
.
Voici la vidéo que j'ai promis de publier. La qualité de l'image est médiocre, mais cela n'empêche pas de voir les délais de réponse.
En fait, il y a moins de retard dans le terminal. Quand l'enregistreur est en marche, tout est deux fois plus lent. Le processeur charge aussi beaucoup plus.
Il n'est donc pas possible de se faire une idée totalement objective de la vitesse de réaction à partir de cette vidéo, mais elle montre clairement un schéma entre le taux de rafraîchissement des fenêtres et leur taille.
(C'est pourquoi j'ai fait plusieurs fenêtres de différentes tailles).
Je pense que j'ai trouvé la raison exacte du ralentissement de la réponse de l'image. C'est l'appel constant de la fonction ColorToARGB(). A chaque événement et à chaque pixel, j'appelle cette fonction. Au lieu de calculer les couleurs une fois et de les utiliser toutes prêtes, je les recalcule tout le temps.
Je pense que c'est le but.
P.S. J'ai oublié d'ajouter que le nombre total d'objets de toutes les fenêtres est de 35.
.
Voici la vidéo que j'ai promis de publier. La qualité de l'image est médiocre, mais cela n'empêche pas de voir les délais de réponse.
En fait, il y a moins de retard dans le terminal. Quand l'enregistreur est en marche, tout est deux fois plus lent. Le processeur charge aussi beaucoup plus.
Par conséquent, il n'est pas possible de se faire une idée totalement objective de la vitesse de réaction à partir de cette vidéo, mais je peux clairement voir un schéma entre le taux de rafraîchissement de la fenêtre et la taille de la fenêtre.
(C'est pourquoi j'ai fait plusieurs fenêtres de différentes tailles).
Je pense que j'ai trouvé la raison exacte du ralentissement de la réponse de l'image. C'est l'appel constant de la fonction ColorToARGB(). A chaque événement et à chaque pixel, j'appelle cette fonction. Au lieu de calculer les couleurs une fois et de les utiliser toutes prêtes, je les recalcule tout le temps.
Je pense que c'est le but.
P.S. J'ai oublié d'ajouter que le nombre total d'objets de toutes les fenêtres est de 35.
Est-il possible de consulter le code source ? Pour moi, pour mon expérience.
Est-il réaliste d'accélérer le rendu dans Canvas avec OpenCL ?
Oui. OCL a la capacité de paralléliser le traitement + la capacité d'opérer sur des vecteurs - ce qui accélère le processus de rendu/de superposition.
Pour en savoir plus sur l'utilisation des vecteurs, consultez l'article de Mathemat https://www.mql5.com/ru/articles/407.
Oui. OCL offre la possibilité de paralléliser le traitement + la possibilité de travailler avec des vecteurs - ce qui accélère le processus de dessin/couche.
Pour en savoir plus sur l'utilisation des vecteurs, consultez l'article de Mathemat https://www.mql5.com/ru/articles/407.
Avez-vous comparé la vitesse de Erase() de CCanvas et de la boucle PixelSet() réalisée dans OpenCl ? En théorie, avec une bonne accélération, vous pouvez faire du code de dessin idiot sans mettre en cache les résultats intermédiaires et autres complexités.
Au fait, est-ce que vous mélangez les couches en utilisant cette formule ?
Oui, la formule est tirée de wikipedia, pour chaque composante de couleur : Résultat = Arrière-plan + (Avant-plan - Arrière-plan) * Alpha ;
A propos, il y a un problème avec l'effacement dans l'OCL. Il n'y a pas d'analogue de memset (contrairement à CUDA). C'est pourquoi je dois maintenant faire un effacement dans l'hôte et copier le tableau nettoyé via CLBufferWrite, ce qui n'est certainement pas plus rapide qu'un simple effacement.
D'autre part, j'ai essayé de créer un tableau de tâches pour les unités de travail en écrivant 1 point dans le tableau mais je ne me souviens pas de la vitesse - cela semblait plus lent que la méthode précédente.
Et dans OCL 1.2 il y aclEnqueueFillBuffer() qui fait cela => selon la syntaxe MQL il devrait y avoir CLBufferFill()
Mais ce wrapper n'est pas implémenté (car la version 1.1 est portée).
Oui, la formule est tirée de wikipedia, pour chaque composante de couleur : Résultat = Arrière-plan + (Avant-plan - Arrière-plan) * Alpha ;
A propos, il y a un problème avec l'effacement dans l'OCL. Il n'y a pas d'analogue de memset (contrairement à CUDA). C'est pourquoi je dois maintenant faire un effacement dans l'hôte et copier le tableau nettoyé via CLBufferWrite, ce qui n'est certainement pas plus rapide qu'un simple effacement.
D'autre part, j'ai essayé de créer un tableau de tâches pour les unités de travail en écrivant 1 point dans le tableau mais je ne me souviens pas de la vitesse - cela semblait plus lent que la méthode précédente.
Et dans OCL 1.2 il y aclEnqueueFillBuffer() qui fait cela => selon la syntaxe MQL il devrait y avoir CLBufferFill()
Mais ce wrapper n'est pas implémenté (car la version 1.1 est portée).
Chez la victime anglaise, la formule est plus intéressante, vous pouvez mélanger deux couches translucides. Il est possible de réaliser une interface translucide et d'autres jolies choses.
Je n'en ai pas eu besoin dans mon cas, tout se mélange correctement. Tout ce qui se trouve sous la couche A peut être considéré comme le substrat, même s'il est recouvert de la couche B, à travers laquelle transparaît le substrat lui-même.