Bonjour,
Dans l'indicateur Costum, WindowScreenShot fonctionne parfaitement.
Je crée une image à 5 minutes par exemple : 10:15,10:20, etc...
Et
Après une période (aléatoire) de temps ne fonctionne pas. Ne pas écrire le fichier.
Pourquoi ?
.... 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));
C'est parce que votre code, que nous ne pouvons pas voir, est défectueux. Comme nous ne pouvons pas voir votre code, nous ne pouvons pas vous dire où il est cassé.
erreur=0
et lasterror =4103, ne peut pas ouvrir le fichier
Pourquoi ?
erreur=0
et lasterror =4103, ne peut pas ouvrir le fichier
Pourquoi ?
Le nom du fichier est-il unique ou réutilisez-vous les noms de fichiers ?
unique
unique
N'appelez pas GetLastError() à moins qu'il y ait une erreur. WindowScreenShot(filename, X_pixels, Y_pixels); int error=GetLastError(); if (error!=0) Alert(TimeToStr(TimeCurrent(),TIME_SECONDS
Quelles sont les valeurs de retour des fonctions ? Comment les utiliser ? - Forum 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 le FileOpen échoue, handle == -1. Vous émettez une alerte lorsqu'il n'y a PAS d'erreur et vous continuez lorsqu'il y en a une.
Comment les rendre uniques ?
string timestamp = TimeToStr(TimeCurrent(),TIME_SECONDS); filename = filename + "_" + timestamp + ".gif";
D'après ce que je peux voir, votre plus gros problème est la gestion des erreurs, comme WHRoeder l'a déjà mentionné, vous faites un mauvais travail en signalant les erreurs quand/si elles se produisent. Par exemple, vous ne vérifiez même pas si WindowsScreenShot() a fonctionné ou non... Apportez les modifications suggérées par WHRoeder et testez à nouveau. Votre nom de fichier n'est pas unique. ... vous utilisez le hh:mm:ss de l'heure actuelle, donc chaque jour il est possible d'écraser un fichier d'un jour précédent, si ce fichier est ouvert à ce moment-là, cela peut provoquer une erreur 4103.
Au lieu de cela...
string timestamp = TimeToStr(TimeCurrent(), TIME_DATE|TIME_SECONDS); filename = filename + "_" + timestamp + ".gif";
... pour ajouter la date dans le nom du fichier.
D'après ce que je peux voir, votre plus gros problème est votre gestion des erreurs, comme WHRoeder l'a déjà mentionné, vous faites un mauvais travail en signalant les erreurs quand/si elles se produisent. Par exemple, vous ne vérifiez même pas si WindowsScreenShot() a fonctionné ou non... Apportez les modifications suggérées par WHRoeder et testez à nouveau. Votre nom de fichier n'est pas unique. ... vous utilisez le hh:mm:ss de l'heure actuelle, donc chaque jour il est possible d'écraser un fichier d'un jour précédent, si ce fichier est ouvert à ce moment-là, cela peut provoquer une erreur 4103.
Au lieu de cela...
. . . pour ajouter la date dans le nom du fichier.
lasterror est 4103, continuer
l'erreur est de 0
.....et j'ai quitté le MT4 et l'ai relancé, il s'exécute correctement.
Après une période (aléatoire) de temps ne fonctionne pas. Pas écrire le fichier. Mais le fichier, nom de fichier unique.
pourquoi ?
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)); }
Lasterror est 4103, continuer
l'erreur est de 0
.....et j'ai quitté le MT4 et l'ai relancé, il s'est exécuté correctement.
Après une période (aléatoire) de temps ne fonctionne pas. Pas écrire le fichier. Mais le fichier, nom de fichier unique.
pourquoi ?
Veuillez montrer la partie du fichier journal où figurent les erreurs . . .
![MQL5 - Langage des stratégies de trading intégré au terminal client MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Vous acceptez la politique du site Web et les conditions d'utilisation
Bonjour,
Dans l'indicateur Costum, WindowScreenShot fonctionne parfaitement.
Je crée une image à 5 minutes par exemple : 10:15,10:20, etc...
Et
Après une période (aléatoire) de temps ne fonctionne pas. Ne pas écrire le fichier.
Pourquoi ?
GetLastError() ne signale pas l'erreur.
Apparemment tout va bien.
THX