É possível evitar muitos "ors" (|||) em condições que causem a mesma ação? - página 3

 
alsu:
Podemos acelerar ainda mais, por exemplo, se soubermos que a condição A é satisfeita em média mais vezes que C e C mais vezes que B, então coloque-as nessa ordem: if(!a){if(!c)if{(!b) M=false;}}}

Você pode acelerar ainda mais as coisas combinando a probabilidade de uma condição acontecer com sua complexidade computacional: por exemplo, tomando como critério o produto da probabilidade de acontecer pelo valor inverso do tempo de computação, as primeiras condições a serem verificadas são aquelas que são as mais prováveis e têm a menor complexidade computacional, ou seja, aquelas que têm o maior valor do nosso critério dado.
 
TarasBY:

Você também pode otimizar os cálculos desta forma:

Ou talvez você possa tentar desta forma:

    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;

Obrigado!

 
alsu:

Você pode acelerar ainda mais as coisas combinando a probabilidade de uma condição com sua complexidade computacional: por exemplo, tomando como critério o produto da probabilidade de execução por um valor inverso do tempo de computação, verifique primeiro aquelas condições que são mais prováveis e têm a menor complexidade computacional, ou seja, aquelas que têm o maior valor do nosso critério dado.

Eu os coloquei nessa ordem há muito tempo. Mas mesmo se mais de uma condição for cumprida, então a primeira que surgir será cumprida.

Isso não faz diferença, porque então as condições finais são comuns para todas as variantes.

 
alsu:

Você pode acelerar ainda mais as coisas combinando a probabilidade de uma condição com sua complexidade computacional: por exemplo, tomando como critério o produto da probabilidade de execução pelo valor inverso do tempo de computação, verifique primeiro aquelas condições que são mais prováveis e têm a menor complexidade computacional, ou seja, aquelas que têm o maior valor do critério que estabelecemos.
Alexey, mais uma vez respondo à sua sugestão de trocar condições dependendo de sua influência na velocidade das ações. E aqui está o que eu encontrei! Os cálculos mais complexos não são tão lentos quanto as funções que verificam vários dados de mercado necessários e posições abertas para cada tick. Já simplifiquei um pouco estas funções com base nos conselhos de um dos membros do fórum, jogando fora todas as coisas desnecessárias no meu caso, o que quase dobrou sua velocidade. Quanto à escolha de trabalhar em "cada" tick, eu estava convencido anteriormente de que somente este modo dá uma melhor aproximação aos resultados realmente possíveis. Assim, tendo implementado estas funções após todos os cálculos, verificações de indicadores e verificações de preços atuais, a velocidade dobrou, o que agora faz com que o testador tenha 7 minutos de corrida durante meio ano e 14 minutos por ano, respectivamente. Não posso abrir mão de funções que realizam as verificações necessárias, se as condições anteriores o permitirem. Agora vou tentar otimizar o código, mudando && para ) se (. Ficarei feliz em saber que outras possibilidades de otimização de código existem. Obrigado a você e a todos por sua ajuda!
 
borilunad:

Nenhum dos operadores se encaixa. Existe outra forma sem if(A ||| B ||| C ||| D || E) Ação;?

Peço aos moderadores que não enviem para o tópico de perguntas gerais devido à importância da pergunta que estou pensando e não consigo encontrar uma solução mais racional! Obrigado!


if(A ||| B ||| C ||| D || E) Ação; eu faria issose((A + B + C + D + E) > 0) Ação; seAção precisa de pelo menos 3 sinais, escreva 2 em vez de 0

a velocidade, eu não a medi.

 
pako:


if(A ||| B ||| C ||| D || E) Ação; eu faria issose((A + B + C + D + E) > 0) Ação; seAção precisa de pelo menos 3 sinais, escreva 2 em vez de 0

velocidade, eu não medi


A velocidade seria tremenda. A solução é muito original
 
Se A,B,C,D são funções, você deve contar em ordem de complexidade, começando com a mais fácil e constante verificação da verdade. Isto funcionará mais rapidamente.
 
Vinin:

A aceleração será tremenda. A solução é muito original.
Só dentro! Obrigado, Pako! Obrigado, Victor! Vou almoçar agora e tentar!
 
FION:
Se A,B,C,D são funções, você tem que contar por complexidade, começando pela mais fácil, e verificar constantemente a verdade. Funcionará mais rápido desse modo.

Obrigado por sua participação! A, B, C ... não funções, mas condições contendo funções e não contendo funções, e além disso mutuamente exclusivas! E uma condição é suficiente para saltar para outras condições que já acionam a ação. Se houvesse apenas funções, então não haveria problema:

duplo A = função1(); duplo B = função2(); duplo C = função3(); duplo D = função4(); duplo E = função5(); e então como Pako sugeriu:

if((A + B + C + D + E) > 0)

{outra condição com direção espelhada para fechar Byes or Sells} action;MAS:

E eu preciso A = condição1, B = condição2, C = condição3, D = condição4, E = condição5. É possível ou não! Ou será impossível e pronto!

Por exemplo:

bool a = true;

//или
double a;

а = (isCloseLastPosByTake() == True && Profit > ProClo / clo - GetProfitCloseLastPosByTake() * clo);

Eu não sei o que tentar!

 
borilunad:

E eu preciso A = condição1, B = condição2, C = condição3, D = condição4, E = condição5. É possível ou não?! Ou será impossível e pronto!

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;