Théorie de l'accélération de l'EA lors de l'utilisation d'un indicateur personnalisé (fonction - iCustom) - page 6

 

Alexander Laur, c'est-à-dire que tant que le script/conseiller est en cours d'exécution, la mémoire est réservée et ne peut être effacée - triste conclusion.
Est-il possible qu'un script exécute un autre script, puis que la fermeture du script en cours d'exécution entraîne l'effacement de la mémoire, ou cela sera-t-il traité comme un environnement complexe de traitement des données ?

 
-Aleks-:

Alexander Laur, c'est-à-dire que tant que le script/conseiller est en cours d'exécution, la mémoire est réservée et ne peut être nettoyée - triste conclusion.
Est-il possible d'exécuter un autre script, puis de fermer le script en cours d'exécution devrait entraîner un effacement de la mémoire, ou sera-t-il considéré comme un environnement complexe de traitement des données ?

J'ai immédiatement suggéré"ouvrir le graphique avec le conseiller expert en cours d'exécution", cela peut être fait - ChartOpen + ChartApplyTemplate

La seule question est de savoir si la mémoire sera libérée lors de la fermeture (suppression du conseiller expert).

Vérifiez-le.

 
Andrey Khatimlianskii:

J'ai immédiatement suggéré"ouvrir le graphique avec le conseiller expert en cours d'exécution", cela peut être fait - ChartOpen + ChartApplyTemplate

La seule question est de savoir si la mémoire sera libérée lors de la fermeture (suppression du conseiller expert).

Vérifiez.

J'ai essayé manuellement, en changeant le modèle avec beaucoup d'indicateurs à presque vide - l'effet est là (mais le cache reste - je pense que ce n'est pas critique). Mais comment faire l'ouverture et la fermeture par un script de modèle - je ne sais pas. J'ai compris que le doute est que tant que le script est en cours d'exécution, la mémoire ne sera pas effacée... Andrei, s'il te plaît, aide à l'expérience.
 

Question supplémentaire, le choix du type de tampon réel pour le calcul dans l'indicateur affecte-t-il la taille du tampon graphique ?

Type

Taille en octets

Valeur positive minimale

Valeur maximale

Exactitude de la représentation

Analogique en C++

float

4

1.175494351e-38

3.402823466e+38

7 chiffres significatifs

float

double

8

2.2250738585072014e-308

1.7976931348623158e+308

15 chiffres significatifs

double


Et une idée folle, et si au lieu d'un tampon graphique nous utilisions TextOut - je ne sais pas comment lire les données à partir de celui-ci...

 
-Aleks-:

Autre question : la sélection du type de tampon réel pour le calcul dans l'indicateur affecte-t-elle la taille du tampon graphique ?

Par "tampon graphique", entendez-vous l'affichage graphique d'un indicateur normal ?
 
Dennis Kirichenko:
Par le terme "tampon graphique", entendez-vous l'affichage graphique d'un indicateur ordinaire ?

La question est de savoir s'il est possible d'affecter la taille de la mémoire allouée au tampon graphique d'une barre si vous utilisez float au lieu de double dans le code de l'indicateur pour les calculs.

//---- buffers

double Vy[];
double bufDirSoft[];

extern int n=3;
extern int BarsN=100;
//----
int ExtCountedBars=0;

 
Par ailleurs, comment savoir si la mémoire est épuisée, y a-t-il des fonctions ?
 
-Aleks-:

La question est de savoir s'il est possible d'affecter la taille de la mémoire allouée au tampon graphique d'une barre si l'on utilise un float plutôt qu'un double dans le code de l'indicateur pour les calculs...

Non. Il existe une fonction magique qui déplacera toutes les tentatives :

bool  SetIndexBuffer(
   int                    index,         // индекс буфера
   double                 buffer[],      // массив
   ENUM_INDEXBUFFER_TYPE  data_type      // что будем хранить
   );

Ce mécanisme est intégré dans le langage terminal lui-même. C'est une idée intéressante, mais...

 
-Aleks-:
Par ailleurs, comment savoir si la mémoire est épuisée, y a-t-il des fonctions ?

Que voulez-vous dire par manquer de mémoire ? :-)

Il y a quelque chose ici :

https://www.mql5.com/ru/docs/constants/environment_state/terminalstatus#enum_terminal_info_integer

A mon avis, la manière la plus efficace de gérer la mémoire des ressources de l'indicateur est de minimiser le paramètre "Max bars in history" (Settings --> Charts). Autant que je me souvienne, le minimum pour le paramètre est de 5k.

Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Состояние клиентского терминала
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Состояние клиентского терминала
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Состояние клиентского терминала - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
-Aleks-:
En outre, comment puis-je savoir si la mémoire est épuisée, existe-t-il des fonctions ?

Il est possible de récupérer des informations sur le terminal

TERMINAL_MÉMOIRE_TOTAL

Taille de la mémoire, disponible pour le processus du terminal (agent), en MB

int

TERMINAL_MÉMOIRE_DISPONIBLE

La taille de la mémoire disponible du processus terminal (agent) en MB

int

MÉMOIRE_TERMINALE_UTILISÉE

Taille de la mémoire, utilisée par le terminal (agent), en MB

int