Questions des débutants MQL5 MT5 MetaTrader 5 - page 731

 
Vitalie Postolache:

10 000 x 10 000 n'est-il pas bidimensionnel ?

double arr[10000][10000];

et tout ça...

Top2n:
Eh bien oui c'est bidimensionnel, ce n'est pas comme ça que je l'ai dit, apparemment ce n'est pas une matrice mais un tableau. Une matrice implique-t-elle la multidimensionnalité ?
Je suis d'accord. Ce n'est pas ce qui a été dit, et ça a été mal compris.

Ce qui freine dans ce code n'est pas l'écriture d'un tableau mais une boucle dans une boucle.
 
Alexey Viktorov:
D'accord. Ce n'est pas ce qui a été dit et a été mal compris.

Ce qui freine dans ce code n'est pas l'écriture d'un tableau mais une boucle dans une boucle.

Est-il nécessaire de procéder à un portage vers un autre environnement de programmation, ou ce problème n'est-il pas commun à tous les types de langages ? Quelle peut être la solution pour accélérer les choses ?

Si une boucle et augmenter la valeur de la variable de la boucle supprimée

         for(int q=0; q<ARRAY_SIZE_X*ARRAY_SIZE_Y; q++) // Перебор по периоду, колонка X
                 {
                  int arr++
                  if(arr=ARRAY_SIZE_X) {z++;arr=0;}

                  arra[q]=sm.d[q].m[nBar-z];                // M(I) SMA              
                 }
         //--- запишем данные массива в конец файла FileTell IsFileLineEnded
               FileSeek(handle,0,SEEK_END);
               FileWriteArray(handle,arra);


J'ai peut-être vérifié, mais je ne veux pas déranger l'ordinateur. S'il n'accélère pas, le disque dur sera à nouveau soumis à une pression supplémentaire.)

 
Top2n:

Est-il nécessaire de passer à un autre environnement de programmation, ou n'est-ce pas un problème courant pour tous les types de langages ? Quelle peut être la solution pour accélérer les choses ?

Si l'on fait une boucle et que l'on augmente la valeur de la variable de la boucle supprimée, est-ce que cela accélère ?

Je pourrais le vérifier, mais je ne veux pas torturer l'ordinateur, s'il n'est pas accéléré, cela mettra à nouveau un stress supplémentaire sur le disque dur))).

Et vous ne pouvez pas écrire le tableau après la boucle ? Vous pouvez le faire uniquement sur chaque ligne ? Je fais référence à la première variante, où la boucle est dans la boucle.
 
Vitalie Postolache:
Ne pouvez-vous pas écrire le tableau après la boucle ? Est-il possible de le faire uniquement sur chaque ligne ? Je fais référence à la première variante où la boucle est dans la boucle.
Un tableau de cette taille ne tiendrait pas dans la RAM allouée.

Bien sûr, vous pouvez également insérer un compteur et écrire sur ce compteur, et non sur chaque ligne séparément, mais il est peu probable que cela accélère le processus au point d'être perceptible sans mesure.
 
Alexey Viktorov:
Un tableau de cette taille ne tiendrait pas dans la RAM allouée.

Bien sûr, vous pouvez également insérer un compteur et enregistrer en fonction de ce compteur, et non de chaque ligne séparément, mais il est peu probable que cela accélère le processus au point d'être perceptible sans mesure.

Dites-moi, la documentation dit (et le compilateur aussi) que :"L'indicateurAS_SERIES ne peut pas être défini pour les tableaux multidimensionnels"

Question : Comment trier un tableau dans mql5 ?

void Func()
{
double m[][3];

if(условия)
  {
   // много кода
         c++;
         ArrayResize(m, c);
         m[c-1][0]= Lots();
         m[c-1][1]= Ticket();
         m[c-1][2]= Profit();
  }
 BySort(m); // передаём в функцию "BySort"
}

void BySort(double &mas[][3])
{
// Сортируем по размеру лота от большего к меньшему
  ArraySort(mas);
  ArraySetAsSeries(mas,true); // при такой записи mql5 ругается, в mql4 работает

 ... здесь работа с массивом и основной код 

}
 
Vitaly Muzichenko:

Veuillez me conseiller, la documentation dit (et le compilateur aussi) que :"L'indicateurAS_SERIES ne peut pas être défini pour les tableaux multidimensionnels".

Question : comment trier le tableau :

double m[][3];

if(условия)
 {
// много кода
         c++;
         ArrayResize(m, c);
         m[c-1][0]= Lots();
         m[c-1][1]= Ticket();
         m[c-1][2]= Profit();
 }

void BySort(double &mas[][3])// выделенное лишнее
 {
// Сортируем по размеру от большего к меньшему
  ArraySort(mas, WHOLE_ARRAY, 0, MODE_DESCEND); // вот это не работает в mql5

  ArraySort(mas);
  ArraySetAsSeries(mas,true);
// а при такой записи ругается // это тоже лишнее
 }
AS_SERIES et le tri sont des concepts complètement différents.

1 - il change la direction de l'indexation des cellules du tableau sans changer leur contenu et 2 - il change le contenu des cellules sans changer leur indexation afin qu'elles soient triées par ordre croissant ou décroissant.

De plus, la documentation indique que le tableau ne peut être trié que sur la première dimension.
 
Alexey Viktorov:
AS_SERIES et le tri sont des concepts complètement différents.

1 - change la direction de l'indexation des cellules du tableau sans changer leur contenu, et 2 - sans changer l'indexation, change le contenu des cellules pour qu'elles soient triées par ordre croissant ou décroissant.

De plus, la documentation indique que le tableau ne peut être trié que sur la première dimension.

Ici, il trie dans l'ordre ascendant

ArraySort(mas);

Comment puis-je l'inverser maintenant ? Il faut que ce soit en ordre décroissant, c'est du triage par lots.

 
Vitaly Muzichenko:

Ici, il trie dans l'ordre ascendant

ArraySort(mas);

Comment puis-je l'inverser maintenant ? Vous en avez besoin dans l'ordre décroissant, cela trie les lots.

Wow. C'est la première fois que j'examine le tri dans mql5. De mémoire, j'utilise mql4. Si c'est le cas, vous pouvez inverser la boucle de lecture. Si vous devez rechercher une valeur spécifique, elle renverra l'index du tableau, quelle que soit la façon dont vous le triez.

Et l'option la plus stupide est de réécrire le tableau entier dans l'ordre inverse. Cela en vaut-il la peine ?
 
Vitaly Muzichenko:

Ici, il trie dans l'ordre ascendant

ArraySort(mas);

Comment puis-je l'inverser maintenant ? Vous en avez besoin dans l'ordre décroissant, cela trie les lots.

Et si après le tri, on change l'ordre d'indexation en utilisant ArraySetAsSeries?
 
Vitalie Postolache:
Que se passe-t-il si, après le tri, vous modifiez l'ordre d'indexation à l'aide de ArraySetAsSeries ?

Alors ça se passe comme ça:

Raison: