Não pode escrever para arquivar quando o pedido está aberto

 

Eu tenho um EA que escreve para um arquivo de registro algumas informações, em alguns pontos decide abrir um pedido e quando isso acontece o EA não escreve mais para o arquivo, eu simplesmente recebo:

número inteiro inválido como parâmetro 1 para a função 'FileWrite'.

Estou anexando uma captura de tela: de como quando abre a ordem, o cabo do arquivo não muda, mas por alguma razão ele não pode mais abrir o arquivo. AJUDA!!

Erro de Log

 
Ao invés disso, você deveria ter anexado os códigos relevantes. Veja alguns exemplos de file_write na base de códigos. Verifique as razões para a mensagem de erro na documentação.
 

Obrigado, o código funciona bem, ele cria o arquivo quando a EA é carregada, depois a cada tic que eu abro o arquivo, coloco toneladas de informações no arquivo e depois o fecho. Mas assim que ele abre uma ordem, não funciona mais.

Procurei isto em todos os lugares e não consigo encontrar nenhuma informação sobre o erro, não consigo encontrar ninguém que tenha tido o mesmo problema, não consigo encontrar ninguém com o mesmo erro, algumas pessoas já tiveram:

"número inteiro inválido como parâmetro 1 para a função TimeToNumber ".

Mas não consigo encontrar nada:

"número inteiro inválido como parâmetro 1 para FileWritefunction ".

 
favosys:

Obrigado, o código funciona bem, ele cria o arquivo quando a EA é carregada, depois a cada tic que eu abro o arquivo, coloco toneladas de informações no arquivo e depois o fecho. Mas assim que ele abre uma ordem, não funciona mais.

Pesquisei isto em todos os lugares e não consigo encontrar nenhuma informação sobre o erro, não consigo encontrar ninguém que tenha tido o mesmo problema, não consigo encontrar ninguém com o mesmo erro, algumas pessoas tiveram:

"número inteiro inválido como parâmetro 1 para a função TimeToNumber ".

Mas não consigo encontrar nada:

"número inteiro inválido como parâmetro 1 para FileWritefunction ".

Seu cabo é inválido/não é um int . . . repare seu código. Talvez você esteja usando uma variável declarada localmente com o mesmo nome de uma variável declarada globalmente, uma int e a outra não int. É difícil ajudar sem ver seu código.
 

SUre, este é o código para a função 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);

  } 

Para que isso apenas crie o arquivo.

Então, na função iniciar, abro o arquivo com:

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

E então eu escrevo coisas no arquivo como:

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

E então eu fecho o arquivo no final

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

E é isso aí.

Obrigado por sua ajuda!

 
favosys:

SUre, este é o código para a função init:

Para que isso apenas crie o arquivo.

Então, na função iniciar, abro o arquivo com:

E então eu escrevo coisas no arquivo como:

E então eu fecho o arquivo no final

E é isso aí.

Obrigado por sua ajuda!

Você já procurou ( Ctrl + F ) Manuseie em seu código para encontrar outras declarações ? você tem algum retorno no início() além do final ? você já olhou o arquivo CSV para ver se ele está completo ? se faltam artes pode lhe dar alguma idéia do que está ou não sendo executado.
 
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 - não um int
 
RaptorUK:
Você já procurou ( Ctrl + F ) Manuseie em seu código para encontrar outras declarações ? você tem algum retorno no início() além do final ? você já olhou o arquivo CSV para ver se ele está completo ? se faltam artes pode lhe dar alguma idéia do que está ou não sendo executado.


Olá Raptor UK,

Não há outras descalcificações de cabo

O único outro retorno é aquele que você vê lá quando abre o arquivo se o Handle for -1

Não sei ao certo o que vocês homens devem fazer se o arquivo estiver completo. Quando o pedido abre toda a função de início é processada e eu sei porque o arquivo tem as últimas linhas, as ** END TICKET ** linhas para que eu saiba que chegou ao fim e fechou o arquivo.

O que você quer dizer com arte está faltando? Desculpe, mas não sei o que são artes?

 
WHRoeder:
Último argumento inválido - não um int


Olá WHRoeder,

O que você quer dizer? O último argumento do FileOpen é

delimitador - Delimitador de caracteres para arquivos csv. Por padrão, aplica-se o símbolo ';'.

Abraço

 
favosys:


Olá Raptor UK,

Não há outras descalcificações de cabo

O único outro retorno é aquele que você vê lá quando abre o arquivo se o Handle for -1

Não sei ao certo o que vocês homens devem fazer se o arquivo estiver completo. Quando o pedido abre toda a função de início é processada e eu sei porque o arquivo tem as últimas linhas, as ** END TICKET ** linhas para que eu saiba que chegou ao fim e fechou o arquivo.

O que você quer dizer com arte está faltando? Desculpe, mas não sei o que são artes?

Desculpe, "peças" . . . você recebe a mensagem **** END TICK USDCHF **** ? ou termina antes disso ?
 
favosys:


Olá WHRoeder,

O que você quer dizer? O último argumento do FileOpen é

delimitador - Delimitador de caracteres para arquivos csv. Por padrão, aplica-se o símbolo ';'.

Você tem ";" não ';'. . . a mensagem de erro que você recebeu falou sobre o parâmetro 1, não é que o arquivo trata ?
Razão: