Fehler, Irrtümer, Fragen - Seite 239

 

Die Tabelle wurde soeben "aktualisiert". Und es ist wieder das Gleiche:

 
Yedelkin:

Die Tabelle wurde soeben "aktualisiert". Und es ist wieder das Gleiche:

Dringend an servicedesk schreiben und das Terminal nicht schließen
 
AlexSTAL:
Schreiben Sie dringend an servicedesk und halten Sie das Terminal offen
OK, ich werde den Link zu diesem Thema einfach kopieren.
 

Soeben im Terminal überprüft - der EURUSD M1 Chart ist vollständig und lückenlos an der angegebenen Stelle vorhanden.

Versuchen Sie es mit dem Befehl "Aktualisieren" aus dem Kontextmenü des Diagramms.

 
Renat:

Soeben im Terminal überprüft - der EURUSD M1 Chart ist vollständig und lückenlos an der angegebenen Stelle vorhanden.

Versuchen Sie es mit dem Befehl "Aktualisieren" aus dem Kontextmenü des Diagramms.

Manuell erfrischt, danke. Da ich praktisch nicht mit Diagrammen arbeite, habe ich eine Frage: Wie kann ich die Basis der Minitabellen auf der Ebene des Expert Advisor in einer solchen Situation aktualisieren? Das Terminal arbeitet nur mit der ihm zur Verfügung stehenden Datenbank. Soll ich die Funktion zur Überprüfung der Synchronisation integrieren?
 
Renat:

Soeben im Terminal überprüft - der EURUSD M1 Chart ist vollständig und lückenlos an der angegebenen Stelle vorhanden.

Versuchen Sie es mit dem Befehl "Aktualisieren" aus dem Kontextmenü des Diagramms.


Ich glaube, es gibt irgendwo einen schwebenden Fehler.... Da ich nicht der Einzige bin, der sich in etwa in der gleichen Situation befindet....
 
Yedelkin:
Sie wurde manuell aktualisiert, vielen Dank. Da ich praktisch nicht mit Diagrammen arbeite, habe ich eine Frage: Wie aktualisiert man in einer solchen Situation die Minutenbasis? Das Terminal funktioniert nur mit der Basis, die es hat. Muss ich die Funktion der Synchronisationsprüfung integrieren?

Ich habe den Zeitpunkt des Ausfalls und der Wiederaufnahme der Kommunikation im Timer gespeichert.

Mit diesen Informationen können Sie versuchen, den Verlauf für den betreffenden Zeitraum herunterzuladen (Sie können auch die Synchronisierung mit dem Server überprüfen, wenn dies sinnvoll ist).

 

Meine Herren Entwickler, ich bin sprachlos. Ich habe ein Problem mit lokalen Variablen "wischen" in der Objektmethode nach internen Aufruf der gleichen Methode von einem anderen Objekt konfrontiert. Möglicherweise hängt es mit einer Optimierung der verschachtelten Funktionsaufrufe von Objekten zusammen, aber zumindest gibt es keine Fehler im Protokoll und keine Speicherlecks. Ich kann keinen umfangreichen Code zitieren, aber die Bedeutung wird aus den Beispielen im Prinzip klar:

Variante 1

bool operate(CAlgoBlockLogic* s1, CAlgoBlockLogic* s2) {
 bool d1 = s1.process();
 bool d2 = s2.process();
 return (d2 && d1);
}

Variante 2

bool operate(CAlgoBlockLogic* s1, CAlgoBlockLogic* s2) {
 return (s2.process() && s1.process());
}

Im Idealfall sollte der Code genau gleichfunktionieren . Aber... die Varianten funktionieren unterschiedlich.

So. Die Variante 1 funktioniert nicht richtig. Ich habe eine Aufzeichnung in der Debug-Datei durchgeführt und herausgefunden, dass die in der Operate-Funktion definierte Variable d1 in einem inneren Aufruf derselben Operate-Funktion, aber in einem anderen Objekt desselben Typs, mit dem Wert der Variable d1 überschrieben wird. D.h. kurz gesagt, nach dem Aufruf
 bool d2 = s2.process();

Die Variable d1 ändert ihren Wert in den Wert, der beim internen Operate-Aufruf in s2.process aufgetreten ist. Dieses Verhalten ist dasselbe wie bei der Änderung des Wertes einer statischen Variablen für Objekte desselben Typs. Hier hat die Variable jedoch eindeutig einen lokalen Geltungsbereich.

Die Frage der statischen Variablen wurde in diesem Thread angesprochen, und alles ist klar. Was aber ist mit der Unsicherheit der Werte lokaler Variablen zu tun?

Документация по MQL5: Основы языка / Переменные / Область видимости и время жизни переменных
Документация по MQL5: Основы языка / Переменные / Область видимости и время жизни переменных
  • www.mql5.com
Основы языка / Переменные / Область видимости и время жизни переменных - Документация по MQL5
 

"...die in der Funktion operate definierte Variable d1 wird durch den Wert der Variable d1 im internen Aufruf derselben Funktion operate, aber in einem anderen Objekt desselben Typs, überschrieben. D.h. kurz gesagt, nach dem Aufruf von
bool d2 = s2.process();
ändert die Variable d1 ihren Wert auf den Wert, der beim internen operate-Aufruf innerhalb von s2.process aufgetreten ist."

Hört sich entweder nach einer versteckten Rekursion an, mit den üblichen Nebeneffekten, oder ...

 
Vigor:

Theoretisch sollte der Code genau gleichfunktionieren . Aber... die Varianten funktionieren unterschiedlich.


Nein. Es ist nicht identisch.

Im ersten Fall werden s1.process und s2.process bedingungslos aufgerufen

Bei der zweiten Variante wird s1.process nur dann aufgerufen, wenn s2.process true zurückgibt. Dies wird als "verkürzte Konditionsbewertung" bezeichnet.