新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 361

 
ijonhson:

问题是我是应该在每个刻度线上计算指标代码900次(例如3个时间段300条),还是3次。 很明显,icustom比较省事,我把它放在循环里就可以了。 作为一种选择,我看到一个使用dll传递给EA的指标值数组的地址,但我不想把指标放在一个集合里


同样,问题陈述中也有一个错误。为什么你的专家顾问需要900条?如果你真的在指标中需要这么多数据,900条,然后在指标本身中处理它们,为什么要把它们拖到专家顾问中?正确的任务是成功的50%。

 
Nikolay Ivanov:

问题陈述又错了...为什么你的EA需要900条?如果你真的需要指标中的那么多数据,900个,然后在指标本身中处理它们,为什么要把它们拖到专家顾问中?正确的任务是成功的50%。


我需要比较指标在3个时间段的最小和最大峰值,例如5分钟、15分钟和30分钟,以确定趋势,我将无法猜测峰值,那就是必须在整个历史上轮流进行。我以300条的历史为例。

使用icustom还是太耗费资源了。

 
ijonhson:

我需要比较3个时间段的最小和最大峰值指标,例如5分钟15分钟和30分钟,以确定趋势,我将无法猜测峰值,那就是必须翻阅整个历史。我以300条的历史为例。

使用icustom还是太耗费资源了。


在ontick中,问题仍然没有解决,第一个计算中的IndicatorCounted()函数给出了-1,如何在专家顾问中取代它?

 
ijonhson:

"你不需要改变它" - 也就是说,它在专家顾问的onTick和指标的onCalculate上都能正常工作?

不,我的意思是,那里根本不需要它。

 
Alexey Viktorov:

不,我的意思是那里根本不需要它。


挖到了https://www.mql5.com/ru/articles/1456, 我会研究一下,但我以为有一个更简单的选择。

Перенос кода индикатора в код эксперта. Строение индикатора.
Перенос кода индикатора в код эксперта. Строение индикатора.
  • 2007.02.16
  • Nikolay Kositsin
  • www.mql5.com
Прежде чем приступить к основной теме статьи, мне следовало бы вкратце коснуться общего строения индикатора под углом зрения программиста, которого этот индикатор интересует, как будущая часть кода эксперта: Вполне естественно, что у реального индикатора может быть другое количество отображаемых индикаторных значений, другое количество...
 
ijonhson:

问题仍然是在ontick函数IndicatorCounted()中第一次检查时,如何在专家顾问中取代它?

你不需要在每一次打勾 时都要看一下上面的内容,它们不会改变。

在EA中,在条形开口处检查循环,一旦发现顶部,立即退出循环。

   int count=Bars(Symbol,Period);
   for(int i=0; i<count; i++) {
     // ищем и запоминаем в переменную, если нашли break;
   }
 
ijonhson: 在ontick中,问题仍然没有解决,第一个计算中的IndicatorCounted()函数给出了-1,在专家顾问中什么会取代它?

IndicatorCounted()函数以前是在指标中与start()函数一起使用。带有OnCalculate() 的新指标使用第二个参数prev_calculated代替。我特别分析了它们,发现它们的差别是1。差异很小,它们显示了已经计算出的条数。如果它是0(或-1),那么所有的条形图都需要被计算。这种情况发生在启动指标时,当时它必须画出整条线并将结果保存在缓冲区数组中。在接下来的时间里,只有最后一个条形图的数据应该被重新计算。因此,在零(或-1)值时所做的事情应该放在EA的OnInit()中。其余的--非常少--应该放在OnTick()中。

 
YarTrade:

谢谢你。我会努力的。由于某种原因,我在教科书中没有读到关于长型的内容。

你需要把光标放在long int或short(或任何其他语言单词)上,然后按F1。

 
ijonhson:

非常感谢,但就我对该函数的描述的理解,它将执行指标的所有代码以获得一个值,在我指定的地方,也就是说,为了获得所有的顶部,我将需要第N次计算指标的代码(逐一浏览所有的条形图),但我需要比较这个指标在几个时间段的顶部的顺序。

然后你必须手动寻找顶部

这绝对是错误的!所有的指标条,当使用iCustom()从专家顾问中调用时,只重新计算一次该指标的 所有后续调用 都与已经计算的结果有关,只有前一次调用的未计算的条形图被重新计算。例如,当在每个新条形图上从H1图表中调用M15周期指标时,结果发现4个15分钟的条形图没有从调用指标中重新计算。因此,只有这4条将被重新计算。

即使我们在从0到xxx的条形序列中进行循环,指标也只在第一次调用时被重新计算一次。下面的所有调用将不进行任何重新计算。

 
ijonhson:

挖出https://www.mql5.com/ru/articles/1456, 我会研究一下,但我认为有一个更简单的方法

这是一个不好的例子。它已经有10年的历史了!!!。语言已经有了更好的改变。

原因: