Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 1358

 

¡Hola!

Tal vez hay alguien "en el saber" ... Estoy buscando una solución para convertir un archivo ZIP secuencia de bytes obtenido utilizando WebRequest en un archivo ZIP y descomprimirlo en el disco utilizando herramientas MQL5.

La búsqueda de una solución me llevó al artículo "Handling ZIP archives using MQL5 tools without third-party libraries" publicado en 2015 ( https://www.mql5.com/ru/articles/1971 ). Aquí el autor mostró la solución y publicó la clase CZip para trabajar con archivos ZIP. Sin embargo, esta solución no se puede aplicar - al compilar, MetaEditor no puede construir el archivo ejecutable, citando errores en la biblioteca de clases CZip.

La esencia de mi pregunta puede reducirse a lo siguiente: - ¿Cómo puedo utilizar por separado los métodos de la clase CZip, en particular CreateFromCharArray() y UnpackZipArchive(), incluyéndolos directamente en el código del 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-архивов.
 
Permítame repetir mi pregunta.
Hay un servicio que crea periódicamente archivos (cierro todo correctamente mediante FileClose).
Después de iniciar normalmente el primer archivo se crea normalmente, luego FileOpen empieza a devolver el error 5001.
Pero todo esto es aleatorio - luego funciona, luego no. Al mismo tiempo, nunca he notado el problema cuando ejecuto el mismo código en un script o Asesor Experto.
¿Cómo eludir esta prohibición?
 
Evgeny Dyuka #:
Permítame repetir mi pregunta.
Hay un servicio que crea periódicamente archivos (cierro todo correctamente mediante FileClose).
Después de iniciar el primer archivo está bien, y luego FileOpen me da error 5001.
Pero es aleatorio - a veces funciona, a veces no. Al mismo tiempo, nunca he notado el problema cuando ejecuto el mismo código en un script o Asesor Experto.
¿Cómo eludir esta prohibición?

¿Quieres que alguien escriba un servicio similar con los mismos errores que el tuyo y te diga lo que hay que arreglar?

 
Alexey Viktorov #:

¿Quieres que alguien escriba un servicio similar con los mismos errores que el tuyo y te diga lo que hay que arreglar?

Empezó a cortar lishee para publicar el código y todo funcionó ))
En la función de búsqueda de archivos, la búsqueda no se cerraba a través de FileFindClose().
De todos modos, gracias por la respuesta.
 
Evgeny Dyuka #:
Empezó a cortar el lishee para publicar el código y todo funcionó ))
En la función de búsqueda de archivos, la búsqueda no se cerró a través de FileFindClose().
De todos modos, gracias por la respuesta.

Sí, todo lo que utiliza un archivo lo abre (abre el acceso al archivo) ))) Y se requiere el cierre del archivo (acceso).

Cerrar un archivo innecesariamente devolverá -1 sin consecuencias, pero un archivo abierto olvidado puede causar muchos problemas)

 

Recuérdame que en el bloque de entrada no puede aparecer el comentario en los parámetros del robot?

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

para que los parámetros sigan mostrando MagicNumber en lugar de MagicNumber (este es un ejemplo)

 
Fast235 #:

Recuérdame que en el bloque de entrada no puede aparecer el comentario en los parámetros del robot?

para que los parámetros sigan mostrando MagicNumber en lugar de MagicNumber (este es un ejemplo)

'sinput' emite un parámetro, pero no se puede incluir en la optimización.

Variables con modificador sinput#

Las variablescon modificador de entradano sólo permiten establecer los valores de los parámetros externos al lanzar los programas, sino que también son necesarias al optimizar las estrategias de negociación en el probador. Todas las variables de entrada declaradas en el Asesor Experto, excepto el tipo de cadena, pueden participar en la optimización.

A veces, es necesario excluir algunos parámetros externos del programa del área de todos los pases en el probador. Existe un modificador de memoriasinputespecífico para estos casos. sinput es una forma abreviada de declaración de una variable externa estática: sinput = static input. Es decir, una declaración de este tipo en el código EA

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

será equivalente a una declaración completa

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

Una variable declarada con el modificador sinput es un parámetro de entrada de un programa MQL5. El valor de este parámetro se puede cambiar al lanzar el programa. Pero esta variable no participa en el proceso de optimización de los parámetros de entrada, es decir, sus valores no se buscan cuando se busca el mejor conjunto de parámetros según el criterio dado.

sinput

La imagen muestra que el Asesor Experto tiene 5 parámetros externos de los cuales el parámetro "Número de Capas" ha sido declarado comosinputy es igual a 6. Este parámetro no puede ser cambiado en el procedimiento de optimización de la estrategia comercial pero se puede establecer el valor requerido para que sea utilizado. Los campos Inicio, Paso y Parada no están disponibles para establecer valores para dicha variable.

Así, al establecer el modificador sinput para una variable, prohibimos que un usuario optimice este parámetro. Significa que en el probador de estrategias, un usuario del terminal no puede establecer los valores de inicio y parada para la enumeración automática dentro del rango especificado durante el proceso de optimización.

Sin embargo, hay una excepción a esta regla: las variables sinput pueden variarse en las tareas de optimización utilizando la funciónParameterSetRange(). Esta función ha sido desarrollada específicamente para controlar mediante programación el rango de valores disponibles para cualquiervariable de entrada, incluyendolas declaradas como entradaestática(sinput). Otra función,ParameterGetRange(), permite recibir los valores de las variables de entrada cuando se lanza la optimización (en el manejadorOnTesterInit()) y, si es necesario, redefinir un paso de cambio y un rango dentro del cual se enumerarán los valores de un parámetro optimizado.

Así, la combinación del modificador sinput y de dos funciones para el manejo de las variables de entrada permite crear reglas flexibles para definir intervalos de optimización de algunas variables de entrada en función de los valores de otras variables de entrada.

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

si recuerdo bien, la pregunta es sobre la visualización de un comentario, ¿es posible mostrar el nombre de la variable en lugar de un comentario, en los parámetros de EA?

cadena ps con sinput accidentalmente por ejemplo)

 
Fast235 #:

si recuerdo bien, la pregunta es sobre la visualización de un comentario, ¿es posible mostrar el nombre de la variable en lugar de un comentario, en los parámetros de EA?

ps la línea de sinput acaba de ser un ejemplo)

No escribas nada después de ';'

Ejemplo: hay una descripción:

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

y ahora quita la descripción:

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


y veremos el nombre de la variable

 

No escribas nada después de ';'

Esa era la pregunta, el comentario está ahí, pero el nombre de la variable tiene que salir en los parámetros,

tal vez hay un truco para ello....

Razón de la queja: