使用自定义指标时的EA加速理论(功能-iCustom)。

 

我首先要说的是,我不是一个程序员,我可能是错的,但我想听听专业人士对下面建议的想法的看法,基于计算。

在开发专家顾问的几个阶段中,使用自定义指标 是一个热点问题。当程序员相互替换时,这一点尤其重要,然后最好将专家顾问的一些逻辑粘贴在指标中--测试逻辑(检查计算和它们的相关性),然后再研究新的部分想法。因此,我们得到了一个不是很复杂的专家顾问,它实际上是向指标索取信息,并通过比较预期数据和实际数据做出决定。

但是,这种方法有一个显著的缺点--这种专家顾问的速度。事实是,从自定义指标中请求数据的频率越高,计算速度越慢,需要更多的资源(内存)进行优化。

到目前为止,我在MT4中工作,但据我所知,原理是一样的。

而问题不在于iCustom指标本身的计算速度,而在于它与专家顾问的连接。

假设该指标使用了5个图表缓冲区,而EA需要这些缓冲区的信息,那么它需要在代码中使用5个iCustom函数,实际上在图表上放了5个指标而不是一个指标,这需要5倍的资源。也许我错了,编译器分析了这种情况--它为一个指标进行计算,并将所需的缓冲区的数据一次性交给所有函数?在这种情况下,我的进一步猜测是徒劳的。

但是,如果不是这样,为什么不把指标的信息合并到一个包里?

我建议在这个问题上做一个实验,测量专家顾问的性能。

这就需要把一个有1个以上缓冲区的自定义指标,增加一个额外的缓冲区。

该算法是符合逻辑的(没有数学)。

1.将指标中的缓冲区转换为整数,根据每个数字的位数,共有3个缓冲区,原为:1,21101;1,13;5,变成:121101;113;5

2.我们计算在第一个数字后面要放多少个数字--在我们的例子中是4,然后在下一个数字中是1,这些数值就是乘法器的度数。

1,21101*10^4=1211010000

1.13*10^1=113

5*10^0=5(检查0)。

3.将这些数字相加,得到1211011135。

4.将该值写入4.缓冲区

5.我们要求专家顾问中的4个指标缓冲区,并将该值按相反的顺序分解成各个组成部分,得到3个数字,可进一步用于专家顾问的工作。

谁能比较一下这种方法的速度,背后是否有什么道理?

 
...Допустим, индикатор использует 5 графических буферов и для работы советника требуется информация с этих буферов, тогда в коде советника необходимо использовать 5 функций iCustom, и фактически вместо одного индикатора наносить на график 5 индикаторов, что требует в 5 раз больше ресурсов. Быть может я не прав и компилятор анализирует это обстоятельство - делая расчет по одному индикатору и дает сразу всем функциям данные по востребованным буферам!? Тогда дальше мои измышления пусты...

编译器可以做很多事情,但不是这个:-)

...但是,这种方法有一个明显的缺点--这种专家顾问的速度。事实上,越是频繁地要求自定义指标的数据,计算速度就越慢,优化所需的资源(内存)就越多......。

而这种情况是可以优化的。首先,指标本身应该写得聪明(而不是在每个刻度上重新计算所有的条形图),其次,指标应该是超级重的,以某种方式减慢EA...说来话长...

而这里有一篇关于"减少辅助指标的内存消耗 " 的有趣文章

我有一个多货币专家顾问,接收8个时间段的28个符号的指标读数。

这是28*8=224份指标...我为如何优化这个过程而挣扎。多币种操作消耗了近700MB的RAM...我很容易就解决了这个问题--我只是在 "图表 "标签的终端设置中为 "窗口中的最大条数 "字段设置了一个很小的值...在我的记忆中,这个领域的最小值是5千条......。

Уменьшаем расход памяти на вспомогательные индикаторы
Уменьшаем расход памяти на вспомогательные индикаторы
  • 2011.03.18
  • Andrew
  • www.mql5.com
Если индикатор для своих расчетов задействует значения множества других индикаторов, то такая система расходует много памяти. В статье рассмотрены несколько способов снижения расхода памяти при использовании вспомогательных индикаторов. Сэкономленная память позволит вам увеличить число одновременно используемых в терминале валютных пар, индикаторов и стратегий, что повысит надежность вашего торгового портфеля. Вот так простая забота о технических ресурсах вашего компьютера способна превратиться в материальные ресурсы на вашем депозите.
 

我测量了一下,测试时间增加了1.2到1.3倍,与自定义指标 给予的好处相比,这相当不明显。

关于5个缓冲区的结论是错误的。如果参数相同,将只加载一个指标。

 

Integer:

关于5个缓冲区的结论是不正确的。如果参数相同,将只加载一个指标。

是的,我同意。

将有5次调用CopyBuffer()函数 的不同参数(缓冲区编号)。而指标副本--手柄--将是相同的。

