Discussion de l'article "Diminution de la consommation de mémoire grâce aux indicateurs auxiliaires"
L'approche est compréhensible. Mais la pertinence de la tâche est déroutante.
Bien qu'un système 64 bits prenne en charge d'énormes quantités de mémoire vive, la pertinence de la tâche est minime. Même un système 32 bits avec ses 3 Gb peut tout à fait tirer des tailles de mémoire telles que celles que vous économisez. Après tout, quel que soit le point de vue, la mémoire croît de manière linéaire lors du chargement de nouveaux indicateurs, ce qui signifie que 48 Mo de plus ou de moins pour les ordinateurs modernes, ce n'est rien.
D'accord, supposons que la tâche soit pertinente (je suis d'accord qu'il y a des gens qui s'en préoccupent). Mais pensez-y, la tâche d'économie de mémoire est en conflit direct avec la tâche de performance.
Vous devriez donc prêter attention à ce point également.
Pour autant que je puisse le voir de mon point de vue, les MQ se battent pour les performances et c'est là que tous les efforts sont concentrés.
Si vous avez besoin d'économiser des ressources mémoire sur des indicateurs non dessinés, transférez simplement le code de l'indicateur dans l'Expert Advisor. Vous aurez alors un contrôle total sur la mémoire allouée. En même temps, vous pourrez économiser sur la réception du même type de données. De nombreux indicateurs demandent les mêmes données, chacun pour son propre traitement. Ayant reçu les données une fois, vous n'aurez pas besoin de les traiter la fois suivante.
Combinons maintenant la vitesse d'exécution des tâches et la taille de la mémoire. La plupart des indicateurs qui ne dessinent pas sont engagés dans le calcul de la dernière barre, ce qui est indiqué par les mécanismes intégrés de blocage du recalcul de l'ensemble du tableau. Il s'avère que dans l'Expert Advisor, il sera possible d'allouer 154 cellules de mémoire (par exemple, pour le calcul du masque avec la période de 153) avec une telle économie de mémoire, la performance ne sera pas pire que dans un indicateur normal.
Mais la possibilité de paralléliser les calculs est perdue dans l'Expert Advisor, ce qui porte un coup direct à la performance. En fait, les indicateurs consomment de la mémoire uniquement à cause du parallélisme. Après tout, chaque indicateur travaille dans son propre fil d'exécution et ce fil doit avoir sa propre instance de données sources.
- www.mql5.com
Je suis d'accord, la performance est la priorité principale et il n'y a pas d'intérêt à économiser de la mémoire (sauf bien sûr si vous utilisez plus de 1 Go, ce qui est peu probable).
L'approche est compréhensible. Mais l'urgence de la tâche est déroutante.
En fait, l'idée d'écrire cet article m'est venue à l'esprit après qu'une personne, à qui j'avais écrit un certain indicateur composé, se soit plainte que cet indicateur n'était pas installé sur certaines paires. En enquêtant, il s'est avéré qu'il y a des indicateurs très persistants, et beaucoup d'entre eux ne rentrent pas dans le terminal (c'est-à-dire que le problème n'est pas dans la paire, mais dans le fait qu'avant cette paire a été ouverte une douzaine d'autres avec le même indicateur persistant). Cet indicateur a consommé 2 fois plus que l'indicateur test de l'article.
Même le 32-bit avec ses 3GB peut tirer de telles tailles de mémoire
Si vous tradez sur un grand nombre de paires, ce n'est pas le cas, c'est le but.
D'ailleurs, le terminal ne peut pas allouer plus de 2 Go de mémoire (au total : RAM + mémoire virtuelle). Lors de mes expériences, il s'est arrêté à ce niveau.
Bien sûr, ce problème ne devrait pas exister en 64 bits.
D'accord, supposons que la tâche soit pertinente (je suis d'accord qu'il y a des gens qui s'en préoccupent). Mais réfléchissez, la tâche d'économie de mémoire est en contradiction directe avec la tâche de performance.
Ce n'est pas toujours le cas. Dans l'article, ici, la plupart des méthodes ne réduisent pas les performances.
Un Expert Advisor qui ne demande que la dernière barre des indicateurs est une classe de programme différente de celle considérée dans l'article. Et il n'est pas toujours possible/convenable de remplacer l'un par l'autre.
.
Il est peu probable que chaque indicateur sur une paire commune ait sa propre instance de données - il y a un tableau intéressant dans l'article sur les calculs parallèles, qui peut être trouvé par l'expression clé "2 indicateurs".
Le problème des indicateurs est que chacun d'entre eux fonctionne dans son propre thread et que, pour fonctionner, il doit stocker toutes les données nécessaires dans le thread lui-même.
Les données entre les threads sont copiées via CopyBuffer(). Mais voici le problème : vous pouvez obtenir des données d'un thread, mais vous ne pouvez pas les y transférer. C'est pourquoi il n'est pas possible de construire des indicateurs mogostage dans lesquels plusieurs instances d'un indicateur reçoivent les mêmes données prétraitées. Mais c'est justement sur ce plan que se trouvent de grandes possibilités d'optimisation des calculs.
Je pense que si MQ résout ce problème, le travail avec les indicateurs deviendra plus pratique et plus flexible. Actuellement, les données ne peuvent être transmises qu'en tant que paramètres externes et seulement au début de la discussion.
- 2010.01.12
- MetaQuotes Software Corp.
- www.mql5.com
Très utile
Si je comprends bien l'idée principale, une question se pose :
Pourquoi tous les indicateurs standards que l'on trouve sur l'installation de MT5 ne sont pas conçus comme une "classe" ?
Alors pourquoi le maître-assistant ne se préoccupe pas de cette idée ?
sans limiter le nombre maximum de barres dans Outils> options, une méthode rapide que j'utilise pour réduire l'espace tampon est la suivante
int maxbars =100;// dernières barres limit = rates_total-rates_total+maxbars;
- 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
Un nouvel article Diminution de la consommation de mémoire grâce aux indicateurs auxiliaires a été publié :
Si un indicateur utilise les valeurs de nombreux autres indicateurs pour ses calculs, il consomme beaucoup de mémoire. L'article décrit plusieurs méthodes pour réduire la consommation de mémoire lors de l'utilisation d'indicateurs auxiliaires. La mémoire sauvegardée permet d'augmenter le nombre de paires de devises, d'indicateurs et de stratégies utilisées simultanément dans le terminal client. Il augmente la fiabilité du portefeuille de trading. Un souci aussi simple des ressources techniques de votre ordinateur peut se transformer en ressources financières à votre disposition.
Vous avez probablement déjà utilisé ou créé des Expert Advisors ou des indicateurs qui utilisent d'autres indicateurs auxiliaires pour leur fonctionnement.
Par exemple, le célèbre indicateur MACD utilise deux exemplaires de l'indicateur EMA (Exponential Moving Average) en calculant la différence entre leurs valeurs :
Un tel indicateur composite équivaut en fait à plusieurs indicateurs simples. Par exemple, le MACD mentionné précédemment consomme trois fois plus de temps de mémoire et de processeur qu'un seul EMA, car il doit allouer de la mémoire aux tampons de l'indicateur principal et aux tampons de tous ses indicateurs auxiliaires.
Outre le MACD, il existe des indicateurs plus complexes qui utilisent plus de deux indicateurs auxiliaires.
De plus, ces dépenses de mémoire augmentent fortement si :
Auteur : ds2