Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 495
Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
No primeiro caso é resolvido - colocado entre parênteses para duas comparações e não jura - houve um erro lógico - ou seja, os resultados da comparação poderiam ser substituídos por causa do "ou"?
Permanece uma questão em aberto com a segunda expressão - o que é que se passa aí - quaisquer ideias?
O primeiro caso é resolvido - colocar entre parênteses duas comparações e não jura - houve um erro lógico - ou seja, os resultados da comparação poderiam ser substituídos por causa do "ou"?
Há ainda uma questão em aberto relativamente à segunda expressão - o que é que está mal aí - algumas ideias?
Lembre-se de que a verificação de uma condição no novo mql4 não é realizada completamente. Isto é, no estado em que se encontram
if(Low[X]>PriceBuy && High[X]>PriceBuy ||
Low[X]<PriceBuy && High[X]<PriceBuy)
Se Low[x] não for maior do que PriceBuy, então não será feita mais nenhuma verificação. É sobre isto que a descrição do erro nos diz. De forma correspondente, se o primeiro par estiver entre parênteses, o segundo par de condições será verificado se falhar.
Segunda pergunta.
for(calc_day;calc_day>0; calc_day--)
O que é o calc_day igual a? Poderá ser inferior a zero? O compilador não sabe o que está na lógica... É por isso que adverte sobre um possível ciclo ineficaz.
Lembre-se de que a verificação da condição no novo mql4 não é realizada completamente. Isto é, no estado em que se encontram
if(Low[X]>PriceBuy && High[X]>PriceBuy ||
Low[X]<PriceBuy && High[X]<PriceBuy)
Se Low[x] não for maior do que PriceBuy, não será feita mais nenhuma verificação. É sobre isto que a descrição do erro nos diz. De forma correspondente, se o primeiro par estiver entre parênteses, o segundo par de condições será verificado se falhar.
Obrigado pela resposta!
Surpreendido - como visualmente a lógica sempre funcionou correctamente, hmmm...
Segunda pergunta.
for(calc_day;calc_day>0; calc_day--)
O que é o calc_day igual a? Poderá ser inferior a zero? O compilador não sabe o que está na lógica... É por isso que adverte sobre um loop possivelmente ineficiente.
Obrigado pela resposta!
Surpreendido - como visualmente a lógica sempre funcionou correctamente, hmmm...
Antes de 6** construir era assim, verificava toda a cadeia de condições e tudo funcionava, mas agora tudo mudou. E em construções antigas, neste caso, a condição é ambígua. Como é concebido?
if( (Low[X]>PriceBuy && High[X]>PriceBuy) || (Low[X]<PriceBuy && High[X]<PriceBuy) )
Ou foi isso?
if(Low[X]>PriceBuy && ( High[X]>PriceBuy) || (Low[X]<PriceBuy ) && High[X]<PriceBuy)
Um cérebro humano pode descobrir isso, mas o que é um compilador a fazer? Não tem cérebro.
-Aleks-:
O número calc_day é sempre superior a 0. Outros valores não fazem com que o código seja chamado.Diga isso ao compilador...
Para construir 6** foi assim, toda a cadeia de condições foi verificada e tudo funcionou, mas agora tudo mudou. E, em construções antigas, a condição também é ambígua neste caso. Como é concebido?
if( (Low[X]>PriceBuy && High[X]>PriceBuy) || (Low[X]<PriceBuy && High[X]<PriceBuy) )
ou é isso?
if(Low[X]>PriceBuy && ( High[X]>PriceBuy) || (Low[X]<PriceBuy ) && High[X]<PriceBuy)
Um cérebro humano pode descobrir isso, mas o que é um compilador a fazer? Ele não tem cérebro...
Diga isso ao compilador...
Convincente - Vou estar mais vigilante.
Como é que digo ao compilador? Escreva-o, mas será que ele vai compreender?
if (calc_day<0) calc_day=calc_day*(-1);
Era assim antes de 6** construir, toda a cadeia de condições era verificada e tudo funcionava, mas agora tudo mudou. Sim e em construções antigas, neste caso, a ambiguidade das condições. Como é concebido?
if( (Low[X]>PriceBuy && High[X]>PriceBuy) || (Low[X]<PriceBuy && High[X]<PriceBuy) )
ou será?
if(Low[X]>PriceBuy && ( High[X]>PriceBuy) || (Low[X]<PriceBuy ) && High[X]<PriceBuy)
Um cérebro humano pode descobrir isso, mas o que é um compilador a fazer? Ele não tem cérebro...
Diga isso ao compilador...
verificar a precedência do operador para possível erro; usar parênteses para esclarecer a precedência - isto não é um erro. É um aviso. Ocorre em códigos antigos.
Adicionaram-na para o utilizador e não para o compilador. O compilador é orientado pelas prioridades de operação. Lá tudo é claro. A prioridade do && é mais elevada do que a do |||. É por isso que os parênteses devem ser dispostos desta forma
if( (Baixo[X]>PriceBuy && Alto[X]>PriceBuy) ||| (Baixo[X]<PriceBuy && Alto[X]<PriceBuy) )
Actualização: Neste caso, tanto para MT4 como para MT5 a prioridade é a mesma.
Convincente - Vou estar mais vigilante.
Como é que digo ao compilador? Escreva-o, mas será que ele vai compreender?
if (calc_day<0) calc_day=calc_day*(-1);
verificar a precedência do operador para possível erro; usar parênteses para esclarecer a precedência - isto não é um erro. É um aviso. Ocorre em códigos antigos.
Adicionámo-lo para o utilizador e não para o compilador. O compilador é orientado pelas prioridades de operação. Lá tudo é claro. A prioridade do && é mais elevada do que a do |||. É por isso que os parênteses devem ser dispostos desta forma
if( (Baixo[X]>PriceBuy && Alto[X]>PriceBuy) ||| (Baixo[X]<PriceBuy && Alto[X]<PriceBuy) )
Actualização: Neste caso, tanto para MT4 como para MT5 a prioridade é a mesma.
No fundo, sim, o aviso não é um erro. Mas como funcionará a variante inicial se( Low[X]>PriceBuy && High[X]>PriceBuy ||| Low[X]<PriceBuy && High[X]<PriceBuy )? Ou é uma chatice colocar um par de parênteses?
Convincente - Vou estar mais vigilante.
Como é que digo ao compilador? Escreva-o, mas será que ele vai compreender?
if (calc_day<0) calc_day=calc_day*(-1);
Bem, em essência, sim, o aviso não é um erro. Mas como é que o if( Baixo[X]>PriceBuy && Alto[X]>PriceBuy |||Baixo[X]<PriceBuy && Alto[X]<PriceBuy )? Ou falhará em colocar um par de parênteses?
Funcionará da forma como escrevi acima.
O compilador avisa o utilizador para não ser preguiçoso e coloca parênteses para evitar possíveis erros não óbvios.