Erzwungenes Array-Clearing in MT5?

 

Ich habe noch nie ernsthaft mit MT5 gearbeitet, und jetzt übertrage ich ein großes Projekt auf einmal darauf. Natürlich gibt es dabei Schwierigkeiten, eine davon ist, dass das Feld immer außerhalb der Reichweite liegt. MT4 hatte dieses Problem nicht, wie sich herausstellte, auch weil die Felder nach der Ankündigung nicht absichtlich geleert werden mussten. Im MT5 ist dies jedoch notwendig. Meine Technologie erfordert eine allmähliche Füllung des Kerns und eine Veränderung seiner Größe. Die genaue Größe einiger Arrays ist nicht im Voraus bekannt. Gleichzeitig wäre wegen der vielen Schleifen auf den Feldern, die gerade gefüllt werden, alles durcheinander. Wäre kein Müll in den Zellen, hätte alles schon längst funktioniert.

Das heißt, es gibt einerseits Müll in Arrays und andererseits kritische Fehler bei Überschreitungen. Es ist wie eine drakonische Bedingung...

Ich möchte verstehen, warum sie die automatische Löschung von Arrays entfernen und deklarierte Variablen auf Null reduzieren mussten, wie in MT4?

Wenn wir Variablen tolerieren können, werden wir mit dem Problem der ständigen Müllsammlung in großen Arrays konfrontiert, und wir müssen sie nicht nur bei der Deklaration, sondern auch bei der Größenänderung bereinigen... Warum?

 

Der Grund für das Überschreiten der Grenzen liegt darin, dass Arrays in verschiedenen Funktionen nach und nach mit Werten gefüllt werden, und bei diesem Prozess wird auf eine Zelle über eine andere Zelle zugegriffen. Einige Funktionen werden zweimal aufgerufen und füllen das Array nacheinander. Befindet sich jedoch Müll in den Zellen, kommt es bei der ersten Befüllung zu einer Überschreitung.

Ich schätze, das Problem kann gelöst werden, indem die Arrays im Voraus gelöscht werden, aber natürlich ist dies ein zusätzliches Kopfzerbrechen. Schade.

 
OK, wir wollen uns nicht beschweren. )) Es ist nur etwas gewöhnungsbedürftig. ))
 

Gewöhnen Sie sich daran.

Ich deklariere immer ein Array, lege die erwartete Größe fest und fülle es mit Werten (initialisiere es). Es ist oft besser, mit einem Wert ungleich Null zu initialisieren - so ist es einfacher, einen Fehler zu finden.

 
Peter, ich weiß nicht, was du meinst?
Es gibt ein dynamisches Array, es gibt die aktuelle Größe dieses Arrays, es gibt eine Überlaufkontrolle.
Ich persönlich versuche, die Überlaufkontrolle zu vermeiden und verwende sie nur in der Entwurfsphase, denn wenn der Algorithmus kompetent und fehlerfrei ist, kommt es nicht zu Überläufen. Warum brauchen Sie unnötige Kontrollen?
Wenn es zu einem Überlauf kommt, suchen Sie nach Fehlern. Ein Debugger mit Interrupt-Punkten hilft Ihnen, oder ohne Interrupt-Punkte, weil das Programm im Debug-Modus anhält, wenn ein Überlauf auftritt und Sie die Variablen betrachten können.
Und wenn es Müll gibt, dann ist es Ihr Müll, den Sie nicht aufgeräumt haben.
 
Реter Konow:

Ich habe noch nie ernsthaft mit MT5 gearbeitet, und jetzt übertrage ich ein großes Projekt auf einmal darauf. Natürlich gibt es Schwierigkeiten, eine davon ist das ständige Verlassen des Bereichs. MT4 hatte dieses Problem nicht, wie sich herausstellte, auch weil die Felder nach der Ankündigung nicht absichtlich geleert werden mussten. Im MT5 ist dies jedoch notwendig. Meine Technologie erfordert eine allmähliche Füllung des Kerns und eine Veränderung seiner Größe. Die genaue Größe einiger Arrays ist nicht im Voraus bekannt. Gleichzeitig wäre wegen der vielen Schleifen auf den Feldern, die gerade gefüllt werden, alles durcheinander. Wäre kein Müll in den Zellen, hätte alles schon längst funktioniert.

Das heißt, es gibt einerseits Müll in Arrays und andererseits kritische Fehler bei Überschreitungen. Es ist wie eine drakonische Bedingung...

Ich möchte verstehen, warum sie die automatische Löschung von Arrays entfernen und deklarierte Variablen auf Null reduzieren mussten, wie in MT4?

Wenn wir Variablen tolerieren können, werden wir mit dem Problem der ständigen Müllsammlung in großen Arrays konfrontiert, und wir müssen sie nicht nur bei der Deklaration, sondern auch bei der Größenänderung bereinigen... Warum?

Auch er stieß anfangs auf ähnliche Schwierigkeiten.

Meiner Meinung nach werden Arrays auf eine bestimmte Art und Weise gefüllt, dies sollte in Schleifen oft berücksichtigt werden.

 
Nikolai Semko:
Peter, ich weiß nicht, was du meinst?

alle über dieselbehttps://www.mql5.com/ru/forum/293630/page179#comment_10802823

jetzt ist es die Schuld von MQL5... ;)

Мой подход. Ядро - Движок.
Мой подход. Ядро - Движок.
  • 2019.02.28
  • www.mql5.com
В этой ветке, я хочу рассказать о своем подходе в программировании. Заранее предупреждаю, - здесь не будет обсуждений GUI...
 
Igor Makanu:

alle über dieselbehttps://www.mql5.com/ru/forum/293630/page179#comment_10802823

jetzt ist es die Schuld von MQL5... ;)

Richtig. Ich bin nicht an MQL4 gewöhnt.
Was, wirklich, keine Notwendigkeit, Überläufe dort zu kontrollieren? Aber es ist schrecklich, nicht wahr? Wie finden Sie Fehler?
 
Nikolai Semko:
Ja. Ich bin nicht an MQL4 gewöhnt.
Was, wirklich, es gibt keinen Grund, Überläufe zu kontrollieren? Aber das ist doch furchtbar, oder? Wie kann ich Fehler erkennen?

Nikolay, machen Sie sich keine Sorgen über MQL4, dort ist alles in Ordnung. Der Themenstarter füllt die Felder nach Belieben. Das war's.

 
Nikolai Semko:
Nun, ja. Ich bin nicht an MQL4 gewöhnt.
Was, wirklich, es gibt keinen Grund, Überläufe zu kontrollieren? Aber das ist doch furchtbar, oder? Wie finden Sie Fehler?

Natürlich wissen Sie das.

Ein Programmierer, der sich selbst und seine Programme respektiert, wird keine Fehler machen. In MQL4, wenn Sie #property strict nicht verwenden, können Sie sich auf ein Array mit der Größe 10 mit dem Index 20 beziehen. Und es passiert nichts - das Programm funktioniert weiter, aber es ist Sache des Programmierers zu entscheiden, was er als nächstes verwenden will. Wenn er klug ist, wird er sicherlich alles überprüfen und kontrollieren, um keine Werte außerhalb des Feldes zu erhalten, aber wenn er es "grob" macht, denkt er nicht an eine solche Kontrolle, und "die Hauptsache ist, dass es funktioniert, aber wie es funktioniert - irgendwie...".
Die meisten Benutzer, die sich nicht damit befasst haben, beschweren sich über "schlechtes, böses und kompliziertes MQL5", weil es ihnen nicht mehr erlaubt, ihre eigenen Kreationen zu fälschen wie früher. Aber diejenigen, die ursprünglich dachten und Code mit Überprüfungen und Kontrolle der empfangenen Daten erstellten, bemerkten keinen Unterschied in der Komplexität der Sprachen und fragen sich nun - "wo ist die Komplexität - es ist die gleiche...".

 
Реter Konow:

Ich habe noch nie ernsthaft mit MT5 gearbeitet, und jetzt übertrage ich ein großes Projekt auf einmal darauf.

Schwerwiegender Unterschied bei Arrays beim Umschreiben

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Merkmale der Sprache mql4, Feinheiten und Tricks

fxsaber, 2019.02.12 13:12

Eigenschaften von ArrayResize für mehrdimensionale Arrays
void OnStart()
{
  int Array[][2];
  
  Print(ArrayResize(Array, 7)); // MQL5 - 7, MQL4 - 14
  Print(ArraySize(Array));      // 14
}