文章 "单纯使用 MQL5 语言处理 ZIP 档案"

 

新文章 单纯使用 MQL5 语言处理 ZIP 档案已发布:

为什么需要它?

数据压缩是最重要的技术之一, 特别在互联网方面广泛应用. 压缩有助于节约传输, 存储和处理数据的资源. 数据压缩在通讯的所有领域都有应用, 也包括在几乎所有的计算机相关任务中.

在 经济方面也不例外: 以GB为单位计算的订单历史, 报价数据流, 包括市场深度(等级二数据) 都不能使用未经压缩的原始格式来存储. 许多服务器, 包括提供用于交易分析数据的, 都以ZIP档案的形式保存数据. 过去不可能使用MQL5的标准工具来自动获取此类信息. 现在情况已经有所改变.

通 过使用 WebRequest 函数, 您可以下载一个ZIP档案并立即在计算机上把它解压缩. 这些特性都是很重要的, 很多交易者也一定需要它们. 数据压缩甚至可以用于优化计算机内存. 至于如何去做, 我们将在本文的3.2章节来介绍. 最后, 如果我们可以操作ZIP档案, 我们就可以访问微软Office标准的Office Open XML, 然后我们就可以直接使用MQL5来创建简单的Excel或者Word文件, 而不需要使用第三方的DLL库.

你可以看到, ZIP档案应用程序是可以扩展的, 我们创建的类可以服务于所有MetaTrader用户.

在 本文的第一章中, 我们将会描述ZIP文件的格式, 并且想办法来得到其中包含的数据块. 这一章的内容不仅对学习MQL的人有帮助, 它也是数据存储方面的一个很好的教学资料. 第二章介绍了CZip, CZipFile 和 CZipDirectory 类, 它们是操作档案的主要面向对象元素. 第三章介绍了与使用存档相关的实际例子. 而第四章包含了与所提供类相关的文档.

就这样, 让我们开始学习这种最常见的存档类型吧.

每个ZIP档案都是包含一定顺序字节序列的二进制文件. 另一方面, ZIP档案中的每个文件都有名称, 特性(例如文件修改时间), 以及其他一些我们曾在任意操作系统的文件系统中看到的属性. 另外, 除了压缩的数据, 每个ZIP档案还保存着压缩文件的名称, 特性和其他服务信息. 服务信息是使用非常特别的形式存放的, 并且具有一个通用结构. 例如, 如果一个档案包含两个文件 (File#1File#2), 它就会有如下的结构:


图 1. 包含两个文件的ZIP档案的结构显示: File#1 和 File#2

作者:Vasiliy Sokolov

 

有人测试过代码吗?它能在 mt 4 中运行吗?

 
令人印象深刻的历史数据压缩以及上文讨论的将其应用于 RAM 内容的想法表明,MT5 终端所需的内存资源有希望大幅减少。会实现吗?
 
Vladimir Pastushak:

有人测试过代码吗?它能在 mt 4 中使用吗?

它不仅能用,而且在 MetaCOT 2 等项目 中得到了充分利用。
 
Vladimir:
令人印象深刻的历史数据压缩以及上文讨论的将其应用于 RAM 内容的想法表明,MT5 终端所需的内存资源有希望大幅减少。会实现吗?
MT5 本身需要的资源很少。但在请求报价时,内存的使用取决于 "历史最大条数 "变量。我不知道这个失败的 bug 是否已经修复,但他们承诺会将其删除。
 

有东西坏了,这是编译时发生的情况。

ZipHeader.mqh 出现错误。

 

臭名昭著的结构铸造是脏话。将更正后的版本保留在附件中。

附加的文件:
Zip.zip  11 kb
 
Vasiliy Sokolov:

臭名昭著的结构铸造是脏话。附件中是更正后的版本。

它能在 MT4 下运行吗?我遇到了这种情况。
'm_array' - structures containing objects are not allowed       Dictionary.mqh  252     25
cannot cast 'DoubleValue' to 'ULongValue'       Dictionary.mqh  209     14
 
Stanislav Korotky:
它应该在 MT4 下工作吗?我遇到了这种情况。

#property #strist 有帮助吗?

 

新版本增加了一个额外机制,用于在结构字段未填写的情况下从归档文件中提取数据结构。(我们注意到,微软的产品会从高塔上向标准吐口水,根本不填写 "文件大小 "等字段)。现在,新版本可以处理这类有问题的存档。

我已将新版本添加到文章的存档中。似乎已经更新过了,你可以下载文章的附件。

 
Stanislav Korotky:
它应该在 MT4 下工作吗?我也遇到了同样的情况。

现在我仔细查看了您的错误--铸造结构的情况相同,但容器不同--CDictionary。将 Include\Dictionary.mqh 替换为下面附带的变体。

是的,在 MT4 下一切运行正常,我还要再说一句,CZip 是我在 MT4 上项目 的主力军。

附加的文件:
Dictionary.mqh  38 kb