是否有可能避免在条件中出现许多 "或"(||)造成相同的动作? - 页 7

 

今晚我度过了一个多么富有成果的夜晚!在我睡觉的时候,有许多有趣的事情向我抛来,对此我永远感激不尽。而你的早晨也比晚上更有智慧!

快速浏览了所有建议的东西后,还是一如既往地提出了问题,但现在我只想知道是否有可能只用一个Action()来完成最后的表达,因为它的内容相当广泛。

if (!A) if (!B) if (!C) if (!D)
else Action();


在我看来,它可以更快。的确,如果只有最后一个条件被执行,它并不排除检查所有的条件,或者我错了,这对我来说更好。

你怎么看?

 
FAQ:
谁不喜欢 "他妈的MQL4",不如去跑步,跑步。因为不清楚他在这里做什么,尽管这个账户有很多优点和古老的特点。
请向不了解情况的人解释一下吧!
 
Meat:
一般来说,最快的选择是这样。

然而,否则 result=false 一行最好与第一行结合起来,它不会影响速度。一般来说,如果A、B、C和D包含简单的条件(运算量最小,不需要调用所有的数学函数和其他东西),那么你不会从这样的优化中获得太多的性能提升(当然,除非这个结构运行数千万次)。 但是代码重载可能会很重要。

我在一个主题中写到,一切都必须合理处理。 出于某种原因,在我看来,你的代码充满了更重要的地方,对其进行优化确实会带来巨大的性能提升。 你应该从基本算法开始。 大多数新手在每个tick都会对有关TS或未结订单的所有条件进行愚蠢的检查。但在大多数情况下,只检查边界条件就足够了,例如,当高点或低点达到某个值时,或出现新的柱状物时。 只有在这之后,你才能进行进一步的检查。

那么,除了与资源密集型的计算,你需要考虑将这些计算转移到DLL中。否则,在该死的MQL4中坐等13分钟(而你只需2-3分钟就能得到同样的结果)似乎是很不幸的:)


虽然我绝对同意第一部分的说法。
 
icas:

这样就更快了。

我想到了一个故事。

"在一次公司董事会会议上有两个问题。

1.决定建造同步相位仪。

2.决定为员工建造一个自行车停车场。

关于第一个问题,讨论持续了1分钟。

2日,辩论持续了2个多小时"。

是的,没错...关于自行车公园...
 
borilunad:

今晚我度过了一个多么富有成果的夜晚!在我睡觉的时候,有许多有趣的事情向我抛来,对此我永远感激不尽。而你的早晨也比晚上更有智慧!

快速浏览了所有建议的东西后,还是一如既往地提出了问题,但现在我只想知道是否有可能只用一个Action()来完成最后的表达,因为它的内容相当广泛。

在我看来,它可以更快。的确,如果只有最后一个条件被执行,它并不排除检查所有的条件,或者我错了,这对我来说更好。

你怎么看?

不,它不是这样的。首先,if()后面必须有东西,至少只有一个分号(即空操作符)。第二,你的其他操作员打算属于哪一个如果?如果它只指最后一个(像你写的那样),那么只有当D条件为真时,A、B和C为假时,Action才会被执行。最好是放置大括号,以便清楚地看到逻辑。

 
FAQ:

谢谢你!我暂时避免使用DLL和其他亲MCLogo的东西。

我想借此机会回答Alexey (Meat),所有的开仓 都是在一个新的条形图上进行的,虽然是在M1上,但其他的都是在每个tick上工作。我还使用了很多必要的函数(如果我每次都在启动时检查所有的东西,那么代码就会非常沉重)。甚至还有一个MathPow(),我将尝试用Mathematician建议的指数来代替它。至于其他方面,所有必要的修改和关闭的超额部分。没有它怎么行?

 
注意监测和重新计算订单。这是顾问们通常做得最多的事情。
 
alsu:

不,它不是那样工作的。首先,if()后面必须有东西,至少只有一个分号(即一个空运算符)。第二,你的 "如果 "是指属于哪一个 "如果"?如果它只指最后一个(像你写的那样),那么只有当D条件为真时,A、B和C为假时,Action才会被执行。最好是放置大括号,以便清楚地看到逻辑。

谢谢你!但我只需要一个Action();!但我不知道怎么做。你能给我一个提示吗?

 
FAQ:
注意控制和命令的重新计算。这是顾问们通常做得最多的事情。
但它们是不可避免的,否则就会出现错误!
 

在我的程序中,如果有大量的if,我就会使用这种结构,把最常给出假的条件放在第一位。

if (A>B)
{  if (C>=10)
   {  if (D<=5)
      {  if(E=1)
         Action:
      }
   }
}
而如果有必要检查大量的if-ops,那么就是这样的。
if (A>B || N<M)
{  if (C>=10 || P<100)
   {  if (D<=5 || R>1)
      {  if(E=1 || S!=0)
         Action:
      }
   }
}