Fehler, Irrtümer, Fragen - Seite 348

 
Rosh:

Wenn es eine Position gibt, erhalten Sie eine Endlosschleife, weil

ist gleichbedeutend mit

Es gibt keine Möglichkeit, die Schleife im Code zu verlassen, da es im Textkörper des Operators keine Unterbrechung gibt;
Vielen Dank, es sollte nicht da sein; ich habe es korrigiert, alles funktioniert.
 

Fehler (Build 421, vielleicht etwas in 425 behoben, noch kein Update auf 425 von alpari):

1. Wie bereits im Thread über die 3D-Visualisierung geschrieben, ändern sich die Beschriftungen der 3D-Diagramme (Skalenname und Skalenwert) nicht, wenn die Parameter für die Anzeige im Diagramm geändert werden.

2. Während der schnellen Optimierung wird der Graph bei ca. 10600 Durchgängen angepasst, d.h. die Optimierung geht über 50,51...60 Generationen und der Graph verschiebt sich nicht und neue Durchgänge werden nicht angezeigt. Gleichzeitig wird auf der Registerkarte "Einstellungen" anstelle der Anzahl der Durchläufe "Optimierungsfortschritt:" angezeigt, und unter unerklärlichen Umständen ändert sich dieser Wert noch immer, z. B. 12420/14400 (die Zahlen sind ungefähre Angaben).

3. Gelöschte Agenten können in den Zustand "Beschäftigt" übergehen und in diesem Zustand bleiben, ich muss sie aus- und wieder einschalten, danach geht die Optimierung weiter.

Und eine Frage: Wird es möglich sein, die Diagrammansicht (1D/2D/3D) während der Optimierung zu ändern und nicht nach deren Abschluss?

 
PiramidaR:

Fehler (Build 421, vielleicht etwas in 425 behoben, noch kein Update auf 425 von alpari):

Eröffnen Sie mit demselben Terminal ein Konto bei MetaQuotes, und es wird aktualisiert. Wechseln Sie dann wieder zu einem anderen Konto
 
PiramidaR:

Fehler (Build 421, vielleicht etwas in 425 behoben, noch kein Update auf 425 von alpari):

1. Wie bereits im Thread über die 3D-Visualisierung geschrieben, ändern sich die Beschriftungen der 3D-Diagramme (Skalenname und Skalenwert) nicht, wenn die Parameter für die Anzeige im Diagramm geändert werden.

2. Während der schnellen Optimierung wird der Graph bei ca. 10600 Durchgängen angepasst, d.h. die Optimierung geht über 50,51...60 Generationen und der Graph verschiebt sich nicht und neue Durchgänge werden nicht angezeigt. Gleichzeitig wird auf der Registerkarte "Einstellungen" anstelle der Anzahl der Durchläufe "Optimierungsfortschritt:" angezeigt, und unter unerklärlichen Umständen ändert sich dieser Wert noch immer, z. B. 12420/14400 (die Zahlen sind ungefähre Angaben).

3. Gelöschte Agenten können in den Zustand "Beschäftigt" übergehen und in diesem Zustand bleiben, ich muss sie aus- und wieder einschalten, danach geht die Optimierung weiter.

Und eine Frage: Wird es möglich sein, die Grafikansicht (1D/2D/3D) während der Optimierung zu ändern und nicht nach deren Abschluss?

1,2 Behoben, aber nicht in der neuesten Version enthalten

3 Wir arbeiten daran.

Es wird keine solche Funktion geben

 
Ich möchte nicht nur die Möglichkeit haben, den Wert anzugeben, der nicht gezeichnet werden soll
PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,EMPTY_VALUE);

sondern auch in der Lage sein,das Array automatisch mit diesem Wert zu initialisieren. Wenn der Indikator dem letzten Takt nichts zugewiesen hat, dann wird standardmäßig das zugewiesen, was in der

PLOT_EMPTY_VALUE

oder besser gesagt, Sie initialisieren ihn zunächst mit einem leeren Wert und lassen den Indikator dann schreiben, was er will.

Denn jetzt wird der Standardwert Null sein, aber Null ist bei vielen Indikatoren eine signifikante Zahl, die gezogen werden sollte.

HZ schrieb in diesem Thread, wie ich nicht sicher bin, dass dies nicht gelöst wurde, so dass der Wunsch kann als eine Frage angesehen werden. Wenn ja, sagen Sie mir bitte, wie das Problem gelöst wird.

 

Urain:

Denn im Moment ist die Standardzahl Null, aber Null ist bei vielen Indikatoren eine sinnvolle Zahl, die gezogen werden muss.

In der Tat kann dort alles sein, es ist nur so, dass es normalerweise Glück ist, dass es Null ist. Der Artikel berichtet direkt über denIndikator aus dem Indikator in MQL5:

Ist es notwendig, die Indikatorpuffer zu initialisieren?

Arrays in MQL5 werden standardmäßig nicht mit einem Wert initialisiert, und das gilt natürlich auch für Arrays, die mit SetIndexBuffer() Indikatorpuffern zugewiesen werden. Wenn ein Array ein Indikatorpuffer ist, hängt seine Größe vom Parameter rates_total im OnCalculate() Handler ab.

Es könnte verlockend sein, alle Indikatorpuffer mit einem leeren Wert von EMPTY_VALUE zu initialisieren, indem man die Funktion ArrayInitialize() verwendet, z.B. einmal zu Beginn von OnCalculate()
//--- если это первый вызов OnCalculate() 
   if(prev_calculated==0)
     {
      ArrayInitialize(TSIBuffer,EMPTY_VALUE);
     }

Es wird jedoch aus folgendem Grund nicht empfohlen, dies zu tun: Während des Betriebs des Terminals werden die Kurse für das Symbol, auf dessen Daten der Indikator berechnet wird, empfangen. Daher wird die Anzahl der Balken mit der Zeit zunehmen, und das Terminal wird zusätzlichen Speicher für die Indikatorpuffer zuweisen.

Die Werte in den neu hinzugefügten Array-Elementen haben jedoch einen beliebigen Wert, da bei der Neuzuweisung von Speicher für ein beliebiges Array keine Initialisierung stattfindet. Und die anfängliche Initialisierung kann das irreführende Vertrauen vermitteln, dass alle Elemente des Arrays, denen wir nicht explizit einen Wert zugewiesen haben, mit demselben Wert gefüllt werden, mit dem wir das Array beim ersten Mal initialisiert haben. Dies ist sicherlich nicht der Fall, und wir sollten uns nie darauf verlassen, dass der Wert einer Variablen oder eines Array-Elements mit dem gewünschten Wert initialisiert wird.

Es ist notwendig, für jedes Element des Indikatorpuffers einen Wert zu setzen, und wenn der Indikatorwert für diesen Balken nicht definiert ist (gemäß dem im Indikator implementierten Algorithmus nicht berechnet wird), dann sollte für solche Fälle explizit ein leerer Wert gesetzt werden. Zum Beispiel wird der Indikatorpufferwert mit Hilfe der Divisionsoperation berechnet, und irgendwann kann es sich herausstellen, dass der Teiler gleich Null ist.
 
Rosh:

Eigentlich kann alles da sein, nur ist es meistens ein Glück, dass da nichts ist. Der ArtikelIndicator from Indicator in MQL5 sagt dies ausdrücklich:


Dies ist genau das Problem, das ich auf Sprachebene lösen möchte, denn die Initialisierung des letzten Wertes erfordert zusätzliche Codezeilen, in denen es zu Fehlern kommen kann.

Auf diese Weise können Sie sicher sein, dass es sich um den exakten Wert handelt, und auf dieser Grundlage können Sie weitere Algorithmen erstellen.

 
Urain:

Dies ist genau das Problem, das ich auf Sprachebene lösen möchte, denn die Initialisierung des letzten Wertes erfordert zusätzliche Codezeilen, die Fehler enthalten können.

Auf diese Weise können Sie sicher sein, dass es einen genauen Wert gibt, und auf dieser Grundlage können Sie weitere Algorithmen erstellen.

Auch ich hatte dieses Problem. Ich unterstütze: eine Lösung auf sprachlicher Ebene.
 
Lizar:
Das habe ich auch schon erlebt. Ich bin dafür, dass die Lösung auf der Sprachebene erfolgt.
+1
 

Gebäude 425

Ich bin verwirrt von dieser Situation mit dem Tester: der EA wird mehrmals unter den gleichen Bedingungen ausgeführt, aber die Ergebnisse der Läufe sind unterschiedlich. Der Unterschied ist gering, aber...

Bei der Überprüfung auf zwei Rechnern erhalte ich 2 verschiedene Ergebnisse, die mit ungefähr gleicher Wahrscheinlichkeit auftreten. Was würde das bedeuten?