PLO - page 2

 
Interesting:

En fait, la POO mise en œuvre dans MQL5 (ainsi que les ressources du terminal lui-même) donnera une augmentation significative de la vitesse.

A quelle vitesse de fonctionnement faites-vous référence, la vitesse du programme ou la vitesse de son écriture ?

 
Integer:

La POO n'augmente pas les performances. Cela présente certains avantages - par exemple, si une fonction est appelée avec certains paramètres (par exemple, le calcul de l'EMA), une variable statique est utilisée dans la fonction pour stocker la valeur précédente de l'EMA. Puisque la fonction stocke la dernière valeur sur la base de laquelle les calculs seront effectués, elle ne peut pas être appelée avec d'autres paramètres (symbole, timeframe, période de lissage) lors de l'appel suivant de la fonction. Par conséquent, si la fonction doit être appelée avec différents paramètres, il est nécessaire d'en faire une copie avec un nom différent ou d'utiliser une variable globale passée par référence au lieu d'une variable statique. C'est le seul cas où il est plus pratique d'utiliser un objet - vous chargez une instance d'objet, définissez ses paramètres et appelez ensuite la méthode sans paramètres. Si l'objet comprend des méthodes, dont l'exécution ne dépend pas des exécutions précédentes ou en général des paramètres avec lesquels l'objet est chargé, il ne donne rien d'autre que la consommation de ressources.

C'est vrai, c'est vrai, c'est vraiment vrai. Mais tout dépend de l'expérience, de l'imagination et des mains tordues du programmeur (dans cet ordre)... :)

Et en fait, même si l'on suppose que la POO (avec l'approche la plus horrible qui soit) n'augmente pas le temps d'exécution, ou l'augmente de façon insignifiante (bien que je doute personnellement qu'une augmentation de 10 fois puisse être considérée comme insignifiante), elle sera toujours plus utile pour la COMPRÉHENSION des développeurs que tous les inconvénients possibles de la POO.

Le fait est que MQL5, s'il contient la POO, contribuera d'une certaine manière au développement d'une approche modulaire (unité) de la programmation, qui n'est pas présente dans MQL4 (sauf pour les bibliothèques). Cela est dû au fait qu'il est pratique de placer des structures, des classes ou des groupes de celles-ci dans des fichiers séparés (modules) et de les utiliser lorsque cela est nécessaire.

En outre, grâce à l'abstraction, l'encapsulation, l'héritage et le polymorphisme, l'utilisation de classes permettra de déboguer les blocs prêts (modules) et de ne pas penser à leur contenu pour les utiliser dans votre propre travail.

En outre, l'utilisation de la POO devrait accroître le niveau et la commodité de l'utilisation de DLL externes et d'autres logiciels de réglage dans les systèmes de négociation.

Combiné à l'utilisation de bibliothèques, cela rendra la vie des développeurs une douzaine de fois plus facile et accélérera aussi considérablement le développement d'EE assez complexes.

 
Integer:

A quelle vitesse de fonctionnement faites-vous référence, la vitesse à laquelle le programme s'exécute ou la vitesse à laquelle il est écrit ?

Les deux. Les détails concernant la vitesse de développement sont écrits plus haut (bien sûr, tout cela a un sens si vous avez une certaine expérience du développement et de l'utilisation des classes)...
 
Interesting:

C'est vrai, c'est vrai, c'est vrai....

Qui t'a dit ça ? Ce n'est pas vrai. Tout le reste est correct.

 
Integer:

Qui t'a dit ça ? Ce n'est pas vrai. Tout le reste est correct.

Je vais répéter - Elle augmente, elle augmente, combien elle augmente. Mais tout dépend de l'expérience, de l'imagination et du caractère tordu des mains du programmeur (dans cet ordre précis)...

Il fut un temps où je comparais la vitesse d'initialisation de mon EA, à quelques détails près, le code du programme était le même (dans MQL5, la bibliothèque de migration était utilisée). Et il s'est avéré que l'initialisation de MQL5 était 2,5 fois plus rapide en moyenne.

Bien sûr, je sais que ce n'est pas un indicateur, mais je reste persuadé que la vitesse de MQL5 est 10 fois plus rapide même maintenant, en utilisant la bonne approche.

Vous pouvez argumenter à l'infini, mais essayez d'implémenter OnTrade() ouOnChartEvent et tout deviendra clair. Mais à part ces choses, il y a beaucoup d'autres "goodies"...

PS

Bien sûr, il y a des bugs de vitesse dans le testeur de stratégie et les indicateurs. Mais avec le temps, ces lacunes seront éliminées par les développeurs du terminal ou les auteurs de conseillers experts en trading.

En outre, MQ a déclaré plus d'une fois que la vitesse maximale d'exécution du code du programme n'est pas encore disponible (pour autant que je sache encore)...

 
Augmente... Augmente... Il ne reste plus qu'à le chanter sur l'air d'un mantra, une cloche à la main et vêtu d'une soutane. MQL5 est plus rapide que MQL4, non pas parce qu'il supporte les objets.
 
Integer:
Augmente... augmente... ...vous feriez mieux de le chanter en mantra avec une cloche à la main et de mettre une robe.

Integer:
MQL5 est plus rapide que MQL4, pas parce qu'il supporte les objets.
Mais quand même, dans la plupart des cas, c'est plus rapide. À mon avis, il n'est pas approprié de comparer MQL5 avec MQL4 (ou tout autre langage de programmation) en termes de vitesse de travail avec les objets.
 

En utilisant la fonction GetTickCount(), j'ai testé des Expert Advisors similaires avec et sans OOP:

Test de mon_oop_ea ( avec OOP )

RJ 0 Core 1 15:12:15 Temps de test = 115203

EO 0 Core 1 15:12:15 EURUSD,H1 : 6124935 ticks (3052 barres) générés en 115203 ms (total des barres dans l'historique 9199)

RP 0 Core 1 15:12:15 Déconnecté


Mon_premier_test_EA ( sans OOP )

RH 0 Core 1 15:18:54 Temps de test = 90578

CR 0 Core 1 15:18:54 EURUSD,H1 : 6124935 ticks (3052 barres) générés en 90578 ms (total des barres dans l'historique 9199)

OR 0 Core 1 15:18:54 Déconnecté


La différence est faible, mais pas en faveur de la POO. Et en cas d'optimisation, cette différence est multipliée par le nombre d'exécutions, si je comprends bien.

J'ai tiré des conclusions pour moi-même.

J'ai également comparé le MACD Sample EA standard pour MT5 (avec OOP) et pour MT4 :

Macd Sample MT5

FO 0 Core 1 18:03:21 Temps de test = 126016

FD 0 Core 1 18:03:21 EURUSD,M1 : 6124935 ticks (181129 barres) générés en 126016 ms (total des barres dans l'historique 545615)


Macd Sample MT4

18:12:52 2010.06.30 23:59 MACD Sample EURUSD,M1 : Tests de temps = 64406

Les résultats sont étonnants - MT5 et MQL avec OOP ne sont pas seulement des mangeurs de ressources mais aussi des mangeurs de temps.

 

Lorsque vous testez différentes plates-formes MT4 et MT5, vous ne pouvez pas tirer de conclusions spécifiques à la POO. Les différences dans les résultats sont dues à 90% à l'architecture différente du système.

Cet article a été complété en utilisant la méthode ci-dessus. En outre, l'optimiseur de code dans MQL5 a été désactivé pour le moment - nous sommes en train de le peaufiner. Lorsqu'elle est activée, les résultats s'améliorent immédiatement et plusieurs fois.

Hier, un article comparant la vitesse de MQL4 et MQL5 a été publié - je vous recommande de le lire :

La performance de l'analyse des moyennes mobiles du MQL5 a été publiée :

Depuis la création du premier indicateur de moyenne mobile simple, de nombreux indicateurs différents sont apparus. Beaucoup d'entre elles reposent sur un principe similaire ou utilisent certaines méthodes de traitement des séries de prix dans leurs calculs. Cependant, la question de la rapidité de calcul de ces indicateurs et de l'optimalité des algorithmes qui les composent reste souvent sans réponse. Cet article décrit toutes les options possibles pour l'utilisation des moyennes mobiles, et fait une analyse comparative de chacune d'entre elles.

Auteur : Sergey

 


Une fonction avec un autre paramètre est clairement plus lente. Est-ce vraiment à cause du paramètre ?

Dossiers :
test.mq5  2 kb