是否有可能避免在条件中出现许多 "或"(||)造成相同的动作? - 页 3 12345678910 新评论 Alexey Subbotin 2013.02.08 15:44 #21 alsu: 我们可以进一步加速,例如,如果我们知道条件A平均比C更经常得到满足,而C比B更经常得到满足,那么我们应该把它们按这个顺序排列:if(!a){if(!c)if{(!b) M=false;}}。 你可以通过将一个条件的概率与它的计算复杂度结合起来,使事情变得更快:例如,将其发生的概率与计算时间的逆值的乘积作为一个标准,首先要检查的条件是那些最有可能发生且计算复杂度最低的条件,也就是那些具有我们给定标准的最高值的条件。 Boris 2013.02.08 15:51 #22 TarasBY: 你也可以通过这种方式来优化计算。 或者你可以这样试一试。 bool M = false; if (A) M = true; else if (B) M = true; else if (C) M = true; else if (D) M = true; else if (E) M = true; if (M == true) Action; 谢谢你! Boris 2013.02.08 15:57 #23 alsu: 你可以通过将一个条件的概率与它的计算复杂度结合起来,来进一步加快事情的进展:例如,把执行概率与计算时间的逆值的乘积作为一个标准,首先检查那些可能性最大、计算复杂度最低的条件,也就是那些具有我们给定标准的最高值的条件。 很久以前我就把它们按这个顺序排列。但即使有一个以上的条件被满足,第一个出现的条件也会被满足。 而这并不重要,因为这样一来,所有变体的最终条件都是共同的。 Boris 2013.02.10 08:58 #24 alsu: 你可以通过将一个条件的概率与它的计算复杂度结合起来,使事情变得更快:例如,将执行概率与计算时间逆值的乘积作为标准,首先检查那些可能性最大、计算复杂度最低的条件,即那些具有我们设定的标准的最高值。 阿列克谢,我再次回答你的建议,根据它们对行动速度的影响来交换条件。这就是我的发现!最复杂的计算并不像检查各种必要的市场数据和每个tick的未结头寸的功能那样慢。我已经根据论坛上一位用户的建议将这些功能简化了不少,在我的情况下扔掉了所有不必要的东西,这使它们的速度几乎提高了一倍。至于选择在 "每一个 "刻度上工作,我早先就确信,只有这种模式才能使我更接近真实的可能结果。因此,在所有的计算、指标检查和当前价格检查之后,实现了这些功能,速度增加了一倍,现在使得半年内在测试器中的运行时间为7分钟,一年内为14分钟。如果前面的条件允许,我不能放弃进行必要检查的功能。现在,我将尝试优化代码,将&&改为 ) if ( 。我很想知道还有哪些代码优化 的可能性。谢谢你和大家的帮助! [删除] 2013.02.10 11:59 #25 borilunad:没有一个操作员适合。如果没有if(A || B || C || D || E)Action,还有其他方法吗? 由于我所想的问题很重要,而且找不到更合理的解决办法,所以我请版主不要发到一般提问者的主题中去谢谢你! if(A || B || C || D || E)Action; 我会这样做if((A + B + C + D + E)> 0) Action; 如果Action至少需要3个信号,就写2而不是0的速度,我没有测量它。 Victor Nikolaev 2013.02.10 12:27 #26 pako:if(A || B || C || D || E)Action; 我会这样做if((A + B + C + D + E)> 0) Action; 如果Action至少需要3个信号,就写2而不是0速度,我没有测量 速度将是巨大的。该解决方案非常有创意 Sergey Fionin 2013.02.10 15:40 #27 如果A,B,C,D是函数,你应该按照复杂程度依次往上数,从最简单的开始,并不断检查是否真实。这将使工作更快。 Boris 2013.02.10 15:41 #28 Vinin: 加速将是巨大的。这个解决方案非常有创意。 刚进去!谢谢你,帕科!谢谢你,维克多!我现在要吃午饭,然后试一试! Boris 2013.02.10 17:27 #29 FION: 如果A,B,C,D是函数,你必须按复杂度计算,从最简单的一个开始,并不断检查真假。这样工作会更快。 感谢你的参与!A, B, C ...不是函数,而是包含函数和不包含函数的条件,而且是相互排斥的!"。而一个条件就足以跳到其他已经触发行动的条件。如果只有功能,那就不会有问题了。 double A =function1(); double B = function2(); double C = function3(); double D = function4(); double E = function5(); 然后按照Pako的建议。 如果((A + B + C + D + E) > 0) {其他条件与镜像方向关闭Byes或Sells}行动;BUT。 而我需要A=条件1,B=条件2,C=条件3,D=条件4,E=条件5。这是否可能!?还是不可能,就这样吧!? 比如说。bool a = true; //или double a; а = (isCloseLastPosByTake() == True && Profit > ProClo / clo - GetProfitCloseLastPosByTake() * clo); 我不知道该尝试什么! Is it possible to why -1 and i-- Need an advice [删除] 2013.02.10 18:22 #30 borilunad: 而我需要A=条件1,B=条件2,C=条件3,D=条件4,E=条件5。这到底有没有可能?还是不可能,就这样吧!? bool a = true; //или double a; а = (isCloseLastPosByTake() == True && Profit > ProClo / clo - GetProfitCloseLastPosByTake() * clo); <--- 10,444 = 8,087 > 3,908 эт на каком языке? bool a = false; if (isCloseLastPosByTake() == True && Profit > ProClo / (clo - GetProfitCloseLastPosByTake() * clo)) a = true; 12345678910 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
我们可以进一步加速,例如,如果我们知道条件A平均比C更经常得到满足,而C比B更经常得到满足,那么我们应该把它们按这个顺序排列:if(!a){if(!c)if{(!b) M=false;}}。
你可以通过将一个条件的概率与它的计算复杂度结合起来,使事情变得更快:例如,将其发生的概率与计算时间的逆值的乘积作为一个标准,首先要检查的条件是那些最有可能发生且计算复杂度最低的条件,也就是那些具有我们给定标准的最高值的条件。
你也可以通过这种方式来优化计算。
或者你可以这样试一试。
谢谢你!
你可以通过将一个条件的概率与它的计算复杂度结合起来,来进一步加快事情的进展:例如,把执行概率与计算时间的逆值的乘积作为一个标准,首先检查那些可能性最大、计算复杂度最低的条件,也就是那些具有我们给定标准的最高值的条件。
很久以前我就把它们按这个顺序排列。但即使有一个以上的条件被满足,第一个出现的条件也会被满足。
而这并不重要,因为这样一来,所有变体的最终条件都是共同的。
你可以通过将一个条件的概率与它的计算复杂度结合起来,使事情变得更快:例如,将执行概率与计算时间逆值的乘积作为标准,首先检查那些可能性最大、计算复杂度最低的条件,即那些具有我们设定的标准的最高值。
没有一个操作员适合。如果没有if(A || B || C || D || E)Action,还有其他方法吗?
由于我所想的问题很重要,而且找不到更合理的解决办法,所以我请版主不要发到一般提问者的主题中去谢谢你!
if(A || B || C || D || E)Action; 我会这样做if((A + B + C + D + E)> 0) Action; 如果Action至少需要3个信号,就写2而不是0
的速度,我没有测量它。
if(A || B || C || D || E)Action; 我会这样做if((A + B + C + D + E)> 0) Action; 如果Action至少需要3个信号,就写2而不是0
速度,我没有测量
速度将是巨大的。该解决方案非常有创意
加速将是巨大的。这个解决方案非常有创意。
如果A,B,C,D是函数,你必须按复杂度计算,从最简单的一个开始,并不断检查真假。这样工作会更快。
感谢你的参与!A, B, C ...不是函数,而是包含函数和不包含函数的条件,而且是相互排斥的!"。而一个条件就足以跳到其他已经触发行动的条件。如果只有功能,那就不会有问题了。
double A =function1(); double B = function2(); double C = function3(); double D = function4(); double E = function5(); 然后按照Pako的建议。
如果((A + B + C + D + E) > 0)
{其他条件与镜像方向关闭Byes或Sells}行动;BUT。
而我需要A=条件1,B=条件2,C=条件3,D=条件4,E=条件5。这是否可能!?还是不可能,就这样吧!?
比如说。
我不知道该尝试什么!
而我需要A=条件1,B=条件2,C=条件3,D=条件4,E=条件5。这到底有没有可能?还是不可能,就这样吧!?