Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 1358

 

Hallo!

Vielleicht weiß ja jemand Bescheid... Ich suche nach einer Lösung, um eine mit WebRequest erhaltene ZIP-Datei-Bytefolge in ein ZIP-Archiv zu konvertieren und mit MQL5-Tools auf die Festplatte zu entpacken.

Die Suche nach einer Lösung führte mich zu dem Artikel "Handling ZIP archives using MQL5 tools without third-party libraries" aus dem Jahr 2015 ( https://www.mql5.com/ru/articles/1971 ). Hier zeigte der Autor die Lösung und veröffentlichte die CZip-Klasse für die Arbeit mit ZIP-Archiven. Ich kann diese Lösung jedoch nicht anwenden - beim Kompilieren kann MetaEditor die ausführbare Datei nicht erstellen, da er Fehler in der CZip-Klassenbibliothek angibt.

Der Kern meiner Frage kann auf Folgendes reduziert werden: - Wie kann ich Methoden der CZip-Klasse, insbesondere CreateFromCharArray() und UnpackZipArchive(), separat verwenden, indem ich sie direkt in den Skriptcode einfüge?

//+------------------------------------------------------------------+
//|                                                     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-архивов.
 
Lassen Sie mich meine Frage wiederholen.
Es gibt einen Dienst, der in regelmäßigen Abständen Dateien erstellt (ich schließe alles korrekt über FileClose).
Nach dem Start wird normalerweise die erste Datei normal erstellt, dann gibt FileOpen den Fehler 5001 zurück.
Aber all das ist zufällig - mal funktioniert es, mal nicht. Gleichzeitig habe ich das Problem nie bemerkt, wenn ich denselben Code in einem Skript oder Expert Advisor ausführe.
Wie kann dieses Verbot umgangen werden?
 
Evgeny Dyuka #:
Lassen Sie mich meine Frage wiederholen.
Es gibt einen Dienst, der in regelmäßigen Abständen Dateien erstellt (ich schließe alles korrekt über FileClose).
Nach dem Start ist die erste Datei in Ordnung, und dann gibt FileOpen den Fehler 5001 aus.
Aber es ist zufällig - manchmal funktioniert es, manchmal nicht. Gleichzeitig habe ich das Problem nie bemerkt, wenn ich denselben Code in einem Skript oder Expert Advisor ausführe.
Wie kann dieses Verbot umgangen werden?

Möchten Sie, dass jemand einen ähnlichen Dienst mit den gleichen Fehlern wie den Ihren schreibt und Ihnen sagt, was behoben werden muss?

 
Alexey Viktorov #:

Möchten Sie, dass jemand einen ähnlichen Dienst mit den gleichen Fehlern wie den Ihren schreibt und Ihnen sagt, was behoben werden muss?

Fing an, lishee auszuschneiden, um den Code zu posten und alles funktionierte ))
In der Dateisuchfunktion wurde die Suche nicht über FileFindClose() geschlossen.
Jedenfalls danke für die Antwort.
 
Evgeny Dyuka #:
Habe angefangen, die Lishee auszuschneiden, um den Code zu posten und alles hat funktioniert ))
In der Dateisuchfunktion wurde die Suche nicht über FileFindClose() geschlossen.
Jedenfalls danke für die Antwort.

Ja, alles, was eine Datei verwendet, öffnet sie (öffnet den Zugriff auf die Datei) ))) Und das Schließen der Datei (Zugriff) ist erforderlich.

Wird eine Datei unnötigerweise geschlossen, wird -1 zurückgegeben, ohne dass dies Konsequenzen hat, aber eine vergessene offene Datei kann eine Menge Probleme verursachen)

 

Erinnern Sie mich daran, dass im Eingabeblock der Kommentar nicht in den Parametern des Roboters erscheinen darf?

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

damit die Parameter weiterhin MagicNumber statt MagicNumber anzeigen (dies ist ein Beispiel)

 
Fast235 #:

Erinnern Sie mich daran, dass im Eingabeblock der Kommentar nicht in den Parametern des Roboters erscheinen darf?

damit die Parameter weiterhin MagicNumber anstelle von MagicNumber anzeigen (dies ist ein Beispiel)

sinput' gibt einen Parameter aus, der aber nicht in die Optimierung einbezogen werden kann.

Variablen mit Sinput-Modifikator#

Variablenmit Eingabemodifikatorermöglichen nicht nur das Setzen von externen Parameterwerten beim Start von Programmen, sondern sind auch bei der Optimierung von Handelsstrategien im Tester notwendig. Jede im Expert Advisor deklarierte Eingabevariable, mit Ausnahme des Stringtyps, kann an der Optimierung teilnehmen.

Manchmal ist es notwendig, einige externe Programmparameter aus dem Bereich aller Durchläufe des Testers auszuschließen. Speziell für solche Fälle gibt es einen Speichermodifikatorsinput. sinput ist eine verkürzte Form der Deklaration einer statischen externen Variablen: sinput = static input. Das heißt, eine solche Erklärung im EA-Code

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

ist gleichbedeutend mit einer vollständigen Erklärung

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

Eine mit dem Modifikator sinput deklarierte Variable ist ein Eingabeparameter eines MQL5-Programms. Der Wert dieses Parameters kann beim Start des Programms geändert werden. Diese Variable nimmt jedoch nicht am Prozess der Optimierung der Eingangsparameter teil, d.h. ihre Werte werden bei der Suche nach dem besten Parametersatz anhand des vorgegebenen Kriteriums nicht berücksichtigt.

sinput

Die Abbildung zeigt, dass der Expert Advisor über 5 externe Parameter verfügt, von denen der Parameter "Number of Layers" alsSinputdeklariert wurdeund gleich 6 ist. Dieser Parameter kann nicht in der Optimierungsprozedur der Handelsstrategie geändert werden, aber der erforderliche Wert kann eingestellt werden, damit er verwendet wird. Die Felder Start, Schritt und Stopp sind für die Einstellung von Werten für eine solche Variable nicht verfügbar.

Indem wir also den Modifikator sinput für eine Variable setzen, verhindern wir, dass ein Benutzer diesen Parameter optimiert. Das bedeutet, dass ein Benutzer des Terminals im Strategietester keine Start- und Stoppwerte für die automatische Aufzählung innerhalb des angegebenen Bereichs während des Optimierungsprozesses festlegen kann.

Es gibt jedoch eine Ausnahme von dieser Regel: Sinput-Variablen können in Optimierungsaufgaben mit der FunktionParameterSetRange() variiert werden. Diese Funktion wurde speziell entwickelt, um den Bereich der verfügbaren Werte für eine beliebigeEingabevariable, einschließlich der alsstatische Eingabe(sinput)deklarierten, programmatisch zu steuern.Eine weitere Funktion,ParameterGetRange(), ermöglicht es, die Werte der Eingangsvariablen zu empfangen, wenn die Optimierung gestartet wird (imOnTesterInit()-Handler) und, falls erforderlich, einen Änderungsschritt und einen Bereich neu zu definieren, innerhalb dessen die optimierten Parameterwerte aufgezählt werden.

Die Kombination aus dem Sinput-Modifikator und zwei Funktionen zur Behandlung von Eingangsvariablen ermöglicht es also, flexible Regeln zur Definition von Optimierungsintervallen einiger Eingangsvariablen in Abhängigkeit von den Werten anderer Eingangsvariablen zu erstellen.

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

sinput Ich erinnere mich, die Frage ist über die Anzeige eines Kommentars, ist es möglich, den Variablennamen anstelle eines Kommentars, in EA-Parameter anzuzeigen?

ps der String mit sinput war nur ein Beispiel)

 
Fast235 #:

sinput ich mich erinnere, ist die Frage in der Kommentaranzeige, kann der Variablenname anstelle des Kommentars, in den EA-Parametern angezeigt werden?

ps sinput line war zufällig ein Beispiel)

Schreiben Sie einfach nichts nach ';'.

Beispiel - es gibt eine Beschreibung:

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

und entfernen Sie nun die Beschreibung:

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


und wir werden den Namen der Variablen sehen

 

Schreiben Sie einfach nichts nach ';'.

Das war die Frage, der Kommentar ist da, aber der Variablenname muss in den Parametern ausgegeben werden,

vielleicht gibt es da einen Trick....