[Archiv!] Jede Anfängerfrage, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht daran vorbei. Könnte nirgendwo ohne dich hingehen - 2. - Seite 131

 
Vinin:

Weiterführung des Themas

Vorherige Seite https://www.mql5.com/ru/forum/111497

Im MT4-Tester wird in den Optimierungsergebnissen und Optimierungsgraphen nichts angezeigt, nur leer. Hilfe!
 
Sergey_Rogozin:

Ich versuche, ein eindimensionales Array ValueArr[] zu füllen.

Ich bin nicht sicher, ob das richtig ist.

Bei jedem Ticken gibt die Funktion GetValue() einen int-Wert aus. Wie fülle ich ValueArr[]?

Ist mein Versuch richtig?

Die Größe des Arrays soll bei jedem Tick um eins erhöht werden? Die Größe der Datei ist dann durch den verfügbaren Speicherplatz begrenzt.

Erhöhen Sie die Größe des Arrays ValueArr[] mit der Funktion ArrayResize() und fügen Sie die neuen Daten an das Array an. Nochmals: Wo wollen Sie sie hinzufügen? Am Anfang oder am Ende?

Wenn Sie am Anfang bereits geschriebene Daten verschieben müssen, werden diese sonst durch die neu geschriebenen Daten überschrieben.

Wenn am Ende, dann:

Inite setze Array-Größe = Null, und zu Beginn erhöhe sie um 1 (size++), dann ändere die Größe des Arrays ( ArrayResize(ValueArr, size);) und schreibe die Daten, die durch GetValue(); (ValueArr[size-1]=GetValue();) in die Array-Zelle ValueArr[], indiziert durch Größe-1 (ValueArr[size-1]).

 
artmedia70:

Möchten Sie, dass sich die Größe des Arrays bei jedem Tick um eins erhöht? Die Größe der Datei ist dann durch den verfügbaren Speicherplatz begrenzt.

Erhöhen Sie bei jedem Tick die Größe des Arrays ValueArr[] mit der Funktion ArrayResize() und fügen Sie neue Daten in das Array ein. Nochmals: Wo wollen Sie sie hinzufügen? Am Anfang oder am Ende?

Wenn Sie am Anfang bereits geschriebene Daten verschieben müssen, werden diese sonst durch die neu geschriebenen Daten überschrieben.

Inite setze Array-Größe = Null, und zu Beginn erhöhe sie um 1 (size++), dann verändere die Größe des Arrays ArrayResize(ValueArr, size); und füge Daten, die durch die Funktion GetValue() erhalten wurden, in die Array-Zelle ValueArr[] ein, die durch size-1 indiziert ist (ValueArr[size-1]);

Ja, die Daten von GetValue() werden bei jedem Tick in das Array ValueArr[] geschrieben.

Die Größe des Arrays wird mit jedem Tick erhöht, kann aber auch auf einmal festgelegt werden, z. B. [10000].


DieElemente des Arrays werden in der Reihenfolge ihres Eintreffens angeordnet, d. h. das erste geschriebene Element ist das erste in der "allgemeinen Warteschlange",

das zweite Element steht an zweiter Stelle in der Warteschlange.


Wenn ich es richtig verstanden habe, sieht es so aus:


 int size=0;
 int ValueArr[size];
 
//-----------------

int start()
 {
   size++;
   ArrayResize(ValueArr, size);
   ValueArr[size-1] = GetValue();
   
 return();
 }

//-----------------

int GetValue()
 {
 .......
 return(Val);
 }

Ich hoffe, ich habe Sie richtig verstanden.

 
Sergey_Rogozin:

Die Elemente des Arrays werden in der Reihenfolge ihres Eintreffens angeordnet, d. h. das erste geschriebene Element steht in der "allgemeinen Warteschlange" an erster Stelle,

warum nicht ein Zeitreihen-Array verwenden
 
eddy:
warum nicht ein Zeitreihen-Array verwenden?
Eine Zeitreihe? Könnte dies bei der Aufzeichnung der Geschichte von Teakholz hilfreich sein?
 
Sergey_Rogozin:

Ich versuche, ein eindimensionales Array ValueArr[] zu füllen.

Ich bin nicht sicher, ob das richtig ist.

Bei jedem Ticken gibt die Funktion GetValue() einen int-Wert aus. Wie fülle ich ValueArr[]?

Ist mein Versuch richtig?

Also
 int ValueArr[size]; 

können Sie nicht. Wenn Sie ein Array deklarieren, geben Sie entweder eine Konstante als Größe an oder nichts, und das Array wird dann als dynamisch betrachtet.

Der richtige Weg ist der folgende

int ValueArr[]; 

int init()
{
   ArrayResize(ValueArr,size);
}
 
Teakholz - nein
 

Bitte um Rat! Gibt es eine Funktion in MT4, die das Ergebnis eines früheren Handels berücksichtigt, um einen neuen zu eröffnen? Wenn ja, wie kann ich es richtig angeben?

 
sto_mat:

Bitte um Rat! Gibt es eine Funktion in MT4, die das Ergebnis eines vorherigen Handels berücksichtigt, um einen neuen zu eröffnen? Wenn ja, wie kann ich es richtig angeben?


Es gibt keine solche eingebaute Funktion, Sie müssen sie selbst schreiben, ich habe hier ein Beispiel gezeigt:https://www.mql5.com/ru/forum/131277/page113
 
alsu:
Dies ist

Sie können es nicht. Bei der Deklaration eines Arrays wird entweder eine Konstante als Größe angegeben oder nichts, und das Array wird dann als dynamisch betrachtet.

Der richtige Weg ist der folgende


Dann war's das wohl:

 int size, ValueArr[]; 
//-----------------
 int init()
 {
   ArrayResize(ValueArr,size);
 }
//-----------------

int start()
 {
   ValueArr[size-1] = GetValue();
 return();
 }

//-----------------

int GetValue()
 {
 .......
 return(Val);
 }

Ist das richtig?

Grund der Beschwerde: