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

 
alsu:
我们可以进一步加速,例如,如果我们知道条件A平均比C更经常得到满足,而C比B更经常得到满足,那么我们应该把它们按这个顺序排列:if(!a){if(!c)if{(!b) M=false;}}。

你可以通过将一个条件的概率与它的计算复杂度结合起来,使事情变得更快:例如,将其发生的概率与计算时间的逆值的乘积作为一个标准,首先要检查的条件是那些最有可能发生且计算复杂度最低的条件,也就是那些具有我们给定标准的最高值的条件。
 
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;

谢谢你!

 
alsu:

你可以通过将一个条件的概率与它的计算复杂度结合起来,来进一步加快事情的进展:例如,把执行概率与计算时间的逆值的乘积作为一个标准,首先检查那些可能性最大、计算复杂度最低的条件,也就是那些具有我们给定标准的最高值的条件。

很久以前我就把它们按这个顺序排列。但即使有一个以上的条件被满足,第一个出现的条件也会被满足。

而这并不重要,因为这样一来,所有变体的最终条件都是共同的。

 
alsu:

你可以通过将一个条件的概率与它的计算复杂度结合起来,使事情变得更快:例如,将执行概率与计算时间逆值的乘积作为标准,首先检查那些可能性最大、计算复杂度最低的条件,即那些具有我们设定的标准的最高值。
阿列克谢,我再次回答你的建议,根据它们对行动速度的影响来交换条件。这就是我的发现!最复杂的计算并不像检查各种必要的市场数据和每个tick的未结头寸的功能那样慢。我已经根据论坛上一位用户的建议将这些功能简化了不少,在我的情况下扔掉了所有不必要的东西,这使它们的速度几乎提高了一倍。至于选择在 "每一个 "刻度上工作,我早先就确信,只有这种模式才能使我更接近真实的可能结果。因此,在所有的计算、指标检查和当前价格检查之后,实现了这些功能,速度增加了一倍,现在使得半年内在测试器中的运行时间为7分钟,一年内为14分钟。如果前面的条件允许,我不能放弃进行必要检查的功能。现在,我将尝试优化代码,将&&改为 ) if ( 。我很想知道还有哪些代码优化 的可能性。谢谢你和大家的帮助!
 
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

的速度,我没有测量它。

 
pako:


if(A || B || C || D || E)Action; 我会这样做if((A + B + C + D + E)> 0) Action; 如果Action至少需要3个信号,就写2而不是0

速度,我没有测量


速度将是巨大的。该解决方案非常有创意
 
如果A,B,C,D是函数,你应该按照复杂程度依次往上数,从最简单的开始,并不断检查是否真实。这将使工作更快。
 
Vinin:

加速将是巨大的。这个解决方案非常有创意。
刚进去!谢谢你,帕科!谢谢你,维克多!我现在要吃午饭,然后试一试!
 
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);

我不知道该尝试什么!

 
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;