Você também pode otimizar os cálculos desta forma:
Obrigado! Já fui aconselhado a usar bool Avals, e Vinin me avisou que isso iria desacelerar seriamente. E depois de quase terminar uma EA, estou procurando algo mais para otimizar em código. Eu já consegui reduzir o tempo de execução do testador em todos os carrapatos em 12 meses de 40 minutos para 13!
Condições de aninhamento se(a){se(b){se(c){}}} não for bom, porque todas as condições são mutuamente exclusivas, mas algo não funciona com booleano. Provavelmente e muito provavelmente estou fazendo algo errado. Até agora, parei de fazer uma variável dupla para cada condição e colá-la na mesma se() com 4 "ou". Como eu esperava, isso não afetou a velocidade dos testes. Os mesmos 13 minutos em todos os carrapatos durante 12 meses.
Condições aninhadas se(a){se(b){se(c){}} não forem boas, porque todas as condições são mutuamente exclusivas. Provavelmente e muito provavelmente fazendo algo errado.
Tudo é bom, basta lembrar algumas identidades da aritmética booleana, por exemplo: a ||| b = !( !a && !b ). Então, mudando de conjunção para disjunção, podemos substituir a verificação da condição OR pela verificação consecutiva (aninhada) da condição AND: por exemplo, se (a ||| b ||| c) se transformar, como TarasBY escreveu corretamente acima, em
bool M = true;
if(!a) {if(!b) {if(!c) M=false;}}
if(!M) {Action;}
Este código é, em geral, mais rápido que o código original com ||, porque é executado apenas até que uma das condições da lista seja verdadeira, ou seja, até que toda a operação OR resulte em TRU.
Tudo é bom, basta lembrar algumas identidades da aritmética booleana, por exemplo: a ||| b = !( !a && !b ). Então, mudando de conjunção para disjunção, podemos substituir a verificação da condição OR pela verificação consecutiva (aninhada) da condição AND: por exemplo, se (a ||| b ||| c) se transformar, como TarasBY escreveu corretamente acima, em
Este código é em geral mais rápido do que o código original com ||| porque é executado apenas até que uma das condições da lista seja verdadeira, ou seja, até que toda a operação OR produza um resultado TRU.
Também podemos acelerar, por exemplo, se sabemos que a condição A é executada em média mais vezes do que C, e C mais vezes do que B, então devemos colocá-las nessa ordem: if(!a){if(!c)if{(!b) M=false;}}}
Tudo é bom, basta lembrar algumas identidades da aritmética booleana, por exemplo: a ||| b = !( !a && !b ). Então, mudando de conjunção para disjunção, podemos substituir a verificação da condição OR pela verificação consecutiva (aninhada) da condição AND: por exemplo, se (a ||| b ||| c) se transformar, como TarasBY escreveu corretamente acima, em
Este código é em geral mais rápido do que o código original com ||| porque é executado apenas até que uma das condições da lista seja verdadeira, ou seja, até que toda a operação OR produza um resultado TRU.
Obrigado por sua participação! Tenho 5 condições diferentes, mas iguais em valor, e se nenhuma condição for verdadeira, a EA espera até que uma delas seja verdadeira. Portanto, nenhuma das formas de implementação provou ser melhor, apesar dos meus esforços. Portanto, por enquanto, vou ficar com minhas "tortas".
borilunad: Obrigado por sua participação! Tenho 5 condições diferentes, mas iguais, e se nenhuma condição for cumprida, a EA espera que uma delas seja cumprida. Portanto, nenhuma forma única de implementação provou ser melhor, apesar dos meus esforços. Portanto, por enquanto, vou ficar com minhas "tortas".
Mesmo o que acabei de lhe mostrar? Bem, então o desempenho deve ser melhorado por outra coisa.
Para login e uso do site MQL5.com, você deve ativar o uso de cookies.
Ative esta opção no seu navegador, caso contrário você não poderá fazer login.
Você entrou na conta. A autenticação de dois fatores foi desativada. Configure-a novamente e escaneie um novo código QR ou continue com a autenticação de dois fatores desativada.
Você também pode otimizar os cálculos desta forma:
Já foi dito muitas vezes: não há atalho no MCL, se(a|||b||||c||d||e){} todas as condições serão verificadas.
A saída são as condições de nidificação:
if(a){if(b){if(c){}}}} Nesse caso, a saída ocorrerá na primeira condição correspondente
Mas o aninhamento também não é infinito, a solução mais flexível é verificar as condições em um loop com uma saída :
Já foi dito muitas vezes: não há atalho no MCL, se(a|||b||||c||d||e){} todas as condições serão verificadas.
A saída são as condições de nidificação:
if(a){if(b){if(c){}}}} Nesse caso, a saída ocorrerá na primeira condição correspondente
Mas o aninhamento também não é infinito, a solução mais flexível é verificar as condições em um loop com uma saída :
Não, mas eu conheço bem Olbanês :))
Condições de aninhamento se(a){se(b){se(c){}}} não for bom, porque todas as condições são mutuamente exclusivas, mas algo não funciona com booleano. Provavelmente e muito provavelmente estou fazendo algo errado. Até agora, parei de fazer uma variável dupla para cada condição e colá-la na mesma se() com 4 "ou". Como eu esperava, isso não afetou a velocidade dos testes. Os mesmos 13 minutos em todos os carrapatos durante 12 meses.
Ou talvez este idioma seja chamado deOblansky?
Condições aninhadas se(a){se(b){se(c){}} não forem boas, porque todas as condições são mutuamente exclusivas. Provavelmente e muito provavelmente fazendo algo errado.
Tudo é bom, basta lembrar algumas identidades da aritmética booleana, por exemplo: a ||| b = !( !a && !b ). Então, mudando de conjunção para disjunção, podemos substituir a verificação da condição OR pela verificação consecutiva (aninhada) da condição AND: por exemplo, se (a ||| b ||| c) se transformar, como TarasBY escreveu corretamente acima, em
Este código é, em geral, mais rápido que o código original com ||, porque é executado apenas até que uma das condições da lista seja verdadeira, ou seja, até que toda a operação OR resulte em TRU.
Tudo é bom, basta lembrar algumas identidades da aritmética booleana, por exemplo: a ||| b = !( !a && !b ). Então, mudando de conjunção para disjunção, podemos substituir a verificação da condição OR pela verificação consecutiva (aninhada) da condição AND: por exemplo, se (a ||| b ||| c) se transformar, como TarasBY escreveu corretamente acima, em
Este código é em geral mais rápido do que o código original com ||| porque é executado apenas até que uma das condições da lista seja verdadeira, ou seja, até que toda a operação OR produza um resultado TRU.
Tudo é bom, basta lembrar algumas identidades da aritmética booleana, por exemplo: a ||| b = !( !a && !b ). Então, mudando de conjunção para disjunção, podemos substituir a verificação da condição OR pela verificação consecutiva (aninhada) da condição AND: por exemplo, se (a ||| b ||| c) se transformar, como TarasBY escreveu corretamente acima, em
Este código é em geral mais rápido do que o código original com ||| porque é executado apenas até que uma das condições da lista seja verdadeira, ou seja, até que toda a operação OR produza um resultado TRU.
Obrigado por sua participação! Tenho 5 condições diferentes, mas iguais, e se nenhuma condição for cumprida, a EA espera que uma delas seja cumprida. Portanto, nenhuma forma única de implementação provou ser melhor, apesar dos meus esforços. Portanto, por enquanto, vou ficar com minhas "tortas".