对MT5的祝愿 - 页 51

 
Yedelkin:

解释一下。如果一个专家顾问不处理它所连接到图表上的符号的ticks,那么该符号的NewTick 事件的连续产生将导致该专家顾问处理的事件队列溢出。


https://www.mql5.com/ru/docs/runtime/running

客户端产生的所有事件都堆积在公共队列中。因此,事件是按照收到的顺序一个接一个地处理的。唯一的例外是NewTick事件。如果队列中已经有一个事件,或者事件正在被处理,一个新的NewTick事件就不会被放入队列中。

事件队列的大小是有限的。当队列变满时,旧的事件被移除而不进行处理,以便为新的事件腾出空间。这就是为什么强烈建议编写高效的事件处理程序,不要使用无限循环(除了处理单一开始事件的脚本)。

Документация по MQL5: Программы MQL5 / Выполнение программ
Документация по MQL5: Программы MQL5 / Выполнение программ
  • www.mql5.com
Программы MQL5 / Выполнение программ - Документация по MQL5
 
Rosh:

https://www.mql5.com/ru/docs/runtime/running

客户端将所有发生的事件存储在一个公共队列中。这样一来,事件就按照收到的顺序一个接一个地处理。NewTick事件是个例外。如果队列中已经有一个事件,或者事件正在被处理,一个新的NewTick事件就不会被放入队列中。

事件队列的大小是有限的。当队列变满时,旧的事件被移除而不被处理,以便为新的事件腾出空间。由于这个原因,强烈建议编写高效的事件处理程序,不要使用无限循环(处理单个开始事件的脚本除外)。

因此, 无论 EA中是否存在OnTick()函数,"一个NewTick 事件适用于整个公共队列 "的规则总是有效的。 谢谢你的澄清!

还有一个问题是,在测试器中关闭不必要的蜱虫生成过程。

 

Yedelkin:

问题仍然是关于禁用在测试器中生成不必要的刻度线的过程。

不要在那里处理它们,从逻辑上讲一切都会好起来。

 
Interesting:

不要在那里处理它们,从逻辑上讲一切都会好起来。

我认为测试器中的刻度是在整个测试/优化期间强行产生的,这只是乍一看 "一切都会好起来"。你同意吗?如果是这样,将强制生成符号,专家顾问连接到该符号,而这些符号(刻度)不被该EA处理。也就是说,尽管这个符号没有刻度线处理(你的建议),但测试人员会把时间浪费在刻度线的生成上。 如果有什么我不明白的地方,我愿意愉快地学习新东西。

 
Yedelkin:

好吧,我再次告诉你:专家顾问根本不与它所连接的符号一起工作。而且他不需要跟踪这个符号的任何SL和TP。也就是说,专家顾问不需要这个符号的刻度。EA只在需要的时候附加在符号上,因为它至少需要在某个地方附加才能运行。

咳咳...你为什么要在一个你没有交易的符号上测试专家顾问?在你需要交易的那个地方进行测试。

如果你根本不需要交易,那么你也不需要测试--用实时运行的EA的报价历史来工作。

 
Rosh:

客户端将所有发生的事件存储在一个公共队列中。这样一来,事件就按照收到的顺序一个接一个地处理。

拉希德,那些没有被EA/脚本/指标处理的事件会怎样?这就是问题的关键所在。

它们是否真的被放在队列中,并且只有在响应所针对的事件的处理 被激活时才被移除?

或者说,我假设每个人都有自己的队列,只有需要处理的事件才会被收集在那里,这样做还是对的吗?

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

只是乍一看,"一切都会好起来的"。 我想,测试器中的刻度是强行产生的,在整个测试/优化期间。你同意吗?如果是这样的话,就会为该EA所依附的符号强制产生点数,而这些(点数)是不被该EA处理的。也就是说,尽管没有对这个符号进行处理(你的建议),但测试人员会浪费时间来生成它们。 如果有什么我不明白的地方,我很乐意学习新东西。

让我们来谈谈 "所有刻度 "模式。

我明白,它们不是强行生成的,所有的符号都是在专家顾问中选择和交易的(没有它就没有办法)。

测试员设置中所选择的符号(主符号)的刻度可以在OnTick中处理或不处理(在这种情况下,如果这种类型的事件已经被处理或存在于队列中,它不会被添加到队列中)。

至少,我是这样理解开发者的逻辑的。

3.基于你所描述的任务,我们通过自定义事件 获得与ChartEvent有关的额外符号上的刻度信息。ChartEvent进入队列,并将在队列满时被执行或删除。

从上述情况来看,很明显,如果对来自 "额外符号"(Expert Advisor的外部)的ticks的处理是无效的,那就是ChartEvent的处理会出现问题,并会使整个事件队列堆叠。

我可能不完全理解你的专家顾问的逻辑,但在这些条件下,我会在一个定时器中放入一个块,以收集所有符号的价格信息和其他关于额外符号的重要信息。而使用ChartEvent,我将只传输关于出现的信息,比如说,一个新的柱子。

你也可以在OnTick块中处理其他符号的信息(如果使用的话),就像在MT4中那样。但定时器在这里有一些优势,因为定时器是定期处理的,不会超过每秒一次。

Документация по MQL5: Стандартные константы, перечисления и структуры / Константы графиков / Типы событий графика
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы графиков / Типы событий графика
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы графиков / Типы событий графика - Документация по MQL5
 
komposter:

拉希德,那些没有被EA/脚本/指示器处理的事件会发生什么?这就是问题所在,不是吗?

它们是否真的被放在队列中,并且只有在响应所针对的事件的处理 被激活时才被移除?

或者说,我假设每个人都有自己的队列,只有需要处理的事件才会被收集在那里,这样做还是对的吗?

据我所知,如果没有处理,当有新的事件到来时,队列中的事件就会被 "放弃"(如果队列已满)。
 
komposter:

拉希德,那些没有被EA/脚本/指示器处理的事件会发生什么?这就是问题所在,不是吗?

它们是否真的被放在队列中,并且只有在提供响应的事件处理 被启用时才从队列中移除?

还是我认为每个队列都有自己的队列,而且只有需要处理的事件才会被收集在那里,这样的假设还是正确的?

开发商的回答。

每个专家顾问/脚本/指示器都有自己的队列。当然,如果处理程序不可用,队列中的任何东西都不会被冻结。好吧,如果没有,就读出来,跳过。

 
komposter:

咳咳...你为什么要在你不交易的工具上测试一个EA?

你可能没有仔细阅读我的帖子,其中已经阐述了工作原理。我建议在这一点上结束这个话题。

我想解释我为什么这么做,但无论如何,谢谢你。

原因: