初学者的问题 MQL5 MT5 MetaTrader 5 - 页 1358

 

你好!

也许有人 "知道"......我正在寻找一个解决方案,将使用WebRequest获得的ZIP文件的字节序列转换为ZIP档案,并使用MQL5工具将其解压到磁盘。

在寻找解决方案的过程中,我看到了2015年发表的文章《使用MQL5工具处理ZIP档案,无需第三方库》(https://www.mql5.com/ru/articles/1971)。在这里,作者展示了解决方案并发布了用于处理ZIP档案的CZip类。然而,这个解决方案无法应用--在编译时,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 #:

你想让别人写一个与你的服务有相同错误的类似服务,并告诉你需要修复的地方吗?

开始切出lishee来贴代码,一切都成功了 ))
在文件搜索功能中,搜索没有通过FileFindClose()关闭。
总之,感谢您的答复。
 
Evgeny Dyuka #:
开始切出里子来贴代码,一切都成功了 )) 在文件搜索功能中,没有通过FileFindClose()关闭搜索。总之,感谢您的答复。

是的,任何使用文件的东西都会打开它(打开对文件的访问) ))而关闭文件(访问)是需要的。

不必要地关闭一个文件会返回-1,没有任何后果,但一个被遗忘的开放文件会造成很多问题)

 

提醒我在输入块中,注释可以不出现在机器人的参数中吗?

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

这样,参数仍然会显示MagicNumber而不是MagicNumber(这是一个例子)

 
Fast235 #:

提醒我在输入块中,注释可以不出现在机器人的参数中吗?

以便参数仍然显示MagicNumber而不是MagicNumber(这是一个例子)。

sinput "输出一个参数,但你不能把它包括在优化中

带有sinput修饰符的变量#

带有输入 修改器的变量不仅可以在启动程序时设置外部参数值,而且在测试器中优化交易策略时也是必要的除了字符串类型,专家顾问中声明的每个输入变量都可以参与优化。

有时,有必要将一些外部程序参数排除在测试器的所有通过区域之外。有一个内存 修改器sinput专门用于这种情况。sinput是静态外部变量声明的简写:sinput = static input。也就是说,EA代码中的这种声明

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

将等同于一个完整的声明

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

用sinput修改器声明的变量是MQL5程序的输入参数。 在启动程序时可以改变该参数的值。但这个变量并不参与输入参数的优化过程,也就是说,在按照给定的标准寻找最佳参数集时,不会搜索它的值。

窦娥冤

图中显示,专家顾问有5个外部参数,其中 "层数 "参数被声明sinput,等于6。这个参数在交易策略优化程序中不能改变,但可以设置所需的值来使用它开始、步骤和停止字段不能用于设置此类变量的值。

因此,通过为一个变量设置sinput修改器,我们禁止用户对这个参数进行优化。这意味着,在策略测试器中,终端用户不能在优化过程中为其设置指定范围内的自动列举的开始和停止值。

然而,这条规则有一个例外--在优化任务中可以使用ParameterSetRange()函数 改变sinput变量。这个函数是专门为控制任何输入变量 的可用值范围而开发的,包括那些被声明静态输入 的变量(sinput)。另一个函数ParameterGetRange(),允许在优化启动时(在OnTesterInit() 处理程序中)接收输入变量值,并在必要时重新定义变化步骤和范围,在此范围内将列举优化参数值。

因此,sinput修改器和两个处理输入变量的函数的结合,可以创建灵活的规则,根据其他输入变量的值来定义一些输入变量的优化区间。

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

我想起来了,问题是关于显示注释,在EA参数中,是否可以显示变量名称而不是注释?

ps字符串与sinput意外的例子)

 
Fast235 #:

我记得,问题是在注释显示中,在EA参数中,可以显示变量名称而不是注释吗?

ps sinput线恰好是一个例子)

只要不在';'后面写任何东西

例子--有一个描述

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

并现在删除描述。

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


我们将看到变量的名称是

 

只要不在';'后面写任何东西就可以了。

这就是问题所在,注释是有的,但变量名称需要在参数中输出。

也许有什么诀窍....