Código de error 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 es la sección que abrir el archivo y cerrar el archivo :

Utilizo las funciones estándar del archivo MQL4, no las llamadas a la DLL.

Puede agregar lo siguiente y reportar lo que la salida es 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);


¿Ha confirmado que el archivo existe en el directorio correcto? no debería estar en experts\files. . . tiene que estar en MQL4\Files usted puede encontrar la carpeta correcta MQL4 de MT4 haciendo clic en Archivo > Abrir carpeta de datos

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

    Orderticket es un int, StringLen espera una cadena

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

    ¿así que si el número de dígitos < 7 (como en el probador) la llamada falla. > 7 dígitos iniciales se eliminan?

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

  2. No hay estructura de datos de expertos en MetaTrader 4 Build 600 y superiores - Artículos MQL4
 
RaptorUK:

¿Puede añadir lo siguiente e informar del resultado, por favor?


¿Has confirmado que el archivo existe en el directorio correcto? ya no debe estar en experts\files. . . tiene que estar en MQL4\Files usted puede encontrar la carpeta correcta MQL4 de MT4 haciendo clic en Archivo > Abrir carpeta de datos


RaptorUK:

¿Puede añadir lo siguiente e informar del resultado, por favor?


¿Ha confirmado que el archivo existe en el directorio correcto? . . tiene que estar en MQL4\Files puede encontrar la carpeta MQL4 correcta desde MT4 haciendo clic en Archivo > Abrir carpeta de datos

Estimado RaptorUK,

Aquí adjunto el archivo del registro después de la declaración de impresión.

Soy consciente de que la estructura de carpetas ha sido cambiada en la compilación 610. Pero entonces, el programa cliente de la terminal debería ajustarla automáticamente porque uso las carpetas por defecto.

Gracias por su ayuda.

 
WHRoeder:
  1. Orderticket es un int, StringLen espera una cadena

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

    ¿así que si el número de dígitos < 7 (como en el probador) la llamada falla. > 7 dígitos iniciales se eliminan?

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

  2. No hay estructura de datos de expertos en MetaTrader 4 Build 600 y superior - Artículos MQL4


Estimado WHRoder,

He probado tu sugerencia y me sigue dando el mismo código de error: 5004. Usted señaló una buena información que orderticket devuelve int. Pero entonces, el antiguo programa de terminal de cliente (build 580 algo) no devuelve ningún error de compilación ni de ejecución. Este código de error 5004, como he mencionado antes, no parece afectar al rendimiento de mi EA en absoluto. mi EA todavía puede abrir y cerrar la posición en la condición correcta.

Utilizo el directorio por defecto, no especifico un directorio concreto. Pude ver que los archivos están allí, pero todavía no puede abrirlos. Para añadir más confusión, no falla todo el tiempo. La mayoría de las veces, tiene éxito al abrir los archivos. He añadido otra condición para comprobar si tiene éxito al abrir el archivo. La tasa de éxito es de alrededor de 10: 1 proporción donde el 1 es el fileopen falla.

Gracias por su ayuda.

 

¿Qué versión está utilizando?

y tal vez es un problema 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 dijo WHRoeder más arriba... si está usando el probador y no está usando un número de ticket que contenga al menos 7 dígitos, entonces le está pidiendo que busque como subcadena comenzando en la posición 6 menos 7(ticketString-7) o -1... lo que lo hará caer. También ha mencionado la carpeta "por defecto".

La carpeta 'por defecto' ha cambiado de lo que solía ser. Tendré que asumir que cuando dices 'por defecto' estás hablando de la nueva carpeta 'por defecto' en Mql4/archivos.. no en la antigua expertos/archivos.

Asegúrate de que has seguido la sugerencia anterior y has utilizado el archivo>Abrir carpeta de datos y has buscado en la ubicación real que utiliza tu plataforma. Es posible que esté en users/appdata si está usando UAC como se ha sugerido también... lo cual está bien siempre y cuando sea consciente de ello y ajuste sus rutas en consecuencia si es necesario.

Si está operando correctamente aparentemente esta parte del código es sólo para el mantenimiento de registros y el registro y no una parte integral de la estrategia. Espero que algunas de estas sugerencias te ayuden a que funcione sin errores... ¡Bienvenido al foro!

PipPip...Jimdandy

 
qjol:

¿Qué versión está utilizando?

y tal vez es un problema de UAC


el terminal de cliente actual que estoy usando es la versión 610.
 
Jimdandy:

Como dijo WHRoeder más arriba... si está usando el probador y no está usando un número de ticket que contenga al menos 7 dígitos, entonces le está pidiendo que busque como subcadena comenzando en la posición 6 menos 7(ticketString-7) o -1... lo que lo hará caer. También ha mencionado la carpeta "por defecto".

La carpeta 'por defecto' ha cambiado de lo que solía ser. Tendré que asumir que cuando dices 'por defecto' estás hablando de la nueva carpeta 'por defecto' en Mql4/archivos.. no en la antigua expertos/archivos.

Asegúrate de que has seguido la sugerencia anterior y has utilizado el archivo>Abrir carpeta de datos y has buscado en la ubicación real que utiliza tu plataforma. Es posible que esté en users/appdata si está usando UAC como se ha sugerido también... lo cual está bien siempre y cuando sea consciente de ello y ajuste sus rutas en consecuencia si es necesario.

Si está operando correctamente aparentemente esta parte del código es sólo para el mantenimiento de registros y el registro y no una parte integral de la estrategia. Espero que algunas de estas sugerencias te ayuden a que funcione sin errores... ¡Bienvenido al foro!

PipPip...Jimdandy


Como he contestado a WHRoeder, he seguido su sugerencia y me sigue dando el mismo código de error 5004.

Para la carpeta por defecto, soy consciente de que la estructura de las carpetas ha cambiado en la compilación 610. He recompilado mi EA y nunca he especificado mis propias carpetas. Así que asumí que el EA crearía y buscaría los archivos DAT en las carpetas por defecto del terminal del cliente. Y se confirma que la mayoría de las veces, el FILEOPEN tiene éxito. Sólo el 10% de la misma sentencia falla. (Estoy utilizando una simple sentencia if para comprobar si tiene éxito).

Saludos,

 
raisingfire:

Estimado RaptorUK,

Aquí adjunto el archivo del registro que sigue a la declaración de impresión.

Soy consciente de que la estructura de carpetas ha sido cambiada en la build 610. Pero entonces, el programa cliente de la terminal debería ajustarla automáticamente porque uso las carpetas por defecto.

Gracias por su ayuda.

No había ningún archivo adjunto...

¿Ha confirmado que el archivo del que intenta leer existe realmente? Por favor, busque en la carpeta correcta y compruebe... otra cosa, ¿por qué tiene una función llamada filewriting() para LEER de un archivo?