Errores, fallos, preguntas - página 2888

 
Denis Diakonov:

¿Puede decírmelo, por favor?

¿Por qué no se actualiza la hora del servidor cuando llegan nuevos ticks?

En el momento en que el EA se inicia, todo funciona como debería, pero luego el tiempo pasa, pero el nuevo valor del minuto actual no entra en la variable.

Es decir, el Asesor Experto trabaja en función del número obtenido en la variable int M = TimeMinute(TimeCurrent());

En realidad esta línea de código es de la referencia y no funciona.

Por ejemplo, lo pongo en marcha a las 12 - la hora actual devuelta por el servidor corresponde a la hora de la variable, pero la variable sigue estando a las 12, aunque ya son 15-20 minutos en el reloj

TimeMinute() no está disponible en MQL5.

Las preguntas sobre MQL4 deben ser publicadas en la rama correspondiente de MetaTrader 4.

Si quieres una solución multiplataforma, utiliza MqlDateTime.

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

pero está bien:

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

¿cuál es la diferencia fundamental?

 
A100:
Es una advertencia bastante dudosa:

pero está bien:

¿cuál es la diferencia fundamental?

Advertencia correcta. La variable j no se inicializa antes de su primer uso, cuando a la variable i se le asigna el valor j.

Y en la segunda variante, a la variable j se le asigna el valor i+1 y sólo entonces i = j

Así es como debería ser sin advertencia, pero no se ha probado...

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

Advertencia correcta.

para los superdotados, son ciclos idénticos
 
TheXpert:
para los dotados alternativamente, son bucles idénticos

Entonces, ¿esta identidad de bucles permite el uso de variables no identificadas?

 
Alexey Viktorov:

Entonces, ¿esta identidad de bucles permite el uso de variables no identificadas?

Si los bucles son idénticos, el comportamiento del compilador debería ser el mismo, y es diferente. Ahí es donde está el error. Has explicado por qué hay una advertencia en el caso (1), entonces explica por qué no la hay en el caso (2) ? ¿Qué ha cambiado en principio? Y entonces, si se utiliza una variable no inicializada, ¿por qué el resultado final es correcto al ejecutar el código?

Existe esa ciencia: la lógica. Si A y B son iguales y A es rojo, entonces B también debería ser rojo, no verde

 
A100:

Si los bucles son los mismos, el comportamiento del compilador debería ser el mismo, y es diferente. Aquí es donde está el error. Has explicado por qué hay una advertencia en el caso (1), entonces explica por qué no la hay en el caso (2) ? ¿Qué ha cambiado en principio? Y entonces, si se utiliza una variable no inicializada, ¿por qué el resultado final es correcto al ejecutar el código?

Existe esa ciencia: la lógica. Si A y B son iguales y A es rojo, B también debe ser rojo, no verde.

No hay ningún número al azar. Ahí no hay nada.
MQ también lo ha arreglado ))

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

No hay ningún número al azar. Ahí hay un cero.
MQ también lo ha arreglado ))

Primero hay que comprobarlo, y luego "mentir".

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

Resultado: -2052256859


 
A100:

Primero hay que comprobarlo y luego "decir tonterías".

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

Quizá sea porque tengo el terminal de pruebas instalado en VirtualBox
Además, el compilador no avisa de que la variable no está inicializada.

Pero avisa así

void OnStart()
{
   for ( int i = 0, j; i < 10; i++ )
   {
      Print( IntegerToString(j) );                
   }
}
 
Roman:
Probablemente porque tengo el terminal de pruebas instalado en VirtualBox

Usted tiene un número 0 al azar, yo tengo 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

pero siguen siendo números aleatorios.