borilunad, qualquer chamada de função acrescenta uma frenagem desnecessária. Portanto, se for necessária velocidade máxima, você deve se livrar de todos os Pedidos(), que realizam operações de uma sílaba. O mesmo se aplica aos laços. A verificação das condições em loop é sempre muito mais lenta do que apenas uma série de aninhados se()
Portanto, mesmo condições mutuamente exclusivas são melhores com a ação do if(A ||| B ||| C || D);
Mas não posso evitar chamadas de função, pois preciso verificar muitos dados nesse ponto, o que está incluído nessas condições.
Continuarei meus experimentos, talvez eu descubra algo. Mas eu não tenho controle sobre a propagação! :)
bool result;
if (A) result=true;
elseif (B) result=true;
elseif (C) result=true;
elseif (D) result=true;
else result=false;
if (result) Action();
Entretanto,caso contrário, resultado=linha falsa deve ser melhor combinado com a primeira, não afetará a velocidade.Em geral, se A, B, C e D contiverem condições simples (com aritmética mínima, sem chamadas de todas as funções matemáticas e outras coisas), então você não terá muito ganho de desempenho com tal otimização (a menos que esta construção funcione dezenas de milhões de vezes, é claro). Mas a sobrecarga de código pode ser significativa.
Por alguma razão, parece-me que seu código está cheio de lugares mais importantes, cuja otimização realmente daria um enorme ganho de desempenho. Você deve começar com o algoritmo básico. A maioria dos novatos tem uma verificação idiota de todas as condições referentes a TS ou pedidos em aberto a cada tick. Mas na maioria dos casos, basta verificar apenas as condições de contorno, por exemplo, quando o lanço ou baixa atinge um determinado valor, ou quando aparece uma nova barra. Só depois disso é possível realizar mais verificações.
Bem, além disso, com cálculos intensivos em recursos você precisa pensar em mover estes cálculos para uma DLL. Caso contrário, sentar e esperar 13 minutos na porra do MQL4 (enquanto você pode obter o mesmo resultado por 2-3 minutos) parece ser uma infelicidade :)
Entretanto,caso contrário, resultado=linha falsa deve ser melhor combinado com a primeira, não afetará a velocidade.Em geral, se A, B, C e D contiverem condições simples (com aritmética mínima, sem chamadas de todas as funções matemáticas e outras coisas), então você não terá muito ganho de desempenho com tal otimização (a menos que esta construção funcione dezenas de milhões de vezes, é claro). Mas a sobrecarga de código pode ser significativa.
Por alguma razão, parece-me que seu código está cheio de lugares mais importantes, cuja otimização realmente daria um enorme ganho de desempenho. Você deve começar com o algoritmo básico. A maioria dos novatos tem uma verificação idiota de todas as condições referentes a TS ou pedidos em aberto a cada tick. Mas na maioria dos casos, basta verificar apenas as condições de contorno, por exemplo, quando o lanço ou baixa atinge um determinado valor, ou quando aparece uma nova barra. Só depois disso é possível realizar mais verificações.
Bem, além disso, com cálculos intensivos em recursos você precisa pensar em mover estes cálculos para uma DLL. Caso contrário, sentar e esperar 13 minutos na porra do MQL4 (enquanto você pode obter o mesmo resultado por 2-3 minutos) parece ser uma infelicidade :)
Você realmente acha que é mais rápido somar vários valores cada vez (ou seja, realizar operações aritméticas extras)? Na minha variante a verificação é concluída na primeira partida, enquanto na variante mencionada por você - somente após somar todos os valores e depois verificar a soma.
Além disso, essa variante exige o cálculo antecipado de TODAS as condições. Então de que tipo de velocidade estamos falando aqui? É a opção mais lenta.
Se você quiser acelerar, você pode tentar operações um pouco mais rápidas.
Isto é, fazer todas as variáveis do tipo int (false=0). Então bitwise A|B|C...>0
E qual é o objetivo de tudo isso? Assim como na soma, todas as condições devem ser pré-calculadas. E por que calculá-las todas, se apenas uma das condições é suficiente.
Entretanto,caso contrário, resultado=linha falsa deve ser melhor combinado com a primeira, não afetará a velocidade.Em geral, se A, B, C e D contiverem condições simples (com aritmética mínima, sem chamadas de todas as funções matemáticas e outras coisas), então você não terá muito ganho de desempenho com tal otimização (a menos que esta construção funcione dezenas de milhões de vezes, é claro). Mas a sobrecarga de código pode ser significativa.
Por alguma razão, parece-me que seu código está cheio de lugares mais importantes, cuja otimização realmente daria um enorme ganho de desempenho. Você deve começar com o algoritmo básico. A maioria dos novatos tem uma verificação idiota de todas as condições referentes a TS ou pedidos em aberto a cada tick. Mas na maioria dos casos, basta verificar apenas as condições de contorno, por exemplo, quando o lanço ou baixa atinge um determinado valor, ou quando aparece uma nova barra. Só depois disso é possível realizar outras verificações.
Bem, além disso, com cálculos intensivos em recursos você precisa pensar em mover estes cálculos para uma DLL. Caso contrário, seria lamentável sentar e esperar 13 minutos na porra do MQL4 (embora possamos obter o mesmo resultado em 2-3 minutos).
Quem não gosta da "porra da MQL4" pode muito bem ir correr, correr. Porque não está claro o que ele está fazendo aqui. apesar de todos os méritos e antiguidade da conta.
borilunad, qualquer chamada de função acrescenta uma frenagem desnecessária. Portanto, se for necessária velocidade máxima, você deve se livrar de todos os Pedidos(), que realizam operações de uma sílaba. O mesmo se aplica aos laços. A verificação das condições em loop é sempre muito mais lenta do que apenas uma série de aninhados se()
Portanto, mesmo condições mutuamente exclusivas são melhores com a ação do if(A ||| B ||| C || D);
Mas não posso evitar chamadas de função, pois preciso verificar muitos dados nesse ponto, o que está incluído nessas condições.
Continuarei meus experimentos, talvez eu descubra algo. Mas eu não tenho controle sobre a propagação! :)
Entretanto,caso contrário, resultado=linha falsa deve ser melhor combinado com a primeira, não afetará a velocidade.Em geral, se A, B, C e D contiverem condições simples (com aritmética mínima, sem chamadas de todas as funções matemáticas e outras coisas), então você não terá muito ganho de desempenho com tal otimização (a menos que esta construção funcione dezenas de milhões de vezes, é claro). Mas a sobrecarga de código pode ser significativa.
Por alguma razão, parece-me que seu código está cheio de lugares mais importantes, cuja otimização realmente daria um enorme ganho de desempenho. Você deve começar com o algoritmo básico. A maioria dos novatos tem uma verificação idiota de todas as condições referentes a TS ou pedidos em aberto a cada tick. Mas na maioria dos casos, basta verificar apenas as condições de contorno, por exemplo, quando o lanço ou baixa atinge um determinado valor, ou quando aparece uma nova barra. Só depois disso é possível realizar mais verificações.
Bem, além disso, com cálculos intensivos em recursos você precisa pensar em mover estes cálculos para uma DLL. Caso contrário, sentar e esperar 13 minutos na porra do MQL4 (enquanto você pode obter o mesmo resultado por 2-3 minutos) parece ser uma infelicidade :)
Em geral, a opção mais rápida seria esta:
Entretanto,caso contrário, resultado=linha falsa deve ser melhor combinado com a primeira, não afetará a velocidade.Em geral, se A, B, C e D contiverem condições simples (com aritmética mínima, sem chamadas de todas as funções matemáticas e outras coisas), então você não terá muito ganho de desempenho com tal otimização (a menos que esta construção funcione dezenas de milhões de vezes, é claro). Mas a sobrecarga de código pode ser significativa.
Por alguma razão, parece-me que seu código está cheio de lugares mais importantes, cuja otimização realmente daria um enorme ganho de desempenho. Você deve começar com o algoritmo básico. A maioria dos novatos tem uma verificação idiota de todas as condições referentes a TS ou pedidos em aberto a cada tick. Mas na maioria dos casos, basta verificar apenas as condições de contorno, por exemplo, quando o lanço ou baixa atinge um determinado valor, ou quando aparece uma nova barra. Só depois disso é possível realizar mais verificações.
Bem, além disso, com cálculos intensivos em recursos você precisa pensar em mover estes cálculos para uma DLL. Caso contrário, sentar e esperar 13 minutos na porra do MQL4 (enquanto você pode obter o mesmo resultado por 2-3 minutos) parece ser uma infelicidade :)
A opção mais rápida foi sugerida pela Paco
Você realmente acha que é mais rápido somar vários valores cada vez (ou seja, realizar operações aritméticas extras)? Na minha variante a verificação é concluída na primeira partida, enquanto na variante mencionada por você - somente após somar todos os valores e depois verificar a soma.
Além disso, essa variante exige o cálculo antecipado de TODAS as condições. Então de que tipo de velocidade estamos falando aqui? É a opção mais lenta.
Se você quiser acelerar, você pode tentar operações um pouco mais rápidas.
Isto é, fazer todas as variáveis do tipo int (false=0). Então bitwise A|B|C...>0
Se você quiser acelerar, você pode tentar operações um pouco mais rápidas.
Isto é, fazer todas as variáveis do tipo int (false=0). Então bitwise A|B|C...>0
E ninguém vai verificar as variantes sugeridas para a velocidade de execução?
Você pode usar o roteiro a partir daqui
Em geral, a opção mais rápida seria esta:
Entretanto,caso contrário, resultado=linha falsa deve ser melhor combinado com a primeira, não afetará a velocidade.Em geral, se A, B, C e D contiverem condições simples (com aritmética mínima, sem chamadas de todas as funções matemáticas e outras coisas), então você não terá muito ganho de desempenho com tal otimização (a menos que esta construção funcione dezenas de milhões de vezes, é claro). Mas a sobrecarga de código pode ser significativa.
Por alguma razão, parece-me que seu código está cheio de lugares mais importantes, cuja otimização realmente daria um enorme ganho de desempenho. Você deve começar com o algoritmo básico. A maioria dos novatos tem uma verificação idiota de todas as condições referentes a TS ou pedidos em aberto a cada tick. Mas na maioria dos casos, basta verificar apenas as condições de contorno, por exemplo, quando o lanço ou baixa atinge um determinado valor, ou quando aparece uma nova barra. Só depois disso é possível realizar outras verificações.
Bem, além disso, com cálculos intensivos em recursos você precisa pensar em mover estes cálculos para uma DLL. Caso contrário, seria lamentável sentar e esperar 13 minutos na porra do MQL4 (embora possamos obter o mesmo resultado em 2-3 minutos).
É ainda mais rápido desse modo.
Eu me lembro de uma história:
"Em uma reunião da diretoria da empresa, houve duas perguntas:
1. A decisão de construir um synchrophasotron.
2. A decisão de construir um estacionamento de bicicletas para os funcionários.
Na primeira edição, a discussão durou 1 minuto,
no dia 2, o debate durou mais de 2 horas".