Fehler, Irrtümer, Fragen - Seite 650

 
Rosh:
Schreiben Sie an den Service Desk mit allen Einzelheiten (fügen Sie ggf. einen Sachverständigen bei). Es wird schneller gehen.
Gut. Ich werde es heute auf jeden Fall tun. Aber ich werde Ihnen trotzdem ein paar Fragen stellen, um die allgemeine Entwicklung zu fördern. :)
mql5:
Möglicherweise verwenden Sie eine große Anzahl lokaler Funktionsvariablen, z. B. Arrays.
Im nächsten Build für 32-Bit-Terminals können Sie die Stack-Größe mit der entsprechenden Compiler-Eigenschaft #property stacksize kontrollieren

Handelt es sich um ein Problem, das nur 32-Bit-Terminals betrifft? Ich habe x64. Wie verstehe ich "...große Größe lokaler Funktionsvariablen, z.B. Arrays..."? "Wie groß muss er sein, damit der Stapel am Ende überläuft?
 
tol64:
Ist dies nur ein Problem mit 32-Bit-Terminals? Ich habe x64. Wie verstehe ich "...große Größe von lokalen Funktionsvariablen, z.B. Arrays... "Wie groß muss er sein, damit der Stapel am Ende überläuft?
Nein, das ist nicht nur ein Problem des 32-Bit-Terminals. Aber die Lösung für das 32-Bit-Terminal ist jetzt fertig, während sie im 64-Bit-Terminal noch durch eine Stack-Begrenzung von 256 KB begrenzt ist.
Wenn der Programmierer die benötigte Stackgröße jedoch nicht manuell über eine Eigenschaft angibt, arbeitet EX5 im Terminal mit der Standard-Stackgröße (256 KB).

Über die große Größe.
Jede Variablendeklaration innerhalb einer Funktion (mit Ausnahme von statischen Variablen) belegt Platz auf dem Stack, und die Zuweisung von Platz auf dem Stack für lokale Variablen erfolgt bei jedem Aufruf.

Wenn also eine Funktion 64Kb lokale Variablen hat, reicht der Stack für 3 darin verschachtelte Aufrufe, und bei 4 Aufrufen kommt es zu einem Stack-Überlauf (da ein Teil des Stacks für den internen Bedarf des Terminals verwendet wird). Wenn also ein Bedarf an großen lokalen Daten besteht, ist es besser, dynamischen Speicher zu verwenden - beim Aufruf der Funktion wird dem System Speicher für den lokalen Bedarf zugewiesen (new, ArrayResize) und beim Verlassen der Funktion wird der Speicher gelöscht (delete, ArrayFree).
 

Hallo!

Ich kann dieses Problem nicht verstehen.

filehandle=FileOpen("My\\Symbols.txt",FILE_READ|FILE_TXT|FILE_ANSI);

Bei der Fehlersuche funktioniert es gut, die Datei ist in MT5\MQL5\File\ lesbar.

Bei der Ausführung im Testprogramm erscheint die Meldung "Symbols.txt file could not be opened, error 5004" und Handel -1

Ich habe es auch in den Ordner MT5\tester\agent000\MQL5\File gesteckt, aber es sieht es wieder nicht und löscht die Datei dort überhaupt nicht).

Zugleich heißt es in der Beschreibung:

"Die Datei wird im Ordner des Client-Terminals im Unterordner MQL5\files (bzw. im Falle von Tests im Ordner_agent_testing\MQL5\files) geöffnet".

"Die Funktion sucht nach einer Datei im lokalen Ordner (MQL5\Files oder MQL5\Tester\Files im Falle von Tests)."

Ich habe keinen "MQL5\Tester\Files"-Ordner, wie es in der Hilfe steht?

Was mache ich falsch und wie kann ich dieses Problem lösen?

Ich danke Ihnen für Ihre Antwort.

 

Versuchen Sie es mit #property tester_file:

#property tester_file "My\\Symbols.txt"
 
Rosh:

Versuchen Sie es mit #property tester_file:

Ugh-uh-x Es schien in der MT5\tester\agent000\MQL5\File wieder zu helfen, dann funktioniert es mit der Eigenschaft.

Ich danke Ihnen!

 
Fia:

Versuchen Sie den Tester erneut mit Handle -1 und Fehler 5004.

Ich weiß nicht, woran es sonst liegen könnte, es kann die Datei offensichtlich nicht finden, aber beim Debuggen sieht es alles.

Kopieren Sie die Datei nach MQL5\Tester\Files ( erstellen Sie vorher einen Ordner).
Документация по MQL5: Файловые операции / FolderCreate
Документация по MQL5: Файловые операции / FolderCreate
  • www.mql5.com
Файловые операции / FolderCreate - Документация по MQL5
 
uncleVic:
Kopieren Sie die Datei nach MQL5\Tester\Files ( erstellen Sie vorher einen Ordner).

Ich habe versucht, erstellt solche Ordner manuell, legte meine Datei (mit Unterordner, deaktiviert #property tester_file), es nicht finden, es in den Tester in irgendeiner Weise.

Und wenn Sie #property tester_file verbinden, funktioniert es seltsamerweise.

Allerdings lässt er von Zeit zu Zeit einen Ordner und eine Datei in MT5\tester\agent000\MQL5\File abstürzen, was wahrscheinlich daran liegt, dass er alles dort knackt, wenn man #property tester_file deaktiviert.

Ja, ich habe jetzt herausgefunden, dass, wenn ich den Code (irgendwo) in der mq5-Datei (aus der txt aufgerufen wird) ändere, dann kompiliere und zum Tester gehe, alles in MT5\tester\agent000\MQL5\File geknackt wird

Es ist ein Wunder, aber zumindest funktioniert es - und das ist gut so.

 
Fia:

Ich habe versucht, erstellt solche Ordner manuell, legte meine Datei (mit Unterordner, deaktiviert #property tester_file), es nicht finden, es in den Tester in irgendeiner Weise.

Und wenn Sie #property tester_file verbinden, dann funktioniert es seltsamerweise.

Allerdings lässt er von Zeit zu Zeit einen Ordner und eine Datei in MT5\tester\agent000\MQL5\File abstürzen, was wahrscheinlich daran liegt, dass er alles dort knackt, wenn man #property tester_file deaktiviert.

Ja, jetzt habe ich herausgefunden, dass, wenn ich den Code (irgendwo) in der mq5-Datei (aus der txt aufgerufen wird) ändere, dann kompiliere und zum Tester gehe, es alles in MT5\tester\agent000\MQL5\File knackt

Es ist ein Wunder, aber zumindest funktioniert es, und das ist gut so.

Wenn W7, legen Sie die Datei im Verzeichnis Document and Setting/.../MetaQuotes/Common/Files ab, oder deaktivieren Sie UAC

PS: Überprüfen Sie noch einmal die korrekte Schreibweise des Namens, auf welchen Layouts der Name geschrieben ist (am besten kopieren), ob am Ende des Namens noch Platz ist usw.

 
Urain:

Wenn W7, legen Sie die Datei in Document and Setting/.../MetaQuotes/Common/Files ab, oder deaktivieren Sie UAC

PS: Überprüfen Sie noch einmal die korrekte Schreibweise des Namens, auf welchen Layouts der Name geschrieben ist (es ist besser zu kopieren), das Vorhandensein eines Leerzeichens am Ende des Namens usw.

Ich habe wirklich Win7 64bit, aber UAC ist Null.

C:\Dokumente und Einstellungen\Alle Benutzer\MetaQuotes\Terminal\Gemeinsame\Dateien\ Ich habe meinen Ordner und meine Datei dort abgelegt, das hat nicht geholfen, die Datei wird im Prüfprogramm nicht gefunden.

Ja, ich denke, alles ist richtig mit dem Namen, bei #property tester_file im Test funktioniert (und auf die Debugging-Arbeiten auf jeder ), aber im Tester keine Möglichkeit, außer als nur durch #property tester_file.

Und mit dem oben erwähnten Problem der Tötung der Datei nach dem Ändern und Kompilieren mq5 (ich habe ein solches Layout).

 

Sie haben eine eklatante Lüge in Ihre Hilfe geschrieben:

CLBufferWrite

Schreibt ein Array in den OpenCL-Puffer.

CLBufferWrite(
intbuffer//Zugriff auf OpenCL-Puffer
const void&data[]// Array von Werten
uintoffset=0// ab welchem Element, Standard ist ab dem ersten Element
voidsize=WHOLE_ARRAY// Anzahl der Werte, standardmäßig das gesamte Array
);

Parameter

......

Versatz

.....

Größe

[in] Die Anzahl der zu schreibenden Werte. Standardmäßig werden alle Werte des Arrays in den OpenCL-Puffer geschrieben.

......

Es wird tatsächlich die Anzahl der Bytes (!!!) geschrieben, nicht die Werte selbst.

Ich habe zwei Nächte damit verbracht , den Indikator zu debuggen, bis ich es herausgefunden habe! Und warum? - Weil ich an deinen Text geglaubt habe...

FIX IT NOW !!! :))

// Ich habe es nicht rechtzeitig herausgefunden, weil die Standardeinstellung ( size=WHOLE_ARRAY) korrekt funktioniert.