Erros, bugs, perguntas - página 2888

 
Denis Diakonov:

Pode dizer-me por favor!

Porque é que o tempo do servidor não é actualizado quando chegam novas carraças?

No momento em que a EA começa, tudo funciona como deveria, mas depois o tempo passa, mas o novo valor do minuto actual não entra na variável.

Ou seja, o Expert Advisor trabalha dependendo do número obtido na variável int M = TimeMinute(TimeCurrent());

Na verdade, esta linha de código é da referência e não funciona.

Por exemplo, inicio-a às 12 - a hora actual devolvida pelo servidor corresponde à hora na variável, mas a variável mantém-se às 12, embora já esteja 15-20 minutos no relógio

TimeMinute() não está disponível em MQL5.

As perguntas sobre MQL4 devem ser publicadas no ramo correspondente do MetaTrader 4.

Se quiser uma solução multiplataforma, utilize MqlDateTime.

Документация по MQL5: Константы, перечисления и структуры / Структуры данных / Структура даты
Документация по MQL5: Константы, перечисления и структуры / Структуры данных / Структура даты
  • www.mql5.com
Порядковый номер в году day_of_year в високосном году, начиная с марта, будет отличаться от порядкового номера соответствующего дня в невисокосном году.
 
Isso é um aviso duvidoso:
void OnStart()
{
    for ( int i = 0, j; i < 10; i = j ) //(1) Warning: possible use of uninitialized variable 'j'
    {
        j = i+1;
    }
}

mas está bem:

void OnStart()
{
    for ( int i = 0, j; i < 10;       ) //(2) нормально
    {
        j = i+1;
                                i = j;
    }
}

qual é a diferença fundamental?

 
A100:
Isso é um aviso bastante duvidoso:

mas está bem:

qual é a diferença fundamental?

Aviso correcto. A variável j não é inicializada antes da sua primeira utilização, quando à variável i é atribuído um valor de j.

E na segunda variante, à variável j é atribuído o valor i+1 e só então i = j

É assim que deve ser sem aviso prévio, mas não foi testado...

void OnStart()
{
    for ( int i = 0, j = 0; i < 10; i = j )
    {
        j = i+1;
    }
}
 
Alexey Viktorov:

Aviso correcto.

para os alternadamente dotados, estes são ciclos idênticos
 
TheXpert:
para os dotados alternadamente, estes são loops idênticos

Então, esta identidade de loops permite a utilização de variáveis não identificadas?

 
Alexey Viktorov:

Então, esta identidade de loops permite a utilização de variáveis não identificadas?

Se os laços são idênticos, então o comportamento do compilador deve ser o mesmo, e é diferente. É aí que reside o erro. Explicou porque existe um aviso no caso (1), depois explique porque não existe um no caso (2) ? O que mudou em princípio? E então, se uma variável não inicializada é utilizada, porque é que o resultado final é correcto ao executar o código?

Existe uma tal ciência - lógica. Se A e B são os mesmos e A é vermelho, então B também deve ser vermelho, não verde

 
A100:

Se os loops forem os mesmos, então o comportamento do compilador deve ser o mesmo, e é diferente. É aqui que reside o erro. Explicou porque existe um aviso no caso (1), depois explique porque não existe um no caso (2) ? O que mudou em princípio? E então, se uma variável não inicializada é utilizada, porque é que o resultado final é correcto ao executar o código?

Existe uma tal ciência - lógica. Se A e B são os mesmos e A é vermelho, B também deve ser vermelho, não verde.

Não há aí um número aleatório. Aí há zero.
MQ também o fixou ))

void OnStart()
{
   int val;
   
   Print(val);
   Print(IntegerToString(val));
}
 
Roman:

Não há aí um número aleatório. Há aí um zero.
MQ também fixou isso ))

Primeiro tem de verificar - depois "tretas".

void OnStart()
{
        for ( int i = 0, j; i < 10; i++ )
        {
                Print( j );
                break;
        }
}

Resultado: -2052256859


 
A100:

É preciso verificar primeiro - depois "dizer disparates".

Resultado: -2052256859


void OnStart()
{
   for ( int i = 0, j; i < 10; i++ )
   {
      Print( j );                
   }
}
2020.10.27 17:14:46.623 TestScript (NZDUSD,M1)  0
2020.10.27 17:14:46.623 TestScript (NZDUSD,M1)  0
2020.10.27 17:14:46.623 TestScript (NZDUSD,M1)  0
2020.10.27 17:14:46.623 TestScript (NZDUSD,M1)  0
2020.10.27 17:14:46.623 TestScript (NZDUSD,M1)  0
2020.10.27 17:14:46.623 TestScript (NZDUSD,M1)  0
2020.10.27 17:14:46.623 TestScript (NZDUSD,M1)  0
2020.10.27 17:14:46.623 TestScript (NZDUSD,M1)  0
2020.10.27 17:14:46.623 TestScript (NZDUSD,M1)  0
2020.10.27 17:14:46.623 TestScript (NZDUSD,M1)  0

Talvez seja porque tenho o terminal de teste instalado no VirtualBox
Além disso, o compilador não avisa que a variável não está inicializada.

Mas adverte desta forma

void OnStart()
{
   for ( int i = 0, j; i < 10; i++ )
   {
      Print( IntegerToString(j) );                
   }
}
 
Roman:
Provavelmente porque tenho o terminal de teste instalado no VirtualBox

Você tem um número aleatório 0, eu tenho 540016640

2020.10.27 17:24:25.244 0011 (EURUSD,H4)        540016640
2020.10.27 17:24:25.244 0011 (EURUSD,H4)        540016640
2020.10.27 17:24:25.244 0011 (EURUSD,H4)        540016640
2020.10.27 17:24:25.244 0011 (EURUSD,H4)        540016640
2020.10.27 17:24:25.244 0011 (EURUSD,H4)        540016640
2020.10.27 17:24:25.244 0011 (EURUSD,H4)        540016640
2020.10.27 17:24:25.244 0011 (EURUSD,H4)        540016640
2020.10.27 17:24:25.244 0011 (EURUSD,H4)        540016640
2020.10.27 17:24:25.244 0011 (EURUSD,H4)        540016640
2020.10.27 17:24:25.244 0011 (EURUSD,H4)        540016640

mas continuam a ser números aleatórios.