Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 1358

 

Olá!

Talvez haja alguém "a par"... Estou à procura de uma solução para converter uma byte-sequência de ficheiro ZIP obtida usando WebRequest num arquivo ZIP-archive e desempacotá-lo em disco usando ferramentas MQL5.

A procura de uma solução levou-me ao artigo "Manuseamento de arquivos ZIP utilizando ferramentas MQL5 sem bibliotecas de terceiros" publicado em 2015 ( https://www.mql5.com/ru/articles/1971 ). Aqui o autor mostrou a solução e publicou a classe CZip para trabalhar com os arquivos ZIP. Contudo, esta solução não pode ser aplicada - ao compilar, o MetaEditor não pode construir o ficheiro executável, citando erros na biblioteca da classe CZip.

A essência da minha pergunta pode ser reduzida ao seguinte: - Como posso utilizar separadamente métodos da classe CZip, em particular CreateFromCharArray() e UnpackZipArchive(), incluindo-os directamente no código do 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-архивов.
 
Permitam-me que repita a minha pergunta.
Existe um serviço que periodicamente cria ficheiros (fecho tudo correctamente através de FileClose).
Após o início, normalmente o primeiro ficheiro é criado normalmente, depois o FileOpen começa a devolver o erro 5001.
Mas tudo isto é aleatório - depois funciona, depois não. Ao mesmo tempo, nunca reparei no problema quando corro o mesmo código num guião ou num Expert Advisor.
Como contornar esta proibição?
 
Evgeny Dyuka #:
Permitam-me que repita a minha pergunta.
Existe um serviço que periodicamente cria ficheiros (fecho tudo correctamente através de FileClose).
Após o arranque, o primeiro ficheiro está ok, e depois FileOpen dar-me-á o erro 5001.
Mas é aleatório - às vezes funciona, às vezes não. Ao mesmo tempo, nunca reparei no problema quando corro o mesmo código num guião ou num Expert Advisor.
Como contornar esta proibição?

Quer que alguém escreva um serviço semelhante com os mesmos bugs que o seu e lhe diga o que precisa de ser corrigido?

 
Alexey Viktorov #:

Quer que alguém escreva um serviço semelhante com os mesmos bugs que o seu e lhe diga o que precisa de ser corrigido?

Começou a cortar lishee para publicar o código e tudo funcionou ))
Na função de pesquisa de ficheiros, a pesquisa não estava a fechar através de FileFindClose().
De qualquer modo, obrigado pela resposta.
 
Evgeny Dyuka #:
Começou a cortar a lishee para publicar o código e tudo funcionou ))
Na função de pesquisa de ficheiros, a pesquisa não foi fechada através de FileFindClose().
De qualquer modo, obrigado pela resposta.

Sim, qualquer coisa que utilize um ficheiro abre-o (abre o acesso ao ficheiro)))) E é necessário fechar o ficheiro (acesso).

Fechando um ficheiro desnecessariamente retornará -1 sem consequências, mas um ficheiro aberto esquecido pode causar muitos problemas)

 

Lembre-me no bloco de entrada, pode o comentário não aparecer nos parâmetros do robô?

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

para que os parâmetros ainda mostrem o MagicNumber em vez do MagicNumber (este é um exemplo)

 
Fast235 #:

Lembre-me no bloco de entrada, pode o comentário não aparecer nos parâmetros do robô?

para que os parâmetros ainda mostrem o MagicNumber em vez do MagicNumber (este é um exemplo)

O 'sinput' produz um parâmetro, mas não se pode incluí-lo na optimização.

Variáveis com modificador de sinput#

As variáveiscom modificador de entradapermitem não só definir valores de parâmetros externos ao lançar programas, mas são também necessárias para optimizar estratégias comerciais no testador. Todas as variáveis de entrada declaradas no Expert Advisor, excepto o tipo de string, podem participar na optimização.

Por vezes, é necessário excluir alguns parâmetros externos do programa da área de todos os passes no testador. Existe um modificador de memóriasinputespecificamente para tais casos. sinput é uma forma abreviada de declaração de uma variável externa estática: sinput = entrada estática. Ou seja, uma declaração deste tipo no código EA

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

será equivalente a uma declaração completa

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

Uma variável declarada com modificador de sinput é um parâmetro de entrada de um programa MQL5. O valor deste parâmetro pode ser alterado ao lançar o programa. Mas esta variável não participa no processo de optimização dos parâmetros de entrada, ou seja, os seus valores não são pesquisados quando se procura o melhor conjunto de parâmetros pelo critério dado.

sinput

A imagem mostra que o Expert Advisor tem 5 parâmetros externos dos quais o parâmetro "Número de camadas" foi declarado comosinpute é igual a 6. Este parâmetro não pode ser alterado no procedimento de optimização da estratégia comercial, mas o valor necessário pode ser definido para que possa ser utilizado. Os campos Start, Step e Stop não estão disponíveis para a definição de valores para uma tal variável.

Assim, ao definirmos o modificador de sinput para uma variável, proibimos um utilizador de optimizar este parâmetro. Isto significa que no Strategy Tester, um utilizador do terminal não pode definir valores de arranque e paragem para a contagem automática dentro do intervalo especificado durante o processo de optimização.

Contudo, existe uma excepção a esta regra - as variáveis sinput podem variar nas tarefas de optimização usando a funçãoParameterSetRange(). Esta função foi desenvolvida especificamente para controlar programticamente a gama de valores disponíveis para qualquervariável de entrada, incluindoos declarados como entradaestática(sinput). Outra função,ParameterGetRange(), permite receber valores de variáveis de entrada quando a optimização é lançada (emOnTesterInit() handler) e, se necessário, redefinir um passo de mudança e um intervalo dentro do qual serão enumerados valores de parâmetros optimizados.

Assim, a combinação do modificador de sinput e duas funções de tratamento de variáveis de entrada permite criar regras flexíveis para definir intervalos de optimização de algumas variáveis de entrada, dependendo dos valores de outras variáveis de entrada.

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

sinput que me lembro, a pergunta é sobre a exibição de um comentário, é possível exibir o nome da variável em vez de um comentário, em parâmetros EA?

ps com sinput acidentalmente, por exemplo)

 
Fast235 #:

sinput I remember, the question is in the comment display, can the variable name be display instead of the comment, in the EA parameters?

ps sinput line acabou de ser um exemplo)

Apenas não escreva nada depois de ';'

Exemplo - há uma descrição:

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

e agora remover a descrição:

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


e veremos o nome da variável

 

Apenas não escreva nada depois de ';'

Essa era a questão, o comentário está lá, mas o nome da variável tem de ser produzido nos parâmetros,

talvez haja um truque para isso....

Razão: