Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 731

 
Vitalie Postolache:

Ist 10.000 x 10.000 nicht zweidimensional?

double arr[10000][10000];

und so weiter...

Top2n:
Nun, ja, es ist zweidimensional, aber so habe ich es nicht ausgedrückt, offenbar ist es keine Matrix, sondern ein Array. Bedeutet eine Matrix Multidimensionalität?
Ich stimme zu. Das ist nicht das, was gesagt wurde, und außerdem wurde es missverstanden.

Was in diesem Code bremst, ist nicht das Schreiben eines Arrays, sondern eine Schleife in einer Schleife.
 
Alexey Viktorov:
Einverstanden. Das war nicht so gemeint und wurde missverstanden.

Was in diesem Code bremst, ist nicht das Schreiben des Arrays, sondern die Schleife in der Schleife.

Ist es notwendig, auf eine andere Programmierumgebung zu portieren, oder ist dies nicht ein allgemeines Problem für alle Arten von Sprachen? Was kann die Lösung für eine Beschleunigung sein?

Wenn eine Schleife und erhöhen den Wert der Variable aus der gelöschten Schleife

         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);


Ich hätte es überprüfen können, aber ich will den Computer nicht belasten - wenn er nicht schneller wird, wird die Festplatte wieder zusätzlich belastet)))

 
Top2n:

Ist es notwendig, auf eine andere Programmierumgebung umzusteigen, oder ist dies nicht ein allgemeines Problem für alle Arten von Sprachen? Was kann die Lösung für eine Beschleunigung sein?

Wenn eine Schleife den Wert einer Variablen aus einer gelöschten Schleife erhöht, wird sie dann schneller?

Ich könnte es überprüfen, aber ich will den Computer nicht quälen, wenn es nicht beschleunigt ist, wird es wieder zusätzlichen Stress auf der Festplatte setzen)))

Und Sie können das Array nicht nach der Schleife schreiben? Sie können es nur in jeder Zeile tun? Ich beziehe mich auf die erste Variante, bei der sich die Schleife in der Schleife befindet.
 
Vitalie Postolache:
Können Sie das Array nicht nach der Schleife schreiben? Ist es möglich, sie nur in jede Zeile zu schreiben? Ich beziehe mich auf die erste Variante, bei der sich die Schleife in der Schleife befindet.
Ein Array dieser Größe würde nicht in das zugewiesene RAM passen.

Natürlich können Sie zusätzlich einen Zähler einfügen und in diesen Zähler schreiben, nicht in jede Zeile einzeln, aber es ist unwahrscheinlich, dass dies den Prozess so sehr beschleunigt, dass es ohne Messung auffällt.
 
Alexey Viktorov:
Ein Array dieser Größe würde nicht in das zugewiesene RAM passen.

Natürlich können Sie einen Zähler hinzufügen und in diesen Zähler schreiben, nicht in jede Zeile einzeln, aber es ist unwahrscheinlich, dass dies den Prozess so sehr beschleunigt, dass es ohne Messung auffällt.

Bitte beachten Sie, dass die Dokumentation (und auch der Compiler) sagt, dass: "DasAS_SERIES-Flag kann nicht für mehrdimensionale Arrays gesetzt werden.

Frage: Wie kann ich ein Array in mql5 sortieren?

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:

Bitte beachten Sie, dass die Dokumentation (und auch der Compiler) sagt, dass: "DasAS_SERIES-Flag kann nicht für mehrdimensionale Arrays gesetzt werden".

Frage: Wie kann man das Array sortieren?

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 und Sortierung sind völlig unterschiedliche Konzepte.

1 - er ändert die Richtung der Indizierung der Array-Zellen, ohne deren Inhalt zu ändern und 2 - er ändert den Inhalt der Zellen, ohne deren Indizierung zu ändern, so dass sie in aufsteigender oder absteigender Reihenfolge sortiert werden.

Außerdem sagt die Dokumentation, dass das Array nur nach der ersten Dimension sortiert werden kann.
 
Alexey Viktorov:
AS_SERIES und Sortierung sind völlig unterschiedliche Konzepte.

1 - ändert die Richtung der Indizierung der Array-Zellen, ohne deren Inhalt zu ändern, und 2 - ändert den Inhalt der Zellen, ohne die Indizierung zu ändern, so dass sie in aufsteigender oder absteigender Reihenfolge sortiert werden.

Außerdem sagt die Dokumentation, dass das Array nur nach der ersten Dimension sortiert werden kann.

Hier wird in aufsteigender Reihenfolge sortiert

ArraySort(mas);

Wie kann ich es jetzt rückgängig machen? Es muss in absteigender Reihenfolge sein, es ist eine Sortierung von Losen.

 
Vitaly Muzichenko:

Hier wird in aufsteigender Reihenfolge sortiert

ArraySort(mas);

Wie kann ich es jetzt rückgängig machen? Sie brauchen sie in absteigender Reihenfolge, sie sortiert die Lose.

Wow. Dies ist das erste Mal, dass ich mich mit dem Sortieren in mql5 beschäftige. Ich verwende mql4 aus dem Gedächtnis. Wenn dies der Fall ist, können Sie die Leseschleife umkehren. Wenn Sie nach einem bestimmten Wert suchen müssen, wird der Array-Index zurückgegeben, unabhängig davon, wie Sie ihn sortieren.

Und die dümmste Option ist, das gesamte Feld in umgekehrter Reihenfolge neu zu schreiben. Ist es das wert?
 
Vitaly Muzichenko:

Hier wird in aufsteigender Reihenfolge sortiert

ArraySort(mas);

Wie kann ich es jetzt rückgängig machen? Sie brauchen sie in absteigender Reihenfolge, sie sortiert die Lose.

Und wenn nach der Sortierung ändern Sie die Indizierung Reihenfolge mit ArraySetAsSeries?
 
Vitalie Postolache:
Was passiert, wenn Sie nach der Sortierung die Indizierungsreihenfolge mit ArraySetAsSeries ändern?

Dann geht es so:

Grund der Beschwerde: