Прежде чем приступить к основной теме статьи, мне следовало бы вкратце коснуться общего строения индикатора под углом зрения программиста, которого этот индикатор интересует, как будущая часть кода эксперта: Вполне естественно, что у реального индикатора может быть другое количество отображаемых индикаторных значений, другое количество...
问题是我是应该在每个刻度线上计算指标代码900次(例如3个时间段300条),还是3次。 很明显,icustom比较省事,我把它放在循环里就可以了。 作为一种选择,我看到一个使用dll传递给EA的指标值数组的地址,但我不想把指标放在一个集合里
同样,问题陈述中也有一个错误。为什么你的专家顾问需要900条?如果你真的在指标中需要这么多数据,900条,然后在指标本身中处理它们,为什么要把它们拖到专家顾问中?正确的任务是成功的50%。
问题陈述又错了...为什么你的EA需要900条?如果你真的需要指标中的那么多数据,900个,然后在指标本身中处理它们,为什么要把它们拖到专家顾问中?正确的任务是成功的50%。
我需要比较指标在3个时间段的最小和最大峰值,例如5分钟、15分钟和30分钟,以确定趋势,我将无法猜测峰值,那就是必须在整个历史上轮流进行。我以300条的历史为例。
使用icustom还是太耗费资源了。
我需要比较3个时间段的最小和最大峰值指标,例如5分钟15分钟和30分钟,以确定趋势,我将无法猜测峰值,那就是必须翻阅整个历史。我以300条的历史为例。
使用icustom还是太耗费资源了。
在ontick中,问题仍然没有解决,第一个计算中的IndicatorCounted()函数给出了-1,如何在专家顾问中取代它?
"你不需要改变它" - 也就是说,它在专家顾问的onTick和指标的onCalculate上都能正常工作?
不,我的意思是,那里根本不需要它。
不,我的意思是那里根本不需要它。
挖到了https://www.mql5.com/ru/articles/1456, 我会研究一下,但我以为有一个更简单的选择。
问题仍然是在ontick函数IndicatorCounted()中第一次检查时,如何在专家顾问中取代它?
你不需要在每一次打勾 时都要看一下上面的内容,它们不会改变。
在EA中,在条形开口处检查循环,一旦发现顶部,立即退出循环。
IndicatorCounted()函数以前是在指标中与start()函数一起使用。带有OnCalculate() 的新指标使用第二个参数prev_calculated代替。我特别分析了它们,发现它们的差别是1。差异很小,它们显示了已经计算出的条数。如果它是0(或-1),那么所有的条形图都需要被计算。这种情况发生在启动指标时,当时它必须画出整条线并将结果保存在缓冲区数组中。在接下来的时间里,只有最后一个条形图的数据应该被重新计算。因此,在零(或-1)值时所做的事情应该放在EA的OnInit()中。其余的--非常少--应该放在OnTick()中。
谢谢你。我会努力的。由于某种原因,我在教科书中没有读到关于长型的内容。
你需要把光标放在long int或short(或任何其他语言单词)上,然后按F1。
非常感谢,但就我对该函数的描述的理解,它将执行指标的所有代码以获得一个值,在我指定的地方,也就是说,为了获得所有的顶部,我将需要第N次计算指标的代码(逐一浏览所有的条形图),但我需要比较这个指标在几个时间段的顶部的顺序。
然后你必须手动寻找顶部
这绝对是错误的!所有的指标条,当使用iCustom()从专家顾问中调用时,只重新计算一次该指标的 所有后续调用 都与已经计算的结果有关,只有前一次调用的未计算的条形图被重新计算。例如,当在每个新条形图上从H1图表中调用M15周期指标时,结果发现4个15分钟的条形图没有从调用指标中重新计算。因此,只有这4条将被重新计算。
即使我们在从0到xxx的条形序列中进行循环,指标也只在第一次调用时被重新计算一次。下面的所有调用将不进行任何重新计算。
挖出https://www.mql5.com/ru/articles/1456, 我会研究一下,但我认为有一个更简单的方法
这是一个不好的例子。它已经有10年的历史了!!!。语言已经有了更好的改变。