欢迎访问 外汇EA下载与MT4/MT5自动交易资源 - 聚合外汇EA、黄金EA、量化交易工具与自动化交易实战内容。
登录 注册

TickCompressor - 平均将 1 个刻度压缩为 2-3 个字节 - MetaTrader 5 库

author emer | 829 人阅读 | 0 人评论 |

TickCompressor - with compression of 1 tick to 2-3 bytes on average - library for MetaTrader 5

TickCompressor - with compression of 1 tick to 2-3 bytes on average - library for MetaTrader 5

压缩报价数据以比 .tcs MQ 文件紧凑 3.5 倍的紧凑形式存储。为了快速使用它们,因为读取 3 个字节比读取 60 个字节的 MqlTick 结构所需的时间更少。

屏幕截图中可以看到 2023 年的文件大小,包括询价、出价、时间以及数据块的附加 ZIP 压缩:
TickCompressor - with compression of 1 tick to 2-3 bytes on average - library for MetaTrader 5

2023 年 .tcs 格式的文件大小:
TickCompressor - with compression of 1 tick to 2-3 bytes on average - library for MetaTrader 5

3.56倍压缩。

为了存储价格变动,使用卖价和买价与之前价格的差异。通常(最多占所有刻度的 50...70%)它不会超过 (-8...7) 个点,并且可以用 4 位进行记录。 Ask 和 Bid 合并为 1 个字节。
加 1 个字节来存储从 0 到 255 毫秒的时间差(在高达 229 的代码中,高于 229 的值用于对超出 -8...7 点的刻度进行编码)。

如果价格或时间相差较大的值,则会将它们打包到较大数量的字节中。

如需额外压缩,您可以应用 ZIP 存档。数据大小最多减少 2 倍。

或者,也可以压缩为 3 个字节,将 -129 到 128 的 Ask 和 Bid 分别压缩为 8 位或 1 个字节。加上时间的 1 个字节 - 大多数刻度总共 3 个字节。
有时(https://www.mql5.com/ru/forum/499639/page6#comment_58544810),如果压缩为 2 字节的刻度数多于压缩为 4 字节的刻度数,则压缩为 3 字节的效率更高。您必须查看仪器统计数据。
您可以使用以下命令将最大压缩切换为 3 字节:

#定义压缩至3字节// 将刻度压缩为 3 个字节而不是 2 个字节。


勾选要以压缩形式存储的元素

已对用于存储的刻度元素的 3 种变体进行了编程:

它们还可以额外压缩为 ZIP。总共会有 6 个版本

方法=1;//1...6 BidAsk_=1, BidAskVolume_=2, All_=3, BidAsk_Zipped=4, BidAskVolume_Zipped=5, All_Zipped=6

在开始压缩之前,您需要将价格变动存储的变体和一些用于价格计算和标准化的标准参数传递给该类。

    TickCompressor 压缩机2;
    双倍的音量步长_=符号信息双象征(),SYMBOL_VOLUME_STEP);
    压缩机2.启动(方法,_观点,体积步长_,_数字);

如果 EA 交易使用标志,则可以通过命令从价格变化中恢复它们

#定义恢复标志// 从更改要价、出价、交易量中恢复报价标记 - 将为报价生成时间 931 添加 7%,而不是 869 毫秒

附有压缩测试的EA,它会给出速度和压缩率的统计数据。你可以在里面看到一个tick压缩和解压的例子。

可以在此处查看用于交易的 EA 交易示例https://www.mql5.com/en/code/65821

2 和 3 字节压缩的统计数据:

蜱虫压缩

逐块:

    整数邮政编码=0;//压缩字节计数器    如果(金额>每个块的ticks_per_block){// > 1 个块 - 将 tmp 的块粘合到 Ticks2      为了整数开始=0;开始<金额;开始+=ticks_per_block){
          Compressor2.Compress(Ticks, tmp, start, (数量 > 开始 +ticks_per_block ?ticks_per_block : 数量 - 开始));
          邮政编码+=数组复制(Ticks2,tmp,ZIPpos);//复制到Ticks2的末尾       }
    }别的{//1块-直接解压到Ticks2中       压缩机2.压缩(滴答声,滴答声2,0, 数量);
    }

如果将 1 个块中的刻度数设置为大于数组中的刻度总数,则会将其压缩为 1 个块。

如果你总是需要压缩成1块,你可以使用

压缩机2.压缩(Ticks,Ticks2);

但如此大或非常大的块的解压速度可能会慢2倍。此外,大块也会消耗大量内存。

拆开蜱虫包装

拆包时,需要知道打包的蜱虫数量。接收器阵列必须具有此大小。

数组调整大小(Ticks3,金额);

例如,可以将大小保存在文件中。然后拆包的时候用。

如果大小未知,您可以通过块中的刻度数更改循环内的大小

      //减速
数组调整大小(Ticks3,total_ticks+ticks_per_block,10000000);//调整大数组的大小 - 比覆盖小块的速度慢


此代码逐块获取刻度。如果只有 1 个大块,它也会正确计数。报价不会收集到一个大数组中,但可以通过您的 Strategy(Ticks3[j]) 策略立即处理;

    尽管(邮编<数组大小(刻度2)){
       nextSize=Compressor3.ArrToInt(Ticks2,ZIPpos);//调整下一个块的大小,将ZIPpos增加4      单位s =数组复制(tmp,刻度2,0,ZIPpos,下一个尺寸);// 将新块复制到 tmp,大小为 nextSize      //慢3倍 ArrayResize(Ticks3,total_ticks+ticks_per_block,10000000); //调整大数组的大小 - 比覆盖小块的速度慢      //total_ticks=Compressor3.DeCompress(tmp,Ticks3,nextSize,total_ticks);//解压块并将其添加到Ticks3。       
       Total_ticks+=Compressor3.DeCompress(tmp,Ticks3,nextSize,0);//解压块并在Ticks3中覆盖它       ZIPpos+=下一个大小;
      为了整数j =0; j < 刻度; j++){ 策略(Ticks3[j]);}//战略    };


将所有块中的价格变动收集到一个大数组中:

    尽管(邮编<数组大小(刻度2)){
       nextSize=Compressor3.ArrToInt(Ticks2,ZIPpos);//调整下一个块的大小,将ZIPpos增加4      单位s =数组复制(tmp,刻度2,0,ZIPpos,下一个尺寸);// 将新块复制到 tmp,大小为 nextSize      //较慢的ArrayResize(Ticks3,total_ticks+ticks_per_block,10000000); //调整大数组的大小 - 比覆盖小块的速度慢       Total_ticks=Compressor3.DeCompress(tmp,Ticks3,nextSize,total_ticks);//解压块并将其添加到Ticks3       
      //total_ticks+=Compressor3.DeCompress(tmp,Ticks3,nextSize,0); //解压块并在Ticks3中覆盖它       ZIPpos+=下一个大小;
      //for (int j = 0; j     };


或者单行。只应记录 1 个块。如果更多 - 使用上面的 2 个代码变体。

Total_ticks=Compressor3.DeCompress(Ticks2,Ticks3);


支持 MQL4/MQL5 的 JSON 库

该函数执行开仓交易的主要逻辑。它根据用户提供的交易品种信息和参数计算开仓价、止盈水平和止损。准备一个交易请求 (MqlTradeRequest),其中包含必要的信息,例如交易品种、交易量、订单类型、滑点、注释、幻数等。调用 OrderSend 函数发送交易请求并获取结果。 SetTypeFillingBySymbol 函数:根据代码的履行政策确定订单履行类型(执行或取消、立即或取消或返回)。 GetMinTradeLevel 函数:根据交易品种的冻结水平和停止水平计算最低交易水平。调整最低级别以确保其在特定限制内并返回结果。

创建此筛选器是为了简化查找​​以折扣价格交易的资产的过程。由于所有选定仪器的数据加载过程,初始使用可能需要稍长的时间。该工具可以扫描所有可用的经纪商资产或仅限于特定的资产类别。

概述 Grid Master EA 是一个实现双向网格策略的自动交易系统。它在当前市场价格之上和之下放置多个挂单,从两个方向的市场振荡中获取利润。


附件下载

📎 TickCompressor.mqh (39.54 KB)

📎 Test_TickCompressor.mq5 (6.91 KB)

Source: MQL5 #66201

🔐
请登录后参与评论
注册满12小时后评论,即可解锁附件下载
立即登录