MT版本存档。 - 页 2

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

它应该是,聪明地,转移应该立即完成,而不执行其余的代码。对吗?

但事实上,TesterStop()根本就没有停止测试。

预计如果必须停止进一步的代码执行,只需写下返回,就不会有进一步的执行。TesterStop(),以及ExpertRemove()

当调用ExpertRemove()时,专家顾问不会立即停止工作,只是提高一个标志来停止专家顾问的工作。也就是说,专家顾问不会处理 任何后续事件,它将调用OnDeinit()并从图表中卸载它。

而第二个观察到的缺陷是

tester_stop = false;

它根本就没有到位。

 
Alexey Viktorov:

它应该是智能的,如果你需要停止进一步的代码执行,只需写下return,就不会有进一步的执行。TesterStop()以及ExpertRemove()。

而我们注意到的第二个错误是

根本没有到位。

下一个事件是OnTick()?

OnTick()退出到哪里?

为什么它不合适呢?预计如果TesterStop() 被触发,执行将不会到达这一行。

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

下一个事件是OnTick()?

OnTick()从哪里获得输出?

为什么这一点不到位呢?预计如果TesterStop()被触发,执行将不会到达这一行。

在哪里退出,继续做什么,由开发者决定。

      if((stop_loss_buy > 0 && stop_loss_buy < 700) || (stop_loss_sell > 0 && stop_loss_sell < 700))
      {
         Print("Результат в OnTester() должен быть -99999999999.99");
         TesterStop();
      }
      check_init  = true;
      tester_stop = false;

无论TesterStop()是否被执行,这段代码中的tester_stop标志都将设置为false。

 
Alexey Viktorov:

到哪里去,继续做什么,由开发商决定。

在这段代码中,无论TesterStop()是否被执行,tester_stop标志都将取为false。

我已经有了)))。

问题是该怎么做?如何停止测试?具体说来。当在OnInit()中 使用INIT_PARAMETERS_INCORRECT 时,开发者几乎要发誓,它吹走了遗传学

我已经找到了一条出路,直到最近才有问题。而现在......。哦,亲爱的))))

我在哪里可以脱离OnTick()?

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

我已经知道了)))。

问题是该怎么做?我如何停止测试?具体说来。当在OnInit()中 使用INIT_PARAMETERS_INCORRECT 时,开发者几乎要发誓,它吹走了遗传学

我已经找到了一条出路,但我们最近没有问题。而现在......。哦,亲爱的))))

好吧,如果你明白问题是什么?

         TesterStop();
      tester_stop = false;
      return;

所有的代码,在执行TesterStop 之后,将不会被执行。也就是说,它将立即停止工作。再往前走,我们可以调整tester_stop标志...

另一个问题:这个数字是什么?减去很多九点是为了得到一些额外的痛苦吗?这就是它变得非常丑陋的地方......

 
Alexey Viktorov:

好吧,如果你明白问题出在哪里了?

所有的代码,在执行TesterStop之后,将不会被执行。换句话说,它将立即停止工作。从那里,我们可以使用tester_stop标志进行调节...

另一个问题:这个数字是什么?减去很多九点是为了得到一些额外的痛苦吗?这就是它变得非常丑陋的地方......

减去很多九是为了确定输出正是由TesterStop()。我只把它作为INIT_PARAMETERS_INCORRECT 的替代。这就是为什么我不需要它之后的其他一切。但现在的情况是,整个代码被执行后,程序员得到了除以0 的错误。当然,如果一个数组的大小为1,那么后者的值减去前者的值将永远是0!而我没有为自己投保,以防止这个错误,或者,哦,对不起,误解。

我试图插入返回...只是有点错)))。:

      if((stop_loss_buy > 0 && stop_loss_buy < 700) || (stop_loss_sell > 0 && stop_loss_sell < 700))
      {
         Print("Результат в OnTester() должен быть -99999999999.99");
         TesterStop();
         return;
      }

我最后的结果是。

DM      0       15:32:01.518    Core 1  2016.10.01 00:00:00   153128312914612747
PE      0       15:32:01.518    Core 1  2016.10.01 00:00:00   Советник получил MAGIC = 153128312914612747.
IF      0       15:32:01.518    Core 1  2016.10.03 00:00:00   Результат в OnTester() должен быть -99999999999.99
RS      3       15:32:01.518    Core 1  TesterStop() called on 0% of testing interval
GK      0       15:32:01.518    Core 1  final balance 10000.00 USD
JM      0       15:32:01.518    Core 1  OnTester result -99999999999.99001

只是真棒))))

最伟大的感谢!!!。

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

减去很多九是为了确定输出正是由TesterStop()。我只把它作为INIT_PARAMETERS_INCORRECT 的替代。这就是为什么我不需要它之后的其他一切。但现在的情况是,整个代码被执行后,程序员得到了除以0 的错误。当然,如果一个数组的大小为1,那么后者的值减去前者的值将永远是0!而我没有为自己投保,以防止这个错误,或者,哦,对不起,误解。

我试图插入返回...只是有点错)))。:

我最后的结果是。

只是真棒))))

衷心感谢!!!

谢尔盖-塔波林

谢谢,我已经知道了。但这并不能解决这个问题。它可以通过MQL_TESTER_STOP 常量来解决,或者通过将返回值从void改为bool 来解决。

Alexey Viktorov 提出了一个意想不到的解决方案:如果在TesterStop()之后使用return,一切似乎都可以了。它是如何和为什么发生的,我个人无法弄清楚。 尽管如此...

因此,要么在文档中增加这一点,要么将void改为bool

P.S. 我在Build 2085中遇到了这个问题。在这之前没有任何问题。它是否对我说了什么?)))

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

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

 
Alexey Viktorov:

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

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

阿列克谢,非常感谢你的帮助。

我理解开发者面临的问题,这也是我提出这样一个解决方案的原因。为了能够对情况作出正确的反应。

至于静态变量 和你的例子,我 "抛出 "了这个问题。对不起,但我不太明白我在说什么。如果你不介意的话,请向我解释一下。

并要求得到一些纵容和耐心。我的生活状况非常糟糕,这使我非常易怒(我理解,但却无能为力),而且不顾一切。

我只是完全不明白。我的头在旋转...

下面是一个例子。

我的代码显示,如果最后一个数组值减去第一个数组值早于0,那么结果一定是-999999999999.88。

但在优化过程中,我得到这个结果。

2019.06.16 16:27:09.847 Core 1  final balance 9587.10 USD
2019.06.16 16:27:09.847 Core 1  OnTester result -99999999999.88

9587-10000绝不等于零,结果是-999999999999.88。怎么会呢?我已经有了一个挂念......

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

阿列克谢,非常感谢你的帮助。

我理解开发者面临的问题,这也是我提出这样一个解决方案的原因。能够正确地对形势做出反应。

至于静态变量 和你的例子,我 "抛出 "了这个问题。对不起,但我不太明白我们在谈论什么。如果你不介意的话,请向我解释一下。

并要求得到一些纵容和耐心。我有一个非常糟糕的生活状况,这可能使我非常易怒(我意识到了这一点,但却无能为力),而且不专心。

我只是完全不明白。我的头在旋转...

下面是一个例子。

我的代码显示,如果最后一个数组值减去第一个数组值早于0,那么结果一定是-999999999999.88。

但在优化过程中,我得到这个结果。

9587-10000绝不等于零,结果是-999999999999.88。怎么会呢?我得到了一个悬念...

我不知道这是好是坏,但我从来没有进入过整个代码,这就是为什么我在谈论一个静态变量。而从tester_stop标志在程序的不同部分使用的事实来看,这个标志必须在全局变量的层次上声明。

它证实了你从我的例子中不合理地 "扔掉 "了改变标志的值。

这就是使用

   if(tester_stop) return(-99999999999.99);

而显然,这个标志要么根本没有变化,要么没有变化是因为没有在应该的地方提供变化。

 
Alexey Viktorov:
有时有必要在顾问终止之前 终止事件处理。

任何程序员在他或她的武器库中都有返回操作符,而在强制终止中没有任何东西


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

if(IsStopped())
if(!IsStopped())