作者给了一个响亮的题目 "加速度理论......",但他对基本的东西一窍不通。

-Aleks,有很多关于这个问题的文章!


 
denkir:

是的,我同意。

将有5次对CopyBuffer()函数 的调用,参数(缓冲区编号)各不相同。而且将只有一个指标的副本--手柄。

作者给了一个响亮的题目 "加速度理论......",但他对基本的东西一窍不通。

-Aleks-,有很多关于指标主题的文章!


我曾经试图通过iCustom测量嵌入式指数及其类似物的调用速度。内置的约为20-50%的速度。很可能是因为它们是用C++编写的,而不是用MQL。
 

Denkir ,我说的是EA在优化过程中的工作,图表上的烛台数量是否会影响计算量?我研究了这篇文章,我知道有一些优化指标的变种。然而,在这种情况下,我想相信该指标是完美的,并检查从指标到EA的数据传递方法。我不是一个程序员,我发现很难检查指标代码的优化 - 我最多可以在TOR中规定 - 1条滞后和历史计算的限制。

Integer:

我测量了测试时间增加了1.2-1.3倍,与自定义指标 提供的好处相比,这绝对是微不足道的。

我关于5个缓冲区的结论并不正确。如果参数相同,将只加载一个指标。

你在测量什么?而30%对我来说并不算少。

关于5个缓冲区,如果我理解正确的话,那么在指标输入参数相同的情况下,当专家顾问多次调用最后一个指标并从不同的缓冲区获取信息时,只对一个指标进行计算?

如果是这样,那么自定义指标的组合应该能加快专家顾问的工作速度?例如,那么在一个指标中可以实现具有独立设置的不同指标的逻辑,当其中任何一个指标被调用时,所有缓冲区的信息被一次性接收,并在另一个具有相同参数的缓冲区的信息请求的情况下使用?

VDev
我试图通过iCustom来测量嵌入式指数及其类似物的调用速度。内置的约为20-50%的速度。很可能是因为它们是用C++编写的,而不是用MQL。

这是一个事实。
 

GODZILLA 的文章"价格序列平均化,没有额外的缓冲区进行 中间计算" 极其有趣。

这是在2010年写的。

一节3.使用类获得的指标与代码中调用技术和自定义指标的类似物的比较

Усреднение ценовых рядов без дополнительных буферов для промежуточных расчетов
Усреднение ценовых рядов без дополнительных буферов для промежуточных расчетов
  • 2010.10.25
  • Nikolay Kositsin
  • www.mql5.com
Статья о традиционных и не совсем традиционных алгоритмах усреднения, упакованных в максимально простые и достаточно однотипные классы. Они задумывались для универсального использования в практических разработках индикаторов. Надеюсь, что предложенные классы в определенных ситуациях могут оказаться достаточно актуальной альтернативой громоздким, в некотором смысле, вызовам пользовательских и технических индикаторов.
 
denkir:

是的,我同意。

将有5次对CopyBuffer()函数 的调用,参数(缓冲区编号)各不相同。而且将只有一个指标的副本--手柄。

作者大声地称这个话题为 "加速理论......",他对基本的东西一点都不了解。

-Aleks-,有很多关于指标主题的文章!


而你可以简单地反驳我的假设(最好是在4上),用数字证实我的话?

这个话题是关于我的理论的--标题是可以的。)

 
-Aleks-:

Denkir ,我说的是EA在优化过程中的表现,图表上的烛台数量是否影响那里的计算量?

-Aleks-, 关于测试员 你需要询问开发商...

但我认为讨论中的术语有问题。你想降低计算速度或节省内存来使用指标吗?



 
denkir:

-Aleks-关于测试器 你需要问开发商...

但在我看来,讨论中的术语有一个问题。你想要什么,是降低计算速度,还是节省RAM来处理指标?

在我看来,我的方法可以解决这两个问题。我可能是错的。

在优化时,速度是很重要的,但是一旦RAM被堵塞,同样,根据我的观察,每次的处理速度会下降。

 
-Aleks-:

有谁能比较一下这种方法的速度,背后是否有什么道理?

这种方法将减少指标的内存消耗(大约是前后缓冲区数量之差的倍数),但会增加处理器的负载("组装 "和 "分解 "都必须不断进行)。

而如果指标有5个缓冲区,那么iCustom的第一次调用将计算所有的缓冲区,随后的调用和其他缓冲区的请求将只读取准备好的信息(直到出现新的数据进行计算)。

如果你有一个非常重的指标,可以想出你自己的缓存系统,这样在第一次调用时,数据被计算并写入文件,而在接下来的调用中,它是只读的。我已经这样做了,它要快得多。

但在95%的情况下,没有必要做这些,测试器的速度已经足够快了,在5的情况下,你也可以连接云。

好运!