Impossible d'écrire dans un fichier lorsque la commande est ouverte

 

J'ai un EA qui écrit dans un fichier journal quelques informations, à certains moments il décide d'ouvrir un ordre et quand cela arrive l'EA n'écrit plus dans le fichier, j'obtiens juste :

invalid integer number as parameter 1 for 'FileWrite'function.

Je joins une capture d'écran : quand il ouvre l'ordre, le handle du fichier ne change pas mais pour une raison quelconque, il ne peut plus ouvrir le fichier. A L'AIDE !

Erreur de journal

 
Vous auriez dû joindre les codes pertinents à la place. Regardez quelques exemples de file_write dans la base de code. Vérifiez les raisons du message d'erreur dans la documentation.
 

Merci, le code fonctionne bien, il crée le fichier lorsque l'EA est chargé, puis à chaque tick j'ouvre le fichier, je mets des tonnes d'informations dans le fichier puis je le ferme. Mais dès qu'il ouvre un ordre, cela ne fonctionne plus.

J'ai cherché ça partout et je ne trouve aucune info sur l'erreur, je ne trouve personne qui a eu le même problème, je ne trouve personne avec la même erreur, certaines personnes ont eu :

"nombre entier invalide comme paramètre 1 de la fonction TimeToNumber ".

Mais je ne trouve rien sur :

"nombre entier invalide en tant que paramètre 1 de la fonction FileWritefunction ".

 
favosys:

Merci, le code fonctionne bien, il crée le fichier lorsque l'EA est chargé, puis à chaque tick j'ouvre le fichier, je mets des tonnes d'informations dans le fichier puis je le ferme. Mais dès qu'il ouvre un ordre, cela ne fonctionne plus.

J'ai cherché ça partout et je ne trouve aucune info sur l'erreur, je ne trouve personne qui a eu le même problème, je ne trouve personne avec la même erreur, certaines personnes ont eu :

"nombre entier invalide comme paramètre 1 de la fonction TimeToNumber ".

Mais je ne trouve rien sur :

"nombre entier invalide en tant que paramètre 1 de la fonction FileWritefunction ".

Votre handle n'est pas valide/n'est pas un int . . . corrigez votre code. Peut-être utilisez-vous une variable déclarée localement avec le même nom qu'une variable déclarée globalement, l'une étant un int et l'autre pas un int. Il est difficile de vous aider sans voir votre code.
 

Voilà, c'est le code de la fonction init :

int init()

  {

//----

   File_Name = StringConcatenate(Name_of_file, " - ", Symbol(), " - ", TimeToStr(TimeLocal(),TIME_DATE), " - ", TimeHour(TimeLocal()), ".", TimeMinute(TimeLocal()), ".", TimeSeconds(TimeLocal()), ".txt");

   Handle=FileOpen(File_Name,FILE_CSV|FILE_WRITE,";");//File opening

   if(Handle==-1)                      // File opening fails

     {

      Alert("An error while opening the file. ",// Error message

              "May be the file is busy by the other applictiom");

      PlaySound("Bzrrr.wav");          // Sound accompaniment

      return;                          // Exir start()      

     }

     FileClose( Handle );

//----

   return(0);

  } 

Donc ça crée juste le fichier.

Puis dans la fonction start, j'ouvre le fichier avec :

Handle=FileOpen(File_Name,FILE_CSV|FILE_READ|FILE_WRITE,";");//File opening
    //Handle = 1;
    Print("Handle: ", Handle);
   if(Handle==-1)                      // File opening fails
     {
      Alert("An error while opening the file. ",// Error message
              "May be the file is busy by the other applictiom");
      PlaySound("Bzrrr.wav");          // Sound accompaniment
      return;                          // Exir start()      
     }
   FileSeek(Handle, 0, SEEK_END);

Et ensuite j'écris des trucs dans le fichier comme :

