No se puede escribir en el archivo cuando la orden está abierta

 

Tengo un EA que escribe en un archivo de registro alguna información, en algunos momentos decide abrir una orden y cuando esto sucede el EA ya no escribe en el archivo, solo obtengo:

número entero no válido como parámetro 1 para la función 'FileWrite'.

Adjunto una captura de pantalla: fo como cuando abre la orden el file handle no cambia pero por alguna razón ya no puede abrir el archivo. ¡¡¡AYUDA!!!

Error de registro

 
Deberías haber adjuntado los códigos pertinentes en su lugar. Mira algunos ejemplos de file_write en la base de código. Comprueba las razones del mensaje de error en la Documentación.
 

Gracias, el código funciona bien, crea el archivo cuando se carga el EA, luego en cada tick abro el archivo, pongo toneladas de información en el archivo y luego lo cierro. Pero en cuanto abre una orden ya no funciona.

He buscado esto por todas partes y no encuentro ninguna información sobre el error, no encuentro a nadie que haya tenido el mismo problema, no encuentro a nadie con el mismo error, a algunos les ha pasado:

"número entero no válido como parámetro 1 para la función TimeToNumber "

Pero no encuentro nada sobre:

"número entero inválido como parámetro 1 para la función FileWritefunction "

 
favosys:

Gracias, el código funciona bien, crea el archivo cuando se carga el EA, luego en cada tick abro el archivo, pongo toneladas de información en el archivo y luego lo cierro. Pero en cuanto abre una orden ya no funciona.

He buscado esto por todas partes y no encuentro ninguna información sobre el error, no encuentro a nadie que haya tenido el mismo problema, no encuentro a nadie con el mismo error, a algunos les ha pasado:

"número entero no válido como parámetro 1 para la función TimeToNumber "

Pero no encuentro nada sobre:

"número entero inválido como parámetro 1 para la función FileWritefunction "

Tu manejador no es válido/no es un int... arregla tu código. Quizás estás usando una variable declarada localmente con el mismo nombre que una variable declarada globalmente, una es un int y la otra no es un int. Es difícil ayudar sin ver tu código.
 

SUre, este es el código de la función 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);

  } 

Así que sólo crea el archivo.

Luego en la función de inicio abro el archivo con:

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

Y luego escribo cosas en el archivo como:

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

Y luego cierro el archivo al final

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

Y eso es todo.

Gracias por tu ayuda.

 
favosys:

SUre, este es el código de la función init:

Así que sólo crea el archivo.

Luego en la función de inicio abro el archivo con:

Y luego escribo cosas en el archivo como:

Y luego cierro el archivo al final

Y eso es todo.

Gracias por tu ayuda.

¿Has buscado ( Ctrl + F ) Handle en tu código para encontrar otras declaraciones ? ¿tienes algún retorno en start() que no sea al final ? ¿has mirado el archivo CSV para ver si está completo ? si faltan artes podría darte alguna idea de lo que se está ejecutando o no.
 
Handle=FileOpen(File_Name,FILE_CSV|FILE_WRITE,";");//File opening
 Handle=FileOpen(File_Name,FILE_CSV|FILE_READ|FILE_WRITE,";");//File opening
Último argumento inválido - no es un int
 
RaptorUK:
¿Has buscado ( Ctrl + F ) Handle en tu código para encontrar otras declaraciones ? ¿tienes algún retorno en start() que no sea al final ? ¿has mirado el archivo CSV para ver si está completo ? si faltan artes podría darte alguna idea de lo que se está ejecutando o no.


Hola Raptor UK,

No hay otras decalraciones de Handle

El único otro retorno es el que se ve allí al abrir el archivo si Handle es -1

No estoy seguro de lo que menciona si el archivo está completo. Cuando se abre la orden se procesa toda la función de inicio y lo sé porque el archivo tiene las últimas líneas, las líneas ** END TICKET ** así que sé que llegó al final y cerró el Archivo.

¿A qué te refieres con que faltan artes? Lo siento, no sé lo que son las artes.

 
WHRoeder:
Último argumento no válido - no es un int


Hola WHRoeder,

¿Qué quiere decir? El último argumento de FileOpen es

delimitador - Carácter delimitador para los archivos csv. Por defecto, se aplica el símbolo ';'.

Saludos

 
favosys:


Hola Raptor UK,

No hay otras decalraciones de Handle

El único otro retorno es el que se ve allí al abrir el archivo si Handle es -1

No estoy seguro de lo que menciona si el archivo está completo. Cuando se abre la orden se procesa toda la función de inicio y lo sé porque el archivo tiene las últimas líneas, las líneas ** END TICKET ** así que sé que llegó al final y cerró el Archivo.

¿A qué te refieres con que faltan artes? Lo siento, no sé lo que son las artes.

Lo siento, "partes"... ¿se recibe el mensaje **** END TICK USDCHF **** o termina antes?
 
favosys:


Hola WHRoeder,

¿Qué quieres decir? El último argumento de FileOpen es

delimitador - Carácter delimitador para los archivos csv. Por defecto, se aplica el símbolo ';'.

Tienes ";" no ';' ... el mensaje de error que recibiste hablaba del parámetro 1, ¿no es ese el manejador del archivo?
Razón de la queja: