Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 1005

 
Und so funktioniert es.
 
Seric29:
Und so funktioniert es.
Ilyas hat das bereits sehr deutlich erklärt. Suchen Sie danach in seinen Beiträgen.
 
Seric29:
Und so funktioniert es.

Sind Sie sicher, dass Sie alles in der Dokumentation gelesen haben? Sie haben sogar das hier gelesen:

Hinweis

Die Funktion kann nur auf dynamische Arrays angewendet werden. Sie sollten bedenken, dass dynamische Arrays, die von der Funktion SetIndexBuffer() als Indikatorpuffer zugewiesen werden, nicht in ihrer Größe verändert werden können. Alle Vorgänge im Zusammenhang mit der Größenänderung von Anzeigepuffern werden vom ausführenden Teilsystem des Terminals durchgeführt.

Die Gesamtzahl der Elemente in einem Array darf 2147483647 nicht überschreiten.

Wenn häufig Speicher zugewiesen wird, empfiehlt es sich, den dritten Parameter zu verwenden, der die Reserve angibt, um den Umfang der Zuweisung von physischem Speicher zu verringern. Alle nachfolgenden Aufrufe der Funktion ArrayResize führen nicht zu einer Neuzuweisung von physischem Speicher, sondern nur zu einer Größenänderung der ersten Dimension des Arrays innerhalb des reservierten Speichers. Beachten Sie, dass der dritte Parameter nur dann verwendet wird, wenn z. B. die Zuweisung von physischem Speicher im Gange ist:

ArrayResize(arr,1000,1000);
for(int i=1;i<3000;i++)
ArrayResize(arr,i,1000);

In diesem Fall gibt es 2 Speicher-Neuzuweisungen, einmal vor dem Eintritt in die Schleife für 3000 Iterationen, wobei die Array-Dimension auf 1000 und die zweite bei i gleich 2000 gesetzt wird. Wird der dritte Parameter weggelassen, kommt es zu 2.000 Neuzuweisungen von physischem Speicher, was die Programmausführung verlangsamt.


Was ist daran nicht klar?

 
Alexey Viktorov:

Sind Sie sicher, dass Sie alles in der Dokumentation gelesen haben? Lesen Sie auch dies:

Was ist daran nicht klar???

Nun, das ist der Punkt, dass es keine Bilder oder Beispiele gibt, und Sie können raten, was diese Umverteilungen bedeuten, und wie man sie 100% nach den Vorstellungen der Entwickler verwendet, wenn es nicht erklärt wird. Nach diesen 3 Zeilen zu urteilen, die hier geschrieben sind, denke ich, dass ArrayResize(arr,1000,1000); ein Array mit zweitausend Elementen erstellt. Aber das ist hier nicht klar. Wenn ich z.B. ArrayResize(arr,1,1000); ausführe, bleibt 1000 im Leerlauf hängen, bis das Array auf 1000 kommt.

for(int i=1;i<1001;i++)ArrayResize(массив,i,1000);

Oder das Programm verwendet dieses Fragment vor der Übertaktung, indem es einfach den Zähler inkrementiert. Im Allgemeinen sage ich, es ist nicht klar, und das ist alles. Oder diese 1000 ist es nur dumm herumliegen, um schnell zu schöpfen Speicher aus dem Prozessor, wenn ja, dann alle die gleichen und die Backup-Speicher, auch zu übertragen haben, dann ist es einfacher, ohne die Reserve zu arbeiten. Im Allgemeinen kein Code, keine Informationen, keine Bilder, keine Ahnung, wie es funktioniert.

 
Hatten Sie schon einmal die Situation, dass die Festplatte zu 100 % durch eine Systemklasse (auf 10ka) ausgelastet war? Das passiert auch bei alps terminal... Normalerweise laden Terminals die Festplatte während der Tests, aber hier ist es nur kabbda... Nicht lang, 3-5 Sekunden, aber konkret
 
Yevhenii Levchenko:
Ist es Ihnen schon einmal passiert, dass Ihre Festplatte zu 100% eine Art Systemklasse (auf 10) bootet? Das passiert auch bei alps terminal... Normalerweise laden Terminals die Festplatte während der Tests, aber hier ist es nur kabbda... Nicht lang, 3-5 Sekunden, aber konkret

passiert, aber nach PC-Neustart

10-15 Minuten nach dem Neustart des PCs "frisst" Windows Defender die Festplatte auf und es werden PC-Nutzungsstatistiken gesammelt

Lösung - den PC in den Ruhezustand versetzen, mein PC kann einen Monat lang ohne Neustart auskommen, ich drücke die Ruhetaste auf der Tastatur, anstatt den PC herunterzufahren - ein paar Mal ging der Strom aus, kein Problem mit dem Booten von Win10, wenn der PC im Ruhezustand war

 
Seric29:

Das ist das Problem, es gibt keine Bilder oder Beispiele, und man kann nur raten, was diese Umverteilungen bedeuten und wie man sie 100%ig nach den Vorstellungen der Entwickler verwendet, wenn es nicht erklärt wird. Nach diesen 3 Zeilen zu urteilen, die hier geschrieben sind, denke ich, dass ArrayResize(arr,1000,1000); ein Array mit zweitausend Elementen erstellt. Aber das ist hier nicht klar. Wenn ich z.B. ArrayResize(arr,1,1000); ausführe, bleibt 1000 im Leerlauf hängen, bis das Array auf 1000 kommt.

Oder das Programm verwendet dieses Fragment vor der Übertaktung, indem es einfach den Zähler inkrementiert. Oder dieser 1000er liegt nur herum, um schnell Speicher von der CPU zu bekommen, wenn das so ist, dann muss auch der Backup-Speicher übertragen werden, dann ist es einfacher, ohne Backup zu arbeiten. Im Allgemeinen kein Code, keine Informationen, keine Bilder, keine Ahnung, wie es funktioniert.

Sie sollten nicht nur die drei Codezeilen lesen, sondern auch den Text, der alles ganz genau erklärt.

Reservierter Speicher und Arraygröße sind unterschiedliche Begriffe. Wenn Sie die Arraygröße mit ArrayResize(arr,1000,1000) überschreiben, wird das letzte Arrayelement 999 und nicht mehr sein. Wenn Sie jedoch die Größe des Arrays erhöhen müssen, wird kein neuer Speicher zugewiesen. Wenn Sie eine solche Reserve nicht benötigen, machen Sie sie kleiner oder lassen Sie sie ganz weg.

 

Guten Tag!
Ich möchte einen Parameter als Array in eine Funktion einfügen. Ich kann nicht herausfinden, wie man es richtig macht. Können Sie das Beispiel korrigieren?

void OnTick()
  {
//---
   int TestArr[]= {5,3,9,4};
   TestFArr(TestArr[]);
  }
//+------------------------------------------------------------------+

void TestFArr(int TestArr[])
  {
   int size=ArraySize(TestArr);
   Print(" --------------- size: ",size);
  }
//+------------------------------------------------------------------+
 
Nauris Zukas:

Guten Tag!
Ich möchte einen Parameter als Array in eine Funktion einfügen. Ich kann nicht herausfinden, wie man es richtig macht. Können Sie das Beispiel korrigieren?

void OnTick()
  {
//---
   int TestArr[]= {5,3,9,4};
   TestFArr(TestArr);
  }
//+------------------------------------------------------------------+

void TestFArr(int & TestArr[])
  {
   int size=ArraySize(TestArr);
   Print(" --------------- size: ",size);
  }
//+------------------------------------------------------------------+
 
Artyom Trishkin:

Ich danke Ihnen!

Grund der Beschwerde: