Fehlercode 5004 - Seite 2

 
mfilename = StringSubstr(OrderTicket(),StringLen(OrderTicket())-7,7) + ".DAT";

fhandle=FileOpen(mfilename, FILE_BIN|FILE_READ);

if(fhandle<=0)

{ Alert( "File:", mfilename, " not found, the last error is: ", GetLastError());

filewriting(mfilename); }

        if(fhandle>0)

FileClose(fhandle);
 
raisingfire:

Dies ist der Abschnitt, der die Datei öffnet und die Datei schließt:

Ich verwende die Standard-MQL4-Dateifunktionen, keine DLL-Aufrufe.

Können Sie das Folgende hinzufügen und bitte über die Ausgabe berichten...

mfilename = StringSubstr(OrderTicket(),StringLen(OrderTicket())-7,7) + ".DAT";

Print("Filename:  ", mfilename);    // <--- add this line

fhandle=FileOpen(mfilename, FILE_BIN|FILE_READ);

if(fhandle<=0)

{ Alert( "File:", mfilename, " not found, the last error is: ", GetLastError());

filewriting(mfilename); }

        if(fhandle>0)

FileClose(fhandle);


Haben Sie sich vergewissert, dass die Datei im richtigen Verzeichnis existiert? Sie sollte nicht mehr in experts\files sein. Sie muss sich in MQL4-Dateien befinden. Sie können den richtigen MQL4-Ordner in MT4 finden, indem Sie auf Datei > Datenordner öffnen klicken.

 
  1. mfilename = StringSubstr(OrderTicket(),StringLen(OrderTicket())-7,7) + ".DAT";

    Orderticket ist ein int, StringLen erwartet eine Zeichenkette

    OrderTicket
    StringLen StringSubstr
    12345678
    8
    ("12345678", 1, 7) = "2345678"
    1234567
    7
    ("12345678", 0, 7) = "1234567"
    1234566("123456", -1, 7) UNGÜLTIG

    Wenn also die Anzahl der Ziffern < 7 ist (wie im Tester), schlägt der Aufruf fehl. > 7 führende Ziffern werden entfernt?

    Try IntegerToString( OrderTicket(), 7, '0') + ".DAT" // 12345 -> 0012345.DAT

  2. Es gibt keine Experten\files Datenstruktur in MetaTrader 4 Build 600 und höher - MQL4 Artikel
 
RaptorUK:

Können Sie Folgendes hinzufügen und über das Ergebnis berichten...


Haben Sie sich vergewissert, dass die Datei im richtigen Verzeichnis vorhanden ist? Sie sollte nicht mehr in experts\files liegen. Den richtigen MQL4-Ordner finden Sie in MT4, indem Sie auf Datei > Datenordner öffnen klicken.


RaptorUK:

Können Sie das Folgende hinzufügen und über das Ergebnis berichten...


Haben Sie sich vergewissert, dass die Datei im richtigen Verzeichnis vorhanden ist? Sie sollte sich nicht mehr in experts\files befinden. Sie muss sich in MQL4-Dateien befinden. Sie finden den richtigen MQL4-Ordner in MT4, indem Sie auf Datei > Daten ordner öffnen klicken.

Lieber RaptorUK,

hier habe ich die Datei aus dem Protokoll nach der Anweisung Print angehängt.

Ich bin mir bewusst, dass die Ordnerstruktur in Build 610 geändert wurde. Aber dann sollte das Terminal-Client-Programm es automatisch anpassen, weil ich die Standardordner verwende.

Ich danke Ihnen für Ihre Hilfe.

 
WHRoeder:
  1. Orderticket ist ein int, StringLen erwartet eine Zeichenkette

    OrderTicket
    StringLen StringSubstr
    12345678
    8
    ("12345678", 1, 7) = "2345678"
    1234567
    7
    ("12345678", 0, 7) = "1234567"
    1234566("123456", -1, 7) UNGÜLTIG

    Wenn also die Anzahl der Ziffern < 7 ist (wie im Tester), schlägt der Aufruf fehl. > 7 führende Ziffern werden entfernt?

    Try IntegerToString( OrderTicket(), 7, '0') + ".DAT" // 12345 -> 0012345.DAT

  2. Es gibt keine Experten\files Datenstruktur in MetaTrader 4 Build 600 und höher - MQL4 Artikel


Lieber WHRoder,

Ich habe Ihren Vorschlag ausprobiert und er gibt mir immer noch den gleichen Fehlercode: 5004. Sie wies auf eine gute Info, dass orderticket gibt int. Aber das alte Client-Terminal-Programm (Build 580 irgendwas) hat weder einen Kompilierungsfehler noch einen Laufzeitfehler zurückgegeben. Dieser Fehlercode 5004, wie ich bereits erwähnt habe, scheint meine EA-Performance überhaupt nicht zu beeinträchtigen. mein EA kann immer noch Positionen unter den richtigen Bedingungen öffnen und schließen.

Ich verwende das Standardverzeichnis, ich gebe kein bestimmtes Verzeichnis an. Ich konnte sehen, dass die Dateien vorhanden sind, aber trotzdem gelingt es ihm nicht, sie zu öffnen. Um noch mehr Verwirrung zu stiften: Es schlägt nicht immer fehl. Meistens gelingt es, die Datei zu öffnen. Ich habe eine weitere Bedingung hinzugefügt, um zu testen, ob das Öffnen von Dateien gelingt. Die Erfolgsquote liegt bei etwa 10 : 1, wobei die 1 bedeutet, dass das Öffnen der Datei fehlschlägt.

Trotzdem vielen Dank für Ihre Hilfe.

 

