Código de erro 5004 - página 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:

Esta é a seção que abre o arquivo e fecha o arquivo :

Eu uso as funções padrão do arquivo MQL4, não as chamadas DLL.

Você pode acrescentar o seguinte e informar qual é o resultado por favor...

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


Você já confirmou que o arquivo existe no diretório correto? ele não deve mais estar em arquivos de especialistas. . . deve estar nos arquivos MQL4\Files você pode encontrar a pasta MQL4 correta do MT4 clicando em File > Open data Folder (Arquivo > Abrir pasta de dados )

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

    Orderticket é um int, StringLen espera um string

    OrderTicket
    StringLen StringSubstr
    12345678
    8
    ("12345678", 1, 7) = "2345678"
    1234567
    7
    ("12345678", 0, 7) = "1234567"
    1234566("123456", -1, 7) INVÁLIDO

    então se o número de dígitos < 7 (como no testador) a chamada falha. > 7 dígitos principais são removidos?

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

  2. Não há arquivos de especialistas\ Estrutura de dados no MetaTrader 4 Build 600 e superior - Artigos MQL4
 
RaptorUK:

Você pode acrescentar o seguinte e informar qual é o resultado por favor...


Você já confirmou que o arquivo existe no diretório correto? ele não deve mais estar em arquivos de especialistas. . . deve estar nos arquivos MQL4\Files você pode encontrar a pasta MQL4 correta do MT4 clicando em File > Open data Folder (Arquivo > Abrir pasta de dados )


RaptorUK:

Você pode adicionar o seguinte e informar qual é o resultado por favor . .


Você já confirmou que o arquivo existe no diretório correto? ele não deve mais estar em arquivos de especialistas. . . deve estar nos arquivos MQL4\Files você pode encontrar a pasta MQL4 correta do MT4 clicando em File > Open data Folder (Arquivo > Abrir pasta de dados )

Prezado RaptorUK,

Aqui eu anexei o arquivo do log seguindo a declaração de impressão.

Estou ciente de que a estrutura da pasta foi alterada no build 610. Mas então, o programa cliente terminal deve ajustá-la automaticamente porque eu uso as pastas padrão.

Obrigado por sua ajuda.

 
WHRoeder:
  1. Orderticket é um int, StringLen espera um string

    OrderTicket
    StringLen StringSubstr
    12345678
    8
    ("12345678", 1, 7) = "2345678"
    1234567
    7
    ("12345678", 0, 7) = "1234567"
    1234566("123456", -1, 7) INVÁLIDO

    então se o número de dígitos < 7 (como no testador) a chamada falha. > 7 dígitos principais são removidos?

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

  2. Não há arquivos de especialistas\ Estrutura de dados no MetaTrader 4 Build 600 e superior - Artigos MQL4


Prezado WHRoder,

Tentei sua sugestão e ela ainda me dá o mesmo código de erro: 5004. Você apontou uma boa informação de que o bilhete de pedido retorna int. Mas então, o antigo programa terminal do cliente (build 580 qualquer coisa) não retornou nenhum erro de compilação nem erro de tempo de execução. Este código de erro 5004, como mencionei antes, não parece afetar em nada meu desempenho EA. meu EA ainda pode abrir e fechar a posição na condição correta.

Eu uso o diretório padrão, eu não especifico um diretório específico. Eu pude ver que os arquivos estão lá, mas ainda assim não os abrimos. Para acrescentar mais confusão, não falha o tempo todo. Na maioria das vezes, ele consegue abrir os arquivos. Acrescentei outra condição para testar se ele é bem sucedido em fileopen. A taxa de sucesso é de cerca de 10 : 1 onde o 1 é o fileopen falha.

Obrigado por sua ajuda de qualquer forma.

 

qual versão você está usando

e talvez seja uma questão de 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);

Como WHRoeder disse acima... se você estiver usando o testador e ele não estiver usando um número de ticket que contenha pelo menos 7 dígitos, então você está pedindo que ele procure como substrato começando na posição 6 menos 7(ticketString-7) ou -1... o que fará com que ele caia. Você também mencionou a pasta 'default'.

A pasta 'default' mudou do que costumava ser. Terei que assumir que quando você diz 'default' você está falando da nova pasta 'default' em Mql4/files... e não nos antigos experts/files.

Certifique-se de ter aceitado a sugestão acima e usado o arquivo>Pasta de Dados Aberta e olhou no local real que sua plataforma está usando. Pode ser que tenha terminado em usuários/appdata se você estiver usando UAC como também foi sugerido... o que é bom desde que você esteja ciente disso e ajuste seus caminhos de acordo se necessário.

Se estiver comercializando corretamente, aparentemente esta parte do código é apenas para manutenção de registros e registro e não é parte integrante da estratégia. Espero que algumas destas sugestões o ajudem a liberar erros de execução. Bem-vindo ao Fórum!

PipPip...Jimdandy

 
qjol:

qual versão você está usando

e talvez seja uma questão de UAC


o terminal atual do cliente que estou utilizando é o 610.
 
Jimdandy:

Como WHRoeder disse acima... se você estiver usando o testador e ele não estiver usando um número de bilhete que contenha pelo menos 7 dígitos, então você está pedindo que ele procure como substrato começando na posição 6 menos 7(ticketString-7) ou -1... o que fará com que ele caia. Você também mencionou a pasta 'default'.

A pasta 'default' mudou do que costumava ser. Terei que assumir que quando você diz 'default' você está falando da nova pasta 'default' em Mql4/files... e não nos antigos experts/files.

Certifique-se de ter aceitado a sugestão acima e usado o arquivo>Pasta de Dados Aberta e olhou no local real que sua plataforma está usando. Pode ser que tenha terminado em usuários/appdata se você estiver usando UAC como também foi sugerido... o que é bom desde que você esteja ciente disso e ajuste seus caminhos de acordo se necessário.

Se estiver comercializando corretamente, aparentemente esta parte do código é apenas para manutenção de registros e registro e não é parte integrante da estratégia. Espero que algumas destas sugestões o ajudem a liberar erros de execução. Bem-vindo ao Fórum!

PipPip...Jimdandy


Como respondi à WHRoeder, segui sua sugestão e ela ainda me dá o mesmo código de erro 5004.

Para a pasta padrão, estou ciente de que a estrutura das pastas mudou no build 610. Eu recompilei minha EA e nunca especifiquei minhas próprias pastas. Assim, assumi que a EA criaria e procuraria os arquivos DAT nas pastas padrão do terminal do cliente. E é confirmado que na maioria das vezes, o FILEOPEN tem sucesso. Apenas 10% da mesma declaração falha. (Estou usando uma simples declaração if para testar se ela é bem sucedida).

Abraço,

 
raisingfire:

Caro RaptorUK,

Aqui eu anexei o arquivo do log seguindo a declaração de impressão.

Estou ciente de que a estrutura da pasta foi alterada no build 610. Mas então, o programa cliente terminal deve ajustá-la automaticamente porque eu uso as pastas padrão.

Obrigado por sua ajuda.

Não havia nenhum arquivo anexado . . .

Você confirmou que o arquivo do qual você está tentando ler realmente existe ? por favor, olhe na pasta correta e verifique . . . uma outra coisa, por que você tem uma função chamada filewriting() para READ a partir de um arquivo ?