Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 1358

 

Ciao!

Forse c'è qualcuno "in the know"... Sto cercando una soluzione per convertire una sequenza di byte di un file ZIP ottenuto usando WebRequest in un archivio ZIP e scompattarlo su disco usando gli strumenti MQL5.

La ricerca di una soluzione mi ha portato all'articolo "Handling ZIP archives using MQL5 tools without third-party libraries" pubblicato nel 2015 ( https://www.mql5.com/ru/articles/1971 ). Qui l'autore ha mostrato la soluzione e pubblicato la classe CZip per lavorare con gli archivi ZIP. Tuttavia, questa soluzione non può essere applicata - quando si compila, MetaEditor non può costruire il file eseguibile, citando errori nella libreria di classi CZip.

L'essenza della mia domanda può essere ridotta a quanto segue: - Come posso usare separatamente i metodi della classe CZip, in particolare CreateFromCharArray() e UnpackZipArchive(), includendoli direttamente nel codice dello 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-архивов.
 
Lasciatemi ripetere la mia domanda.
C'è un servizio che crea periodicamente dei file (chiudo tutto correttamente tramite FileClose).
Dopo l'avvio di solito il primo file viene creato normalmente, poi FileOpen inizia a restituire l'errore 5001.
Ma tutto questo è casuale - poi funziona, poi no. Allo stesso tempo, non ho mai notato il problema quando eseguo lo stesso codice in uno script o Expert Advisor.
Come aggirare questo divieto?
 
Evgeny Dyuka #:
Lasciatemi ripetere la mia domanda.
C'è un servizio che crea periodicamente dei file (chiudo tutto correttamente tramite FileClose).
Dopo l'avvio il primo file è ok, e poi FileOpen mi dà errore 5001.
Ma è casuale - a volte funziona, a volte no. Allo stesso tempo, non ho mai notato il problema quando eseguo lo stesso codice in uno script o Expert Advisor.
Come aggirare questo divieto?

Vuoi che qualcuno scriva un servizio simile con gli stessi bug del tuo e ti dica cosa deve essere corretto?

 
Alexey Viktorov #:

Volete che qualcuno scriva un servizio simile con gli stessi bug del vostro e vi dica cosa deve essere corretto?

Ho iniziato a tagliare lishee per postare il codice e tutto ha funzionato ))
Nella funzione di ricerca dei file, la ricerca non si chiudeva tramite FileFindClose().
Comunque, grazie per la risposta.
 
Evgeny Dyuka #:
Ho iniziato a tagliare il lishee per postare il codice e tutto ha funzionato ))
Nella funzione di ricerca dei file, la ricerca non è stata chiusa tramite FileFindClose().
Comunque, grazie per la risposta.

Sì, qualsiasi cosa che utilizza un file lo apre (apre l'accesso al file) ))) E la chiusura del file (accesso) è necessaria.

Chiudere un file inutilmente restituirà -1 senza conseguenze, ma un file aperto dimenticato può causare molti problemi)

 

Ricordami che nel blocco di input il commento non può apparire nei parametri del robot?

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

in modo che i parametri mostrino ancora MagicNumber invece di MagicNumber (questo è un esempio)

 
Fast235 #:

Ricordami che nel blocco di input il commento non può apparire nei parametri del robot?

in modo che i parametri mostrino ancora MagicNumber invece di MagicNumber (questo è un esempio)

'sinput' emette un parametro, ma non è possibile includerlo nell'ottimizzazione.

Variabili con modificatore sinput#

Le variabilicon il modificatore di inputpermettono non solo di impostare i valori dei parametri esterni quando si lanciano i programmi, ma sono anche necessarie quando si ottimizzano le strategie di trading nel tester. Ogni variabile di input dichiarata in Expert Advisor, eccetto il tipo di stringa, può partecipare all'ottimizzazione.

A volte, è necessario escludere alcuni parametri esterni del programma dall'area di tutti i passaggi nel tester. C'è un modificatore di memoriasinputspecifico per questi casi. sinput è una forma abbreviata di dichiarazione di una variabile esterna statica: sinput = static input. Cioè, una tale dichiarazione nel codice EA

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

sarà equivalente a una dichiarazione completa

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

Una variabile dichiarata con il modificatore sinput è un parametro di ingresso di un programma MQL5. Il valore di questo parametro può essere cambiato quando si lancia il programma. Ma questa variabile non prende parte al processo di ottimizzazione dei parametri di input, cioè i suoi valori non vengono cercati quando si cerca il miglior set di parametri secondo il criterio dato.

sinput

L'immagine mostra che l'Expert Advisor ha 5 parametri esterni di cui il parametro "Number of Layers" è stato dichiarato comesinputed è uguale a 6. Questo parametro non può essere cambiato nella procedura di ottimizzazione della strategia di trading ma il valore richiesto può essere impostato per essere utilizzato. I campi Start, Step e Stop non sono disponibili per impostare i valori di tale variabile.

Così, impostando il modificatore sinput per una variabile, vietiamo all'utente di ottimizzare questo parametro. Significa che in Strategy Tester, un utente del terminale non può impostare valori di inizio e fine per l'enumerazione automatica entro l'intervallo specificato durante il processo di ottimizzazione.

Tuttavia, c'è un'eccezione a questa regola - le variabili sinput possono essere variate nei compiti di ottimizzazione usando la funzioneParameterSetRange(). Questa funzione è stata sviluppata specificamente per controllare programmaticamente la gamma di valori disponibili per qualsiasivariabile di input, compresiquelli dichiarati come inputstatico(sinput). Un'altra funzione,ParameterGetRange(), permette di ricevere i valori delle variabili di input quando viene lanciata l'ottimizzazione (nel gestoreOnTesterInit()) e, se necessario, ridefinire un passo di cambiamento e un intervallo entro il quale saranno enumerati i valori di un parametro ottimizzato.

Così, la combinazione del modificatore sinput e di due funzioni per la gestione delle variabili di input permette di creare regole flessibili per definire intervalli di ottimizzazione di alcune variabili di input a seconda dei valori di altre variabili di input.

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

Se ricordo bene, la domanda riguarda la visualizzazione di un commento, è possibile visualizzare il nome della variabile invece di un commento, nei parametri EA?

ps la stringa con sinput era solo un esempio)

 
Fast235 #:

Se ricordo bene, la domanda riguarda la visualizzazione di un commento, è possibile visualizzare il nome della variabile invece di un commento, nei parametri EA?

ps sinput line è solo un esempio)

Basta non scrivere nulla dopo ';'.

Esempio - c'è una descrizione:

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

e ora rimuovi la descrizione:

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


e vedremo il nome della variabile

 

Basta non scrivere nulla dopo ';'.

Questa era la domanda, il commento è lì, ma il nome della variabile deve essere emesso nei parametri,

forse c'è un trucco per farlo....