MT版本存档。 - 页 3

 
Сергей Таболин:

我认为TesterStop()和ExpertRemove() 如果不能立即将控制权传递给OnTester(),应该返回true。它将允许以某种方式作出反应,例如,像这样。

bool                 tester_stop = false;                 // флаг проверки выхода по TesterStop
.......
void OnTick()
{
//--- пропустить бесполезные проходы оптимизации
   if(!check_init && (MQLInfoInteger(MQL_OPTIMIZATION) || MQLInfoInteger(MQL_TESTER)))
   {
      if(недопустимый параметр)          tester_stop = TesterStop();
........
}
double OnTester()
{
   if(tester_stop) return(-99999999999.99);

在这种情况下,我们可以准确地得到逻辑上预期的结果,而不是手忙脚乱地预见理论上由于停止测试而可能发生的所有错误。

而这是你想看到的选项。

bool                 tester_stop = false;                 // флаг проверки выхода по TesterStop
.......
void OnTick()
{
//--- пропустить бесполезные проходы оптимизации
   if(!check_init && (MQLInfoInteger(MQL_OPTIMIZATION) || MQLInfoInteger(MQL_TESTER)))
   {
      if(недопустимый параметр)
       {
        TesterStop();
        tester_stop = true;
        return;
       }
........
}
double OnTester()
{
   if(tester_stop) return(-99999999999.99);
 
Roman:

在这种情况下,我们不能做检查吗?

如果它已经在运行,我们如何防止/取消强制终止?你的例子有点不同。
 
Alexey Viktorov:
如果它已经在运行,你如何防止/取消强制终止?你的例子有点不同。

不要触发强制终止。那么就没有必要取消它。

可能,强制完成已经在运行的,取消它是没有意义的,因为可能出现软件故障。
由于这个原因,很可能没有这种可能性。我不能确定。
这意味着我们应该从逻辑上安排我们的代码,使我们在强制终止后不需要再次回到运行的代码。
如果我们退出,我们就明确地退出。

 
Roman:

由于可能的软件故障,已经运行的强制终止不太可能有取消的意义。
因此,可能没有这样的选择。我不能肯定地说。
这意味着我们应该从逻辑上安排我们的代码,使我们在运行强制终止时不需要再次回到运行的代码。
如果我们退出,我们就明确地退出。

不知何故,我的印象是你没有读完这个主题的所有内容。有些东西与你对手头问题的看法不太吻合。

ps;虽然没有。在你这个主题的第一个帖子中,你似乎引用了我的原话,但并不完全。也许因为这个原因,整个问题的想法发生了转变。
 
不管是什么问题,这就是答案。那就自言自语吧。你试图进入这个问题,人们还是不喜欢它。祝你找到问题所在。
 
Alexey Viktorov:

而这是你想看到的版本。

这就对了。

但不是

if(недопустимый параметр)          tester_stop = TesterStop();

更加简单明了,比...

if(недопустимый параметр)
       {
        TesterStop();
        tester_stop = true;
        return;
       }

?

但现在我已经完全按照你的建议做了。

 
Roman:
这样的问题和这样的答案。你们可以和自己讨论。你试图进入一个问题,人们仍然不喜欢它。祝你找到问题所在。

你不应该被冒犯。你必须阅读整个句子才能理解它。

关于交易、自动交易系统和测试交易策略的论坛

MT版本存档。

Alexey Viktorov, 2019.06.16 15:25

谢尔盖,没有什么意外。相反,一切都符合逻辑和一致。有不同的情况。有时你必须在专家顾问完成其工作之前完成事件处理,有时,就像你的情况一样,你必须紧急完成它。 开发人员面临的问题是,什么是正确的做法,是立即停止,引起那些需要完成事件处理的人的不满,还是在完成事件处理后停止。任何程序员在他/她的武器库中都有返回操作符,而在强制终止的情况下却没有任何东西。

为什么你需要改变bool的无效类型,因为在程序员的武器库中,有一些静态变量可以在TesterStop()之前或之后改变,原则上,一切都会如你所愿。但你在我的例子中出于某种原因省略了它。

而你只是断章取义,没有注意到第一部分。
 
Сергей Таболин:

这就对了。

但不是吗?

更加简单明了,比...

?

但现在我已经完全按照你的建议做了。

它可能更简单、更清晰,但要求开发者提供自己可以轻易写出的东西是错误的。由于某些原因,我不相信任何关于C++语言的添加物都是关于C++和需求的写法。而这些话,我相信对很多人来说已经足够了。

 
Alexey Viktorov:

它可能更简单、更清晰,但向开发者要求自己可以轻易写出的东西是错误的。由于某些原因,我不相信任何关于C++语言的添加物都是关于C++和需求的书写。而这些话,我相信对很多人来说已经足够了。

这里是对你的选择的检查。结果是这样的信息。

2019.06.16 18:49:25.464 Core 1  TesterStop() called on 0% of testing interval

这是个死胡同...

 
Alexey Viktorov:

你不应该被冒犯。你必须掌握整个短语,才能理解它。

而你只是断章取义,没有注意到第一部分。

通过给你一个IsStopped()的例子,我试图回答第一部分。
有时有必要在完成EA之前完成对事件的处理,有时则像你的情况一样紧急。
请阅读文档中对这个函数IsStopped() 的描述,也许它能带来一些想法。
但在你看来,这是来自另一个方向。如果是这样,对不起,可能会有猜测。
但正如他们所说,在可能的建议中,并解决了问题。
确定的解决方案不会告诉任何人,因为没有人知道他代码的所有逻辑,可能也不会深入研究。