Fehler, Irrtümer, Fragen - Seite 1998

 
Stanislav Korotky:

Dieses Argument habe ich nicht verstanden (als es von MQ vorgebracht wurde) und ich verstehe es auch jetzt nicht. Die Initialisierung wird nicht weitergehen. Jetzt wird es dem Anwendungsprogrammierer anvertraut, und er macht es trotzdem, aber wie die Praxis zeigt, manchmal mit Fehlern. Würde dies von einem Kernel erledigt, wäre die Leistung nicht beeinträchtigt und es würden keine Fehler auftreten.

Nehmen wir zum Beispiel ein Array von Indikatorpuffern: Beim Initialisieren des Indikators hat der Puffer eine Länge von Null. Was gibt es mit Nullen zu initialisieren? Wenn ein weiterer Index hinzugefügt wird, muss er dann zwangsläufig auf Null gesetzt und dann mit einem Wert aufgefüllt werden? Wozu dient dieses Nullsetzen oder Auffüllen mit EMPTY_VALUE? Und wenn es notwendig ist, PLOT_EMPTY_VALUE und nicht 0 oder EMPTY_VALUE zuzuweisenoder eines zu erzwingen, aber wir brauchen ein anderes... Wie man es auch dreht und wendet, am Ende verschwendet man seine Zeit...

Und eine benutzerdefinierte Anordnung... Das Array wird für einige von Null verschiedene Daten deklariert und EMPTY_VALUE. Warum sollte es also zwangsweise mit etwas initialisiert werden?

Es stellt sich heraus, dass dies in den meisten Fällen die Leistung beeinträchtigt.

 
Alexey Viktorov:

Aber ein benutzerdefiniertes Array... Das Array wird für andere Daten als Null und EMPTY_VALUE deklariert. Welchen Zweck hat es also, ihn zwangsweise mit etwas zu initialisieren?

Weniger "Testergebnisse stimmen nicht überein".

 
fxsaber:

Damit es nicht heißt: "Testergebnisse stimmen nicht überein".

Wer braucht sie?

Schreiben Sie einen Artikel, in dem in jedem Absatz darauf hingewiesen wird, dass Sie EAs nicht bei jedem bestellen sollten. Sie müssen Ihre EAs richtig schreiben.

 
Alexey Viktorov:

Wer braucht sie?

Ich und, da bin ich mir ziemlich sicher, auch die Entwickler.

 
fxsaber:

Für mich und, da bin ich mir ziemlich sicher, auch für die Entwickler.

Ich bezweifle sehr, dass eine solche Kleinigkeit Sie in Bedrängnis bringen würde. Entweder das oder es gibt einen anderen Grund.

 
Alexey Viktorov:

Ich bezweifle sehr, dass eine so triviale Sache Sie überraschen kann. Entweder ist der Grund ein anderer.

Selbst wenn ich perfekt geschrieben hätte (ohne Fehler zu machen - was nicht der Fall ist), ist es normal, die Bibliothek von jemandem zu nehmen (manchmal ohne Quellcode - auf dem Marktplatz) und sie zu verwenden, in der Hoffnung, dass sie kompetent geschrieben ist. Und es gibt keine Garantie dafür, dass Sie danach im Testgerät andere Ergebnisse erzielen werden. Und es wird SEHR schwierig sein, die wahre Ursache zu finden. Und manchmal ist es unmöglich, sie zu reparieren.

Das Ziel ist, dass das Ergebnis von Lauf zu Lauf reproduzierbar ist - identisch, auch bei einem Fehler.

 
fxsaber:

Die ideale Lösung wäre wahrscheinlich, die Initialisierung für alle Programme standardmäßig zu erzwingen und einen Kompilierschalter zu haben, um sie zu deaktivieren (für diejenigen, die sich sicher sind und die Geschwindigkeit um ein paar Prozent erhöhen wollen).

 

Die Initialisierung nimmt wirklich viele Ressourcen in Anspruch. Ich warf ein Stück Code mit erzwungener Initialisierung und bekam fast 2 mal schneller in der Optimierung)

Dabei bin ich über eine interessante Sache gestolpert. Wie ist es möglich, dass der Drawdown 120% beträgt und gleichzeitig das Ergebnis im Plus liegt?

Wenn ich die Strategie teste, erhalte ich einen Drawdown von 109 % und keinen Margin Call, während das Guthaben weiter wächst.
 
Anton Ohmat:

Die Initialisierung nimmt wirklich viele Ressourcen in Anspruch. Ich warf ein Stück Code mit erzwungenen Initialisierung - es beschleunigt in der Optimierung von fast 2 mal)

Sie haben etwas Falsches geschrieben.

 
Andrey Khatimlianskii:

Eine vollständige Initialisierung ist nicht immer erforderlich. Zum Beispiel für einen Indikator, der den Pufferwert für jeden Balken in der Schleife füllt (und zwar unabhängig davon, ob der Indikatorpuffer initialisiert ist oder nicht).

In diesem Fall ist es ohne Zwangsnullstellung wirtschaftlicher.

Und warum erfinden Sie solche unrealistischen Szenarien, die in Wirklichkeit Fehler von MQL-Programmierern 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.