文章 "通过辅助指标减少内存消耗"

 

新文章 通过辅助指标减少内存消耗已发布:

如果一个指标使用很多其他指标的值进行计算,则它会消耗很多内存。本文介绍在使用辅助指标时,减少内存消耗的几种方法。保存的内存允许在客户端中增大同时使用的货币对、指标和策略的数量。这样提高了交易投资组合的可靠性。对您的计算机的技术资源进行这样的简单考量就可转换为任您处置的资金资源。

作者:Andrew

 

这种做法是可以理解的。但任务的相关性却令人困惑。

虽然 64 位系统支持大量内存,但这项任务的相关性却很低。即使是拥有 3 Gb 内存的 32 位系统,也能像你所节省的那样使用如此大的内存。毕竟,无论从哪个角度看,内存在加载新指标时都是线性增长的,这意味着对于现代电脑来说,48MB 或多或少都不算什么。

好吧,让我们假设这个任务是相关的(我同意有人会关心这个问题)。但仔细想想,节省内存的任务与提高性能的任务是直接冲突的。

所以你也应该注意这一点。

在我看来,MQ 是为性能而战,所有的精力都集中在性能上。

如果需要节省非绘制指标的内存资源,只需将指标代码转移到智能交易系统中即可。在这里,您可以完全控制分配的内存。同时,您还可以节省接收同类数据的 时间。许多指标都需要相同的数据,各自进行处理。接收过一次数据后,接下来就不需要再处理它们了。

现在,让我们将任务速度和内存大小结合起来。大多数非绘图指标都参与最后一栏的计算,这可以从阻止整个数组重新计算的内置机制中看出。事实证明,在 Expert Advisor 中可以分配 154 个内存单元(例如,用于计算周期为 153 的掩码),这样节省的内存性能不会比普通指标差。

但在智能交易系统中,并行计算的可能性丧失了,这对性能是一个直接的打击。实际上,指标消耗内存只是因为并行化。毕竟,每个指标都在自己的线程中工作,而这个线程必须有自己的源数据实例。

Документация по MQL5: Основы языка / Переменные
Документация по MQL5: Основы языка / Переменные
  • www.mql5.com
Основы языка / Переменные - Документация по MQL5
 

我同意,性能是重中之重,节省内存毫无意义(当然,除非你使用的内存超过 1Gb,但这不太可能)。

 
Urain:

这种做法是可以理解的。但任务的紧迫性却令人困惑。

实际上,我写这篇文章的想法是在一个人的抱怨下产生的,我为他写了一个复合指标,他抱怨说这个指标没有安装在某些货币对上。调查后发现,有一些指标是非常持久的,而且很多指标都无法安装到终端上(也就是说,问题不在于货币对,而在于在这个货币对之前,又有十几个同样的持久指标被打开了)。该指标的消耗量是文章中测试指标的 2 倍。

即使是 32 位的 3GB 内存也能达到如此大的内存容量。

如果您在大量货币对上进行交易,就不会出现这种情况,这就是问题所在。

顺便说一下,终端分配的内存不能超过 2GB(总计:RAM + 虚拟内存)。在我的实验中,它就是在这个值上关闭的。

当然,这个问题在 64 位时不应该存在。

好吧,我们假设这个任务是相关的(我同意有人会关心这个问题)。但仔细想想,节省内存的任务与提高性能的任务是直接矛盾的。

并不总是这样。在这篇文章中,大部分方法都不会降低性能。

如果需要为不可绘制的指标节省内存资源,只需将指标代码移至智能交易系统即可。

Expert Advisor 只要求从指标中获取最后一个柱状图,这与文章中考虑的方案属于不同的类别。用另一种程序取代另一种程序并不总是可能/方便的。

但在智能交易系统中,并行计算的可能性丧失了,这对性能是一个直接打击。实际上,指标消耗内存就是因为并行化。毕竟,每个指标都在自己的线程中工作,而这个线程必须有自己的源数据实例。

共同对上的每个指标都有自己的数据实例是不太可能的--文章 中有一个关于并行计算 的有趣表格,可以通过关键词 "2 个指标 "找到。

 
ds2:

指标的问题在于,每个指标都在自己的线程中运行,因此必须在线程中存储所有必要的数据。

线程之间的数据通过 CopyBuffer() 复制。但问题是:你可以从线程中获取数据,但无法将数据传输到线程中。这就是为什么不能构建一个指标的多个实例接收相同预处理数据的 mogostage 指标。但就在这个层面上,却蕴藏着优化计算的 巨大机会。

我认为,如果 MQ 能解决这个问题,那么使用指标的工作将变得更加方便和灵活。现在,数据只能作为外部参数传递,而且只能在线程开始时传递。



Как написать индикатор в MQL5
Как написать индикатор в MQL5
  • 2010.01.12
  • MetaQuotes Software Corp.
  • www.mql5.com
Что представляет собою индикатор? Это набор вычисленных значений, которые мы хотим отобразить на экране монитора удобным для нас образом. Наборы значений представляются в программах в виде массивов. Таким образом, создание индикатора - это написание алгоритма, который обрабатывает одни массивы (массивы цен) и записывает результаты обработки в другие массивы (значения индикаторов). На примере создания индикатора True Strength Index в статье рассказывается, как писать индикаторы на MQL5
 

非常有用

如果我正确理解了主流思想,就会产生一个问题:

为什么MT5 安装的 所有标准指标都没有设计成 "类"?

那为什么向导大师不考虑这种想法?

 
 

如果不从 "工具">"选项 "中限制最大条形图,我用来减少缓冲区空间的快速方法是

int maxbars =100;// 最后一小节
limit = rates_total-rates_total+maxbars;