if((stop_loss_buy > 0 && stop_loss_buy < 700) || (stop_loss_sell > 0 && stop_loss_sell < 700))
{
Print("Результат в OnTester() должен быть -99999999999.99");
TesterStop();
return;
}
我最后的结果是。
DM 015:32:01.518 Core 12016.10.0100:00:00153128312914612747
PE 015:32:01.518 Core 12016.10.0100:00:00 Советник получил MAGIC = 153128312914612747.
IF 015:32:01.518 Core 12016.10.0300:00:00Результат в OnTester() должен быть -99999999999.99
RS 315:32:01.518 Core 1TesterStop() called on 0% of testing interval
GK 015:32:01.518 Core 1final balance 10000.00 USD
JM 015:32:01.518 Core 1OnTester result -99999999999.99001
它应该是,聪明地,转移应该立即完成,而不执行其余的代码。对吗?
但事实上,TesterStop()根本就没有停止测试。
预计如果必须停止进一步的代码执行,只需写下返回,就不会有进一步的执行。TesterStop(),以及ExpertRemove()。
而第二个观察到的缺陷是
tester_stop = false;
它根本就没有到位。
它应该是智能的,如果你需要停止进一步的代码执行,只需写下return,就不会有进一步的执行。TesterStop()以及ExpertRemove()。
而我们注意到的第二个错误是
根本没有到位。
下一个事件是OnTick()?
OnTick()退出到哪里?
为什么它不合适呢?预计如果TesterStop() 被触发,执行将不会到达这一行。
下一个事件是OnTick()?
OnTick()从哪里获得输出?
为什么这一点不到位呢?预计如果TesterStop()被触发,执行将不会到达这一行。
在哪里退出,继续做什么,由开发者决定。
无论TesterStop()是否被执行,这段代码中的tester_stop标志都将设置为false。
到哪里去,继续做什么,由开发商决定。
在这段代码中,无论TesterStop()是否被执行,tester_stop标志都将取为false。
我已经有了)))。
问题是该怎么做?如何停止测试?具体说来。当在OnInit()中 使用INIT_PARAMETERS_INCORRECT 时,开发者几乎要发誓,它吹走了遗传学。
我已经找到了一条出路,直到最近才有问题。而现在......。哦,亲爱的))))
我在哪里可以脱离OnTick()?
我已经知道了)))。
问题是该怎么做?我如何停止测试?具体说来。当在OnInit()中 使用INIT_PARAMETERS_INCORRECT 时,开发者几乎要发誓,它吹走了遗传学。
我已经找到了一条出路,但我们最近没有问题。而现在......。哦,亲爱的))))
好吧,如果你明白问题是什么?
所有的代码,在执行TesterStop 之后,将不会被执行。也就是说,它将立即停止工作。再往前走,我们可以调整tester_stop标志...
另一个问题:这个数字是什么?减去很多九点是为了得到一些额外的痛苦吗?这就是它变得非常丑陋的地方......
好吧,如果你明白问题出在哪里了?
所有的代码,在执行TesterStop之后,将不会被执行。换句话说,它将立即停止工作。从那里,我们可以使用tester_stop标志进行调节...
另一个问题:这个数字是什么?减去很多九点是为了得到一些额外的痛苦吗?这就是它变得非常丑陋的地方......
减去很多九是为了确定输出正是由TesterStop()。我只把它作为INIT_PARAMETERS_INCORRECT 的替代。这就是为什么我不需要它之后的其他一切。但现在的情况是,整个代码被执行后,程序员得到了除以0 的错误。当然,如果一个数组的大小为1,那么后者的值减去前者的值将永远是0!而我没有为自己投保,以防止这个错误,或者,哦,对不起,误解。
我试图插入返回...只是有点错)))。:
我最后的结果是。
只是真棒))))
最伟大的感谢!!!。
减去很多九是为了确定输出正是由TesterStop()。我只把它作为INIT_PARAMETERS_INCORRECT 的替代。这就是为什么我不需要它之后的其他一切。但现在的情况是,整个代码被执行后,程序员得到了除以0 的错误。当然,如果一个数组的大小为1,那么后者的值减去前者的值将永远是0!而我没有为自己投保,以防止这个错误,或者,哦,对不起,误解。
我试图插入返回...只是有点错)))。:
我最后的结果是。
只是真棒))))
衷心感谢!!!
谢谢,我已经知道了。但这并不能解决这个问题。它可以通过MQL_TESTER_STOP 常量来解决,或者通过将返回值从void改为bool 来解决。
Alexey Viktorov 提出了一个意想不到的解决方案:如果在TesterStop()之后使用return,一切似乎都可以了。它是如何和为什么发生的,我个人无法弄清楚。 尽管如此...
因此,要么在文档中增加这一点,要么将void改为bool。
P.S. 我在Build 2085中遇到了这个问题。在这之前没有任何问题。它是否对我说了什么?)))
谢尔盖,这并没有什么意外。相反,它是合乎逻辑和一致的。有不同的情况。有时你必须在专家顾问完成之前完成对事件的处理,而有时,就像你的情况一样,你必须立即完成处理。开发人员面临的问题是,什么是正确的做法,是立即停止,引起那些需要完成事件处理的人的不满,还是在完成事件处理后停止。任何程序员在他/她的武器库中都有返回操作符,而在强制终止的情况下却没有任何东西。
为什么你需要改变bool的无效类型,因为在程序员的武器库中,有一些静态变量可以在TesterStop()之前或之后改变,原则上,一切都会如你所愿。而你出于某种原因在我的例子中忽略了这一点。
谢尔盖,这里面没有什么意外。相反,一切都符合逻辑和一致。有不同的情况。有时你必须在专家顾问完成之前完成对事件的处理,而有时,就像你的情况一样,你必须马上完成。开发人员面临的问题是,什么是正确的做法,是立即停止,引起那些需要完成事件处理的人的不满,还是在完成事件处理后停止。任何程序员在他/她的武器库中都有返回操作符,而在强制终止的情况下却没有任何东西。
为什么你需要改变bool的无效类型,因为在程序员的武器库中,有一些静态变量可以在TesterStop()之前或之后改变,原则上,一切都会如你所愿。而你出于某种原因在我的例子中忽略了这一点。
阿列克谢,非常感谢你的帮助。
我理解开发者面临的问题,这也是我提出这样一个解决方案的原因。为了能够对情况作出正确的反应。
至于静态变量 和你的例子,我 "抛出 "了这个问题。对不起,但我不太明白我在说什么。如果你不介意的话,请向我解释一下。
并要求得到一些纵容和耐心。我的生活状况非常糟糕,这使我非常易怒(我理解,但却无能为力),而且不顾一切。
我只是完全不明白。我的头在旋转...
下面是一个例子。
我的代码显示,如果最后一个数组值减去第一个数组值早于0,那么结果一定是-999999999999.88。
但在优化过程中,我得到这个结果。
9587-10000绝不等于零,结果是-999999999999.88。怎么会呢?我已经有了一个挂念......
阿列克谢,非常感谢你的帮助。
我理解开发者面临的问题,这也是我提出这样一个解决方案的原因。能够正确地对形势做出反应。
至于静态变量 和你的例子,我 "抛出 "了这个问题。对不起,但我不太明白我们在谈论什么。如果你不介意的话,请向我解释一下。
并要求得到一些纵容和耐心。我有一个非常糟糕的生活状况,这可能使我非常易怒(我意识到了这一点,但却无能为力),而且不专心。
我只是完全不明白。我的头在旋转...
下面是一个例子。
我的代码显示,如果最后一个数组值减去第一个数组值早于0,那么结果一定是-999999999999.88。
但在优化过程中,我得到这个结果。
9587-10000绝不等于零,结果是-999999999999.88。怎么会呢?我得到了一个悬念...
我不知道这是好是坏,但我从来没有进入过整个代码,这就是为什么我在谈论一个静态变量。而从tester_stop标志在程序的不同部分使用的事实来看,这个标志必须在全局变量的层次上声明。
它证实了你从我的例子中不合理地 "扔掉 "了改变标志的值。
这就是使用
if(tester_stop) return(-99999999999.99);
而显然,这个标志要么根本没有变化,要么没有变化是因为没有在应该的地方提供变化。
有时有必要在顾问终止之前 终止事件处理。
任何程序员在他或她的武器库中都有返回操作符,而在强制终止中没有任何东西。
在这种情况下,我们不能做一个检查吗?