Test du nouveau compilateur MQL5 pour les plateformes x64 - calculs 2 à 10 fois plus rapides ! - page 2
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
Par exemple, les communications inter-terminales.
Eh bien, si vous le déformez comme ça, alors bien sûr, la DLL est une fonctionnalité utile...
Mais j'ai personnellement décidé, pour cette tâche précise, que je n'avais pas vraiment besoin d'une DLL pour cela. Pour l'instant, je pense à un EA qui prendrait les cotations d'une société de courtage et enverrait des signaux à une autre, et qui n'a même pas MetaTrader. (DucaCopi, d'ailleurs, je me demande si MetaQuotes sera d'accord avec ce vénérable courtier).
Je pensais plutôt à DLL. Mais il a décidé que les fichiers partagés sont beaucoup plus sûrs et plus raisonnables. Laissez MetaTrader écrire les signaux dans le fichier. Et laissez un autre MetaTrader (ou JForex ou quelqu'un d'autre) les lire et les exécuter.
Au fait, j'ai réfléchi aux références des tableaux...
Renat, je fais une suggestion :
Puisque nous avons une bibliothèque standard, ne devrions-nous pas ajouter une variante de la fonction OnCalculate() avec le prototype suivant :
intOnCalculate(constint rates_total,//taille de la série chronologique d'entrée
constint prev_calculated,// barres traitées lors de l'appel précédent
const CiTime* ptTime,// Temps
const CiOpen* poOpen,// Ouvrir
const CiHigh* phHigh,// Haut
const CiLow* plLow,// Basse
const CiClose* pcClose,// Fermer
const CiTickVolume* ptvTickVolume,// Volume du Tick
const CiRealVolume* prvRealVolume,// Volume réel
const CiSpread* psSpread// Écartèlement
) ;
?
À mon avis, cela nécessiterait de très petites modifications dans MetaTrader, mais d'un autre côté, cela fournit simplement des pointeurs vers des tableaux, qui peuvent être transmis aux classes de gestionnaires sans être copiés. Et l'idée de la bibliothèque standard elle-même est popularisée.
Nous avons obtenu les premiers résultats de la comparaison des performances de l'ancien et du nouveau compilateur sur l'exemple d'un grand projet réel (~20 000 lignes de code source).
Résultats du temps d'exécution du programme compilé avec l'ancienne version du compilateur (4 exécutions) :
Résultats du temps d'exécution d'un programme compilé dans la nouvelle version du compilateur (4 exécutions) :
*Les deuxième et troisième exécutions du programme ont été réalisées avec un cache chauffé - comme on le voit, le cache chauffé augmente la productivité de 15 à 30 %.
Comme vous pouvez le constater, les résultats sont meilleurs avec le nouveau compilateur : il a fallu ~6,4 secondes pour analyser plus de 20000 transactions et ordres lors de la première exécution et ~5,4 secondes lors de la seconde, soit un gain de performance de 15-20%.
L'amélioration des performances aurait pu être plus importante, mais la majeure partie du temps est occupée par des appels de fonctions système.
Le nouveau compilateur n'a détecté aucune erreur dans le projet, qui compte plus de 20 000 lignes de code source. C'est un excellent résultat, compte tenu du fait que ce projet a été créé pour l'ancienne version du compilateur.
Cependant, le nouveau compilateur a généré plusieurs messages d'avertissement liés à l'affichage incorrect des chemins de fichiers (exigence d'échappement des slashs) :
Il s'agit d'une exigence juste, qui peut facilement être satisfaite avec quelques modifications mineures.
Ainsi, nous pouvons conclure que même les grands projets écrits en MQL5 sont prêts pour le nouveau compilateur et que le passage à celui-ci ne sera pas un problème pour les développeurs professionnels.
...
J'obtiens"erreur de génération de code 1 1".
...
Le gain principal porte sur les mathématiques et les calculs personnels.
Il est encore bon, car vous pouvez créer votre propre environnement avec un minimum d'appels de fonctions système.
(copier l'environnement une fois dans vos classes et travailler avec lui directement).
Eh bien, si vous le déformez comme ça, alors bien sûr, la DLL est une fonctionnalité utile...
Mais j'ai personnellement décidé, pour cette tâche précise, que je n'avais pas vraiment besoin d'une DLL pour cela. Pour l'instant, je pense à un EA qui prendrait les cotations d'une société de courtage et enverrait des signaux à une autre, et qui n'a même pas MetaTrader. (DucaCopi, d'ailleurs, je me demande si MetaQuotes sera d'accord avec ce vénérable courtier).
J'ai pensé à Dll. Mais j'ai décidé qu'il était plus sûr et plus raisonnable d'utiliser des fichiers partagés. Laissez MetaTrader écrire les signaux dans le fichier. Et un autre MetaTrader (ou JForex, ou quelqu'un d'autre) - laissez-les lire et exécuter.
Il existe une option avec des canaux nommés, mais il est nécessaire d'avoir un serveur intermédiaire,
Vous trouverez des exemples de la manière de procéder sur le forum.
Par exemple, les communications interterminales.
Il existe une option avec des canaux nommés, mais vous avez besoin d'un serveur intermédiaire,
Vous trouverez des exemples de la manière de procéder sur le forum.
Pas besoin de chaînes nommées ! En attendant d'ajouter le support SQL. Échangez des données via un tableau. SQL est un support intégré pour les systèmes multithreads à forte charge.