Codice di errore 5004 - pagina 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:

Questa è la sezione che apre il file e chiude il file:

Uso le funzioni standard del file MQL4, non le chiamate alla DLL.

Puoi aggiungere quanto segue e riferire qual è il risultato, per favore.

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);


Hai confermato che il file esiste nella directory corretta? Non dovrebbe più essere in experts\files. . . . deve essere in MQL4\Files si può trovare la cartella MQL4 corretta da MT4 cliccando File > Open data Folder

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

    Orderticket è un int, StringLen si aspetta una stringa

    OrderTicket
    StringLen StringSubstr
    12345678
    8
    ("12345678", 1, 7) = "2345678"
    1234567
    7
    ("12345678", 0, 7) = "1234567"
    1234566("123456", -1, 7) NON VALIDO

    quindi se il numero di cifre < 7 (come nel tester) la chiamata fallisce. > 7 cifre iniziali vengono rimosse?

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

  2. Non c'è una struttura dati experts\files in MetaTrader 4 Build 600 e superiori - Articoli MQL4
 
RaptorUK:

Puoi aggiungere quanto segue e riferire qual è il risultato, per favore...


Hai confermato che il file esiste nella directory corretta? Non dovrebbe più essere in experts\files. . . . deve essere in MQL4\Files puoi trovare la cartella MQL4 corretta da MT4 cliccando File > Open data Folder


RaptorUK:

Puoi aggiungere quanto segue e riferire qual è il risultato, per favore...


Hai confermato che il file esiste nella directory corretta? Non dovrebbe più essere in experts\files. . . . deve essere in MQL4\Files puoi trovare la cartella MQL4 corretta da MT4 cliccando su File > Open data Folder

Caro RaptorUK,

Qui ho allegato il file del log dopo la dichiarazione di stampa.

Sono consapevole che la struttura delle cartelle è stata cambiata nella build 610. Ma allora, il programma client terminale dovrebbe regolarlo automaticamente perché io uso le cartelle di default.

Grazie per il vostro aiuto.

 
WHRoeder:
  1. Orderticket è un int, StringLen si aspetta una stringa

    OrderTicket
    StringLen StringSubstr
    12345678
    8
    ("12345678", 1, 7) = "2345678"
    1234567
    7
    ("12345678", 0, 7) = "1234567"
    1234566("123456", -1, 7) NON VALIDO

    quindi se il numero di cifre < 7 (come nel tester) la chiamata fallisce. > 7 cifre iniziali vengono rimosse?

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

  2. Non c'è una struttura dati experts\files in MetaTrader 4 Build 600 e superiori - Articoli MQL4


Caro WHRoder,

Ho provato il tuo suggerimento e mi dà ancora lo stesso codice di errore: 5004. Hai sottolineato una buona informazione che orderticket restituisce int. Ma poi, il vecchio programma client terminal (build 580 qualcosa) non ha restituito alcun errore di compilazione né di runtime. Questo codice di errore 5004, come ho detto prima, non sembra influenzare le prestazioni del mio EA. Il mio EA può ancora aprire e chiudere la posizione nella condizione corretta.

Uso la directory predefinita, non specifico una directory specifica. Ho potuto vedere che i file sono lì, ma ancora non riesce ad aprirli. Per aggiungere ulteriore confusione, non fallisce sempre. La maggior parte delle volte, riesce ad aprire i file. Ho aggiunto un'altra condizione per verificare se riesce ad aprire il file. La percentuale di successo è di circa 10 : 1 dove l'1 è il fallimento dell'apertura dei file.

Grazie comunque per il vostro aiuto.

 

che versione stai usando

e forse è un problema di UAC

 
//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);

Come ha detto WHRoeder sopra... se stai usando il tester e non sta usando un numero di biglietto che contiene almeno 7 cifre allora gli stai chiedendo di cercare una sottostringa che inizia alla posizione 6 meno 7 (ticketString-7) o -1... il che lo farà cadere. Inoltre hai menzionato la cartella 'default'.

La cartella 'default' è cambiata da come era prima. Devo presumere che quando dici 'default' stai parlando della nuova cartella 'default' in Mql4/files... non nella vecchia experts/files.

Assicurati di aver seguito il suggerimento di cui sopra e di aver usato il file>Open Data Folder e di aver guardato nella posizione reale che la tua piattaforma sta usando. Potrebbe essere in users/appdata se state usando UAC come è stato suggerito... il che va bene, purché ne siate consapevoli e regoliate i vostri percorsi di conseguenza, se necessario.

Se il trading è corretto, apparentemente questa parte del codice è solo per la registrazione e la registrazione e non è parte integrante della strategia. Spero che alcuni di questi suggerimenti ti aiutino a farlo funzionare senza errori. Benvenuto nel forum!

PipPip...Jimdandy

 
qjol:

che versione stai usando

e forse è un problema di UAC


l'attuale terminale client che sto usando è la build 610.
 
Jimdandy:

Come ha detto WHRoeder sopra... se stai usando il tester e non sta usando un numero di biglietto che contiene almeno 7 cifre allora gli stai chiedendo di cercare una sottostringa che inizia alla posizione 6 meno 7 (ticketString-7) o -1... il che lo farà cadere. Inoltre hai menzionato la cartella 'default'.

La cartella 'default' è cambiata da come era prima. Devo presumere che quando dici 'default' stai parlando della nuova cartella 'default' in Mql4/files... non nella vecchia experts/files.

Assicurati di aver seguito il suggerimento di cui sopra e di aver usato il file>Open Data Folder e di aver guardato nella posizione reale che la tua piattaforma sta usando. Potrebbe essere in users/appdata se state usando UAC come è stato suggerito... il che va bene, purché ne siate consapevoli e regoliate i vostri percorsi di conseguenza, se necessario.

Se il trading è corretto, apparentemente questa parte del codice è solo per la registrazione e la registrazione e non è parte integrante della strategia. Spero che alcuni di questi suggerimenti ti aiutino a farlo funzionare senza errori. Benvenuto nel forum!

PipPip...Jimdandy


Come ho risposto a WHRoeder, ho seguito il suo suggerimento e mi dà ancora lo stesso codice di errore 5004.

Per la cartella di default, sono consapevole che la struttura delle cartelle è cambiata nella build 610. Ho ricompilato il mio EA e non ho mai specificato le mie cartelle. Quindi, ho dato per scontato che l'EA creasse e cercasse i file DAT nelle cartelle predefinite del terminale client. Ed è confermato che la maggior parte delle volte, il FILEOPEN ha successo. Solo il 10% della stessa dichiarazione fallisce. (Sto usando una semplice istruzione if per testare se ha successo).

Grazie,

 
raisingfire:

Caro RaptorUK,

Qui ho allegato il file del registro che segue la dichiarazione di stampa.

Sono consapevole che la struttura delle cartelle è stata cambiata nella build 610. Ma allora, il programma client terminale dovrebbe adattarla automaticamente perché io uso le cartelle di default.

Grazie per il tuo aiuto.

Non c'era nessun file allegato . . .

Hai confermato che il file che stai cercando di leggere esiste davvero? Per favore, guarda nella cartella corretta e controlla... un'altra cosa, perché hai una funzione chiamata filewriting() per LEGGERE da un file?