Questions des débutants MQL5 MT5 MetaTrader 5 - page 1358

 

Bonjour !

Je suis à la recherche d'une solution pour convertir une séquence d'octets d'un fichier ZIP obtenu par WebRequest en une archive ZIP et la décompresser sur le disque en utilisant les outils MQL5.

La recherche d'une solution m'a conduit à l'article "Handling ZIP archives using MQL5 tools without third-party libraries" publié en 2015 ( https://www.mql5.com/ru/articles/1971 ). Ici, l'auteur a montré la solution et a publié la classe CZip pour travailler avec les archives ZIP. Cependant, cette solution ne peut pas être appliquée - lors de la compilation, MetaEditor ne peut pas construire le fichier exécutable, citant des erreurs dans la bibliothèque de classe CZip.

L'essence de ma question peut être réduite à ce qui suit : - Comment puis-je utiliser séparément les méthodes de la classe CZip, en particulier CreateFromCharArray() et UnpackZipArchive(), en les incluant directement dans le code du script ?

//+------------------------------------------------------------------+
//|                                                     ZipTask2.mq5 |
//|                                 Copyright 2015, Vasiliy Sokolov. |
//|                                              https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, Vasiliy Sokolov."
#property link      "https://www.mql5.com"
#property version   "1.00"
#include <Zip\Zip.mqh>

CZip Zip;
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   string cookie,headers;
   string mql_url="https://www.mql5.com/ru/code/download/9";
   int timeout=5000;
   uchar data[],zip_array[];
   if(!WebRequest("GET",mql_url,cookie,NULL,timeout,data,0,zip_array,headers))
     {
      printf("Unable to download ZIP archive from "+mql_url+". Check request and permissions EA.");
      return;
     }
   if(!Zip.CreateFromCharArray(zip_array))
     {
      printf("Loaded bad ZIP archive. Check results array.");
      return;
     }
   printf("Archive successfully loaded. Total files: "+(string)Zip.TotalElements());
   Zip.UnpackZipArchive("Alligator",FILE_COMMON);
  }
//+------------------------------------------------------------------+
Работаем с ZIP-архивами средствами MQL5 без использования сторонних библиотек
Работаем с ZIP-архивами средствами MQL5 без использования сторонних библиотек
  • www.mql5.com
Язык MQL5 развивается, и в него постоянно добавляются новые функции для работы с данными. С некоторых пор, благодаря нововведениям, стало возможно работать с ZIP-архивами штатными средствами MQL5 без привлечения сторонних библиотек DLL. Данная статья подробно описывает, как это делается, на примере описания класса CZip — универсального инструмента для чтения, создания и модификации ZIP-архивов.
 
Laissez-moi répéter ma question.
Il y a un service qui crée périodiquement des fichiers (je ferme tout correctement via FileClose).
Après le démarrage, le premier fichier est créé normalement, puis FileOpen renvoie l'erreur 5001.
Mais tout ceci est aléatoire - puis ça marche, puis ça ne marche pas. En même temps, je n'ai jamais remarqué le problème lorsque j'exécute le même code dans un script ou un Expert Advisor.
Comment contourner cette interdiction ?
 
Evgeny Dyuka #:
Laissez-moi répéter ma question.
Il y a un service qui crée périodiquement des fichiers (je ferme tout correctement via FileClose).
Après le démarrage, le premier fichier est correct, puis FileOpen me donne l'erreur 5001.
Mais c'est aléatoire - parfois ça marche, parfois non. En même temps, je n'ai jamais remarqué le problème lorsque j'exécute le même code dans un script ou un Expert Advisor.
Comment contourner cette interdiction ?

Voulez-vous que quelqu'un écrive un service similaire avec les mêmes bogues que le vôtre et vous dise ce qui doit être corrigé ?

 
Alexey Viktorov #:

Voulez-vous que quelqu'un écrive un service similaire avec les mêmes bogues que le vôtre et vous dise ce qui doit être corrigé ?

J'ai commencé à découper lishee pour poster le code et tout a fonctionné ;))
Dans la fonction de recherche de fichiers, la recherche ne se fermait pas via FileFindClose().
En tout cas, merci pour la réponse.
 
Evgeny Dyuka #:
J'ai commencé à découper la lisière pour poster le code et tout a fonctionné ;))
Dans la fonction de recherche de fichiers, la recherche n'était pas fermée via FileFindClose().
En tout cas, merci pour la réponse.

Oui, tout ce qui utilise un fichier l'ouvre (ouvre l'accès au fichier) ))) Et la fermeture du dossier (accès) est nécessaire.

La fermeture inutile d'un fichier renvoie -1 sans conséquence, mais un fichier ouvert oublié peut causer beaucoup de problèmes).

 