Qnt_Symb=FileWrite(Handle,"**** STARTING TICK ", Symbol(), ": ", TimeToStr(TimeLocal(),TIME_DATE|TIME_SECONDS), " ****");
Qnt_Symb=FileWrite(Handle,"************************************************************"); 

Et puis je ferme le fichier à la fin.

Qnt_Symb=FileWrite(Handle,"***************************");      
Qnt_Symb=FileWrite(Handle,"**** END TICK ", Symbol(), " ****");        
FileClose( Handle );
//----
   return(0);

Et c'est tout.

Merci pour votre aide !

 
favosys:

Voilà, c'est le code de la fonction init :

Donc ça crée juste le fichier.

Puis dans la fonction start, j'ouvre le fichier avec :

Et ensuite j'écris des trucs dans le fichier comme :

Et puis je ferme le fichier à la fin.

Et c'est tout.

Merci pour votre aide !

Avez-vous cherché ( Ctrl + F ) Handle dans votre code pour trouver d'autres déclarations ? Avez-vous des retours dans start() autres qu'à la fin ? Avez-vous regardé le fichier CSV pour voir s'il est complet ? si des arts manquent, cela pourrait vous donner une idée de ce qui est ou n'est pas exécuté.
 
Handle=FileOpen(File_Name,FILE_CSV|FILE_WRITE,";");//File opening
 Handle=FileOpen(File_Name,FILE_CSV|FILE_READ|FILE_WRITE,";");//File opening
Dernier argument invalide - pas un int
 
RaptorUK:
Avez-vous cherché ( Ctrl + F ) Handle dans votre code pour trouver d'autres déclarations ? Avez-vous des retours dans start() autres qu'à la fin ? Avez-vous regardé le fichier CSV pour voir s'il est complet ? Si les arts sont manquants, cela pourrait vous donner une idée de ce qui est ou n'est pas exécuté.


Bonjour Raptor UK,

Il n'y a pas d'autres décalages de Handle

Le seul autre retour est celui que vous voyez là en ouvrant le fichier si Handle est -1

Je ne suis pas sûr de ce que vous entendez par "si le fichier est complet". Lorsque la commande s'ouvre, toute la fonction de démarrage est traitée et je le sais parce que le fichier contient les dernières lignes, les lignes ** END TICKET **, donc je sais qu'il est arrivé à la fin et qu'il a fermé le fichier.

Qu'est-ce que vous voulez dire par les arts sont manquants ? Désolé, je ne sais pas ce que sont les arts ?

 
WHRoeder:
Dernier argument non valide - pas un int


Salut WHRoeder,

Que voulez-vous dire ? Le dernier argument de FileOpen est

délimiteur - Caractère de délimitation pour les fichiers csv. Par défaut, le symbole ';' s'applique.

Merci à

 
favosys:


Bonjour Raptor UK,

Il n'y a pas d'autres décalages de Handle

Le seul autre retour est celui que vous voyez là en ouvrant le fichier si Handle est -1

Je ne suis pas sûr de ce que vous entendez par "si le fichier est complet". Lorsque la commande s'ouvre, toute la fonction de démarrage est traitée et je le sais parce que le fichier contient les dernières lignes, les lignes ** END TICKET **, donc je sais qu'il est arrivé à la fin et qu'il a fermé le fichier.

Qu'est-ce que vous voulez dire par les arts sont manquants ? Désolé, je ne sais pas ce que sont les arts ?

Désolé, "parties" ... avez-vous le message **** END TICK USDCHF **** ? ou se termine-t-il avant ?
 
favosys:


Salut WHRoeder,

Que voulez-vous dire ? Le dernier argument de FileOpen est

délimiteur - Caractère de délimitation pour les fichiers csv. Par défaut, le symbole ';' s'applique.

Vous avez " ;" et non ';'... le message d'erreur que vous avez reçu parle du paramètre 1, n'est-ce pas le handle du fichier ?