Hola,
En el indicador de costo WindowScreenShot está trabajando prfectly.
Crea una imagen a los 5 minutos por ejemplo: 10:15,10:20, etc...
Y
Después de un periodo(aleatorio) de tiempo no funciona. No escribe el archivo.
¿Por qué?
.... WindowScreenShot(filename, X_pixels, Y_pixels); int error=GetLastError(); if (error!=0) Alert(TimeToStr(TimeCurrent(),TIME_SECONDS)," trade_mode:", trade_mode, " T_ScreenShot FileWrite0 error: (",Symbol()," ",error,"): ",ErrorDescription(error)); int handle = FileOpen(filename, FILE_BIN|FILE_READ); if (handle>-1) { error=GetLastError(); if (error!=0) Alert(TimeToStr(TimeCurrent(),TIME_SECONDS)," trade_mode:", trade_mode, " T_ScreenShot FileWrite1 error: (",Symbol()," ",error,"): ",ErrorDescription(error)); FileClose(handle); } int lasterror=GetLastError(); if (lasterror!=0) Alert(TimeToStr(TimeCurrent(),TIME_SECONDS)," trade_mode:", trade_mode," T_ScreenShot, Schoted file open error: (",Symbol()," ",lasterror,"): ",ErrorDescription(lasterror));
Es porque tu código, que no podemos ver, está roto. Como no podemos ver tu código no podemos decirte dónde está roto.
error=0
y lasterror =4103, no se puede abrir el archivo
¿Por qué?
error=0
y lasterror =4103, no se puede abrir el archivo
¿Por qué?
¿Los nombres de los archivos son únicos o se reutilizan?
único
único
NO llame a GetLastError() a menos que haya un error. WindowScreenShot(filename, X_pixels, Y_pixels); int error=GetLastError(); if (error!=0) Alert(TimeToStr(TimeCurrent(),TIME_SECONDS
¿Qué son los valores de retorno de las funciones? ¿Cómo los utilizo? - Foro MQL4 if( !WindowScreenShot(filename, X_pixels, Y_pixels) ){ int error=GetLastError(); Alert(TimeToStr(TimeCurrent(),TIME_SECONDS ... }
int handle = FileOpen(filename, FILE_BIN|FILE_READ); if (handle>-1) { error=GetLastError();
Si el FileOpen falla, handle == -1. Está emitiendo una alerta cuando NO hay error y continuando cuando SI lo hay.
¿Cómo hacerlos únicos?
string timestamp = TimeToStr(TimeCurrent(),TIME_SECONDS); filename = filename + "_" + timestamp + ".gif";
Por lo que puedo ver, tu mayor problema es el manejo de errores, como WHRoeder ya ha mencionado, estás haciendo un mal trabajo al reportar los errores cuando/si ocurren. Por ejemplo, ni siquiera compruebas si WindowsScreenShot() ha funcionado o no... haz los cambios que ha sugerido WHRoeder y vuelve a probar. Tu nombre de archivo no es único . . usas la hh:mm:ss de la hora actual, por lo que cada día es posible sobrescribir un archivo de un día anterior, si ese archivo está abierto en ese momento esto podría causar un error 4103.
En su lugar. . .
string timestamp = TimeToStr(TimeCurrent(), TIME_DATE|TIME_SECONDS); filename = filename + "_" + timestamp + ".gif";
. . para añadir la fecha en el nombre del archivo.
De lo que puedo ver su mayor problema es su manejo de errores, como WHRoeder ya ha mencionado, usted está haciendo un mal trabajo de informar de los errores cuando / si se producen. Por ejemplo, ni siquiera compruebas si WindowsScreenShot() ha funcionado o no... haz los cambios que ha sugerido WHRoeder y vuelve a probar. Tu nombre de archivo no es único . . usas la hh:mm:ss de la hora actual, por lo que cada día es posible sobrescribir un archivo de un día anterior, si ese archivo está abierto en ese momento esto podría causar un error 4103.
En su lugar. . .
. . . para añadir la fecha en el nombre del archivo.
lasterror es 4103, continuar
el error es 0
.....y salgo de la MT4 y la vuelvo a ejecutar, funciona correctamente
Después de un periodo(aleatorio) de tiempo no funciona. No escribir el archivo. Pero archivo, nombre de archivo único.
¿Por qué?
string timestamp = TimeToStr(TimeCurrent(),TIME_DATE )+"_"+TimeToStr(TimeCurrent(),TIME_SECONDS); for (int i= StringLen(timestamp); i>0; i--) if (StringFind(timestamp,":",i)!=-1 || StringFind(timestamp,".",i)!=-1) timestamp= StringSetChar(timestamp, i, '-'); string filename = mappa + CharToStr(92) + CharToStr(92) + Symbol(); filename = filename + "_" + timestamp + ".gif"; int error; if(!WindowScreenShot(filename, X_pixels, Y_pixels)) { error=GetLastError(); if (error!=0) Alert(TimeToStr(TimeCurrent(),TIME_SECONDS)," trade_mode:", trade_mode, " T_ScreenShot FileWrite0 error: (",Symbol()," ",error,"): ",ErrorDescription(error)); } Alert(filename); int handle = FileOpen(filename, FILE_BIN|FILE_READ); if (handle>-1) { error=GetLastError(); if (error!=0) Alert(TimeToStr(TimeCurrent(),TIME_SECONDS)," trade_mode:", trade_mode, " T_ScreenShot FileWrite1 error: (",Symbol()," ",error,"): ",ErrorDescription(error)); FileClose(handle); } else { int lasterror=GetLastError(); if (lasterror!=0) Alert(TimeToStr(TimeCurrent(),TIME_SECONDS)," trade_mode:", trade_mode," T_ScreenShot, Schoted file open error: (",Symbol()," ",lasterror,"): ",ErrorDescription(lasterror)); }
el error es 4103, continúa
el error es 0
.....y salgo de la MT4 y la vuelvo a ejecutar, funciona correctamente
Después de un periodo(aleatorio) de tiempo no funciona. No escribir el archivo. Pero el archivo, nombre de archivo único.
¿Por qué?
Por favor, muestre la parte del archivo de registro que muestra los errores....
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Usted acepta la política del sitio web y las condiciones de uso
Hola,
En el indicador de costo WindowScreenShot está trabajando prfectly.
Crea una imagen a los 5 minutos por ejemplo: 10:15,10:20, etc...
Y
Despues de un periodo(aleatorio) de tiempo no funciona. No escribe el archivo.
¿Por qué?
GetLastError() no señala el error.
Aparentemente todo esta bien.
THX