Welche Version verwenden Sie?

& vielleicht ist es ein UAC-Problem

 
//you are looking for a word in a number.... twice... It's like asking how many ounces are in a foot. Wrong datatype.
//Change your ticket number to a string.

string ticketString=IntegerToString(OrderTicket());
//now your ticket number is a string.

mfilename = StringSubstr(ticketString,StringLen(ticketString)-7,7) + ".DAT";
//now you are asking for the substring and length of a string instead of an integer.

fhandle=FileOpen(mfilename, FILE_BIN|FILE_READ);

if(fhandle == -1)
//if you are getting an INVALID HANDLE that is -1 you could also just say <0 instead of <=0 this may be why it only fails some times.

{ Alert( "File:", mfilename, " not found, the last error is: ", GetLastError());

filewriting(mfilename); }

        if(fhandle>0)

FileClose(fhandle);

Wie WHRoeder oben sagte: Wenn Sie den Tester verwenden und dieser keine Ticketnummer mit mindestens 7 Ziffern verwendet, bitten Sie ihn, nach einer Teilzeichenkette zu suchen, die an der Position 6 minus 7 (ticketString-7) oder -1 beginnt, was zu einem Absturz führen wird. Sie erwähnten auch den "Standard"-Ordner.

Der "Standard"-Ordner hat sich gegenüber früher geändert. Ich gehe davon aus, dass Sie mit "Standard" den neuen "Standard"-Ordner unter Mql4/files meinen, nicht den alten Ordner experts/files.

Vergewissern Sie sich, dass Sie den obigen Vorschlag befolgt haben und den Ordner file>Open Data Folder verwendet haben, um den tatsächlichen Speicherort zu finden, den Ihre Plattform verwendet. Möglicherweise befindet er sich in users/appdata, wenn Sie UAC verwenden, wie ebenfalls vorgeschlagen wurde... was in Ordnung ist, solange Sie sich dessen bewusst sind und Ihre Pfade entsprechend anpassen, falls erforderlich.

Wenn es richtig läuft, dient dieser Teil des Codes nur der Aufzeichnung und Protokollierung und ist kein integraler Bestandteil der Strategie. Ich hoffe, einige dieser Vorschläge helfen Ihnen, die Strategie fehlerfrei zum Laufen zu bringen. Willkommen im Forum!

PipPip...Jimdandy

 
qjol:

Welche Version verwenden Sie?

& vielleicht ist es ein UAC-Problem


Das aktuelle Client-Terminal, das ich verwende, ist Build 610.
 
Jimdandy:

Wie WHRoeder oben sagte: Wenn Sie den Tester verwenden und dieser keine Ticketnummer mit mindestens 7 Ziffern verwendet, bitten Sie ihn, nach einer Teilzeichenkette zu suchen, die an der Position 6 minus 7 (ticketString-7) oder -1 beginnt, was zu einem Absturz führen wird. Sie erwähnten auch den "Standard"-Ordner.

Der "Standard"-Ordner hat sich gegenüber früher geändert. Ich gehe davon aus, dass Sie mit "Standard" den neuen "Standard"-Ordner unter Mql4/files meinen, nicht den alten Ordner experts/files.

Vergewissern Sie sich, dass Sie den obigen Vorschlag befolgt haben und die Funktion Datei>Datenordner öffnen verwendet haben, um den tatsächlichen Speicherort zu finden, den Ihre Plattform verwendet. Möglicherweise befindet er sich in users/appdata, wenn Sie UAC verwenden, wie ebenfalls vorgeschlagen wurde... was in Ordnung ist, solange Sie sich dessen bewusst sind und Ihre Pfade entsprechend anpassen, falls erforderlich.

Wenn es richtig läuft, dient dieser Teil des Codes nur der Aufzeichnung und Protokollierung und ist kein integraler Bestandteil der Strategie. Ich hoffe, einige dieser Vorschläge helfen Ihnen, die Strategie fehlerfrei zum Laufen zu bringen. Willkommen im Forum!

PipPip...Jimdandy


Wie ich WHRoeder geantwortet habe, habe ich seinen Vorschlag befolgt und er gibt mir immer noch denselben Fehlercode 5004.

Was den Standardordner betrifft, so ist mir bewusst, dass sich die Ordnerstruktur in Build 610 geändert hat. Ich habe meinen EA neu kompiliert und ich habe nie meine eigenen Ordner angegeben. Ich bin also davon ausgegangen, dass der EA die DAT-Dateien in den Standardordnern des Client-Terminals erstellen und suchen würde. Und es hat sich bestätigt, dass der FILEOPEN in den meisten Fällen erfolgreich ist. Nur in 10 % der Fälle schlägt die gleiche Anweisung fehl. (Ich verwende eine einfache if-Anweisung, um zu testen, ob sie erfolgreich ist).

Zum Wohl,

 
raisingfire:

Lieber RaptorUK,

hier habe ich die Datei aus dem Protokoll nach der Anweisung Print angehängt.

Ich bin mir bewusst, dass die Ordnerstruktur in Build 610 geändert wurde. Aber dann sollte das Terminal-Client-Programm es automatisch anpassen, weil ich die Standardordner verwende.

Ich danke Ihnen für Ihre Hilfe.

Es war keine Datei angehängt...

Haben Sie sich vergewissert, dass die Datei, aus der Sie zu lesen versuchen, tatsächlich existiert? Schauen Sie bitte im richtigen Ordner nach und prüfen Sie ... noch etwas: Warum haben Sie eine Funktion namens filewriting(), um aus einer Datei zu LESEN?