Rappelle-moi que dans le bloc d'entrée, le commentaire ne peut pas apparaître dans les paramètres du robot ?

sinput long   MagicNumber=123;      // Магический номер

pour que les paramètres affichent toujours MagicNumber au lieu de MagicNumber (ceci est un exemple)

 
Fast235 #:

Rappelle-moi que dans le bloc d'entrée, le commentaire ne peut pas apparaître dans les paramètres du robot ?

pour que les paramètres affichent toujours MagicNumber au lieu de MagicNumber (ceci est un exemple)

sinput' produit le paramètre, mais vous ne pouvez pas l'inclure dans l'optimisation.

Variables avec le modificateur sinput#

Les variablesavec modificateur d'entréepermettent non seulement de définir les valeurs des paramètres externes lors du lancement des programmes, mais sont également nécessaires lors de l'optimisation des stratégies de trading dans le testeur. Chaque variable d'entrée déclarée dans l'Expert Advisor, à l'exception du type de chaîne, peut prendre part à l'optimisation.

Il est parfois nécessaire d'exclure certains paramètres externes du programme de la zone de toutes les passes du testeur. Ilexiste un modificateur de mémoiresinputspécifiquement pour ces cas. sinput est une forme abrégée de la déclaration d'une variable externe statique : sinput = static input. C'est-à-dire qu'une telle déclaration dans le code EA

sinput       int layers=6;   // Количество слоев

sera équivalente à une déclaration complète

static input int layers=6;   // Количество слоев

Une variable déclarée avec le modificateur sinput est un paramètre d'entrée d'un programme MQL5. La valeur de ce paramètre peut être modifiée lors du lancement du programme. Mais cette variable ne participe pas au processus d'optimisation des paramètres d'entrée, c'est-à-dire que ses valeurs ne sont pas recherchées lors de la recherche du meilleur ensemble de paramètres selon le critère donné.

sinput

L'image montre que le Conseiller Expert a 5 paramètres externes dont le paramètre "Nombre de couches" a été déclaré commesinputet est égal à 6. Ce paramètre ne peut pas être modifié dans la procédure d'optimisation de la stratégie commerciale mais la valeur requise peut être définie pour qu'il soit utilisé. Les champs Start, Step et Stop ne sont pas disponibles pour définir les valeurs d'une telle variable.

Ainsi, en fixant le modificateur sinput pour une variable, nous interdisons à un utilisateur d'optimiser ce paramètre. Cela signifie que dans le testeur de stratégie, un utilisateur du terminal ne peut pas définir de valeurs de début et de fin pour l'énumération automatique dans la plage spécifiée pendant le processus d'optimisation.

Cependant, il existe une exception à cette règle : les variables sinput peuvent être modifiées dans les tâches d'optimisation à l'aide de la fonctionParameterSetRange(). Cette fonction a été développée spécifiquement pour contrôler de manière programmatique la gamme des valeurs disponibles pour toutevariable d'entrée, y compriscelles déclarées comme entréestatique(sinput). Une autre fonction,ParameterGetRange(), permet de recevoir les valeurs des variables d'entrée lorsque l'optimisation est lancée (dans le gestionnaireOnTesterInit()) et, si nécessaire, de redéfinir un pas de changement et une plage dans laquelle les valeurs des paramètres optimisés seront énumérées.

Ainsi, la combinaison du modificateur sinput et de deux fonctions de traitement des variables d'entrée permet de créer des règles flexibles pour définir les intervalles d'optimisation de certaines variables d'entrée en fonction des valeurs d'autres variables d'entrée.

Документация по MQL5: Основы языка / Переменные / Input переменные
Документация по MQL5: Основы языка / Переменные / Input переменные
  • www.mql5.com
Input переменные - Переменные - Основы языка - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 

Si je me souviens bien, la question concerne l'affichage d'un commentaire, est-il possible d'afficher le nom de la variable au lieu d'un commentaire, dans les paramètres de l'EA ?

ps la chaîne avec sinput était juste un exemple)

 
Fast235 #:

Si je me souviens bien, la question concerne l'affichage d'un commentaire, est-il possible d'afficher le nom de la variable au lieu d'un commentaire, dans les paramètres de l'EA ?

la ligne d'entrée du ps se trouve être un exemple)

N'écrivez rien après " ; ".

Exemple - il y a une description:

input group    "Buy Saucer"
input uchar       InpBuySaucerCode     = 174;   // Buy Saucer: Arrow code (font Wingdings)

et maintenant supprimer la description :

input group    "Buy Saucer"
input uchar       InpBuySaucerCode     = 174;    


et nous verrons le nom de la variable

 

N'écrivez rien après " ; ".

C'était la question, le commentaire est là, mais le nom de la variable doit être sorti dans les paramètres,

peut-être qu'il y a un truc pour ça....