Fehler, Irrtümer, Fragen - Seite 2000

 
Alexey Viktorov:

Und es macht keinen Sinn, dies bereits in OnCalculate zu tun. Es gibt keinen Grund, das Array mit etwas zu initialisieren und es dann mit Werten aus der Formel zu füllen? Wenn Sie einen Balken bzw. eine Array-Zelle hinzufügen, was bringt es, diese mit etwas zu füllen und dann sofort mit einem Wert aus der Formel oder einem leeren Wert?

Dies ist der Fall, wenn die Formel auf alle Balken angewendet wird. Und wenn es nur für die letzte gilt? Ich zum Beispiel habe viele Indizes, bei denen ich die Anzahl der zu berechnenden Balken einstellen kann, da die Berechnungen sehr umfangreich sein können. Eine Initialisierung ist erforderlich.

Generell gilt: Wenn Sie es nicht tun wollen, tun Sie es nicht. Ich werde nicht mehr darüber diskutieren. ;-)

 
fxsaber:

Es geht also nicht um ArrayResize, es geht um ArrayInitialize. ArrayResize garantiert Nullen in MT4.

Und wenn Sie ihn aufmerksam lesen? Ich möchte ihn noch einmal zitieren.

DieInitialisierung eines Arrays mit dem AusdruckArrayInitialize(array, init_val) bedeutet nicht die Initialisierung der Elemente der für dieses Array zugewiesenen Reserve mit demselben Wert. Wenn die Funktion ArrayResize() anschließend die Größe des Arrays innerhalb der aktuellen Reserve erhöht, werden die Elemente, deren Werte nicht definiert sind und meistens nicht gleichinit_val sind, am Ende des Arrays hinzugefügt.

ArrayInitialize - Операции с массивами - Справочник MQL4
ArrayInitialize - Операции с массивами - Справочник MQL4
  • docs.mql4.com
ArrayInitialize - Операции с массивами - Справочник MQL4
 
Stanislav Korotky:

Und wenn Sie ihn aufmerksam lesen? Ich zitiere sie noch einmal.

DieInitialisierung eines Arrays mit dem AusdruckArrayInitialize(array, init_val) bedeutet nicht die Initialisierung der Elemente der Reserve, die für dieses Array reserviert sind. Wenn die Funktion ArrayResize() anschließend die Größe des Arrays innerhalb der aktuellen Reserve erhöht, werden die Elemente , deren Werte nicht definiert sind und meistens nicht gleichinit_val sind, am Ende des Arrays hinzugefügt .

Sie haben es nur sicher gemacht, damit es schwieriger zu erklären ist, dass es dort kein init_val gibt. Aber Sie können es natürlich auch durch "dessen Werte null sind" ersetzen.
 
Stanislav Korotky:

Und warum erfinden Sie solch unrealistische Szenarien, die im Wesentlichen MQL-Programmierfehler sind? Die vollständige Initialisierung wird natürlich nur einmal durchgeführt oder wenn ein Datenpumpen festgestellt wird. In diesem Fall wäre es effizienter, wenn der Kernel diese Aufgabe übernehmen würde.

Wo habe ich von einer doppelten Initialisierung gesprochen? Genau das Gleiche, wie oben erwähnt, das Füllen aller Elemente in einer Schleife, von dem ich sprach. Wenn sie vorhanden ist, ist die Initialisierung unnötig und verschwendet nur Ressourcen.

Nun, und wenn Sie nicht alle Balken zählen, dann kümmern Sie sich selbst um das Auffüllen mit Nullen.

 
Stanislav Korotky:

Dies ist der Fall, wenn die Formel auf alle Balken angewendet wird. Und wenn es nur für die letzte gilt? Ich zum Beispiel habe viele Indizes, bei denen ich die Anzahl der zu berechnenden Balken einstellen kann, da die Berechnungen sehr umfangreich sein können. Eine Initialisierung ist erforderlich.

Generell gilt: Wenn Sie es nicht tun wollen, tun Sie es nicht. Ich werde nicht mehr darüber diskutieren. ;-)

Hier sind goldene Worte... Aber es ist besser zu sagen: "Wo wir nicht müssen, werden wir es nicht tun". Oder umgekehrt: "Wir werden es nur tun, wenn es notwendig ist".

 
fxsaber:

Es werden nur neue Array-Elemente initialisiert. Und der Punkt ist immer noch derselbe - identische Ergebnisse von Durchlauf zu Durchlauf, selbst wenn ein Fehler im Code vorliegt (oft nicht der eigene).Ich habe oben ein Beispiel mit der mathematischen Bibliothek gegeben.

Unrat ist böse.

Ich kann nicht einmal angemessene Worte finden, um es zu kommentieren.

Wenn Sie aufgefordert werden, sich damit zu beschmieren... Ich glaube nicht, dass du dich darauf einlassen würdest. Sagen wir, beim ersten Mal wissen Sie nicht, was es ist, und beim zweiten Mal?

Warum verlangen Sie von den Entwicklern, dass sie Sie vor Mist schützen? Schützen Sie sich. Oder wenn Sie unwiderlegbare Argumente dafür haben, dass es notwendig ist, dann verbergen Sie diese nicht vor der Öffentlichkeit.

Wissen Sie, mql3 war ein Ort, an dem man so viele Fehler schreiben konnte, dass einem die Haare zu Berge standen... Aber der EA ist egal, er funktioniert trotzdem... Funktioniert er richtig? Wen interessiert das?

Aus irgendeinem Grund gibt es keine Argumente dafür, das Feld zu verlassen. Und es scheint, dass dies ein kleineres Übel ist als Müll in einem Array oder einer Variablen. Nun, wir haben keinen solchen Index im Array, wie es früher der Fall war, also seien Sie mein Gast und lassen Sie uns weiterarbeiten. Hände, zurück an die Arbeit. Es hat alles geklappt...

 
Alexey Viktorov:

Warum verlangen Sie also von den Entwicklern, dass sie Sie vor Mist schützen? Schützen Sie sich. Oder wenn es zwingende Argumente dafür gibt, dann sollte man sie nicht vor der Öffentlichkeit verbergen.

Es wurden keine Forderungen gestellt, die Unwiderlegbarkeit ist nachgewiesen.

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Wanzen, Wanzen, Fragen

fxsaber, 2017.09.12 16:17

#property strict

void OnStart()
{
  uchar Array[];
  
  const int Size = ArrayResize(Array, 10000);
  
  bool Res = false;
  
  for (int i = 0; (i < Size) && (!Res); i++)
    Res = Array[i];
    
  Print(Res);
}

In MT4 wird es immer false zurückgeben, weil es ohne Müll nur Nullen sind. Im MT5 ist dies der Fall.

Derselbe Code im MT4-Tester wird also von Durchlauf zu Durchlauf immer die gleichen Ergebnisse zeigen. In einem MT5-Tester ist das nicht der Fall.

 
fxsaber:

Es gab keine Anforderung, die Unwiderlegbarkeit ist nachgewiesen

Wer verbietet es, nur eine Zeile hinzuzufügen?

  uchar Array[];
  const int Size = ArrayResize(Array, 10000);
  bool Res = false;
  ArrayInitialize(Array, 0);
  for (int i = 0; (i < Size) && (!Res); i++)
    Res = Array[i];
  Print(Res); 

Oder wissen Sie nicht, dass falsch gleich 0 ist, alles andere ist wahr, unabhängig vom Vorzeichen? Sie nehmen Werte aus Array-Reserven und wollen sicherstellen, dass es 0 gibt. Nun, in diesem Fall ist es vernünftig , das Array mit Nullen zu initialisieren, aber warum das System mit erzwungenem Nullen belasten, wenn Sie es nicht müssen?

Entschuldigung, aber dieses Beispiel ist absoluter Unsinn.

 
Alexey Viktorov:

Wer verbietet es, nur eine Zeile hinzuzufügen?

Es geht nicht um mich.

Forum zum Thema Handel, automatisierte Handelssysteme und Strategietests

Wanzen, Wanzen, Fragen

fxsaber, 2017.09.12 16:52

Es ist erschreckend, dass eine mathematische Bibliothek (Include\Math -7Mb Quellcode) an einer/zwei Stellen nicht initialisiert wurde! Und wie kann man diesen Fehler beheben, der im MT5-Tester unterschiedliche Einzelläufe und im MT4 dieselben Läufe anzeigt?

 
fxsaber:

Es geht nicht um mich.

Das Einzige, was noch zu tun ist, ist, alle Bibliotheken anderer Leute aufzugeben. Und ich habe mir keine dieser Bibliotheken angeschaut oder benutzt. Es ist einfacher, alles zu schreiben, was man braucht, als sich durch einen Stapel zu wühlen und nach Fehlern zu suchen... Und um nur zwei oder drei Funktionen zu verwenden...

Grund der Beschwerde: