Erreurs, bugs, questions - page 465

 
uncleVic:
Écrivez aussi au CD à ce sujet. Comme "tout ce qui est dans la revue ne peut pas être choisi dans le testeur".
Nah, pas de retour en arrière. J'ai deux terminaux ouverts - Alpari et MK - et j'ai fait des allers-retours, mais dans le second, j'ai oublié d'ajouter l'EURGBP à l'aperçu du marché.
 
marketeer:
Nah, rebondir. J'ai deux terminaux ouverts - Alpari et MK - et j'ai fait des allers-retours, mais dans le second, j'ai oublié d'ajouter l'EURGBP à l'aperçu du marché.
Ça arrive.
 

J'essaie de créer un tableau dans le script qui se comporte comme une série d'indicateurs. En d'autres termes, lorsqu'une nouvelle entrée apparaît, le tableau entier est décalé vers l'arrière et la nouvelle entrée est placée à une position nulle.

void OnStart()
  {
   int a[];
   int size=5;               // размер массива
   bool flag=true;           // флаг направления индексации
   ArraySetAsSeries(a,flag);  // зададим направление индексации
   ArrayResize(a,size);      // зададим размер массива
//---
   for(int i=0;i<size;i++)  // задаём значения и распечатываем массив
      a[i]=size-i;         // 54321
   Print("[",a[0],"][",a[1],"][",a[2],"][",a[3],"][",a[4],"]");
//---
   ArrayResize(a,size-1);     // уменьшаем размер 5432
   ArraySetAsSeries(a,!flag);  // меняем направление индексации 2345
   ArrayResize(a,size);       // возвращаем в исходный размер  2345х
   ArraySetAsSeries(a,flag);   // возвращаем в исходную индексацию х5432   
   a[0]=6;                   // задаём "пустому" нулевому данному значение
//---
   Print("[",a[0],"][",a[1],"][",a[2],"][",a[3],"][",a[4],"]");
   // в результате получаем 64321 вместо нужного 65432
  }

Comme on dit, pourquoi ?

Je me suis peut-être trompé, mais c'est la première chose qui me vient à l'esprit - un autre bogue dans l'optimisation du langage.

HZZY Je demande également aux personnes qui veulent déplacer des données en utilisant des boucles de ne pas s'embêter. Cela fonctionne bien pour des tableaux de 5...100...1000..., mais ne fonctionnera pas pour des tableaux plus grands.

 
Urain:

J'essaie de créer un tableau dans le script qui se comporte comme une série d'indicateurs. En d'autres termes, lorsqu'une nouvelle entrée apparaît, le tableau entier est décalé vers l'arrière et la nouvelle entrée est placée à une position nulle.

Comme on dit, pourquoi ?


Et si nous prenions la classe CArrayInt et utilisions un insert pour y insérer des données ?
 
uncleVic:
Et si on prend la classe CArrayInt, et qu'on y insère des données ?

J'aimerais pouvoir passer le tableau via des paramètres, alors que le tableau lui-même est privé dans la classe.

Encore une fois, pour autant que je me souvienne, cette méthode ne fait que déplacer les données dans la boucle, et elle est plutôt lente.

 
Urain:

J'essaie de créer un tableau dans le script qui se comporte comme une série d'indicateurs. En d'autres termes, lorsqu'une nouvelle entrée apparaît, le tableau entier est décalé vers l'arrière et la nouvelle entrée est placée à une position nulle.

Comme on dit, pourquoi ?

Je me suis peut-être trompé, mais c'est la première chose qui me vient à l'esprit - un autre bogue dans l'optimisation du langage.

HZZY Je demande également aux personnes qui veulent déplacer des données en utilisant des boucles de ne pas s'embêter. Cela fonctionne bien pour des tableaux de 5...100...1000..., mais ne fonctionnera pas pour des tableaux plus grands.


A propos de "ZZZY" : vos redimensionnements ne vont-ils pas entamer votre mémoire ?
 
uncleVic:
Quant à "ZZI" : vos redimensionnements ne fragmentent pas la mémoire pour vous ?

Je ne connais pas d'autre fonction (qui alloue de la mémoire) dans mql5.

HH Et d'après ce que j'ai compris, la direction du réseau est aussi une chose purement virtuelle.

ZZY Apparemment, vous devez travailler non pas avec la mémoire, mais avec la virtualisation de l'espace d'adressage. Et cela ralentit également le travail, l'accès direct étant plus rapide après tout.

 
Urain:

J'aimerais pouvoir passer le tableau via des paramètres, alors que le tableau lui-même est privé dans la classe.

Encore une fois, pour autant que je me souvienne, cette méthode ne sert qu'à déplacer des données dans une boucle et c'est plutôt lent.

Il faudra que je pense à améliorer les classes de tableaux (pour moi).
 
uncleVic:
Il faudrait que je pense à améliorer les cours d'array (pour moi).

Oui, un insert virtuel sur une position zéro serait bien. Mais pas pour déplacer réellement les données, sinon ce serait long et inefficace.

Quoi qu'il en soit, c'est une mauvaise chose que vous ne puissiez pas travailler avec la mémoire directement, elle a une bonne accélération de virtualisation, même la vitesse du C++ est 1,5 fois plus rapide si vous adressez une adresse de cellule au lieu d'un tableau.

 
Urain:

J'essaie de créer un tableau dans le script qui se comporte comme une série d'indicateurs. C'est-à-dire que lorsqu'une nouvelle entrée apparaît, le tableau entier est décalé vers l'arrière et la nouvelle entrée se trouve à la position zéro.

ZZZY Je demande aux camarades qui veulent conseiller de déplacer les données par le cycle de ne pas s'inquiéter, cette option fonctionne bien pour les tableaux de 5...100...1000..., mais à la plus grande taille tableau est inacceptable.


Mais puis-je suggérer de ne pas déplacer l'ensemble du tableau ? :)

Tableau dynamique, les nouvelles données sont écrites à la fin, la taille est modifiée/mémorisée, et l'indicateur AsSeries ne modifie que l'indexation.

Pour l'ordre normal, c'est l'élément N du tableau, pour la "série" la taille N-1.

Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
  • www.mql5.com
Основы языка / Типы данных / Объект динамического массива - Документация по MQL5