Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 1358

 

Здравствуйте!

Может быть, есть «кто в теме»… Ищу решение, каким способом можно полученную с помощью WebRequest байтовую последовательность ZIP-файла преобразовать в ZIP-архив и распаковать на диск средствами MQL5.

Поиск решения привел меня к статье «Работаем с ZIP-архивами средствами MQL5 без использования сторонних библиотек» от 2015 ( https://www.mql5.com/ru/articles/1971 ). Здесь автор показал решение и опубликовал класс CZip для работы с ZIP-архивами. Однако, применить это решение не удается – при компиляции, MetaEditor не может собрать исполняемый файл ссылаясь на ошибки в библиотеке класса CZip.

Суть моего вопроса, может быть сведена к следующему: - как можно отдельно использовать методы класса CZip, в частности CreateFromCharArray() и UnpackZipArchive(), включив их непосредственно в код скрипта?

//+------------------------------------------------------------------+
//|                                                     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-архивов.
 
Повторю вопрос.
Есть сервис который периодически создает файлы (закрываю все корректно через FileClose).
После запуска обычно первый фаил создается нармально, потом FileOpen начинает возвращать ошибку 5001.
Но все это рандомно - то работает то нет. При этом когда этот же код запускаю в скрипте или эксперте проблему не замечал.
Как обойти этот запрет?
 
Evgeny Dyuka #:
Повторю вопрос.
Есть сервис который периодически создает файлы (закрываю все корректно через FileClose).
После запуска обычно первый фаил создается нармально, потом FileOpen начинает возвращать ошибку 5001.
Но все это рандомно - то работает то нет. При этом когда этот же код запускаю в скрипте или эксперте проблему не замечал.
Как обойти этот запрет?

Вы хотите чтобы кто-то написал аналогичный сервис с теми-же ошибками как у вас и рассказал вам что надо исправить?

 
Alexey Viktorov #:

Вы хотите чтобы кто-то написал аналогичный сервис с теми-же ошибками как у вас и рассказал вам что надо исправить?

Начал вырезать лишее что бы код выложить и все заработало ))
В функии поиска файла не закрывался поиск через FileFindClose().
В любом случае, спасибо за ответ.
 
Evgeny Dyuka #:
Начал вырезать лишее что бы код выложить и все заработало ))
В функии поиска файла не закрывался поиск через FileFindClose().
В любом случае, спасибо за ответ.

Да, все что пользует файл, его открывает (открывает доступ к файлу) ))) И требуется закрытие файла (доступа). 

Лишнее закрытие вернет -1 без последствий, а забытый открытый файл может создать кучу проблем)

 

Напомните в input блоке можно комментарий не выводить в параметры робота?

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

чтобы в параметрах все же вылазил MagicNumber вместо - Магический номер (это как пример)

 
Fast235 #:

Напомните в input блоке можно комментарий не выводить в параметры робота?

чтобы в параметрах все же вылазил MagicNumber вместо - Магический номер (это как пример)

'sinput' выводит параметр, но Вы его не можете включить в оптимизацию.

Переменные с модификатором sinput #

Переменные с модификатором input позволяют не только задавать значения внешних параметров при запуске программ, но также играют большую роль при оптимизации торговых стратегий в тестере. Каждая объявленная в эксперте input-переменная, за исключением типа string, может участвовать в оптимизации.

В некоторых случаях бывает необходимо исключить некоторые внешние параметры программы из формирования области всех возможных проходов в тестере. Специально для таких случаев существует модификатор памяти sinput. sinput - это сокращенное написание объявления статической внешней переменной: sinput = static input. То есть такое объявление в коде советника

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

будет эквивалентно  полному объявлению

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

Переменная, объявленная с модификатором sinput, является входным параметром MQL5-программы, значение этого параметра можно изменять при её запуске. Но при этом данная переменная не участвует в процессе оптимизации входных параметров, то есть не производится перебор её значений при поиске наилучшего набора параметров по заданному критерию.

sinput

На рисунке показано, что эксперт имеет 5 внешних параметров, из них параметр "Количество слоев" объявлен как sinput и равен 6. Этот параметр не может изменяться в процедуре оптимизации торговой стратегии, для него возможно установить нужное значение, которое и будет использоваться. Поля Старт, Шаг и Стоп для такой переменной не доступны для установки значений.

Таким образом, задав для переменной модификатор sinput, мы запрещаем пользователю оптимизировать данный параметр. Это значит, что в тестере стратегий пользователю терминала становится недоступным задавать для неё начальное и конечное значения для автоматического перебора в указанном диапазоне в процессе оптимизации.

Но при этом есть одно исключение из данного правила – sinput-переменные можно варьировать в задачах оптимизации с помощью функции ParameterSetRange(). Данная функция создана специально для программного управления пространством доступных значений для любых input-переменных, в том числе и объявленных как static input (sinput). Другая функция ParameterGetRange() позволяет при запуске оптимизации (в обработчике OnTesterInit()) получить значения input-переменных и в случае необходимости переопределить шаг изменения и диапазон, в пределах которого будет перебираться значение оптимизируемого параметра.

Таким образом, сочетание модификатора sinput и двух функций по работе с input-параметрами позволяет создавать гибкие правила для задания интервалов оптимизации одних input-переменных в зависимости от значения других input-переменных.

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

sinput я помню, вопрос в отображении комментария, можно ли отображать вместо комментария название переменной, в параметрах советника?

ps строка с sinput случайно попалась для примера)

 
Fast235 #:

sinput я помню, вопрос в отображении комментария, можно ли отображать вместо комментария название переменной, в параметрах советника?

ps строка с sinput случайно попалась для примера)

Просто ничего не пишите после ';'

Пример - описание есть:

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

а теперь уберём описание:

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


и увидим имя переменной

 

Просто ничего не пишите после ';'

в этом и вопрос был, комментарий есть, а выводить в параметрах нужно имя переменной,

может есть какая-то фишка для этого....