是否有可能避免在条件中出现许多 "或"(||)造成相同的动作? - 页 2 12345678910 新评论 Boris 2013.02.08 12:08 #11 TarasBY: 你也可以通过这种方式来优化计算。 谢谢!有人已经建议我使用bool Avals,Vinin警告我说这将严重减慢速度。而在我几乎完成了一个EA之后,我正在寻找其他的东西来优化代码。我已经成功地将12个月内所有测试器的运行时间从40分钟减少到13分钟!这就是我的工作。 Рустам 2013.02.08 12:09 #12 有人说过很多次:MCL中没有捷径,如果(a||b||c||d||e){}所有条件都会被检查。 出路是筑巢的条件。 if(a){if(b){if(c){}},在这种情况下,退出将发生在第一个匹配条件上。但嵌套也不是无限的,最灵活的解决方案是在一个有退出的循环中检查条件。bool cond[]={a,b,c,d,e,...}; int sz = ArraySize(cond); for(int i=0;i<sz;i++){ if(cond[i]){ bla.bla.bla; break; } } TarasBY 2013.02.08 12:29 #13 Vinin: 你可以,但速度会下降很多。 Victor,你的警告(关于使用bool变量)是否适用于我的优化选项? Boris 2013.02.08 12:31 #14 FAQ: 有人说过很多次:MCL中没有捷径,如果(a||b||c||d||e){}所有条件都会被检查。 出路是筑巢的条件。 if(a){if(b){if(c){}},在这种情况下,退出将发生在第一个匹配条件上。 但嵌套也不是无限的,最灵活的解决方案是在一个有退出的循环中检查条件。 非常感谢您!我将试一试!你懂西班牙语吗?因为 "bla, bla, bla "来自于动词 "说话"(hablar)! Рустам 2013.02.08 12:34 #15 没有,但我很擅长奥尔班:)) Boris 2013.02.08 15:00 #16 FAQ: 没有,但我很了解奥尔巴尼安:)) 嵌套条件if(a){if(b){if(c){}}是不好的,因为所有的条件都是互斥的,但有些东西对布尔值不起作用。可能也很有可能是我做错了什么。到目前为止,我已经停止了为每个条件制作一个双倍变量,并将其粘贴到带有4个 "或 "的同一个if()中。如我所料,这并没有影响到测试的速度。在12个月内,所有蜱虫都是同样的13分钟。 或者说这种语言被称为奥布兰斯基? Alexey Subbotin 2013.02.08 15:18 #17 borilunad: 嵌套条件if(a){if(b){if(c){}}是不好的,因为所有条件都是互斥的。可能也很有可能做错了什么。 一切都很好,只要记住布尔运算中的一些特性,例如:a || b = !( !a && !b )。那么,通过从连合到分离,我们可以用连续(嵌套)的AND条件检查来取代OR条件的检查:例如,如果(a || b || c)变成,正如TarasBY在上面正确写的那样,变成bool M = true; if(!a) {if(!b) {if(!c) M=false;}} if(!M) {Action;}一般来说,这段代码比带有||的原始代码快,因为它只执行到列表中的一个条件为真,即直到整个OR操作的结果为TRU。 Alexey Subbotin 2013.02.08 15:21 #18 alsu: 一切都很好,只要记住布尔运算中的一些特性,例如:a || b = !( !a && !b )。那么,通过从连合到分离,我们可以用连续(嵌套)的AND条件检查来代替OR条件的检查:例如,如果(a || b || c)变成,正如TarasBY在上面正确写的那样,变成一般来说,这段代码比带有||的原始代码快,因为它只执行到列表中的一个条件为真,即直到整个OR操作产生一个TRU结果。 我们也可以加速,例如,如果我们知道条件A平均比C更经常被执行,而C比B更经常被执行,那么我们应该把它们按这个顺序排列:if(!a){if(!c)if{(!b) M=false;}}。 Boris 2013.02.08 15:34 #19 alsu: 一切都很好,只要记住布尔运算中的一些特性,例如:a || b = !( !a && !b )。那么,通过从连合到分离,我们可以用连续(嵌套)的AND条件检查来代替OR条件的检查:例如,如果(a || b || c)变成,正如TarasBY在上面正确写的那样,变成 一般来说,这段代码比带有||的原始代码快,因为它只执行到列表中的一个条件为真,即直到整个OR操作产生一个TRU结果。 感谢你的参与!我有5个不同但价值相等的条件,如果没有条件为真,EA会等待,直到其中一个条件为真。因此,尽管我作出了努力,但没有一种实施形式被证明是更好的。因此,我将暂时坚持使用我的 "馅饼"。 Alexey Subbotin 2013.02.08 15:36 #20 borilunad: 感谢你的参与!我有5个不同但相等的条件,如果不满足任何条件,EA会等待其中一个条件的满足。因此,尽管我做出了努力,但没有任何一种实施形式被证明是更好的。因此,我将暂时坚持使用我的 "馅饼"。 甚至我刚才给你看的东西?那么,就应该通过其他方式来提高性能。 12345678910 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
你也可以通过这种方式来优化计算。
有人说过很多次:MCL中没有捷径,如果(a||b||c||d||e){}所有条件都会被检查。
出路是筑巢的条件。
if(a){if(b){if(c){}},在这种情况下,退出将发生在第一个匹配条件上。
但嵌套也不是无限的,最灵活的解决方案是在一个有退出的循环中检查条件。
有人说过很多次:MCL中没有捷径,如果(a||b||c||d||e){}所有条件都会被检查。
出路是筑巢的条件。
if(a){if(b){if(c){}},在这种情况下,退出将发生在第一个匹配条件上。
但嵌套也不是无限的,最灵活的解决方案是在一个有退出的循环中检查条件。
没有,但我很了解奥尔巴尼安:))
嵌套条件if(a){if(b){if(c){}}是不好的,因为所有的条件都是互斥的,但有些东西对布尔值不起作用。可能也很有可能是我做错了什么。到目前为止,我已经停止了为每个条件制作一个双倍变量,并将其粘贴到带有4个 "或 "的同一个if()中。如我所料,这并没有影响到测试的速度。在12个月内,所有蜱虫都是同样的13分钟。
或者说这种语言被称为奥布兰斯基?
嵌套条件if(a){if(b){if(c){}}是不好的,因为所有条件都是互斥的。可能也很有可能做错了什么。
一切都很好,只要记住布尔运算中的一些特性,例如:a || b = !( !a && !b )。那么,通过从连合到分离,我们可以用连续(嵌套)的AND条件检查来取代OR条件的检查:例如,如果(a || b || c)变成,正如TarasBY在上面正确写的那样,变成
一般来说,这段代码比带有||的原始代码快,因为它只执行到列表中的一个条件为真,即直到整个OR操作的结果为TRU。
一切都很好,只要记住布尔运算中的一些特性,例如:a || b = !( !a && !b )。那么,通过从连合到分离,我们可以用连续(嵌套)的AND条件检查来代替OR条件的检查:例如,如果(a || b || c)变成,正如TarasBY在上面正确写的那样,变成
一般来说,这段代码比带有||的原始代码快,因为它只执行到列表中的一个条件为真,即直到整个OR操作产生一个TRU结果。
一切都很好,只要记住布尔运算中的一些特性,例如:a || b = !( !a && !b )。那么,通过从连合到分离,我们可以用连续(嵌套)的AND条件检查来代替OR条件的检查:例如,如果(a || b || c)变成,正如TarasBY在上面正确写的那样,变成
一般来说,这段代码比带有||的原始代码快,因为它只执行到列表中的一个条件为真,即直到整个OR操作产生一个TRU结果。
感谢你的参与!我有5个不同但相等的条件,如果不满足任何条件,EA会等待其中一个条件的满足。因此,尽管我做出了努力,但没有任何一种实施形式被证明是更好的。因此,我将暂时坚持使用我的 "馅饼"。