Code d'erreur 5004 - page 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:

C'est la section qui ouvre le fichier et le ferme :

J'utilise les fonctions standard du fichier MQL4, pas les appels de DLL.

Pouvez-vous ajouter ce qui suit et nous faire part du résultat, s'il vous plaît ?

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


Avez-vous confirmé que le fichier existe dans le bon répertoire ? Il ne doit plus être dans le répertoire experts\files. ... il doit être dans MQL4\Files vous pouvez trouver le bon dossier MQL4 à partir de MT4 en cliquant sur Fichier > Ouvrir le dossier de données.

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

    Orderticket est un int, StringLen s'attend à une chaîne de caractères

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

    donc si le nombre de chiffres < 7 (comme dans le testeur) l'appel échoue. > 7 chiffres de tête sont supprimés ?

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

  2. Il n'y a pas de structure de données experts\files dans MetaTrader 4 Build 600 et supérieur - MQL4 Articles
 
RaptorUK:

Pouvez-vous ajouter les éléments suivants et nous faire part des résultats obtenus ?


Avez-vous confirmé que le fichier existe dans le bon répertoire ? Il ne doit plus se trouver dans le dossier experts\files. Vous pouvez trouver le bon dossier MQL4 à partir de MT4 en cliquant sur Fichier > Ouvrir le dossier de données.


RaptorUK:

Pouvez-vous ajouter ce qui suit et nous faire part des résultats obtenus, s'il vous plaît...


Avez-vous confirmé que le fichier existe dans le bon répertoire ? il ne doit plus être dans experts\files. ... il doit être dans MQL4\Files vous pouvez trouver le bon dossier MQL4 à partir de MT4 en cliquant sur Fichier > Ouvrir le dossier de données.

Cher RaptorUK,

J'ai joint le fichier du journal qui suit l'instruction Imprimer.

Je suis conscient que la structure du dossier a été modifiée dans la version 610. Mais le programme client du terminal devrait l'ajuster automatiquement car j'utilise les dossiers par défaut.

Je vous remercie pour votre aide.

 
WHRoeder:
  1. Orderticket est un int, StringLen s'attend à une chaîne de caractères

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

    donc si le nombre de chiffres < 7 (comme dans le testeur) l'appel échoue. > 7 chiffres de tête sont supprimés ?

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

  2. Il n'y a pas de structure de données experts\files dans MetaTrader 4 Build 600 et supérieur - MQL4 Articles


Cher WHRoder,

J'ai essayé votre suggestion et cela me donne toujours le même code d'erreur : 5004. Vous avez souligné une bonne info que orderticket retourne int. Mais alors, l'ancien programme terminal client (build 580 quelque chose) n'a pas retourné d'erreur de compilation ni d'erreur d'exécution. Ce code d'erreur 5004, comme je l'ai déjà mentionné, ne semble pas du tout affecter les performances de mon EA. Mon EA peut toujours ouvrir et fermer une position dans les conditions correctes.

J'utilise le répertoire par défaut, je ne spécifie pas de répertoire spécifique. Je peux voir que les fichiers sont là mais il ne parvient toujours pas à les ouvrir. Pour ajouter à la confusion, il n'échoue pas tout le temps. La plupart du temps, il réussit à ouvrir les fichiers. J'ai ajouté une autre condition pour tester s'il réussit à ouvrir le fichier. Le taux de réussite est d'environ 10 : 1, où le 1 correspond à l'échec de l'ouverture du fichier.

Merci quand même pour votre aide.

 

Quelle version utilisez-vous ?

& peut-être est-ce un problème d'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);

Comme WHRoeder l'a dit plus haut... si vous utilisez le testeur et qu'il n'utilise pas un numéro de ticket contenant au moins 7 chiffres, vous lui demandez de rechercher une sous-chaîne commençant à la position 6 moins 7(ticketString-7) ou -1... ce qui le fera tomber. Vous avez également mentionné le dossier "par défaut".

Le dossier "par défaut" a changé par rapport à ce qu'il était auparavant. Je dois supposer que lorsque vous dites 'default', vous parlez du nouveau dossier 'default' dans Mql4/files... et non dans l'ancien expert/files.

Assurez-vous que vous avez suivi la suggestion ci-dessus et utilisé le fichier>Ouvrir le dossier de données et regardé dans l'emplacement réel que votre plate-forme utilise. Il se peut qu'il soit dans users/appdata si vous utilisez UAC comme cela a été suggéré également... ce qui est bien tant que vous en êtes conscient et que vous ajustez vos chemins en conséquence si nécessaire.

S'il s'agit d'un trading correct, cette partie du code n'est apparemment qu'un enregistrement et un journal et ne fait pas partie intégrante de la stratégie. J'espère que certaines de ces suggestions vous aideront à le faire fonctionner sans erreur... Bienvenue sur le forum !

PipPip...Jimdandy

 
qjol:

Quelle version utilisez-vous ?

& peut-être est-ce un problème d'UAC


Le terminal client actuel que j'utilise est la version 610.
 
Jimdandy:

Comme WHRoeder l'a dit plus haut... si vous utilisez le testeur et qu'il n'utilise pas un numéro de ticket contenant au moins 7 chiffres, vous lui demandez de rechercher une sous-chaîne commençant à la position 6 moins 7(ticketString-7) ou -1... ce qui le fera tomber. Vous avez également mentionné le dossier "par défaut".

Le dossier "par défaut" a changé par rapport à ce qu'il était auparavant. Je dois supposer que lorsque vous dites 'default' vous parlez du nouveau dossier 'default' dans Mql4/files... et non dans l'ancien expert/files.

Assurez-vous que vous avez suivi la suggestion ci-dessus et utilisé le fichier>Ouvrir le dossier de données et regardé dans l'emplacement réel que votre plate-forme utilise. Il se peut qu'il soit dans users/appdata si vous utilisez UAC comme cela a été suggéré également... ce qui est bien tant que vous en êtes conscient et que vous ajustez vos chemins en conséquence si nécessaire.

S'il s'agit d'un trading correct, cette partie du code n'est apparemment qu'un enregistrement et un journal et ne fait pas partie intégrante de la stratégie. J'espère que certaines de ces suggestions vous aideront à le faire fonctionner sans erreur... Bienvenue sur le forum !

PipPip...Jimdandy


Comme je l'ai répondu à WHRoeder, j'ai suivi sa suggestion et cela me donne toujours le même code d'erreur 5004.

Pour le dossier par défaut, je suis conscient que la structure des dossiers a changé dans la version 610. J'ai recompilé mon EA et je n'ai jamais spécifié mes propres dossiers. J'ai donc supposé que l'EA créerait et rechercherait les fichiers DAT dans les dossiers par défaut du terminal du client. Et il est confirmé que la plupart du temps, le FILEOPEN réussit. Seulement 10% de la même instruction échoue. (J'utilise une simple instruction if pour tester si elle réussit).

Merci,

 
raisingfire:

Cher RaptorUK,

J'ai joint ici le fichier du journal qui suit l'instruction Imprimer.

Je suis conscient que la structure des dossiers a été modifiée dans la version 610. Mais alors, le programme client terminal devrait l'ajuster automatiquement parce que j'utilise les dossiers par défaut.

Je vous remercie pour votre aide.

Il n'y avait pas de fichier joint...

Avez-vous confirmé que le fichier que vous essayez de lire existe réellement ? Veuillez regarder dans le bon dossier et vérifier... Autre chose, pourquoi avez-vous une fonction appelée filewriting() pour lire un fichier ?

Raison: