Negação Lógica NOT (!)
Operando da negação lógia (!) deve ser de tipo aritmético. O resultado é TRUE (1), se o valor do operando é FALSE (0); e é igual a FALSE (0), se o operando difere de FALSE (0).

if(!a) Print("não 'a'");

Operação lógica OR (||)
Operação OR lógico (||) entre valores x e y. O valor da expressão é TRUE (1), se os valores x ou y são verdadeiros (not null). Senão - FALSE (0).

if(x<0 || x>=max_bars) Print("fora da faixa");

Operação lógica AND (&&)
Operação lógica AND (&&) entre valores de x e y. O valor da expressão é TRUE (1), se os valores de x e y são verdadeiros (not null). Senão - FALSE (0).

Estimação breve de Operações Booleanas
O esquema do chamado "brief estimate" (estimação breve) é aplicado a operações booleanas, isto é, o cálculo da expressão é finalizado quando o resultado da expressão pode ser precisamente estimado.

//+------------------------------------------------------------------+
//| Programa Script da função start (iniciar) |
//+------------------------------------------------------------------+
void OnStart()
{
//--- o primeiro exemplo de estimação breve
if(func_false() && func_true())
{
Print("Operação &&: Você nunca verá esta expressão");
}
else
{
Print("Operação &&: Resultado da primeira expressão é falso, então a segunda não é calculada");
}
//--- o segundo exemplo da estimação breve
if(!func_false() || !func_true())
{
Print("Operação ||: Resultado da primeira expressão é verdadeiro,então a segunda não é calculada");
}
else
{
Print("Operação ||: Você nunca verá esta expressão");
}
}
//+------------------------------------------------------------------+
//| a função sempre retorna false |
//+------------------------------------------------------------------+
bool func_false()
{
Print("Função func_false()");
return(false);
}
//+------------------------------------------------------------------+
//| a função sempre retorna true |
//+------------------------------------------------------------------+
bool func_true()
{
Print("Função func_true()");
return(true);
}